Samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,有服务端和客户端程序构成。随着Linux的普及,如何共享Linux下的文件成为用户关心的问题。其实,几乎所有的Linux发行套件都提供了一个很好的工具Samba——通过它可以轻松实现文件共享
一、SMB文件共享
通用lnternet文件系统(CIFS)也称为服务器信息块(SMB),是适用于MicrosoftWindows服务器和客户端的标准文件和打印机共享系统。
Samba服务可用于将Linux文件系统作为CIFS/SMB网络文件共享进行共享,并将Linux打印机作为CIFS/SMB打印机共享进行共享。
[root@server ~]# ——服务端
[root@client ~]# ——客户端
1、安装以及启动服务
[root@server ~]# yum install samba samba-client samba-common -y
[root@server ~]# systemctl start smb
[root@server ~]# systemctl enable smb.service
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
samba —— 服务器应用程序
samba-client —— 客户端应用程序
samba-common —— Samba的支持文件
测试
客户端进行测试,匿名登陆
因为在服务端未设置,所以不用输入密码,直接回车,登陆成功
[root@client ~]# yum install samba-client -y
[root@client ~]# smbclient -L //172.25.254.227
Enter root's password:
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server Version 4.1.1)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@client ~]#
2、添加smb用户
smb用户必须是本地用户!!!
添加用户student、tutu
[root@server ~]# smbpasswd -a student
New SMB password:
Retype new SMB password:
Added user student.
[root@server ~]# useradd tutu
[root@server ~]# smbpasswd -a tutu
New SMB password:
Retype new SMB password:
Added user tutu.
[root@server ~]# pdbedit -L
student:1000:Student User
tutu:1001:
[root@server ~]#
smbpasswd 常用参数
-a username: 添加用户为samba用户
-d username:禁用samba用户username
-e username: 启用samba用户username
-x username: 删除samba用户username
可以用 smbpasswd 添加 smb 用户
还可以用 pdbedit 添加 smb 用户
pdbedit 常用参数
–a username:新建Samba账户。
–x username:删除Samba账户。
–L:列出Samba用户列表,读取passdb.tdb数据库文件。
–Lv:列出Samba用户列表的详细信息。
–c “[D]” –u username:暂停该Samba用户的账号。
–c “[]” –u username:恢复该Samba用户的账号。
测试
输入密码导致的错误
服务端samba_enable_home_dirs布尔值的影响
smbclient(选项)(参数)
-L:显示服务器端所分享出来的所有资源
-U<用户名称>:指定用户名称
- samba_enable_home_dirs
布尔值允许本地Linux主目录作为CIFS文件共享导出至其他系统
测试
3、文件的上传
只能上传当前所在目录下的文件
上传的文件在服务端的 student 用户的家目录
- 上传 /etc/passwd 成功,上传 /bin/ls 失败
- 转到目录 /bin ,上传 /bin/ls 成功
注意:这种登陆方式登陆,不能执行新建文件、目录等!!!
看看上传的文件(服务端)
4、挂载CIFS共享(客户端)
- 手动挂载
- 开机自动挂载
[root@client ~]# vim /etc/rc.d/rc.local
[root@client ~]# cat /etc/rc.d/rc.local | tail -n 1
mount //172.25.254.227/student /mnt -o username=student,password=123
[root@client ~]# chmod +x /etc/rc.d/rc.local
[root@client ~]# reboot
5、域名的更改
[root@server ~]# vim /etc/samba/smb.conf
89 workgroup = MYGROUP ---> workgroup = WESTOS ##修改第89行,更改域名为WESTOS
[root@server ~]# systemctl restart smb.service
6、smb服务的黒白名单
- 白名单
只允许 172.25.254.127 主机登陆
[root@server ~]# vim /etc/samba/smb.conf ##添加第98行内容
[root@server ~]# cat /etc/samba/smb.conf | head -n 98 | tail -n 1
hosts allow = 172.25.254.127
[root@server ~]# systemctl restart smb.service
测试
172.25.254.127
172.25.254.50
黑名单
仅不允许 172.25.254.127 主机登陆
[root@server student]# vim /etc/samba/smb.conf ##修改第98行内容
[root@server ~]# cat /etc/samba/smb.conf | head -n 98 | tail -n 1
hosts deny = 172.25.254.127
[root@server student]# systemctl restart smb
测试
172.25.254.127
- 172.25.254.50
7、共享目录的基本设定
- 非系统目录的共享
[root@server ~]# mkdir /westos
[root@server ~]# semanage fcontext -a -t samba_share_t '/westos(/.*)?'
[root@server ~]# semanage fcontext -l | grep /westos
/westos(/.*)? all files system_u:object_r:samba_share_t:s0
[root@server ~]# restorecon -FvvR /westos/
restorecon reset /westos context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
[root@server ~]# vim /etc/samba/smb.conf
[root@server ~]# cat /etc/samba/smb.conf | tail -n 3 ##添加的内容
[DIR] ##共享名称
comment = westos dir ##对共享目录的描述
path = /westos ##共享目录的绝对路径
[root@server ~]# cat /etc/samba/smb.conf | head -n 98 | tail -n 1 ##修改的内容
hosts allow = 172.25.254.127/24
[root@server ~]# touch /westos/file
[root@server ~]# ls /westos/
file
[root@server ~]# systemctl restart smb.service
测试
- 系统目录的共享
[root@server ~]# vim /etc/samba/smb.conf ##添加后三行内容
[root@server ~]# cat /etc/samba/smb.conf | tail -n 3
[mnt] ##共享名称
comment = /mnt dir ##对共享目录的描述
path = /mnt ##共享目录的绝对路径
[root@server ~]# systemctl restart smb
测试
测试
布尔值对于系统共享目录的影响
[root@server ~]# touch /mnt/file1
[root@server ~]# ls /mnt/
file1
[root@server ~]# getenforce
Enforcing
[root@server ~]# setenforce 0
[root@server ~]# setenforce 1
[root@server ~]# setsebool -P samba_export_all_ro on
8、配置文件的参数
- browseable = no | yes ——更改此参数,不用重启服务
no ——将该共享目录设置为隐藏
yes——将该共享目录设置为显示
[root@server ~]# vim /etc/samba/smb.conf ##添加内容
[root@server ~]# cat /etc/samba/smb.conf | head -n 324 | tail -n 1
browseable = no ##设置目录DIR隐藏
[root@server ~]#
测试
[root@server ~]# vim /etc/samba/smb.conf ##修改内容
[root@server ~]# cat /etc/samba/smb.conf | head -n 324 | tail -n 1
browseable = yes
[root@server ~]#
测试
writable = yes|no ——更改此参数,需要重启服务
no | yes —— 设置用户是否可写(所有用户)
[root@server ~]# vim /etc/samba/smb.conf ##添加内容
[root@server ~]# cat /etc/samba/smb.conf | head -n 325 | tail -n 1
writable = yes
[root@server ~]# systemctl restart smb.service
测试
写操作失败,是因为目录/westos本身不可写
[root@server ~]# ll -ld /westos/
drwxr-xr-x. 2 root root 17 Jun 4 06:27 /westos/
[root@server ~]# chmod 777 /westos/
[root@server ~]# ll -ld /westos/
drwxrwxrwx. 2 root root 17 Jun 4 06:27 /westos/
[root@server ~]#
测试
当/westos本身可写后,写操作执行成功
write list = student ——更改此参数,需要重启服务
允许用户 student 进行写操作(相当于白名单)
[root@server ~]# vim /etc/samba/smb.conf ##注释掉第325行,添加第326行
[root@server ~]# cat /etc/samba/smb.conf | head -n 326 | tail -n 2
# writable = yes
write list = student
[root@server ~]# systemctl restart smb.service
测试
write list = @student ——更改此参数,需要重启服务
只允许属于 student 组的用户进行写操作
[root@server ~]# vim /etc/samba/smb.conf
[root@server ~]# cat /etc/samba/smb.conf | head -n 326 | tail -n 2
# writable = yes
write list = @student
[root@server ~]# systemctl restart smb.service
[root@server ~]# id tutu
uid=1001(tutu) gid=1001(tutu) groups=1001(tutu)
测试
[root@server ~]# usermod -G student tutu
##给用户 tutu 添加 附加组 student
[root@server ~]# id tutu
uid=1001(tutu) gid=1001(tutu) groups=1001(tutu),1000(student)
[root@server ~]#
测试
admin users = 用户名 ——更改此参数,需要重启服务
共享的超级用户指定
[root@server ~]# id tutu
uid=1001(tutu) gid=1001(tutu) groups=1001(tutu),1000(student)
[root@server ~]# ls -ld /westos/
drwxrwxrwx. 2 root root 30 Jun 4 08:18 /westos/
[root@server ~]# ll /westos/
total 0
-rw-r--r--. 1 student student 0 Jun 4 08:03 file1
-rw-r--r--. 1 tutu tutu 0 Jun 4 08:18 file2
[root@server ~]# vim /etc/samba/smb.conf
[root@server ~]# cat /etc/samba/smb.conf | head -n 327 | tail -n 3
writable = yes
# write list = @student
admin users = tutu
[root@server ~]# systemctl restart smb.service
测试
9、多用户挂载
不同用户创建的文件、目录等,所有的用户都可以看
这是不合理的,下面的操作就是消除这种不合理
即设置多用户挂载,挂载是需要 smb 认证
[root@client ~]# yum install cifs-utils -y
[root@client ~]# vim /root/smbpass
[root@client ~]# cat /root/smbpass
username=student
password=123
[root@client ~]# mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.227/DIR /mnt/
##credentials=/root/smbpass 指定挂载时所用到的用户文件
##multiuser 支持多用户认证
##sec=ntlmssp 认证方式为标准smb认证方式(注意版本不同的认证)
## The default in mainline kernel versions prior to v3.8 was sec=ntlm. Inv3.8, the default was changed to sec=ntlmssp.
[root@client ~]# ls /mnt/
file1 file2 file3
[root@client ~]# useradd test
[root@client ~]# su - test
[test@client ~]$ ls /mnt
ls: cannot access /mnt: Permission denied
####没有smb认证,无法进行共享
[test@client ~]$ cifscreds add -u tutu 172.25.254.227
Password: ##smb用户tutu的密码,输入错误的密码
[test@client ~]$ ls /mnt
ls: cannot access /mnt: Permission denied ##仍然没有权限
[test@client ~]$ cifscreds add -u tutu 172.25.254.227 ##再次认证失败
You already have stashed credentials for 172.25.254.227 (172.25.254.227)
If you want to update them use:
cifscreds update
[test@client ~]$ cifscreds clearall ##清除认证
[test@client ~]$ cifscreds add -u tutu 172.25.254.227
Password: ##smb用户tutu的密码,输入正确密码
[test@client ~]$ ls /mnt
file1 file2 file3
[test@client ~]$ touch /mnt/file4 ##创建的文件file4属于root用户,因为用户tutu被指定为共享的超级用户
[test@client ~]$ ll /mnt/
total 0
-rw-r--r-- 1 student student 0 Jun 4 08:03 file1
-rw-r--r-- 1 admin admin 0 Jun 4 08:18 file2
-rw-r--r-- 1 root admin 0 Jun 4 08:30 file3
-rw-r--r-- 1 root admin 0 Jun 4 08:57 file4
[test@client ~]$ logout
[root@client ~]# umount /mnt/
10、匿名用户对于共享目录的登陆与访问
测试
[root@server ~]# vim /etc/samba/smb.conf ##添加第125、328行
[root@server ~]# cat /etc/samba/smb.conf | head -n 125 | tail -n 1
map to guest = bad user
[root@server ~]# cat /etc/samba/smb.conf | head -n 328 | tail -n 1
guest ok = yes
[root@server ~]# systemctl restart smb.service
测试
[root@client ~]# mount //172.25.254.227/DIR /mnt/ -o username=guest
Password for guest@//172.25.254.227/DIR: ##任意输入
这两条命令在效果上等价
[root@client ~]# mount //172.25.254.227/DIR /mnt/ -o username=guest,password=""