1.什么是Samba
Samba是Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成 SMB (Server Message Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议 它为局域网内的不同计算机之见提供文件及打印机等资源的共享服务 SMB协议是客户及/服务器型协议,客户机通过协议可以访问服务器上的共享文件系统,打印机及其他资源 通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源
2.搭建一个Samba服务器
打开desktop和server虚拟机,把desktop当作客户端,server当作服务端,配置desktop的ip为172.25.254.115,配置server的ip为172.25.254.215,更改115名字为client.westos.com,更改215的名字为,samba.westos.com,分别配置yum源
215端
下面将把215这台虚拟机搭建samba服务器,在215上面需要安装3个安装包
yum install samba-client samba的客户端 yum install samba-common samba服务用到的命令 yum isntall samba samba的主服务 yum search samba
rpm -qc samba-common查看samba的主配置文件 /etc/samba/smb.conf
rpm -qa 查看samba服务的版本
vim /etc/samba/smb.conf
可以看出Selinux会对Samba服务有一定的影响,如果Selinux开启,需要更改samba共享目录的安全上下文 mkdir /westos_smb,建立一个共享目录
semanage fcontext -a -t samba_share_t '/westos_smb(/.*)?'更改安全上下文
restorecon -RvvF /westos_smb刷新使当前生效
vim /etc/samba/smb.conf
[WESTOS]为samba服务器对外共享的总名称
path = /westos_smb实际共享目录路径
重启服务
关闭防火墙
samba服务用户
建立westos用户和lee用户,并将其加入samba用户里面,并设置密码
useradd westos useradd lee
smbpasswd -a westos smbpasswd -a lee
注意这里的用户首先必须在系统中真实存在,然后在用smbpasswd命令加入到samba服务中 用pdbedit -L 来查看samba服务器的samba用户
给/westos_smb中建立5个文件
在215端
安装samba-client客户端
smbclient -L //172.25.254.215 以匿名用户对samba服务器215的共享目录进行查看,-L表示列出,没有root用户就直接回车
smbclient //172.25.254.215/WESTOS -U westos 以smb服务器中westos用户直接查看215共享的文件 ls
这种方式只能查看,而想进行上传下载等操作,可以mount到本地
发现并不能删除和建立文件
3.在samba服务修改权限
加入服务端对共享目录的说明
重启服务
在客户端查看,在Comment处,有加入的Share File
browseable = no 隐藏这个共享目录,使客户端-L看不到samba服务器对外的共享目录,但实际是存在的
重启服务
valid users = westos 客户端只可以用samba服务器的westos用户身份来登陆samba
而lee用户就不可以登陆
valid users = +westos 表示只有属于westos组的用户可以登陆
现在将lee用户加入westos用户组
usermod -G westos lee id lee
再次用lee登陆,发现可以登陆了
writable = yes 表示可以写入
重启服务
用客户端:
发现此时还是不能上传和删除,为什么?因为虽然服务允许了,但是文件系统的权限还没有允许。
ls -ld /westos_smb查看文件夹权限,发现只对于root用户可写 现在给westos用户一个满权限
然后再测试
成功删除file1
成功上传文件
注意:文件系统的权限和服务权限都要开启
write list = lee 服务只允许lee用户对samba目录可写,这个和writable只能存在一个,开启这个就必须将writable注释掉
给文件权限系统加入lee用户满权限
此时westos用户,虽然文件系统有rwx权限,但是服务只允许lee用户可写,所以它仍不能上传删除文件
write list = @lee 表示属于lee组的用户可以写
用客户端westos用户登陆,发现还是无法上传,因为还没有把westos用户加入lee组
==在服务端加westos用户到lee组中
usermod -G lee westos id westos
此时westos用户可以上传删除文件
guest ok = yes 使匿名用户可以登陆
此时匿名用户不能登陆
此时再次尝试,匿名用户可以登陆了
尝试用匿名用户挂载
mount //172.25.254.215/WESTOS /mnt -o username=guest.password=""
发现不能挂载,因为挂载这个进程没有识别smaba服务器的匿名用户
在配置文件中加入 map to guest = bad user 使挂载进程映射你名用户bad user
admin users = westos 将/westos_smb目录的root用户设置为westos用户
此时需要把writable权限也开开
用westos用户挂载/westos_smb,然后上传文件file{7..10} ll 查看文件的权限所属 发现file7-file10属于root用户,1001组,1001即为服务端westos组,只是因为客户端没有1001这个组所以就直接用组id表示,但是所属用户是root
如何共享系统文件夹,(非自己创建例如/mnt)
前文说到可以通过修改安全上下文的方式来使文件夹被共享,而如果我想共享系统/mnt目录,就不可以使用这个方法了 因为还有别的地方需要用到/mnt的安全上下文,如果修改了/mnt的安全上下文为smaba的就会导致别的地方不能使用/mnt 所以只能通过降低samba安全性的方法来使/mnt共享,这个方法就是修改Selinux的samba功能开关
getsebool -a | grep samba
发现都是关闭的状态
vim /etc/smaba/smb.conf 写入共享/mnt的信息
在/mnt下创建10个文件,查看安全上下文,发现并不是smaba服务要求的安全上下文
在客户端用westos用户登陆后ls也不能看到10个文件
这时在服务端修改Selinux对于samba的服务控制 setsebool -P samba_export_all_ro on(1) 打开只读权限 -P永久打开 客户端再次用westos用户登陆samba服务器
发现可以查看到10个文件了
尝试删除和上传文件,发现并不能
这时候需要再开启Selinux控制smaba的读写权限
setsebool -P samba_export_all_ro on(1) -P 永久打开
再次登陆,rm file10 还是不能删除,因为文件系统没有给westos对于/mnt的满权限,切换到samba端,给westos对于/mnt的满权限
再次用westos登陆,发现可以删除
如何实现samba的多用户挂载 在客户端做实验
刚才在服务端将smb服务设置好后,客户端实现挂载,对smb的共享目录进行修改 这时候客户端以服务端的westos用户进行登陆,而客户端的student用户可以看到root用户下的/mnt的挂载内容,这样就很不安全 应该客户端每一个用户在smb服务端中均有自己对应的smb用户 root ---->westos student----->lee
先在root用户下,用smb端的westos用户挂载共享目录到/mnt下
在客户端切换student用户,cd /mnt 后仍然可以看到/mnt里的东西
此时需要在客户端安装可以实现多用户挂载的服务,客户端每个用户只能看到自己的挂载内容
切换到root用户 yum install cifs-utils -y
man mount.cifs 查看cifs的挂载配置 vim /root/smb 写入挂载用户身份的认证文件
之前挂载的时候samba用户的密码和用户名是裸露在外的 现在把它写入文件里面 并且给这个文件一个600的权限,只能让root用户查看 chmod 600 /root/smb
mount //172.25.254.215/WESTOS /mnt -o credentials=/root/smb 以认证文件的方式挂载,不用裸露用户身份
成功挂载
输入mount依然可以看到挂载的用户是westos
切换到student用户,发现仍然可以看到挂载到/mnt下的文件
卸载/mnt
mount //172.25.254.215/WESTOS /mnt -o credentials=/root/smb,sec=ntlmssp,multiuser root用户挂载的时候不让别的用户看到自己的操作,并开启多用户挂载
再次切换用户student,发现不能看到/mnt里的内容了
现在为student用户创建挂载用户
cifscreds --help 查看多用户挂载的命令用法
cifsscreds add -u lee 172.25.254.215为本地student用户创建samba用户lee
cd /mnt切换到挂载目录 ls此时就可以看到/mnt里的内容了 touch file000 ll 在客户端属于student用户的 cifscreds clear -u lee 172.25.254.215 取消samba用户
此时file000的所属用户是1002,是因为在客户端没有lee这个用户,而lee这个用户在服务端是1002,所以客户端显示的就是1002.
在服务端 可以看到file000是属于lee用户的
取消student用户的smaba用户lee cifscreds clear -u lee 172.25.254.215 卸载,再次挂载,切换用户student,又不能看到了