首页 > 代码库 > nfs
nfs
nfs
一 概念
网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。
二 firewalld的设定
在防火墙开启的情况下,要想访问nfs则firewalld要添加以下策略:
1 firewall-cmd --permanent --add-service=nfs###允许nfs###
2 firewall-cmd --reload
3 firewall-cmd --permanent --add-service=rpc-bind###nfs的访问端口不确定,是由rpc-bind分配端口###
4 firewall-cmd --reload
5 firewall-cmd --permanent --add-service=mountd###允许挂载###
6 firewall-cmd --reload
7 systemctl start nfs
过程如下:
[root@localhost ~]# firewall-cmd --permanent --add-service=nfs###允许nfs###
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --permanent --add-service=rpc-bind###nfs的访问端口不确定,是由rpc-bind分配端口###
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --permanent --add-service=mountd###允许挂载###
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# systemctl start nfs
测试:
[kiosk@foundation12 Desktop]$ showmount -e 172.25.254.112###显示指定nfs服务器中的共享目录列表,若只是showmount-e 则显示当前主机中nfs服务器的输出列表###
Export list for 172.25.254.112:
[kiosk@foundation12 Desktop]$
三 共享目录
1)共享给所有人
nfsf服务端:
mkdir /public###建立共享目录###
touch /public/westostest{1..3}
vim /etc/exports
内容:
/public*(sync)###public共享给所有人并且数据同步(ro)是只读###
共享目录共享方式
exportfs -rv###读取/etc/exports为文件中的设置并生效###
测试:
客户端:
showmount -e 172.25.12.11
mount 172.25.12.11:/public /mnt/###将共享目录挂载到/mnt下###
过程如下:
服务端:
[root@server ~]# vim /etc/exports
[root@server ~]# exportfs -rv
exporting 172.25.12.0/24:/public
客户端:
[root@desktop12 ~]# showmount -e 172.25.12.11
Export list for 172.25.12.11:
/public *
[root@desktop12 ~]# mount 172.25.12.11:/public /mnt/###挂载###
[root@desktop12 ~]# cd /mnt/
[root@desktop12 mnt]# ls
westostest westostest1 westostest2 westostest3
[root@desktop12 mnt]# touch file
touch: cannot touch ‘file’: Read-only file system
2)共享给某个主机(例:172.25.12.10)
nfs服务端:
vim /etc/exports
内容:
/public172.25.12.10(sync)###public共享给主机172.25.12.10并且数据同步###
共享目录共享方式
exportfs -rv###生效###
测试:
服务端(172.25.12.10):
3)共享给某个网段(例:172.25.78.0/24)
nfs服务端:
1 vim /etc/exports
内容:
/public 172.25.78.0/24(sync)###public共享给在该网段的所有主机并且数据同步###
2 exportfs -rv
测试:
客户端:
[root@foundation78 Desktop]# mount 172.25.78.11:/public /mnt/
[root@foundation78 Desktop]# cd /mnt/
[root@foundation78 mnt]# ls
westostest1 westostest2 westostest3
3)共享给某个域
nfs服务端:
1 vim /etc/exports
内容:
/public *.example.com(sync)###public共享给在该域的所有主机并且数据同步###
2 exportfs -rv
测试:
showmount -e 172.25.78.11
过程如下:
nfs服务端:
[root@server ~]# vim /etc/exports
[root@server ~]# exportfs -rv
exporting *.example.com:/public
[root@server ~]#
测试:
[kiosk@foundation78 Desktop]$ showmount -e 172.25.78.11
Export list for 172.25.78.11:
/public *.example.com
[kiosk@foundation78 Desktop]$ rht-vmctl view desktop
[kiosk@foundation78 Desktop]$
4)允许共享给多主机
nfs服务端:
1 vim /etc/exports
内容:
/public 172.25.78.10(sync) 172.25.78.250(rw,sync)###共享给10主机和12主机,并且允许12主机进行写操作###
2 exportfs -rv
3 chmod 777 /public###当访问共享目录时,用户的超级身份发生了改变,对该目录来说,是other,所以要将该目录修改权限为777###
注意:NFS服务器将NFS客户端上的root视为用户nfsnobody。即,如果root尝试访问挂载的
导出中的文件,服务器会将其视作用户nfsnobody访问
过程如下:
nfs服务端:
[root@server ~]# vim /etc/exports
[root@server ~]# ls -ld /public/###该目录只有超级用户可写###
drwxr-xr-x. 2 root root 63 Jun 6 23:27 /public/
[root@server ~]# chmod 777 /public/###修改权限,使得其他人可写###
[root@server ~]# exportfs -rv
exporting 172.25.78.11:/public
exporting 172.25.78.250:/public
测试:
172.25.78.10主机:(不能对共享目录进行写操作)
[root@desktop ~]# mount 172.25.78.11:/public /mnt/
[root@desktop ~]# cd /mnt/
[root@desktop mnt]# ls
westoslinux1 westoslinux2 westoslinux3
[root@desktop mnt]# rm -fr *
rm: cannot remove ‘westoslinux1’: Read-only file system###只具有读权限#
rm: cannot remove ‘westoslinux2’: Read-only file system
rm: cannot remove ‘westoslinux3’: Read-only file system
172.25.78.250主机:(具有读写权限)
[root@foundation78 Desktop]# mount 172.25.78.11:/public /mnt/
[root@foundation78 Desktop]# cd /mnt/
[root@foundation78 mnt]# ls
westoslinux1 westoslinux2 westoslinux3
[root@foundation78 mnt]# touch file1
[root@foundation78 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 6 23:31 file1###超级用户发生了改变###
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux1
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux2
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux3
[root@foundation78 mnt]#
5)当客户端使用超级用户挂载,不转换超级用户
nfs服务端:
1 vim /etc/exports
内容:
/public 172.25.78.250(rw,sync,no_root_squash) ###共享给和12主机,并且允许12主机进行写操作且不转换超级用户###
2 exportfs -rv
过程如下:
nfs服务端:
[root@server ~]# vim /etc/exports
[root@server ~]# exportfs -rv
exporting 172.25.78.250:/public
测试:
[root@foundation78 ~]# mount 172.25.78.11:/public /mnt/
[root@foundation78 ~]# cd /mnt/
[root@foundation78 mnt]# ls
file1 westoslinux1 westoslinux2 westoslinux3
[root@foundation78 mnt]# touch file2
[root@foundation78 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 6 23:31 file1
-rw-r--r--. 1 root root 0 Jun 6 23:44 file2###超级用户没有改变###
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux1
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux2
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux3
[root@foundation78 mnt]#
5)指定访问时的超级用户
nfs服务端:
1 vim /etc/exports
内容:
/public 172.25.78.250(rw,sync,anonuid=1001,anongid=1001) ###anonuid=1001,anongid=1001,指定用户的uid和gid###
2 exportfs -rv
过程如下:
nfs服务端:
[root@server ~]# useradd westos
[root@server ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@server ~]# vim /etc/exports
[root@server ~]# exportfs -rv
exporting 172.25.78.250:/public
[root@server ~]#
测试:
[root@foundation78 ~]# mount 172.25.78.11:/public /mnt/
[root@foundation78 ~]# cd /mnt/
[root@foundation78 mnt]# ls
file1 file2 westoslinux1 westoslinux2 westoslinux3
[root@foundation78 mnt]# touch file3
[root@foundation78 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 6 23:31 file1
-rw-r--r--. 1 root root 0 Jun 6 23:44 file2
-rw-r--r--. 1 1001 1001 0 Jun 6 23:51 file3###用户和组均为指定的uid和gid###
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux1
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux2
-rw-r--r--. 1 root root 0 Jun 6 23:27 westoslinux3
[root@foundation78 mnt]#
6)永久挂载nfs文件系统:
vim /etc/fstab
内容:
172.25.78.11:/public /mnt nfs defaults 0 0
7)客户端NFS挂载选项
1 rw:挂载可读写的文件系统
2 ro:挂载只读文件系统
3 vers=4:尝试只使用指定的NFS版本进行挂载。如果服务器不支持该版本,则挂载请求失败
4 soft:如果NFS请求超时,三次尝试后返回错误。权衡数据完整性与提高客户端响应性。(默认行为hard,将无限期地重试)
四 利用kerberos保护nfs输出
当客户端将共享目录挂载到自己系统的某个目录下,那么其他用户登入到该主机,并且进入到该目录下,就可以看到共享的所有目录和文件,只要具有相应的权限,就可以对文件进行相应的操作,因此要保护nfs的输出。
nfs服务端:
1 yum install sssd krb5-workstation authconfig-gtk -y
2 authconfig-gtk###开启kerberos,得到ldap用户###
3 su - student
4 su - ldapuser1###只有输入密码后才能得到钥匙###
5 klist###查看票###
6 wget http://172.25.254.254/pub/keytabs/server12.keytab -O /etc/krb5.keytab###得到证书###
7 ktutil###查看证书是否下载对###
8 rkt /etc/krb5.keytab
9 list
10 systemctl restart nfs-secure-server
11 systemctl enable nfs-secure-server
12 vim /etc/exports
内容:
/public*(rw,sec=krb5p)###sec=krb5p指认证方式###
13 exportfs -rv
nfs客户端:
1 yum install sssd krb5-workstation authconfig-gtk -y
2 authconfig-gtk###开启kerberos,得到ldap用户###
3 su - student
4 su - ldapuser1###只有输入密码后才能得到钥匙###
5 klist###查看票###
6 wget http://172.25.254.254/pub/keytabs/desktop12.keytab -O /etc/krb5.keytab###下载证书###
7 systemctl start nfs-secure
8 systemctl enable nfs-secure
9 mount -o sec=krb5p 172.25.12.11:/public /mnt/###挂载###
测试:
有key的可以挂载,有证书的可以访问nfs共享目录
[root@desktop12 Desktop]# mount -o sec=krb5p 172.25.12.11:/public /mnt/
[root@desktop12 Desktop]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3228684 7245216 31% /
devtmpfs 481120 0 481120 0% /dev
tmpfs 496708 140 496568 1% /dev/shm
tmpfs 496708 13056 483652 3% /run
tmpfs 496708 0 496708 0% /sys/fs/cgroup
/dev/sr0 3654720 3654720 0 100% /run/media/root/RHEL-7.0 Server.x86_64
172.25.12.11:/public 10473984 3207168 7266816 31% /mnt
[root@desktop12 Desktop]# cd /mnt/
[root@desktop12 mnt]# ls
westoslinux1 westoslinux2 westoslinux3
[root@desktop12 mnt]# cd
[root@desktop12 ~]# su - student
Last login: 六 6月 3 23:30:14 EDT 2017 on pts/0
[student@desktop12 ~]$ cd /mnt###普通用户没有key和证书不能访问###
-bash: cd: /mnt: Permission denied
[student@desktop12 ~]$ su - ldapuser1###ldapuser1有证书和key可以访问###
Password:
Last login: Sat Jun 3 23:30:30 EDT 2017 on pts/0
su: warning: cannot change directory to /home/guests/ldapuser1: No such file or directory
mkdir: cannot create directory ‘/home/guests‘: Permission denied
-bash-4.2$ cd /mnt/
-bash-4.2$ ls
westoslinux1 westoslinux2 westoslinux3
-bash-4.2$
nfs