samba文件共享
用 Internet 文件系统 (CIFS) 也称为服务器信是适用于MicrosoftWindows 服务器和客户端的标准文件和打印机共享系统信息块 (SMB)。
Samba 服务可用于将 Linux 文件系统作为 CIFS/SMB 网络文件共享进行共享 , 并将 Linux 打印机作为 CIFS/SMB 打印机共享进行共享。
实验要求:2台虚拟机
在进行实验之前先重置2台虚拟机
rht-vmctl reset desktop
rht-vmctl reset server
设置网卡IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
配置yum源
vim /etc/yum.repos.d/rhel_dvd.repo
修改主机名
desktop虚拟机改为client.example.com
hostnamectl set-hostname client.example.com
server虚拟机改为server.example.com
hostnamectl set-hostname server.example.com
一、samba服务
服务端:
安装samba服务
Samba-common – Samba 的支持文件
Samba-client – 客户端应用程序
Samba – 服务器应用程序
[root@server ~]# yum install samba samba-client.x86_64 samba-common -y
开启samba服务
[root@server ~]# systemctl start smb
关闭防火墙
[root@server ~]# systemctl stop firewalld
查看samba服务端口:445、139
[root@server ~]# netstat -antlupe | grep smb
客户端:
安装samba客户端服务
[root@client ~]# yum install samba-client -y
匿名访问服务端samba
[root@client ~]# smbclient -L //172.25.254.208 ##-L 列出所有
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
--------- -------
二、samba用户
如果您没有Samba密码服务器,则必须在本地计算机上创建身份验证数据。使用smbpasswd创建Samba账户和密码。
服务端:
建立用户(smb 用户必须是本地存在的用户)
建立student用户
[root@server ~]# id student ##查看用户是否存在
[root@server ~]# smbpasswd -a student ##设置客户端使用student用户登陆samba的密码
New SMB password: ##输入新建密码
Retype new SMB password: ##重复输入新密码
Added user student.
建立westos用户
[root@server ~]# useradd westos
[root@server ~]# smbpasswd -a westos
列出samba用户
[root@server ~]# pdbedit -L
student:1000:Student User
westos:1001:
删除student用户
[root@server ~]# pdbedit -x student
客户端:
使用student用户连接服务端samba查看所有samba信息
[root@client ~]# smbclient -L //172.25.254.208 -U student
Enter student's password: ##输入student用户密码
[root@client ~]# smbclient //172.25.254.208/student -U student
ls
NT_STATUS_ACCESS_DENIED listing \* ##由于服务端selinux的设置,默认情况访问拒绝
服务端:
查看samba的selinux设置
[root@server ~]# getsebool -a | grep samba
samba_enable_home_dirs --> off
将selinux的相关samba服务打开
[root@server ~]# setsebool -P samba_enable_home_dirs on ##布尔值允许本地 Linux 主目录作为 CIFS 文件共享导出至其他系统
客户端:
使用student用户连接服务端samba(可以查看)
[root@client ~]# smbclient //172.25.254.208/student -U student
smb: \> ls
三、samba客户端的使用
1、上传文件
客户端:
只有进到目录才能上传该目录的文件
[root@client ~]# cd /etc/
[root@client etc]# smbclient //172.25.254.208/student -U student
smb: \> !ls ##列出本地主机文件
smb: \> put passwd
不进到目录无法上传该目录文件
smb: \> put /bin/ls
NT_STATUS_OBJECT_PATH_NOT_FOUND opening remote file \/bin/ls
smb: \> quit
[root@client etc]# cd /bin
[root@client bin]# smbclient //172.25.254.208/student -U student
smb: \> put ls
服务端:
在用户目录查看客户端上传的文件
[root@server ~]# cd /home/student/
[root@server student]# ls
2、samba挂载
客户端:
挂载到/mnt
[root@client ~]# mount //172.25.254.208/student /mnt -o username=student,password=123
查看挂载
[root@client ~]# df
//172.25.254.208/student 10473900 3153352 7320548 31% /mnt
进到挂载目录中建立文件
[root@client ~]# cd /mnt
[root@client mnt]# touch file{1..3}
服务端:
在用户目录可以看到客户端在挂载目录建立的文件
[root@client ~]# cd /home/student
[root@server student]# ls
3、samba开机挂载
客户端:
取消挂载
[root@client mnt]# cd
[root@client ~]# umount /mnt
设置开机挂载
方法一(不推荐使用该方法,因为重启时必须还要开启服务端,否则客户端系统起不来):
编辑开机挂载文件
[root@client ~]# vim /etc/fstab
//172.25.254.208/student /mnt cifs defaults,username=student,password=123 0 0
重启查看是否挂载
[root@client ~]# reboot
[root@client ~]# df
方法二:
编辑开机挂载文件
[root@client ~]# vim /etc/rc.d/rc.local
mount //172.25.254.208/student /mnt -o username=student,password=123
给予文件权限
[root@client ~]# chmod +x /etc/rc.d/rc.local
重启查看是否挂载
[root@client ~]# reboot
四、修改samba工作组
服务端:
编辑samba配置文件、重启配置文件
[root@server student]# vim /etc/samba/smb.conf
89 workgroup = WESTOS ##修改工作组
[root@server student]# systemctl restart smb.service
客户端:
匿名连接客户端:
[root@client ~]# smbclient -L //172.25.254.208
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1] ##成功修改工作组
五、samba黑、白名单
1、黑名单
编辑samba配置文件
服务端:
[root@server student]# vim /etc/samba/smb.conf
98 hosts deny = 172.25.254.108 ##禁止108主机连接samba
[root@server student]# systemctl restart smb.service
108客户端:
无法连接
[root@client ~]# smbclient -L //172.25.254.208
Enter root's password:
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE ##无法连接
61客户端:
可以连接
[kiosk@foundation61 Desktop]$ smbclient -L //172.25.254.208
2、白名单
编辑samba配置文件
服务端:
[root@server student]# vim /etc/samba/smb.conf
98 hosts allow = 172.25.254.108 ##只允许108主机连接samba
[root@server student]# systemctl restart smb.service
108客户端:
可以连接
[root@client ~]# smbclient -L //172.25.254.208
61客户端:
无法连接
[kiosk@foundation61 Desktop]$ smbclient -L //172.25.254.208
Enter kiosk's password:
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
六、samba文件共享
1、共享自己建立的目录
服务端:
新建根目录
[root@server ~]# mkdir /westos
更改安全上下文
[root@server ~]# semanage fcontext -a -t samba_share_t '/westos(/.*)?'
samba_share_t ##smb 共享目录的 selinux 安全上下文
查看安全上下文
[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
[DIR]
comment = westos dir
path = /westos
[root@server ~]# systemctl restart smb.service
客户端:
[root@client ~]# smbclient //172.25.254.208/DIR -U student
smb: \> ls
2、共享系统目录
服务端:
建立文件
[root@server ~]# touch /mnt/file{1..3}
编辑主配置文件
[root@server ~]# vim /etc/samba/smb.conf
[mnt]
comment = /mnt dir
path = /mnt
[root@server ~]# systemctl restart smb.service
客户端:
[root@client ~]# smbclient //172.25.254.208/mnt -U student
smb: \> ls
服务端:
为了使客户端永久可见服务端建立的文件,需要更改布尔值:
[root@server ~]# setsebool -P samba_export_all_ro on ##共享系统目录时要打开
客户端:
[root@client ~]# smbclient //172.25.254.208/mnt -U student
smb: \> ls
七、samba主配置文件的参数
321 [DIR]
322 comment = westos dir
323 path = /westos
324 browseable = yes ##是否允许浏览
325 writable = yes ##是否可写
326 write list = @student ##指定哪个用户可写;@student表示指定student组可写
327 admin users = westos ##指定超级用户是westos。对于DIR这个共享,westos就是超级用户
实验:
[root@server ~]# vim /etc/samba/smb.conf
[root@server ~]# systemctl restart smb.service
1、是否允许浏览
服务端:
修改参数
[DIR]
browseable = yes|no ##是否允许浏览
客户端:
查看目录是否存在
[root@client ~]# smbclient -L //172.25.254.208/ -U student
2、是否可写
服务端:
修改参数
[DIR]
#browseable = yes
writable = yes ##可写
客户端:
挂载
[root@client ~]# mount //172.25.254.208/DIR /mnt -o username=student,password=123
无法建立文件:权限限制
touch /mnt/file
touch: cannot touch ‘file’: Permission denied
服务端:
给予权限
[root@server ~]# chmod 777 /westos/
客户端:
能够建立文件
[root@client mnt]# touch file1
参数改为no时不可以建立文件
3、指定student用户可写
服务端:
修改参数
[DIR]
#browseable = yes
#writable = yes
write list = student ##student用户可写
客户端:
student用户挂载(可写)
[root@client ~]# mount //172.25.254.208/DIR /mnt -o username=student,password=123
[root@client ~]# touch /mnt/file2
westos用户挂载(不可写)
[root@client ~]# mount //172.25.254.208/DIR /mnt -o username=westos,password=123
[root@client ~]# touch /mnt/file3
touch: cannot touch ‘/mnt/file3’: Permission denied
4、指定student组可写
服务端:
修改参数
[DIR]
#browseable = yes
#writable = yes
write list = student ##student用户可写
write list = @student ##指定student组可写
客户端:
将westos用户的组改为student
[root@server ~]# usermod -G student westos
[root@server ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos),1000(student)
服务端:
原本不可写的westos用户组改为student后可写
[root@client ~]# mount //172.25.254.208/DIR /mnt -o username=westos,password=123
[root@client ~]# touch /mnt/file3
5、指定westos用户为root用户
服务端:
修改参数
[DIR]
#browseable = yes
writable = yes
#write list = student
#write list = @student
admin users = westos ##对于DIR这个共享,指定超级用户是westos
客户端:
挂载
[root@client ~]# mount //172.25.254.208/DIR /mnt -o username=westos,password=123
touch /mnt/file4
查看文件信息
[root@client ~]# ll /mnt
-rw-r--r-- 1 root 1001 0 Jun 5 07:21 file4
八、samba多用户挂载
客户端:
安装服务
[root@client ~]# yum install cifs-utils.x86_64 -y
编辑加密文件
[root@client ~]# vim /root/smbpass
username=student
password=123
设置samba多用户挂载加密
[root@client ~]# mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.208/DIR /mnt
[root@client ~]# ls /mnt
file file1 file2 file4
使用其他用户登陆无法查看
[root@client ~]# useradd test
[root@client ~]# su - test
[test@client ~]$ ls /mnt
ls: cannot access /mnt: Permission denied
添加用户认证
[test@client ~]$ cifscreds add -u westos 172.25.254.208
[test@client ~]$ ls /mnt
file file1 file2 file4
九、匿名用户登陆与挂载
一般来说,匿名用户不能登陆。如何设置匿名用户登陆:
服务端:
编辑主配置文件:
[root@server ~]# vim /etc/samba/smb.conf
125 map to guest = bad user
329 guest ok = yes
[root@server ~]# systemctl restart smb.service
客户端:
匿名用户登陆
[test@client ~]$ smbclient //172.25.254.208/DIR
匿名用户免密挂载
[root@client mnt]# mount //172.25.254.208/DIR /mnt -o username=guest,password=""