=@TOC
1.samba服务简介
在构建主机时我们需要将主机系统的数据存储在存储服务器中(如下图所示),这样用户在需要访问系统数据资源时,可以通过不同的终端主机访问存储服务器,避免因客户端主机瘫痪导致用户数据丢失,我们将这一技术成为存储分离技术,这一技术的本质是共享文件系统的读写权限,而不是将文件系统下载到客户端主机后共享。
1.1smb协议
smb(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB
协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
1.2cifs协议
随着 Internet 的流行,Microsoft 希望将 SMB 这个协议扩展到 Internet 上去,成为 Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为CIFS (CommonInternet File System),它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB 协议版本,并由 Microsoft 使用。SMB 协议在局域网上用于服务器文件访问和打印的协议。
1.3 ftp 服务 与 samba 服务对比
ftp 的优缺点:
优点:文件传输、应用层协议、可跨平台
缺点:只能实现文件传输,无法实现文件系统挂载;无法直接修改服务器端文件Samba 的特性: 使用 smb/cifs 协议、可跨平台、可实现文件系统挂载、可实现服务器端修改文件
2. samba基本信息
服务启动脚本 | smb.service |
---|---|
主配置目录 | /etc/samba |
主配置文件 | /etc/smb.conf |
安全上下文 | samba_share_t |
默认使用端口 | 139、445 |
服务安装包 | samba(软件主体)、samba-common(说明软件)、samba-client(客户端软件) |
3. samba的安装与启用
实验环境:
两台虚拟机
服务端 westos_storage :172.25.254.100
客户端 num2 :172.25.254.200
[root@westos_storage ~]# dnf install samba samba-common.noarch samba-client.x86_64 -y
//zhua
[root@westos_storage ~]# systemctl enable --now smb.service
[root@westos_storage ~]# firewall-cmd --permanent --add-service=samba
[root@westos_storage ~]# firewall-cmd --reload
smbclient -L //172.25.254.100
安装:
开启smb服务,添加smb到火墙中
测试:pdbedit -L查看设置的samba账户列表
# samba用户的建立
4. samba用户的建立
smbpasswd -a lee #添加用户
pdbedit -L #查看用户列表
pdbedit -x lee #删除用户
注:samda 新建的用户必须是本地已有的用户,如图lee新建失败
5. samba服务共享目录
5.1 创建共享目录
[root@westos_storage samba]# cp smb.conf smb.conf.example -p // 重新生成主配置文件
mkdir /westos #创建共享目录
semanage fcontext -a -t samba_share_t '/westos_share(/.*)?' //更改安全上下文
restorecon -RvvF /westos_share/ // 刷新
vim /etc/samba/smb.conf #编写配置文件
[westos_share]
comment = westos_share
path = /westos_share
systemctl restart smb.service


5.2 系统自建目录的共享
[root@westos_storage samba]# vim smb.conf
[etc]
comment = etc dir
path = /etc
[root@westos_storage samba]# systemctl restart smb.service
[root@westos_storage samba]# smbclient -L //172.25.254.100 -U westos
共享成功
系统自建目录不能随意更改安全上下文
5.3 samba用户访问家目录
setsebool -P samba_enable_home_dirs on 调整selinux中的smb的波尔直使用户可以访问家目录
6.samba的访问控制
[root@num2 ~]# dnf install samba-client -y num2客户端要安装
6.1 全局访问控制
1.全局白名单
只允许200主机来访问当前的samba服务器
100主机访问失败
200主机成功访问
2.全局黑名单
200主机访问失败
100主机访问成功
真机访问成功
6.2 局部访问控制
westos_share 这个共享目录只能被200主机访问,此访问设定只针对westos_share
100主机访问失败
200主机访问成功
7.samba的常用配置参数
browseable = yes|no ##是否隐藏共享
valid users = lee ##指定访问用户
valid users = +lee|@lee ##指定访问用户组
writable = yes ##可写
write list = westos ##指定用户可写
write list = +westos ##指定用户组可写
write list = @westos
map to guest = bad user ##写到全局设定中
guest ok = yes ##允许匿名用户访问
admin users = lee ##指定此共享的超级用户身份
1.browseable = no ##隐藏共享
2.指定访问
valid users = westos ##指定访问用
valid users = +lee|@lee ##指定访问用户组
3.writable = yes ##可写
write list = lee 此共享只对lee可写
write list = +lee 此共享只对lee组可写
4.允许匿名用户访问:
smbclient //共享主机ip/共享目录即以匿名用户身份访问共享资源时无法访问,编辑samba配置文件,在全局模块中将所有访问samba服务器的未知用户身份映射为匿名用户,在某单个共享目录语句块中设置允许匿名用户访问,重启smb服务,此时smbclient //共享主机ip/该共享目录以匿名用户身份访问可以看到指定的单个共享目录下的文件资源
8.samba服务客户端共享优化—autofs自动挂载
实现自动挂载过程
[root@num2 samba]# dnf install autofs -y
[root@num2 samba]# vim /etc/auto.master
[root@num2 samba]# vim /etc/auto.share
[root@num2 samba]# cat /etc/auto.share
samba -fstype=cifs,username=westos,password=westos ://172.25.254.100/westos_share
[root@num2 samba]# vim /etc/autofs.conf
[root@num2 samba]# systemctl restart autofs.service
测试过程
[root@num2 samba]# cd
[root@num2 ~]# cd westos
-bash: cd: westos: No such file or directory
[root@num2 ~]# cd
[root@num2 ~]# cd /westos
[root@num2 westos]# ls
[root@num2 westos]# cd samba
[root@num2 samba]# ls
api file file1 file2 file3 file4
[root@num2 samba]#
在客户端中安装autofs 实现自动挂载和自动卸载
客户端主机num2中编辑策略文件/etc/auto.master写入最终挂载点的上级目录(如果上级目录是根目录则写/-,且编写挂载子策略文件指定最终挂载点时要写绝对路径)、指定挂载子策略文件,编写挂载子策略文件指定将资源以指定参数方式挂载到最终挂载点
挂载子策略文件**/etc/auto.share中写入最终挂载点的相对路径,挂载参数、挂载服务器ip及资源共享
主配置文件/etc/autofs.conf**设置的资源闲置时间限制,挂载资源在10妙以上无任何程序使用那么自动卸载 默认时间是300妙
9.samba的多用户挂载
在客户端如果用普通的挂载方式,没有通过用户验证的人也可以访问samba服务。
解决办法:
dnf install cifs-utils.x86_64 -y #安装服务
vim /root/smbpass #编辑认证文件
username=lee
password=westos
chmod 600 /root/smpass
mount -o credentials=/root/smbpass,multiuser //172.25.254.100/westos_share /mn
su - westos
ls /mnt
ls: cannot access '/mnt': Permission denied
如果想要使客户端主机中的其他用户在多用户挂载后能够查看到共享目录中的文件资源,需要在挂载时加入sec=ntlmssp参数,即指定客户端主机中的其他用户在多用户挂载后可以通过ntlmssp这种认证方式进行samba账户认证,此时以root用户身份挂载后,切换到普通用户westos中,可以执行cifscreds add(添加认证) -u xxx(指定samba账户) samba服务器IP命令输入指定samba账户密码后,以普通用户westos身份完成认证,此时westos中就可以查看到共享目录中的文件资源(出现报错时使用cifscreds clearall清除历史认证记录重新认证即可)
[root@num2 ~]# mount -o credentials=/root/smbpass,multiuser,sec=ntlmssp //172.25.254.100/westos_share /mnt/
[root@num2 ~]# su - westos
[westos@num2 ~]$ ls /mnt
ls: cannot access '/mnt': Permission denied
[westos@num2 ~]$ cifscreds add -u westos 172.25.254.100
Password:
ls /mnt