Samba 解决了 Linux 和 Windows 之间文件共享的问题,是基于 SMB 协议开发的 SMBserver 服务程序,是一款开源的文件共享软件。

1. 安装

实验环境采用 Ubuntu-16.04 trustry 版本,安装指令如下:

$ apt install -y samba

2. 配置

查看非注释配置文件的方法:

$ grep -v "^#" /etc/samba/smb.conf  | grep -v "^$" | grep -v "^;"
$ testparm -s /etc/samba/smb.conf

2.1 创建账户信息

创建一个能够访问 Samba 服务的用户,名称为 docker(或者是已经存在的用户) ,注意第一次创建用户需要使用 -a 参数写进数据库。

$ pdbedit -a -u docker

注意:这里的账户必须在系统中存在才行,若系统中不存在这个用户的话,会报如下错误:

Failed to add entry for user docker.

补充指令如下(可以使用 pdbedit --help 查看):

$ pdbedit -x docker (delete the user)
$ pdbedit -Lv (list the detailed information of users)

2.2 创建共享文件夹

创建共享文件时,需要考虑的问题有:

  1. 考虑读写权限的问题。
  2. 考虑由于SELinux 的问题。
    $ mkdir /home/database # 创建共享文件夹
    $ chown -Rf docker:docker /home/database # 设置共享文件夹的权限

2.3 配置文件修改

配置文件在 /etc/samba/smb.conf 文件下,我们需要对配置文件中的一些信息进行修改,其中,[homes] 参数是配置家目录的共享信息,[prints] 是用来访问打印机的共享信息。添加共享配置信息如下:

[share]
comment = Share Folder require password
browseable = yes
path = /home/database
create mask = 0777
directory mask = 0777
valid users = docker # 这里的用户设置为允许登录的用户
public = yes
writable = yes
available = yes

重新启动 samba 服务。

$ /etc/init.d/smbd restart (reload)

2.4 Windows 客户端进行访问

访问步骤如下:

  1. 右键计算机,选择映射网络驱动器。
  2. 在对话框中输入 Samba 服务器的共享目录:\192.168.2.13\share ,文件夹是在配置文件中[share]中的内容,不是对应服务器上实际存在的目录。
  3. 输入用户名及密码,访问成功。

3. 错误汇总

以下为在服务器配置的过程中,遇到的问题积累如下:

drwxrwxrwx  3 docker docker 4096 4月  15 22:00 database/

权限问题,如上述代码。文件夹属主: docker 属组: docker ,且属主权限为读写执行,属组权限为读写执行,这里为了方便配置和访问设置为完全权限。

3.1 Windows 访问时提示: 找不到网络路径

  1. 文件夹的权限问题。(多级目录时,只要修改最后一级目录的权限即可)
  2. 查看访问路径的是不是共享文件夹,还是访问了虚机中实际存在的文件夹。

3.2 Windows 访问时提示: 拒绝访问

  1. 一般为文件夹的权限问题,查看权限。

4. 参考资料

[1] https://www.samba.org/

[2] https://www.samba.org/samba/docs/Samba24Hc13.pdf