Linux下Samba文件共享服务的部署
SMB(Server Messages Block,服务器消息块)
SMB服务器消息协议由微软公司和英特尔公司共同制定,为了解决局域网内的文件或打印机等资源的共享问题,使多个主机之间共享文件变得简单。
Samba
为了解决Linux系统与为Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与window系统之间的文件共享系统。
CIFS(Common Internet File System)通用网络文件系统
cifs是公共的或开放的SMB协议版本。它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。
CIFS使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
CIFS 可以达到以下功能:
1)访问服务器本地文件并读写这些文件
2)与其它用户一起共享一些文件块
3)在断线时自动恢复与网络的连接
4)使用统一码(Unicode)文件名:文件名可以使用任何字符集,而不局限于为英语或西欧语言设计的字符集。
1.服务的安装部署以及添加samba用户
服务端:【linux 172.25.254.100】
客户端:【linux 172.25.254.200】
1.1安装服务
samba服务端安装:
samba.x86_64 与windows机器相互操作的服务器和客户端软件
samba-client.x86_64 Samba客户程序(客户端,服务端都得有)
samba-common.x86_64 Samba服务器和客户端都使用的文件
[root@server ~]# yum install samba.x86_64 -y
[root@server ~]# yum install samba-client.x86_64 -y
[root@server ~]# yum install samba-common.x86_64 -y
启动 smb 服务
[root@server ~]# systemctl start smb
[root@server ~]# systemctl enable smb
关闭防火墙
[root@server ~]# systemctl stop firewalld
客户端:
在samba客户端安装:
[root@client ~]# yum install samba-client.x86_64 -y
安装完成,通过 smbclient 管理命令对 samba 客户端来进行查看
[root@client ~]# smbclient -L //172.25.254.100
以匿名用户身份查看 samba 服务器上可用的共享服务
操作如下:
1.2 服务端为samba服务添加用户(必须为服务端本地存在的用户)
服务端使用 smbpasswd 命令为系统用户设置 Samba 服务程序的密码
[root@server ~]# smbpasswd -a student #将系统用户 student 添加为 smb 用户
New SMB password: #设定用户密
Retype new SMB password: #再次输入密码
Added user smbuser. #添加成功
可以通过 pdbedit 来管理 Samba 用户数据库
[root@server ~]# pdbedit
-L 列出账户列表
-Lv 列出账户详细信息的列表
在客户端执行:
[root@client ~]# smbclient -L //172.25.254.100 -U student
以 student 身份对 samba 服务器上可用的共享服务进行查看
操作如下:
服务端添加samba用户:
客户端查看:
smbclient -L //172.25.254.100 -U student
2.samba服务的访问操作管理
2.1 samba客户端访问共享资源
[root@client ~]# smbclient //172.25.254.100/haha -U haha
访问 samba 用户默认访问的家目录
操作如下:
可以访问,但无法进行查看,执行 ls 发现不被允许
这是因为服务端 SELinux 的问题
在服务端进行对该服务的允许:
[root@server ~]# getsebool -a | grep samba
#查看该服务的sebool值
[root@server ~]# setsebool -P samba_enable_home_dirs on
#让selinux 允许用户访问家目录
然后在smb客户端进行查看访问
操作如下:
客户端进行查看:
2.2通过挂载进行共享资源的操作
登陆后,可以进行上传下载命令,能进行删除,创建等命令,输入?查看可以执行的命令
但是
登陆后上传时,不能切换目录,只能上传登录前客户端所在目录的文件,下载也同样只能下载到当前目录局限性太大,可以通过挂载对共享目录进行使用
在客户端执行 smbclient -L //172.25.151.150 -U smbuser
可看到smaba 共享目录类型为 disk ,类型为硬盘
可对其进行挂载后应用
操作如下:
在客户端挂载:
[root@client ~]# mount //172.25.254.100/haha /mnt/ -o username=haha,password=redhat
将默认服务端共享目录 smbuser 挂载到客户端 /mnt/ 下
然后对其进行操作新建文件,上传远程文件等操作
想要开机自动挂载
可以编写/etc/fstab 文件(必须保证 samba 服务端的服务开启,否则将会无法开机)
[root@client ~]# vim /etc/fstab
内容如下:
//172.25.254.100/haha /mnt cifs defaults,username=haha,password=redhat 0 0
执行开机自动挂载
重启后成功
操作如下:
vim /etc/fstab
2.3 限制用户访问
在 samba 服务端编辑配置文件,限定访问 samba 服务的用户;
关于配置文件,可以将 /etc/samba/smb.conf.example的内容复制到/etc/samba/smb.conf下;
编辑/etc/samba/smb.conf
[root@server ~]# vim /etc/samba/smb.conf
内容如下
第 84 行 workgroup = Server #将工作组改为 Server
第 96 行添加用户访问黑/白名单
96 hosts allow = 172.25.254.100
#允许172.25.254.100 主机进行访问,其他主机不被允许
98; hosts deny = 172.25.254.100
#拒绝172.25.254.100 主机进行访问,其余主机可以访问
编辑完成重启服务
操作如下:
客户端无法访问:
2.4 指定samba共享目录
2.4.1 新建共享目录
[root@server ~]# mkdir /smbshare #作为smb 的共享目录
并编辑主配置文件/etc/samba/smb.conf
在最后添加如下:
322 [DIR] #指定共享目录
323 comment = smbsharedir #注释
324 path = /smbshare #路径
重启服务
在客户端执行
[root@client ~]# smbclient -L //172.25.254.200
可以查看到共享的目录
此时 /smbshare 可以被访问,但无法被查看,需要修改selinux安全上下文
[root@server ~]# semanage fcontext -a -t samba_share_t '/smbshare(/.*)?'
# 将/smbshare 的安全上下文修改为 samba_share_t
[root@server ~]# restorecon -Fvvr /smbshare/ #更新目录安全上下文
此时就可对目录进行访问
操作如下:
此时就可对目录进行访问
2.4.2 共享系统中的目录
将 /mnt 目录 作为smb 共享目录
编辑主配置文件 /etc/samba/smb.conf
编辑内容如下:
326 [mnt] #指定共享目录
327 comment = mntdir #注释
328 path = /mnt #路径
修改完成重启服务
客户端执行
[root@client ~]# smbclient -L //172.25.254.100
可以查看到共享的目录
此时 /mnt 可以被访问,但无法被查看,不能像自建目录一样进行安全上下文的修改,
因为,系统目录会被多个程序访问使用,修改安全上下文,则只能被 samba 服务访问,显然
是合适的。此时需要修改 sebool 值
[root@server ~]# setsebool -P samba_export_all_ro on
此时smb服务的输出仅可以读,若想对其可写,可修改 sebool 值 samba_export_all_rw
此时就可以对其进行查看
操作如下:
2.4.3 对共享目录进行权限设置
上述共享目录,是无法对其进行写操作的,因为在配置文件中,服务没有赋予权限
通过编辑配置文件,对目录进行权限设置:
[root@server ~]# vim /etc/samba/smb.conf
内容如下:
322 [DIR] #指定共享目录
323 comment = smbsharedir #注释
324 path = /smbshare #路径
325 browseable = yes #是否允许浏览#此权限若为no 则无法看到 DIR
326 writeable = yes #是否可写(前提是对DIR有写的权限)
327 # write list = haha #允许写的用户名单
#允许指定用户或用户组可写(前提是该用户或者用户组对DIR有写的权限)
#后直接跟用户名称,若名称前有 +(@) 表示用户组
328 admin users = student #指定 smb 服务的访问管理用户
修改完毕后重启服务
通过 setfacl 对共享目录进行附加权限的设置
[root@server ~]# setfacl -Rm d:u:Sambauser:rwx /smbshare
对/smbshare 目录 指定Sambuser 用户可读可写可执行
操作如下:
客户端挂载使用:
2.5 客户端多用户登陆管理
在客户端以一种用户(如root身份)执行挂载samba服务端的共享资源:
mount -o /172.25.254.239/Samber /mnt/ username=Sambauser,password=redhat
在切换为普通用户(如student)的情况下,smb服务的挂载点,是可以被看到的
操作如下:
为了安全,进行多用户挂载.
在客户端安装:
cifs-utils 用于安装和管理 CIFS 挂载的实用程序
[root@client mnt]# yum install cifs-utils.x86_64 -y
建立smb用户文件 /root/smbusers
内容如下:输入已知smb用户的用户名以及密码
1 username=haha
2 password=redhat
通过如下方式进行挂载:
[root@client ~]# mount -o credentials=/root/smbusers,sec=ntlmssp,multiuser //172.25.254.100/SHARE /mnt
其中:
# credentials=filename
指定包含用户名和/或密码以及可选工作组名称的文件。该文件的格式为:
username=value #用户名
password=value #密码
domain=value #域名
这比在共享文件(如/etc/fstab)中使用明文密码要好。确保正确地保护任何凭证文件。
# sec=ntlmssp
安全模式设置为 ntlmssp ,此模式选择看版本,
在v3.8之前,主线内核版本的默认值是sec=ntlm。在v3.8中,默认设置sec=ntlmssp。
# multiuser 多用户模式
此后切换用户后,无法对smb进行查看,需要进行认证,通过 cifscreds 进行访问
cifscreds 在内核密钥环中管理NTLM凭据
在另一用户student下执行:
[student@client mnt]$ cifscreds add -u haha 172.25.254.100
# cifscreds add [-u 用户名] samba主机IP
然后输入密码进行验证就可以