Samba 是年代久远的文件服务器,使 windows 能从 Linux 系统中上传和下载文件。但是因为配置和逻辑难以理解,有时候难以搭出想要的形式。本文试着总结出 Samba 服务器的搭建技巧。 安装 ubuntu/debian 系统,使用如下命令安装: $ sudo apt-get install -y samba centos系统,安装命令是 $ yum -y install samba 安装后,samba 的配置文件位于 /etc/samba/smb.conf 一个比较好的实践是,将这个文件复制一个备份出来, 当后面尝试失败后,还能从头开始。 $ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 匿名下载 这是一个匿名下载的例子 # smb.conf [doc] comment = doc path = /path/to/doc writable = no guest ok = yes browseable = yes 上面各配置项的解释: comment : 注释 path : 映射的服务器本地的目录,这个目录必须有足够的读权限,比如755 writable : no 表示不可写 guest ok : 允许匿名 browseable : 从"网络邻居"里可以查看 匿名上传 这是一个匿名上传的例子 # smb.conf [upload] comment = upload path = /path/to/upload writable = yes guest ok = yes browseable = yes create mask = 0755 public = yes 上面配置项的解释:\ create mask : 上传文件的默认权限设置\ path : 映射的服务器本地的目录,这个目录必须有足够的写权限,比如777 关于用户认证 不同的客户系统登录 samba 的时候,登录方式是不同的。 Windows 会使用当前用户名和密码,登录 Samba。而Mac 则可以设置登录的用户名。而 Samba 则自己保存一套用户名列表,当收到登录请求后,Samba 会根据请求的用户名和配置文件规定的登录逻辑,决定是否允许用户登录、下载和上传。 当通过以后,Samba 会以该用户名去向 Linux 请求文件,这时还需要 Linux 的文件系统赋予足够的权限。 下面看看如何在不同的系统上配置实名上传和下载。 实名下载 当 Windows 向 Samba 服务器发出浏览请求时,会把当前的用户名和密码一并发给 Samba。假设 Windows 当前使用 Administrator 用户名,和空密码登录 然而 Samba 并不接受空密码,所以登录失败,Samba 会将这次请求当做一个 bad user , 如果 smb.conf 里的 global 一节里面配置了 map to guest = Bad User,Samba会把这次登录转换为 guest 匿名登录。 # smb.conf [global] map to guest = Bad User 而且同时你准备访问的资源设置了允许 guest 匿名登录 # smb.conf [doc] guest ok = yes 那么这个资源仍然可以访问。但是如果上述的 guest ok 设置了 no ,则 Samba 会向 Windows 要求手动输入用户名和密码,这时就会在 Windows 界面上看到用户名密码的提示框。 所以正确的做法是,登录 windows 使用带密码的用户名,比如 winuser ,再在 samba 里面添加同一个用户名 winuser,命令是 $ sudo smbpasswd -a winuser 然后,在 Linux 里面,需要有 winuser 用户,而且 winuser 要对下载的路径有读权限。 这是一个实名下载的例子 # smb.conf [global] .... security = user .... [doc] comment = doc path = /path/to/doc writable = no guest ok = no browseable = yes valid users = winuser 配置文件里的 winuser 需要修改为你的 windows 用户名 实名上传 只要在上一节里的配置文件 writable 设置为 yes 即可 # smb.conf [global] .... security = user .... [doc] comment = doc path = /path/to/doc writable = yes guest ok = no browseable = yes valid users = winuser