环境:Redhat7.4
服务名称:Samba
概述:
Server Message Block (SMB) 是 Windows 服务器和客户端之间实现文件共享的服务协议。Samba 服务通常用来做跨系统文件共享服务,实现不同操作系统之间的资源共享。
NFS与samba一样,也是在网络中实现文件共享的一种实现,但不幸的是,其不支持windows平台,而本章要提到的samba是能够在任何支持SMB协议的主机之间共享文件的一种实现,当然也包括windows。
使用场景:
SMB协议是C/S型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
Samba监听端口有:
TCP | UDP |
---|---|
139 | 137 |
445 | 138 |
tcp端口相对应的服务是smbd服务,其作用是提供对服务器中文件、打印资源的共享访问。
udp端口相对应的服务是nmbd服务,其作用是提供基于NetBIOS主机名称的解析。
配置文件:
/etc/samba/smb.conf(主配置文件)
samba三大组成 | 作用 |
---|---|
[global] | 全局配置,此处的设置项对整个samba服务器都有效 |
[homes] | 宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中 |
[printers] | 打印机共享设置 |
常用配置文件参数:
参数 | 作用 |
---|---|
workgroup | 表示设置工作组名称 |
server string | 表示描述samba服务器 |
security | 表示设置安全级别,其值可为share、user、server、domain |
passdb backend | 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件) |
comment | 表示设置对应共享目录的注释,说明信息,即文件共享名 |
browseable | 表示设置共享是否可见 |
writable | 表示设置目录是否可写 |
path | 表示共享目录的路径 |
guest ok | 表示设置是否所有人均可访问共享目录 |
public | 表示设置是否允许匿名用户访问 |
write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.230.15 |
hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.230.15 |
printable | 表示设置是否为打印机 |
安装配置:
配置匿名访问
服务端
//配置selinux
[root@master ~]# getsebool -a |grep samba
[root@master ~]# setsebool -P samba_enable_home_dirs on
//配置防火墙
[root@master ~]# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.230.0/24 service name=samba accept"
[root@master ~]# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.230.0/24 service name=samba-client accept"
[root@master ~]# firewall-cmd --reload
//下载服务
[root@master ~]# yum install samba -y
//编辑配置文件
[root@master ~]# vim /etc/samba/smb.conf
[global]
map to guest = Bad User
[shuai]
comment = this is shuai
path = /share/
browseable = yes
public = yes
writable = yes
guest ok = yes
创建共享目录:
[root@master ~]# mkdir /share
[root@master ~]# chmod 777 /share/
//加入开机自启动并重启服务
[root@master ~]# systemctl enable smb nmb
[root@master ~]# systemctl restart smb nmb
客户端
//查看共享了哪些目录
[root@slave ~]# smbclient -L 192.168.230.15 -U 'Bad User'
Enter SAMBA\Bad User's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
shuai Disk this is shuai
//创建挂载目录
[root@slave ~]# mkdir /smb
[root@slave ~]# mount -t cifs //192.168.230.15/shuai /smb -o username='Bad User'
[root@slave ~]# df -h
//192.168.230.15/shuai 17G 2.6G 15G 16% /smb
[root@slave ~]# cd /smb/
[root@slave smb]# touch haha
[root@slave smb]# ls
haha
服务端验证:
[root@master ~]# cd /share/
[root@master share]# ls
haha
配置用户认证访问
服务端
[root@master ~]# useradd cat
//为cat用户创建smb共享密码
[root@master ~]# smbpasswd -a cat
New SMB password:
Retype new SMB password:
Added user cat.
//编辑配置文件
[root@master ~]# vim /etc/samba/smb.conf
[global]
username map = /etc/samba/smbusers
[cat]
comment = this is cat
path = /cat
browseable = yes
guest ok = yes
writable = yes
write list = ceshi
public = yes
//假设这里映射cat用户为ceshi用户,那么就要在/etc/samba/smbusers(这个文件自己创建,取名随意)文件中添加如下内容:
[root@master ~]# echo 'cat = ceshi' > /etc/samba/smbusers
//创建共享目录
[root@master ~]# mkdir /cat
[root@master ~]# chown -R cat.cat /cat/
//加入开机自启动并重启服务
[root@master ~]# systemctl enable smb nmb
[root@master ~]# systemctl restart smb nmb
客户端
//查看共享了哪些目录
[root@slave ~]# smbclient -L 192.168.230.15 -U ceshi
Enter SAMBA\ceshi's password: (这里密码输入前面设置的cat密码)
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
cat Disk this is cat
//创建挂载目录
[root@slave ~]# mkdir /smb2
[root@slave ~]# mount -t cifs //192.168.230.15/cat /smb2/ -o username=ceshi,password=1
[root@slave ~]# df -h
//192.168.230.15/cat 17G 2.6G 15G 16% /smb2
[root@slave ~]# cd /smb2/
[root@slave smb2]# touch lala
[root@slave smb2]# ls
lala
服务端验证:
[root@master ~]# cd /cat/
[root@master cat]# ls
lala
Windows验证
RHCE题库中的Samba
题目:
配置:
第十三题
服务端:
[root@server30 ~]# yum install samba* -y
[root@server30 ~]# vim /etc/samba/smb.conf
workgroup = STAFF
[common]
path = /common
browseable = yes
[root@server30 ~]# mkdir /common
[root@server30 ~]# systemctl mask iptables.service ebtables.service
[root@server30 ~]# firewall-cmd --permanent --add-rich-rule "rule family=ipv4 source address=172.16.30.0/24 service name=samba accept"
success
[root@server30 ~]# firewall-cmd --permanent --add-rich-rule "rule family=ipv4 source address=172.16.30.0/24 service name=samba-client accept"
success
[root@server30 ~]# firewall-cmd --reload
success
[root@server30 ~]# useradd natasha
[root@server30 ~]# smbpasswd -a natasha
New SMB password: (tangkai)
Retype new SMB password:
Added user natasha.
[root@server30 ~]# setfacl -m u:natasha:r-x /common/
[root@server30 ~]# setsebool -P samba_enable_home_dirs on
[root@server30 ~]# vim /etc/samba/smb.conf
[root@server30 ~]# chcon -Rt samba_share_t /common/
[root@server30 ~]# systemctl enable smb nmb
[root@server30 ~]# systemctl restart smb nmb
客户端:
[root@desktop30 ~]# smbclient -L 172.16.30.130 -U natasha
[root@desktop30 ~]# mount -t cifs -o username=natasha,password=tangkai //172.16.30.130/common /mnt/
[root@desktop30 ~]# df -h
//172.16.30.130/common 4.9G 3.1G 1.9G 62% /mnt
[root@desktop30 mnt]# touch aaaa
touch: cannot touch ‘aaaa’: Permission denied
(因为natasha配置的是只读权限,所以不能写,不过后面的多用户挂载就可以解决这个问题了)
第十四题,多用户挂载:
服务端
[root@server30 ~]# mkdir /storage
[root@server30 ~]# chcon -Rt samba_share_t /storage/
[root@server30 ~]# vim /etc/samba/smb.conf
[share]
path = /storage
browseable = yes
[root@server30 ~]# useradd sarah
[root@server30 ~]# useradd kitty
[root@server30 ~]# smbpasswd -a sarah
New SMB password:
Retype new SMB password:
Added user sarah.
[root@server30 ~]# smbpasswd -a kitty
New SMB password:
Retype new SMB password:
Added user kitty.
[root@server30 ~]# setfacl -m u:sarah:r-x /storage/
[root@server30 ~]# setfacl -m u:kitty:rwx /storage/
[root@server30 ~]# vim /etc/samba/smb.conf
[common]
path = /common
browseable = yes
valid users = natasha
[share] (这个就是上面的share,现在多加了几行)
path = /storage
browseable = yes
valid users = sarah,kitty
writable = no
write list = kitty
[root@server30 ~]# systemctl restart smb nmb
客户端:
[root@desktop30 ~]# umount /mnt/
[root@desktop30 ~]# mkdir /mnt/dev
[root@desktop30 ~]# vim /etc/fstab
//172.16.30.130/share /mnt/dev cifs multiuser,username=sarah,password=tangkai,sec=ntlmssp 0 0
[root@desktop30 ~]# mount -a
[root@desktop30 ~]# df -h
//172.16.30.130/share 4.9G 3.1G 1.9G 62% /mnt/dev
[root@desktop30 ~]# cd /mnt/dev/
[root@desktop30 dev]# touch haha
touch: cannot touch ‘haha’: Permission denied
(sarah是只读,所以不能创建)
[root@desktop30 ~]# yum install cifs-utils -y
[root@desktop30 ~]# ls /home/ (这里只能用普通用户去验证,切换到student)
student
[root@desktop30 ~]# su - student
[student@desktop30 ~]$
[student@desktop30 ~]$ cifscreds add -u kitty 172.16.30.130
Password: (tangkai)
[student@desktop30 ~]$ df -h
//172.16.30.130/share 4.9G 3.1G 1.9G 62% /mnt/dev
[student@desktop30 ~]$ cd /mnt/dev/
[student@desktop30 dev]$ touch haha
[student@desktop30 dev]$ ls (现在就可以创建了,因为切换到了Kitty用户,而他有写权限)
haha
[student@desktop30 dev]$ ll
total 0
-rw-r--r--. 1 1003 1003 0 Jan 7 00:05 haha
去服务端验证这个id
[root@server30 ~]# id 1003
uid=1003(kitty) gid=1003(kitty) groups=1003(kitty)