这两天突发奇想,想要试试如何在 linux 下和 windows 共享文件。
我使用的是 archlinux,文件管理器是 thunar,查看了一下 arch 的 wiki,发现只需要安装 gvfs-smb 就可以在 thunar 中访问 windows 共享了。
访问共享时,在 thunar 路径栏中输入 smb://ip 即可。
若是想将本机上的文件共享给 windows 主机,需要安装 samba。
配置 /etc/samba/smb.conf 如下:
- [global]
-
workgroup = WORKGROUP
-
server string= Samba Server
-
netbios name = HELLO
-
-
security = user
-
map to guest = Bad User
-
guest account = your_username
-
guest ok = yes
-
create mask = 0644
-
-
load printers = no
-
printcap name = /dev/null
-
-
#[Public]
-
#comment = Public Share
-
#path = /path/to/share
-
#writable = no
共享本地文件,最方便的就是 guest 模式了,不需要用户名和密码,访问时直接输入 ip 即可。
网上查到的资料基本上都是设置 "security = share",但是看了下 smb.conf 的 man 页,发现这个用法在 samba 3 中已经不推荐了,而应该用 "map to guest" 代替,具体可以查看 man 手册。配置如上所示。
"guest account = your_username" 那行中,your_username 是访问者以 guest 身份访问共享时所使用的本地主机帐号,默认是 nobody,我是设为了我的登录用户名。
"create mask" 为有读写权限的访问者在创建文件时的权限位,默认为 0744,这里我设置为 0644,去掉了 owner 的执行权限。
若是没有打印机,则需要添加
- load printers = no
-
printcap name = /dev/null
这两行,否则日志中会有错误:
- localhost smbd[27290]: Unable to connect to CUPS server localhost:631 - No such file or directory
-
localhost smbd[27288]: failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
若是需要一直静态共享某些目录,只需将 [Public] 那一块注释取消,同时在 "path =" 那一行添加共享目录路径即可。
samba 可以使用 net usershare 命令动态设置共享目录。
以下命令需要 root 权限执行:
- # export USERSHARES_DIR="/var/lib/samba/usershares"
-
# export USERSHARES_GROUP="sambashare"
-
# mkdir -p ${USERSHARES_DIR}
-
# groupadd ${USERSHARES_GROUP}
-
# chown root:${USERSHARES_GROUP} ${USERSHARES_DIR}
-
# chmod 1770 ${USERSHARES_DIR}
-
# gpasswd -a your_username ${USERSHARES_GROUP}
编辑 /etc/smb.conf:
- [global]
-
workgroup = WORKGROUP
-
server string= Samba Server
-
netbios name = HELLO
-
-
security = user
-
map to guest = Bad User
-
guest account = your_username
-
guest ok = yes
-
create mask = 0644
-
-
usershare path = /var/lib/samba/usershares
-
usershare max shares = 10
-
usershare allow guests = yes
-
usershare owner only = yes
重启 samba 服务:
- # /etc/rc.d/samba restart
注销后登录,现在可以使用 net usershare 命令添加共享了。
添加共享命令:
- net usershare add [] [] [
如要将目录 /home/user/Public 设为共享,共享名为 hello,允许不需要密码的匿名访问,给予只读权限:
- $ net usershare add hello /home/user/Public "public share" everyone:r guest_ok=y
若想给予读写权限,则使用 everyone:f。
查看该共享的相关信息:
- $ net usershare info hello
-
[hello]
-
path=/home/user/Public/
-
comment=public share
-
usershare_acl=Everyone:R,
-
guest_ok=y
删除该共享:
- $ net usershare delete hello
列出主机上所有自定义共享:
我希望在添加共享时,默认即允许匿名访问,而不是需要自己输入 "guest_ok=y"。
可惜即使我在 /etc/samba/smb.conf 中设置了 "guest ok = yes",默认的却还是 "guest_ok=n"。
若是有谁知道方法的话,希望可以告知。
阅读(3492) | 评论(0) | 转发(0) |