文章目录
一、samba的相关概念
1、samba的定义
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议, 它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、 打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。Windows和Sun公司开发,所以可以跨平台!
- 目标:让Windows与Unix-LIke 这两个不同的操作系统平台相互共享数据的文件系统
2、SAMBA的软件架构
- samba:服务器端的应用程序,这个套件主要提供了SAM服务器所需的各项服务程序 (smbd及nmbd )、SAMBA的文件档 ( document )、以及其它与SAMBA 相关的logrotate 设定文件及开机默认选项档案等 。
- samba-common:这个套件则主要提供了 SAMBA 的主要配置文件(smb.conf) 、 smb.conf 语法检验的测试程序( testparm )等等,samba的支持文件;
- samba-client:客户端的应用程序,这个套件则提供了当Linux做为SAMBAClient端时,所需要的工具指令,例如挂载SAMBA文件格式的mount.cifs、取得类似网上邻居相关树形图的smbtree等。如果Linux系统共享资源,没有Windows作为测试,可以用LInux自带的samb-client作为测试端!
二、搭建samba服务器
服务端: ip=172.25.70.22
(1)yum search samba 寻找可以提供此服务的软件
(2)yum install samba-client samba samba-common 安装3个安装包
(3)rpm -qa samba 查看samba服务的版本
(4)rpm -ql samba-common 查看samba服务的主配置文件
- /etc/samba/smbusers :samba服务设置samba虚拟用户的配置文件
(5)getenforce 查看一下selinux的状态,如不是enforcing,通过vim /etc/sysconfig/selinux改为enforcing
(6)vim /etc/samba/smb.conf 查看samba配置文件
- 看到如果selinux开启,必须更改samba共享目录的安全上下文 samba_share_t
- 如果共享的目录不只是SAMBA,还包括FTP或者其它服务,使用public_content_t大家都能读取的类型
(7)打开nmb服务,smb服务,且开机自启动
systemctl start nmb
systemctl start smb
systemctl enable smb
- NMB(NetBIOS Message Block):可以通过主机名代替IP地址来访问局域网里的主机, 把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来,主机名与IP的映射。
(8)添加到防火墙中
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload
(9)netstat -antlupe | grep smb 查看smb服务的端口
通常使用445/tcp进行所有的连接;也可以使用TCP端口139,UDP端口137、138向后兼容!
(10)pdbedit -L 查看samba服务器的samba用户
(11)useradd westos 建立westos用户、ranran用户
(12)smbpasswd -a westos 将westos用户和ranran用户加入samba用户里面,并且设置密码123456
- smbpasswd -a 添加用户(被添加用户必须是系统用户)
- smbpasswd -x 删除用户
在客户端 ip=172.25.70.122
(1)yum install samba-client -y 安装这个服务,这个客户端才可以使用smb服务端的资源
(2)smbclient -L //172.25.70.22 匿名用户登录(-L表示list列出)
(3)smbclient -L //172.25.70.22 -U westos samba用户登录,默认登录到此用户的家目录
(4)smbclient //172.25.70.22/westos -U westos 直接进入samba共享服务
(5)mount //172.25.70.22/westos /mnt -o username=westos,password=123456
- 将samba服务器的目录挂载在本地目录/mnt下面,挂载的时候必须加上samba用户,cd /mnt进入挂载目录,实际上进入了samba服务器的共享目录
- 没有挂载在本地的话只能ls查看,只有挂载在本地才可以进行上传下载等等操作
三、samba服务配置及权限的更改
1、基础配置修改
1.1 域名
89 workgroup = WESTOS
1.2 黑白名单
(1)白名单
95 hosts allow = 172.25.70.122 只允许我的客户端登录
测试
客户端ip=172.25.70.122,可以登录
真机 ip=172.25.70.250,不可以登录
(2)黑名单
95 hosts deny = 172.25.70.122 不允许我的客户端登录,其余都可以登录
测试
客户端ip=172.25.70.122,不可以登录
真机 ip=172.25.70.250, 可以登录
2、权限
2.1 共享自定义目录
在**服务器端**
(1)mkdir /westos_smb 在samba服务器上面建立一个共享目录 /westos_smb
(2)vim /etc/samba/smb.conf 编辑配置文件,写入:
[WESTOS] samba服务器对外共享的总名称
comment = Share Directory 说明此目录为共享目录
path = /westos_smb 服务器实际共享的目录
但是 ,Selinux默认是禁止自定义的目录成为共享目录!
(3)semanage fcontext -a -t samba_share_t ‘/westos_smb(/.*)?’ 更改安全上下文
(4)restorecon -RvvF /westos_smb 加载使其生效
(5)在 测试端,smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,会发现可以看,但是无法上传和删除文件。
在 服务端
(6) vim /etc/samba/smb.conf 写入
[WESTOS] samba服务器对外共享的总名称
comment = Share Directory 说明此目录为共享目录
path = /westos_smb 服务器实际共享的目录
writable = yes 登陆进去是可以rm删除和put上传(不识别touch)
(7)chmod 777 /westos_smb 给此自定义共享目录/westos_smb 满权限
(8)在 测试端,smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时可以上传,删除文件。
(9)若给此自定义共享目录/westos_smb 755 权限,chmod 755 /westos_smb
(10)在 测试端,smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时会出现可以上传文件但是无法删除文件的现象。
(11)此时给samba用户设定可操作权限 setfacl -m u:westos:rwx /westos_smb
(12)在 测试端,smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时就可以删除文件了。
2.2 共享系统目录
(1) vim /etc/samba/smb.conf 写入
[MNT] samba服务器对外共享的总名称
comment = Share System mnt Directory 说明此目录为系统共享目录
path = /mnt 服务器实际共享的目录
writable = yes 登陆进去是可以rm删除和put上传(不识别touch)
(2)在 测试端,smbclient //172.25.70.22/MNT -U westos 登录samba服务器,会发现可以看,但是无法上传和删除文件。
(3)由于selinux处于enforceing状态,故应在selinux中设置 setsebool -P samba_export_all_ro on 和 setsebool -P samba_export_all_rw on , 查看是否打开 getsebool -a | grep samba
若觉得降低了安全性,可以只打开只读,然后给指定用户读写权限
(4)在 测试端,smbclient //172.25.70.22/MNT -U westos 登录samba服务器,此时就可以上传和删除文件了。
2.3 隐藏目录
服务端:
(1)vim /ect/samba/smb.conf 写入
browseable=no 隐藏这个共享目录,使客户端-L看不见samba服务器对外共享的目录,但是实际上是存在的,可以进去
(2)systemctl restart smb
客户端测试:
(1)smbclient -L //172.25.70.22 (任何-L)看不到 WESTOS, 但是**smbclient //172.25.70.22/WESTOS -U westos** 可以进入WESTOS。
2.4 可登录用户
服务端:
(1)vim /ect/samba/smb.conf 写入
valid users=westos 客户端可以用来登陆samba服务端的samba用户身份
(2)systemctl restart smb
客户端测试:
(1)smbclient //172.25.70.22/WESTOS -U westos 可以,因为配置文件只允许westos这个samba用户登录,smbclient //172.25.70.22/WESTOS -U ranran 不可以,因为配置文件没有允许ranran这个samba用户登录。
若想让ranran用户在此条件上也可以登录,则
服务端:
(1)vim /ect/samba/smb.conf 写入
valid users=@/+westos 属于westos组的用户才可以登陆samba服务器
(2)systemctl restart smb
(3)usermod -G westos ranran 将ranran用户加入westos组
客户端测试: smbclient //172.25.70.22/WESTOS -U ranran 此时ranran用户就可以登录了。
2.4 可写用户列表
服务端:
(1)vim /ect/samba/smb.conf 写入
write list =westos 可写用户的列表(和 writable=yes只能一个存在),服务允许只有westos用户才可以对samba目录写
(2)systemctl restart smb
客户端测试:
(1)此时 westos可写,ranran不可写。
smbclient //172.25.70.22/WESTOS -U westos
smbclient //172.25.70.22/WESTOS -U ranran
(2)因为文件系统不允许ranran操作samba目录,只允许了westos
(3)允许ranran操作samba目录,
(4)smbclient //172.25.70.22/WESTOS -U ranran 此时ranran也可写。
2.5 匿名用户登录
现在匿名用户不可以登录
服务端:
(1)vim /ect/samba/smb.conf 写入
guest ok =yes 使匿名用户可以登陆
map to guest = bad user 使匿名用户可以挂载,使挂载进程识别samba匿名用户
(2)systemctl restart smb
(3) 客户端测试: ,此时可以登录
2.6 提升用户权限
服务端:
(1)vim /ect/samba/smb.conf 写入
admin users = studentadmin users = westos 指定 smb 服务的访问管理用户
(2)systemctl restart smb
(3) 客户端测试:
四、smb的多用户挂载
现象:root挂载,但是su - kiosk, kiosk也可以访问,不安全!
要求:自己挂载的,只能自己看,别人要看需要通过验证!
在客户端
(1)yum install cifs-utils 在客户端安装可以实现多用户挂载的服务,客户端的每个用户只能看自己的
(2)vim /root/smbpasswd 编辑smb挂载用户身份的一个认证文件,之前挂载的时候用户是裸露在外面的,现在写在认证文件里面
(3)chmod 600 /root/smbpasswd 只有管理员可以看
(4)ls -l /root/smbpasswd
(5)mount //172.25.70.22/WESTOS /mnt -o credentials=/root/smbpasswd 以认证文件方式挂载,现在不裸露samba用户身份了,但是切换到student用户还是可以查看挂载目录内的内容,不验证。
(6)解挂
(7)mount //172.25.70.22/WESTOS /mnt -o credentials=/root/smbpasswd ,sec=ntlmssp,multiuser root用户挂载的时候不让别的本地用户看自己的操作,su - student切换到本地用户, 查看,被拒绝,现在安全了
- sec=ntlmssp 认证方式
- multiuser 多用户认证
(7)那么此普通用户student,想要查看此共享目录内的内容,就要通过验证:
cifscreds add -u ranran 172.25.70.22 给本地用户student一个samba用户的身份,此时他就可以通过验证了。
- cifscreds clear -u ranran 172.25.70.22 取消samba用户身份
(8)cd /mnt 切换到挂载目录,touch ran 新建文件,发现 新建文件ran在客户端属于ha用户
(9)在**服务端** 查看新建文件ran,发现ran文件属于ranran用户。
- 为什么文件不属于同一用户呢:在客户端ran文件的所属用户是ha(id=1002),是因为在客户端没有ranran用户,我们只是给本地用户student一个samba用户的身份,这个身份是ranran,让客户端的本地用户可以使用服务端的用户通过验证进入,而ranran这个用户在服务端是1002,客户端如果没有用户id为1002,则显示id1002,若有则显示客户端中1002对应的用户名。id一致。