用 Samba 快速搭建文件服务器

发表时间 ·

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

相关文章   欢迎到 留言板 写下你的看法。
  本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接