首页 > 代码库 > 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