一.Linux中NFS的配置
1、NFS的概念
(1)NFS是什么
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
(2)NFS的作用
<1>提供透明文件访问以及文件传输;
<2>容易扩充新的资源或软件,不需要改变现有的工作环境;
<3>高性能,可灵活配置。
2、在客户端挂载非本机目录
(1)在服务端的设置
命令 |
功能 |
yum repolist |
查看yum源是否配置正常 |
yum install nfs-utils -y |
下载nfs-utils软件 |
systemctl start nfs-server |
开启nfs-server服务 |
firewall-cmd --permanent --add-service=nfs |
开启防火墙的nfs功能,提供挂载的共享内容 |
firewall-cmd --permanent --add-service=mountd |
开启防火墙的mountd功能,客户端在查看服务端挂载的内容时,mountd会提供给客户端rpc.bind的位置 |
firewall-cmd --permanent --add-service=rpc.bind |
开启防火墙的rpc.bind功能,客户端在查看服务端挂载的内容时,rpc.bind会提供给客户端一个端口,使客户端找到nfs |
firewall-cmd --reload |
重启防火墙使修改立即生效 |
firewall-cmd --list-all |
查看功能是否添加 |
vim /etc/exports |
修改该文件,添加挂载共享的内容 |
/mnt *(async) |
共享/mnt目录,*(async)为内存同步到硬盘 |
exportfs -rv |
重读配置文件,使修改立即生效 |
touch /mnt/file{1…3} |
在/mnt中建立file1-3 |
(2)在客户端的设置
命令 |
功能 |
yum repolist |
查看yum源是否配置正常 |
yum install nfs-utils -y |
下载nfs-utils软件 |
systemctl start nfs-server |
开启nfs-server服务 |
showmount -e xxx.xxx.xxx.xxx(服务端的IP) |
查看客户端共享的内容 |
mount xxx.xxx.xxx.xxx(服务端的IP):/mnt /mnt |
将客户端共享的/mnt目录挂载到自己的/mnt上 |
ls /mnt |
查看可否看到file1-3 |

3、如何在闲置时自动卸载、进入使用时自动挂载客户端提供的共享目录
(1)在客户端设置,设置可自动挂载、卸载
命令 |
功能 |
yum install autofs.x86_64 -y |
下载autofs软件 |
rpm -qc autofs |
查看autofs的配置文件 |
systemctl stop autofs.service |
关闭autofs服务 |
cd /net |
进入到/net中,此时找不到该目录 |
systemctl start autofs.service |
开启autofs服务 |
cd /net |
进入到/net中,此时可进入,该目录不是真实目录,autofs服务关闭后将消失 |
cd xxx.xxx.xxx.xxx(服务端的IP)/mnt |
进入到服务端共享的共享目录中 |
ls |
查看是否可查看到file1-3 |
df |
查看现在的挂载情况 |
vim /etc/sysconfig/autofs |
修改配置文件,修改共享目录闲置时自动卸载的等待时间为2秒,修改完成后退出保存 |
systemctl restart autofs.service |
重启autofs服务 |
df |
查看现在的挂载情况,此时共享目录挂载 |
cd |
退出共享目录,使共享目录闲置,等待2s以上 |
df |
再次查看挂载情况,此时共享目录已自动卸载 |
(2)在客户端设置,设置挂载到指定的目录下
命令 |
功能 |
vim /etc/auto.master(autofs的主策略文件) |
修改autofs的主策略文件 |
/mnt /etc/auto.mnt |
指定想要自动挂载共享目录的目录的上级目录,并指定自动挂载的策略文件为/etc/auto.mnt,此时自动挂载的目录地址可以不存在,挂载时将自动建立 |
vim /etc/auto.mnt |
修改自动挂载的策略文件为/etc/auto.mnt |
pub -ro xxx.xxx.xxx.xxx(服务端的IP):/mnt |
意为将服务端共享的/mnt目录以可读的方式挂载到/mnt下的pub目录上 |
systemctl restart autofs |
重启autofs服务 |
cd /mnt/pub |
进入到自动挂载共享目录的目录中 |
ls |
查看是否能看到file1-3 |
df |
查看是否自动挂载到该目录 |
cd |
退出自动挂载共享目录的目录,等待2s以上 |
df |
再次查看挂载情况,此时共享目录已自动卸载 |

4、配置客户端可在共享目录中使用的权限
(1)配置客户端可读写共享目录权限
注:
async权限:
同步客户端内存中存在了的内容到服务端的硬盘,若客户端取消操作,则内容没有保存在客户端内存,即服务端的硬盘中也没有。
sync权限:
实时同步内容到服务端的硬盘,即使客户端取消操作,服务端的硬盘中也会记录过程。
服务端配置
命令 |
功能 |
systemctl start nfs-server |
开启nfs-server服务 |
vim /etc/exports |
修改该配置文件,将读写权限(rw)加入 |
/mnt *(async,rw) |
加入rw权限 |
ls -ld /mnt |
查看挂载的共享目录的权限 |
chmod 777 /mnt |
将共享目录的权限设定为777 |
ls -ld /mnt |
再次查看共享目录的权限,确定设定成功 |
exportfs -rv |
重读exports文件使修改立即生效 |
客户端配置
命令 |
功能 |
systemctl start nfs-server |
开启nfs-server服务 |
systemctl start autofs |
开启autofs服务 |
vim /etc/auto.mnt |
修改auto.mnt配置文件,将自动挂载时的权限改为读写权限(rw)挂载 |
systemctl restart autofs |
重启autofs服务 |
cd /mnt/pub |
进入到/mnt/pub中,共享目录自动挂载 |
df |
查看是否挂载,此时成功挂载 |
touch file111 |
建立测试文件,名为file111 |
在服务端测试
命令 |
功能 |
ls -l /mnt |
查看共享目录/mnt中的内容及属性,file111文件可被查看,此时file111的所有人为nfsnobody,所有组为nfsnobody |
(2)配置客户端root用户上传文件时,root用户不切换身份
服务端配置
命令 |
功能 |
vim /etc/exports |
修改该文件 |
/mnt *(async,rw,no_root_squash) |
no_root_squash 为不切换root身份 |
exportfs -rv |
重读文件 |
客户端配置
命令 |
功能 |
touch file222 |
建立测试文件file222 |
在服务端测试
命令 |
功能 |
ls -l /mnt |
查看file222的用户身份是否为root |
(3)配置客户端用户上传文件时,指定上传的用户身份
服务端配置
命令 |
功能 |
vim /etc/exports |
修改该文件 |
/mnt *(async,rw,anonuid=1000,anongid=1000) |
指定用户身份为uid=1000,gid=1000的用户(student用户) |
exportfs -rv |
重读文件 |
客户端配置
命令 |
功能 |
touch file333 |
建立测试文件file333 |
在服务端测试
命令 |
功能 |
ls -l /mnt |
查看file333的用户身份是否为student |
(4)配置不同客户端使用共享目录时使用不同的权限
服务端配置
命令 |
功能 |
vim /etc/exports |
修改该文件 |
/mnt *(ro) xxx.xxx.xxx.xxx(指定客户端IP)(async,rw,anonuid=1000,anongid=1000) |
配置所有人有只读权限,指定客户端有async,rw,anonuid=1000,anongid=1000权限 |
exportfs -rv |
重读文件 |
在指定客户端配置
命令 |
功能 |
touch file444 |
建立测试文件file444 |
在其他客户端配置
命令 |
功能 |
touch file555 |
建立测试文件file555 |
在服务端测试
命令 |
功能 |
ls -l /mnt |
查看权限是否如设定相同 |

二.Samba的配置
1、实现Linux和Windows系统之间共享目录
(1)在服务端配置
命令 |
功能 |
yum install samba samba-common samba-client -y |
下载samba的系列软件 |
systemctl start smb |
开启samba服务 |
systemctl stop firewalld |
关闭防火墙 |
hostname |
查看hostname |
vim /etc/hosts |
修改该文件 |
xxx.xxx.xxx.xxx(服务端IP) hostname1(服务端) |
添加 |
xxx.xxx.xxx.xxx(客户端IP) hostname2(客户端) |
添加 |
id student |
查看student用户信息(student存在) |
id 123 |
查看123用户信息(此时123用户不存在) |
smbpasswd -a student |
添加student用户入samba用户 |
smbpasswd -a 123 |
添加123用户入samba用户 |
pdbedit -L |
查看现有的samba用户,无123(因为123不存在) |
useradd 123 |
建立123用户 |
smbpasswd -a 123 |
再次加入 |
pdbedit -L |
添加samba用户成功 |
pdbedit -x student |
删除samba用户student |
pdbedit -L |
查看是否删除 |
(2)在客户端配置
命令 |
功能 |
yum install samba-client -y |
下载samba客户端 |
hostname |
查看hostname |
vim /etc/hosts |
修改该文件 |
xxx.xxx.xxx.xxx(服务端IP) hostname1(服务端) |
添加 |
xxx.xxx.xxx.xxx(客户端IP) hostname2(客户端) |
添加 |
(3)在客户端测试
命令 |
功能 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) |
测试匿名用户是否能登入samba |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) -U 123 |
测试123用户是否能登入samba |

2、samba中如何在闲置时自动卸载、进入使用时自动挂载客户端提供的共享目录(autofs)
(1)在客户端配置
命令 |
功能 |
mkdir /samba |
建立目录 |
vim /etc/auto.master |
修改auto的主策略文件 |
/samba /etc/auto.samba |
添加想要挂载共享目录的上级目录/samba,并指定子策略文件地址为/etc/auto.samba |
vim /etc/auto.samba |
修改子策略文件 |
123 -fstype=cifs,username=123,password=123 ????/172.25.254.154/123 |
设定资策略文件 |
systemctl restart autofs |
设定完成后重启服务 |
(2)在客户端测试
命令 |
功能 |
cd /samba/123 |
进入该地址 |
ls |
查看是否有内容 |
touch file |
建立文件 |
ls |
查看是否建立成功 |
(3)在服务端测试
命令 |
功能 |
ls /home/123 |
在服务端查看是否建立成功 |

3、samba中客户端权限及查看的共享内容的配置
(1)配置共享内容的名称
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该配置文件 |
workgroup = YEAH |
将共享内容的名称改为YEAH |
systemctl restart smb |
完成后重启服务 |
客户端测试
命令 |
功能 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) |
查看共享内容的名称是否为YEAH |
(2)配置客户端登陆的黑白名单
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该配置文件 |
hosts deny = xxx.xxx.xxx.xxx(指定IP) |
客户端登录黑名单 |
hosts allow = xxx.xxx.xxx.xxx(指定IP) |
客户端登录白名单 |
systemctl restart smb |
重启服务 |
客户端测试
命令 |
功能 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) |
尝试是否能登录 |
(3)配置客户端登陆后查看的共享内容
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
[test] |
共享目录名称 |
comment = test share |
对该共享目录的描述 |
path = /test |
访问该共享目录时,访问的真实路径为/test |
systemctl restart smb |
重启服务 |
客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) |
匿名用户是否可以登录(此时不能) |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) |
samba用户查看 |
put file(该file必须存在于登陆时客户端所在目录) |
查看是否能上传文件(此时不能) |
(4)配置客户端登陆后匿名用户也可查看共享内容
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
map to guest = bad user |
设定guest的意思为bad user |
[test]
comment = test share |
path = /test |
guest ok = yes |符合guest的拥有登录权限
systemctl restart smb |重启服务
客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) |
匿名用户是否可以登录(此时可以) |

(5)配置客户端登陆后可写权限(所有用户)
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
map to guest = bad user |
|
[test] |
|
comment = test share |
|
path = /test |
|
guest ok = yes |
|
writable = yes |
登录后是否可写 |
systemctl restart smb |
重启服务 |
客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) |
匿名用户登录 |
put file(该file必须存在于登陆时客户端所在目录) |
匿名用户是否可写(此时可写) |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) |
samba用户登录 |
put file(该file必须存在于登陆时客户端所在目录) |
samba用户是否可写(此时可写) |
(6)配置客户端登陆后指定用户或指定组的所属用户可写权限
服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
map to guest = bad user |
|
[test] |
|
comment = test share |
|
path = /test |
|
guest ok = yes |
|
write list = 123/+123 |
在名单内的用户可写,123为指定用户,+123为123组下的所有用户 |
systemctl restart smb |
重启服务 |
客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) |
匿名用户登录 |
put file(该file必须存在于登陆时客户端所在目录) |
查看是否可写(不可) |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) |
123用户登录 |
put file(该file必须存在于登陆时客户端所在目录) |
查看是否可写(可) |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 456(该用户所属组为123组) |
属于123组的用户登录 |
put file(该file必须存在于登陆时客户端所在目录) |
查看是否可写(若此时为“+123”时,可写,为“123”时,不可写) |
(7)配置指定用户或指定组的所属用户可以挂载服务端的共享内容
服务端测试
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
map to guest = bad user |
|
[test] |
|
comment = test share |
|
path = /test |
|
guest ok = yes |
|
valid user = 123/+123 |
指定用户/组下的所有用户可登录 |
systemctl restart smb |
重启服务 |
客户端测试
命令 |
功能 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) |
匿名用户不可登录 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) |
123用户可登录 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test -U 456(该用户所属组为123组) |
为“123”时,该用户不可登录,为“+123”时,该用户可登录 |
(8)配置客户端登陆时是否可查看到设置的共享内容
服务端测试
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
[test] |
|
comment = test share |
|
path = /test |
|
browseable = yes |
登录时是否可以查看到设置的该共享内容(test),此时可 |
systemctl restart smb |
|
客户端测试
命令 |
功能 |
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) |
查看是否能看到test |

3、selinux开启后,对samba的影响及如何解除影响
(1)安全上下文影响查看,如何消除
在服务端配置
命令 |
功能 |
vim /etc/selinux/config |
修改该文件,将selinux设置为强制模式 |
reboot |
重启系统 |
getenforce |
查看是否为强制模式 |
systemctl start smb |
开启samba服务 |
systemctl stop firewalld |
关闭防火墙 |
ls -Zd /test |
查看/test的安全上下文 |
semanage fcpmtext -a -t samba_share_t ‘/test(/.*)?’ |
修改为samba的默认的安全上下文 |
restorecon -RvvF /test |
刷新 |
ls -Zd /test |
查看是否修改成功 |
在客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123 |
查看是否能看到test |
ls |
查看是否有内容 |
(2)若不能改变目录的安全上下文,如何消除查看影响
在服务端配置
命令 |
功能 |
getsebool -a |
grep samba |
setsebool -P samba_export_all_ro on |
开启该bool,samba有关的文件安全上下午将不受selinux限制 |
getsebool -a |
grep samba |
在客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/123 -U 123 |
尝试是否能看到内容 |
ls |
查看内容 |
(3)若想在客户端在用户家目录操作,如何开启权限
在服务端配置
命令 |
功能 |
getsebool -a |
grep samba |
setsebool -P samba_enable_home_dirs on |
开启该bool,客户端可在家目录操作 |
getsebool -a |
grep samba |
在客户端测试
命令 |
功能 |
smbclient //xxx.xxx.xxx.xxx(服务端IP)/123 -U 123 |
尝试是否能看到内容 |
put file(该file必须存在于登陆时客户端所在目录) |
查看是否能操作 |

4、如何配置非samba用户通过持有的samba帐号登陆
(1)在服务端配置
命令 |
功能 |
vim /etc/samba/smb.conf |
修改该文件 |
[test] |
|
comment = test share |
|
path = /mnt |
修改真实访问地址为/mnt |
writable = yes |
|
browseable = yes |
|
systemctl restart smb |
重启服务 |
getsebool -P samba_export_all_rw on |
修改bool |
getsebool -a |
grep samba |
(2)在客户端配置
命令 |
功能 |
yum install cifs-utils -y |
安装该软件 |
rpm -ql cifs-utils.x86_64 0:6.2-6.el7 |
查看 |
man mount.cifs |
man查看如何配置 |
vim /root/smbpassfile |
修改/root/smbpassfile文件 |
chmod 600 /root/smbpassfile |
修改文件权限,使文件更安全 |
ls -l /root/smbpassfile |
查看是否修改成功 |
mount -o credentials=/root/smbpassfile,sec=ntlmssp,multiuser //xxx.xxx.xxx.xxx(服务端IP)/test /mnt |
当本机的非samba用户登录时,使用/root/smbpassfile文件中的身份认证挂载 |
df |
查看是否能挂载 |
useradd no |
建立非samba用户no |
passwd no |
赋予密码 |
su - no |
切换到no用户 |
cd /mnt/test |
查看是否能进入 |
ls |
查看是否能看到挂载的内容 |
touch test2 |
建立问题test2 |
(3)在服务端查看
命令 |
功能 |
ls -l /mnt |
查看test2文件的所有人和所有组是否为/root/smbpassfile文件中设定的samba用户身份,此时应为是 |