Samba共享文件系统
共享的原理:存储分离:把内容共享出去给别人用
Linux:CIFS共享管理块
windows:SMB
CIFS,SMB:只不过在不同系统叫的名字不一样
当web服务器压力过大时 ,用多台站点为1台服务器分担压力, 3台主机 如果每台主机分别存有支付宝帐号注册信息
如果1号主机挂了,应该怎么办?
技术:
存储分离,把内容分享出去给别人用。
最底层1个存储服务器
3台主机把存储目录都存放在存储服务器里面
如果1号挂了,2号可以通过网络访问其他主机存进去的信,因此把内容共享出去给别人用cifs
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
Samba-common ##Samba 的支持命令
Samba-client ##客户端应用程序
Samba ##服务器应用程序
服务端口: 通常使用 TCP/445 进行所有连接。还使用UDP137、UDP138和TCP/139 进行向后兼容
主配置文件: /etc/samba/smb.conf
samba 用户必须是系统用户
SMB 密码和系统密码无关
SMB 默认共享的都是自己的家目录
服务端是desktop,172.25.254.112
客户端是server,172.25.254.212
【1】samba服务器的安装及访问调试
1: yum search samba ##查看客户,共享命令,服务
2: yum install samba-client.x86_64 samba-common.x86_64 samba.x86_64
客户 命令 服务
3: systemctl start smb
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload
firewall-cmd --list-all
4: netstat -antlupe | grep smb ##查看端口445
5:pdbedit -L 查看所有的共享用户
(1,2)
(3)
(4)
(5)
【2】添加用户为smb用户,必须是本地用户
1:useradd westos
2: useradd lee
3: smbpasswd -a westos 更改用户共享的smb密码,和用户系统密码无关
4: smbpasswd -a lee
5: pdbedit -L ##有新建的两个用户westos,lee
共享方法一:
为了测试方便,在172.25.254.112连接212
ssh root@172.25.254.212 -X
在212:
1: yum install samba-client.x86_64 -y
2: smbclient -L //172.25.254.162 ##-L:后面接访问的主机,匿名用户登陆,输入密码时直接回车即可
3: smbclient -L //172.25.254.162 -U westos ## 实名用户登陆查看
4: smbclient //172.25.254.162/westos -U westos ## 以westos用户实名登陆共查看享目录
smb: \> !ls ##查看本地可上传文件
put acanonda-ks.cfg ##上传到112
quit
测试:
5:在112
ls /home/westos ##默认路径,有212上传的文件
(1)
(2)
(3)
(4)
(5)测试:112
共享方法二挂载:
ssh root@172.25.254.212 -X
1: mount //172.25.254.112/westos /mnt -o username=westos,password=westos
##以westos用户登录共享,挂载到/mnt下
cd /mnt
ls 有上传的文件
touch file ##在mnt下建立文件
ls /mnt/ ##查看到建立的文件
2:
测试:
在112端:ls /home/westos ##有212建立在/mnt/下的文件
(1)
(2)
测试112:
samba基本操作
【2】 ####允许客户访问设置 (黑白名单)
##非系统目录的共享
白名单:
1:rpm -qc samba-common ##查看到主配置文件
2: vim /etc/samba/smb.conf ##主配置文件
89 workgroup = WESTOS
96 hosts allow = 172.25.254.212 ##只允许212共享,其他不可以,如果不写入 hosts allow,默认全都可以访问
## hosts allow = 172.25.254. 表示这个域内可以访问
systemctl restart smb.service hosts allow = 172.25.254. ##.后面有空格,表示这个网段的主机可以访问**
3:
测试:在212: smbclient -L //172.25.254.112 -U westos
可看到Domain=[WESTOS]
只有212可以共享,其他失败
(1)
(2): vim /etc/samba/smb.conf
(3)
测试:
黑名单
vim /etc/samba/smb.conf
89 workgroup = WESTOS
96; hosts allow = 172.25.254.212 ##注释
97 hosts deny = 172.25.254.212 ##不允许212共享,其他可以
systemctl restart smb.service
测试:
在212:
smbclient -L //172.25.254.112 -U westos ##共享失败
在其他主机,例如 12 :smbclient -L //172.25.254.112 -U westos 可以共享
vim /etc/samba/smb.conf
systemctl restart smb.service
测试:server 172.25.254.212
真机 172.25.254.12
【3】#####共享服务端建立的目录
用Boolean控制系统的安全上下文
Boolean打开:开关全开,不太安全
vim /etc/sysconfig/selinux
selinux关闭的状态下:不会影响共享
selinux开启的状态下: 更改安全上下文,避免影响共享
更改安全上下文:可以修改自己建立的安全上下文,不能修改系统的安全上下文
步骤:
1:在112:
(1) vim /etc/sysconfig/selinux
SELINUX=enforcing
reboot
(2) mkdir /westos_smb
ls -ld /westos_smb
(3)vim /etc/samba/smb.conf
在文件末尾:
[WESTOS] ##共享出去客户端看到的目录(指定共享出去的目录名称)
comment = Share Directory ## 解释目录的备注信息,可任意写
path = /westos_smb ##服务器自己的目录,即共享目录的绝对路径
systemctl restart smb.service
(4) 修改安全上下文(在selinux开启的状态下)
semanage fcontext -a -t samba_share_t '/westos_smb(/.*?)?'##修改/smb目录及目录里面的内的安全上下文标
restorecon -RvvF /westos_smb/ ####加载安全上下文标签属性为 samba_share_t
(1) vim /etc/sysconfig/selinux
(2)
(3)vim /etc/samba/smb.conf
2:测试:在212:
(1)mount //172.25.254.112/WESTOS /mnt -o username=westos,password=westos
cd /mnt
ls ##可以查看,但是不能创建文件
touch file #没有权限
添加执行权限:
3: 在112:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory
path = /westos_smb
writable = yes ##设置目录可写
systemctl restart smb.service
chmod 777 /westos_smb/ ###设置westos用户对/westos_smb 的读写执行权限
4: 再次测试:在212:
mount //172.25.254.112/WESTOS /mnt -o username=westos,password=westos
cd /mnt
ls
touch file ##已添加权限,可以创建文件
ll
-rw-r--r-- 1 1001 1001 0 ...
因为是在westos目录下创建的文件,所以file的uid为westos的uid
5:id westos
uid=1001
在112:chmod 755 /westos_smb
setfacl -m u:westos:rwx /westos_smb
212: ll
-rw-r--r-- 1 westos westos 0 ..
【4】 系统级目录共享
概念:
打开布尔值作用:可以共享读写系统级目录
系统级文件不能直接修改其安全上下文,因为系统级文件可能不止smb一个服务会读取,如果修改会影响其他。只能修改smb 服务在selinux中的安全级别
//打开该布尔值后可以共享所有系统级目录,比安全上下文的级别高
(1)服务端:
1: vim /etc/samba/smb.conf
[mnt]
comment = Share system mnt direcotry
path = /mnt
writable = yes ##添加进去还是不能创建文件,因为是系统级目录,所以修改布尔值后才有权限
systemctl restart smb.service
ll -Zd /mnt ##可以看出安全上下文与smb服务不匹配
2: getsebool -a | grep samba
setsebool -P samba_export_all_ro on | 1 ###设置selinux对smb服务的只读权限永久开启,-P 永久属性不会随着系统的重启而失效。
3: setsebool -P samba_export_all_rw on | 1 ##设置selinux对smb服务的读写权限永久开启,开启此权限后selinux对smb服务的所有安全策略跳 过,降低smb服务的安全性。
5: setfacl -m u:westos:rwx /mnt ###设置westos用户对/mnt的读写执行权限**
1: vim /etc/samba/smb.conf
测试:
6:客户端:
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos
cd /mnt
touch file1
在服务端;
cd /mnt
ls ##可以看到在客户端建立的file文件
客户端:
服务端:
(2) 打开布尔值后,共享不再受selinux影响,自己创建的文件不需要更改安全上下文,共享出去客户端依然可以创建文件
步骤:
服务端:mkdir /lee/
chmod 777 /lee
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory
path = /lee
writable = yes ##设置目录可写
systemctl restart smb.service
测试:
客户端: mount //172.25.254.112/lee /mnt -o username=westos,password=westos
cd /mnt
touch file ##有权限
服务端:cd /lee/
ls ##有创建的文件file
vim /etc/samba/smb.conf
测试:
客户端
服务端:
【5】###smb权限管理 Samba 配置文件参数
1 writable = yes ###允许共享的用户可写
2 browseable = yes|no ###samba服务列出时no隐藏共享目录,yes显示目录,默认为yes
3 write list = westos ## 只有westos用户可写 ,用lee用户测试,lee用户不可写 + |@ 是对其组成员可写
4 valid users = westos ##后面接用户,该目录只能由该用户登陆 + |@ 对其组成员可登陆
5 map to guest = bad user ##设置匿名用户映射为guest(把所有没有用户身份的访问都定义成guest)
guest ok = yes ##guest游客登陆功能打开,匿名用户可以登陆
6 admin users = westos 表示设置普通用户的身份为root(以westos身份登陆smb共享目录的时候拥有超户的身份),组身份不变
1: 共享目录显示及隐藏 : browseable = yes|no
vim /etc/samba/smb.conf
【mnt】
comment = Share system mnt direcotry
path = /mnt
browseable = no ,
systemctl restart smb.service
客户端测试:
smbclient -L //172.25.254.112 ##no隐藏了mnt,yes的时候显示mnt
显示目录:
vim /etc/samba/smb.conf
隐藏目录:
vim /etc/samba/smb.conf
2.指定用户执行权限 :writelist = westos
vim /etc/samba/smb.conf
【mnt】
comment = Share system mnt direcotry
path = /mnt
browseable = yes
write list = westos ##对于westos用户可写,lee用户没有权限
systemctl restart smb.service
chmod 777 /mnt
客户端测试:
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos
cd /mnt/
ls
touch file ##可以建立文件,使用lee用户失败
vim /etc/samba/smb.conf
3:设置组成员可执行权限 : write list = +lee lee的组成员才有权限
服务: vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory
path = /lee
write list = +lee ##lee的组成员有写权限
; writable = yes
systemctl restart smb.service
客户:
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos
cd /mnt/
ls
touch file1 失败
服务:
加入组成员:usermod -G lee westos ##此时westos是lee的组成员
客户; 重新挂载
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos
cd /mnt/
ls
touch file1 成功
vim /etc/samba/smb.conf
4:设定用户登陆: valid users = lee
##后面接用户,该目录只能由该用户登陆 + |@ 对其组成员可登陆
服务: vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory
path = /lee
valid user = lee ###lee用户才可共享
systemctl restart smb.service
测试:
客户:
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos ##失败
mount //172.25.254.112/mnt /mnt -o username=westos,password=westos ##共享成功
cd /mnt
ls
vim /etc/samba/smb.conf
测试:
vim /etc/samba/smb.conf
5: 匿名用户登录:map to guest = bad user
服务:
vim /etc/samba/smb.conf
126 map to guest = bad user ##设置匿名用户映射为guest(把所有没有用户身份的访问都定义成guest)
336 guest ok = yes ##guest游客登陆功能打开,匿名用户可以登陆
systemctl restart smb.service
测试:
客户
方一:smbclient -L //172.25.254.112/WESTOS ##匿名用户登陆输入密码回车即可
方二:mount //172.25.254.112/WESTOS /mnt -o username=guest
匿名用户挂载 username=guest,password=""
测试:
客户端
smbclient //172.25.254.112/mnt ##可以直接登陆,密码为空 ,输入密码时回车即可
6: 更改为超户身份:
admin users = westos
##以westos用户建立的文件,身份为超户,组身份不变
服务端:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory
path = /wesos_smb
admin users = westos
systemctl restart smb.service
测试:
客户端
mount //172.25.254.112/WESTOS /mnt -o username=westos,password=westos
cd /mnt
touch file4
ls
file4
ll
total 0
-rw-r--r--. 1 root westos 0 Aug 13 03:25 file4 ##用户为root 组为服务端的挂载用户组,组身份依然是westos
vim /etc/samba/smb.conf
systemctl restart smb.service
实现smb多用户挂载
客户端设置:
1:yum install -y cifs-utils.x86_64 ##安装客户端samab认证程序,实现多用户挂载的服务
man mount.cifs ##可以查看cifs系统的挂载策略
2: vim /root/smbpasswd ##smb挂载用户身份的一个认证文件,根据挂载规则编写认证所需的文件
username=westos ##存在的用户和密码
password=westos
3 :chmod 600 /root/smbpasswd 修改权限只对所有人可读,保护登陆的用户密码
ls -l /root/smbpassword
4: mount //172.25.254.112/WESTOS /mnt -o credentials=/root/smbpasswd
(1)
2: vim /root/smbpasswd
(3)
(4)
以文件登陆,可以保护登陆的用户名和密码,但是普通用户依然可以读取超户挂载登陆的目录
切换普通用户,可以查看
mount //172.25.254.112/WESTOS /mnt -o credentials=/root/smbpasswd,sec=ntlmssp
切换普通用户,依然可以查看
mount //172.25.254.112/WESTOS /mnt -o credentials=/root/smbpasswd,sec=ntlmssp,multiuser
5: cd /mnt
ls
6: su - student
cd /mnt/
ls //无法查看 ,必须指定用户挂载通过smb认证才可以查看
cifscreds --help //查看相关命令
7:在普通用户下
su - student:
cifscreds add -u lee 172.25.254.112 //需要通过smb认证
8: cd /mnt/
ls //此时可以查看mnt下面的文件
touch file 可以创建文件,因为/westos_smb的权限为777
详解:
credentials=filename ##指定原始的认证
credentials=/root/smbpasswd ##文件指定的用户名、密码,有安全性,没有把密码爆漏在外面
sec=ntlmssp ##默认认证方式是ntlmssp;
rpm -ql | grep samba ##为查询方式
multiuser ##为多用户挂载