Linux下samba服务器的部署
目录
实验环境
Redhat企业8主机(192.168.1.19):部署samba服务器,进行资源共享
Redhat企业7主机(192.168.1.29):作为客户端,访问共享资源
windows(192.168.1.5)主机:作为客户端,访问共享资源
1.Samba介绍
1.1、samba简介
Samba 是在Linux和Windows系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
1.2、 samba服务端基本信息
- 服务名称:smb.service
- 主配置目录: /etc/samba
- 主配置文件: /etc/samba/smb.conf
- 安全上下文:samba_share_t
- 端口: 139 445
2.samba的安装与启用
①:安装samba程序(我们让这台主机既可以做服务端,也可以做客户端,smaba-client 是客户端程序包)
②:开启smb服务,并设定开机自启;在防火墙策略中添加smb服务
③:测试smb服务是否开启成功:为了实验效果明显,我们在企业7主机安装samba客户端程序 ; smbclient -L //192.168.1.19
显示服务器端所分享出来的所有资源(root密码直接回车即可)
3.samba用户的建立
samba用户必须是本地存在的用户
命令 | 作用 |
---|---|
smbpasswd -a student | 添加student用户 |
pdbedit -L | 查看用户列表 |
pdbedit -x student | 删除student用户 |
示例:
4.samba用户家目录访问
在selinux开启时,客户端无法访问用户的家目录
①:在服务端的selinux设定中,开启samba家目录使用权限
②:在windows主机上,访问服务端的共享资源,可以对samba的student用户家目录进行使用
③:在window主机上,可以直接在服务端的student用户家目录下创建文件
④:在window的cmd中,我们执行net use
命令,查看访问记录;执行net use * /del
命令,删除访问记录
⑤:linux系统下访问samba用户的共享目录(-U 指定用户名称)
5.samba服务共享目录
①:在服务端创建文件夹/sharedir作为samba共享目录 , 新建文件作为实验素材
②:更改/sharedir目录的安全上下文为:samba_share_t
③: vim /etc/samba/smb.conf ,修改配置文件,指定共享路径;修改后,重启smb服务
④:在客户端访问服务端,可以成功访问共享的/sharedir目录
6.samba的访问控制
拒绝主机访问:hosts deny = ip地址
允许主机访问:hosts allow = ip地址
对于共享目录的访问控制:
①: vim /etc/samba/smb.conf ,修改配置文件,拒绝192.168.1.29f访问/sharedir目录 ;修改后,重启smb服务
②:在客户端(192.168.1.29)测试:无法访问/sharedir共享目录,但是可以访问samba的其他东西
samba全局访问控制:
①: vim /etc/samba/smb.conf ,修改配置文件,在[global]参数下设定访问控制,拒绝192.168.1.29f访问samba全局共享资源;修改后,重启smb服务
②:在客户端(192.168.1.29)测试:无法访samba服务器上的所有共享资源
7.samba的常用配置参数
参数 | 作用 |
---|---|
writable = yes | 可写 |
write list = student | 指定student用户可写 |
write list = +student 或者 write list = @student | 指定student组可写 |
valid users= student | 指定student 用户可以访问 |
valid users = +student 或者 valid users = @student | 指定访问组 |
browseable = yes/no | 是否隐藏共享 |
map to guest = bad user;guest ok =yes | 第一条参数写到全局设定中(表示把没有身份的用户映射成guest);允许匿名用户访问 |
admin users = student | 指定student用户为超级用户访问此共享目录 |
我们在用远程访问共享资源时,在权限允许的情况下,可以使用put / get
命令上传下载文件
但这种方式对共享目录进行操作时,不能使用touch
命令等,很不方便,所以我们可以把远程共享目录挂载到本地,直接进行创建或删除文件(注意:是在权限允许的情况下)
示例:
①:默认共享目录不允许写入,添加writable = yes
参数,客户端可对指定共享目录写入
②:write list = student
,指定只有student用户可写入
③:browseable = yes
,不隐藏共享文件;browseable=no
,隐藏共享文件
④:valid users=linux
,指定linux用户可访问共享目录
⑤:设定允许匿名用户访问共享目录(默认不可以); map to guest = bad user
必须写在全局参数中;
8. samba的多用户挂载
问题:
在客户端如果使用普通方式挂载共享目录,没有通过用户认证的人也可以访问samba服务,存在很大的安全隐患
如:设定samba服务只有student用户可以访问/sharedir目录,客户端的root用户通过student用户认证把共享目录挂载到本地,客户端的westos用户并未用认证的方式挂载共享目录,但是westos也可以访问
解决办法:
客户端
①:安装cifs,对多用户挂载进行管理:yum install cifs-utils -y
②:把samba的用户认证写在一个文件中,作为认证文件;并修改文件权限,防止文件内容泄露
③:挂载共享目录到本地/mnt中,其他用户不可访问该挂载点 ;
挂载参数说明:credentials =/root/smbpass
## 指定认证文件;sec=ntlmssp
##指定认证类型 ;multiuser
##支持多用户
本地其他用户如何对挂载后的共享目录进行操作?
用户通过自己持有的samba账号进行用户认证,可对挂载后的共享目录进行操作cifscreds add -u student 192.168.1.19
##student 为samba的认证用户 ; ip 为samba服务器ip地址cifscreds clearall
##清除认证