Samba是在Linux系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。 SMB(Server Messages Block, 信息服务块)是一种在局域网上共享文件和打印机的一种通信协议, 它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。 SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统,打印机及其他资源。
比如我想共享/home/samba
这个文件夹给其他计算机使用。
安装samba
1 | yum install -y samba |
修改samba配置
配置文件是/etc/samba/smb.conf
1 | # See smb.conf.example for a more detailed config file or |
注意,自己修改时去掉 #
后面的备注
添加 Samba 用户
创建用于访问共享资源的账户信息。在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。 这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过, 只有建立账户信息数据库之后,才能使用用户口令认证模式。 另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在, 否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。
pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为pdbedit [选项] 账户
。
在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
pdbedit命令中使用的参数以及作用如下所示:
参数 | 作用 |
---|---|
-a 用户名 | 建立Samba用户 |
-x 用户名 | 删除Samba用户 |
-L | 列出用户列表 |
-Lv | 列出用户详细信息的列表 |
创建samba用户
1 | [root@master ~]# useradd samba |
设置SELinux安全上下文
创建用于共享资源的文件目录不仅要考虑到文件读写权限的问题,而且由于/home目录是系统中普通用户的家目录,
因此还需要考虑应用于该目录的SELinux安全上下文所带来的限制。
Samba服务程序配置文件中的注释就有关于SELinux安全上下文策略的说明,
我们只需按照过滤信息中有关SELinux安全上下文策略中的说明中给的值进行修改即可。
修改完毕后执行restorecon
命令,让应用于目录的新SELinux安全上下文立即生效。
1 | [root@master ~]# semanage fcontext -a -t samba_share_t /home/samba |
设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。执行getsebool命令, 筛选出所有与Samba服务程序相关的SELinux域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可:
1 | [root@master ~]# getsebool -a | grep samba |
启动 Samba 服务
启动、停止、查看、开机自启动相关命令。
1 | systemctl start smb |
同时还要清空防火墙配置:
1 | iptables -F |
Windows 访问共享目录
直接 Win + R , 在运行界面输入\\192.168.1.20
,也就是你的 Linux 主机地址,
会弹出用户名密码输入界面,输入刚刚设置的用户名密码就可以访问。注意这里输入的密码是samba设置的密码,
不是登录Linux系统的密码。因为在RHEL 7系统中,Samba服务程序使用的果然是独立的账户信息数据库。
所以,即便在Linux系统中有一个samba账户,Samba服务程序使用的账户信息数据库中也有一个同名的samba账户,
大家也一定要弄清楚它们各自所对应的密码。此时,我们可以尝试执行查看、写入、更名、删除文件等操作。
如果 Windows 下访问 Linux 下共享目录 , 提示没有权限。
- 确保 Linux 下防火墙关闭或者是开放共享目录权限
- 确保 Samba 服务器配置文件 smb.conf 设置没有问题
- 确保 SELinux配置正确
Samb 还需要开放下面四个端口
1 | UDP 137、UDP 138、TCP 139、TCP 445 |
Linux挂载共享
Samba服务程序还可以实现Linux系统之间的文件共享。现在我们在另外一台Linux机器上面安装Samba客户端软件。
1 | yum install -y cifs-utils |
在Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。 为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写:
1 | [root@host1 ~]# vim auth.smb |
然后在Linux客户端上创建一个用于挂载Samba服务共享资源的目录,
并把挂载信息写入到/etc/fstab
文件中,以确保共享挂载信息在服务器重启后依然生效:
1 | # |
然后执行下面的命令挂载上去:
1 | [root@host1 ~]# mount -a |
就可以进入目录/database
下面看到共享文件夹下面的文件了。也可以在里面执行查看、写入、更名、删除文件等操作。