nfs的一些配置

1.nfs概念

1.网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。
2.NFS协议有多个版本:Linux支持版本4、版本3和版本2, 而大多数系统管理员熟悉的是NFSv3。默认情况下,该协议并不安全,但是更新的版本(如NFSv4)提供了对更安全的身份验证的支持,甚至可以通过kerberos进行加密。

2.nfs服务器配置

若要配置基本NFS服务器,先应该安装nfs-utils软件包。然后,编辑/etc/exports列出通过网络与客户端系统共享的文件系统,并指出哪些客户端对导出具有何种访问权限
具体操作如下:
1.安装服务以及配置防火墙策略

[root@nfs-server ~]# yum install nfs-utils -y
[root@nfs-server ~]# systemctl start nfs-server
[root@nfs-server ~]# systemctl enable nfs-server.service 
[root@nfs-server ~]# systemctl start firewalld
[root@nfs-server ~]# firewall-cmd --permanent --add-service=nfs
[root@nfs-server ~]# firewall-cmd --permanent --add-service=rpc-bind
[root@nfs-server ~]# firewall-cmd --permanent --add-service=mountd
[root@nfs-server ~]# firewall-cmd --reload

2.建立一个共享目录

[root@nfs-server ~]# mkdir /public
[root@nfs-server ~]# chmod 777 /public/
[root@nfs-server ~]# touch /public/test{1..3}
[root@nfs-server ~]# ls /public

3.编写/etc/exports 对客户端访问进行设置

[root@nfs-server ~]# vim /etc/exports
/public    *(sync)   ##将/public共享给所有人并且数据同步 *代表所有人,sync代表数据同步
[root@nfs-server ~]# exportfs -rv  ##对配置的文件进行刷新,一定不能重启nfs服务,那样会导致服务卡住,这是已知的bug

4.在客户端进行检测

[root@nfs-client ~]# showmount -e 172.25.254.10
Export list for 172.25.254.10:
/public *
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
[root@nfs-client ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root   7657472 3110484   4546988  41% /
devtmpfs                 499700       0    499700   0% /dev
tmpfs                    508996     140    508856   1% /dev/shm
tmpfs                    508996    7044    501952   2% /run
tmpfs                    508996       0    508996   0% /sys/fs/cgroup
/dev/sda1                201388  107392     93996  54% /boot
172.25.254.10:/public  10473984 3384832   7089152  33% /mnt
[root@nfs-client ~]# cd /mnt
[root@nfs-client mnt]# ls
test1  test2  test3

/etc/exports文件的配置可以man 5 exports

只允许172.25.0.0/24网段的ip访问
[root@nfs-server ~]# vim /etc/exports
/public    172.25.0.0/24(sync)
[root@nfs-server ~]# exportfs -rv  
exporting 172.25.0.0/24:/public
测试:
[root@nfs-client ~]# showmount -e 172.25.254.10
Export list for 172.25.254.10:
/public 172.25.0.0/24
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
mount.nfs: access denied by server while mounting 172.25.254.10:/public  ##因为客户端为254网段的ip,所以访问被拒
只允许同一个域名的主机访问
[root@nfs-server ~]# vim /etc/exports
/public    *.example.com(sync)
[root@nfs-server ~]# exportfs -rv
exporting *.example.com:/public
只允许某一个ip只读访问,或者是读写访问
[root@nfs-server ~]# vim /etc/exports
/public    172.25.254.20(ro,sync) 172.25.254.21(rw,sync)  ## 允许20主机只读访问 ,21主机读写访问
[root@nfs-server ~]# exportfs -rv
exporting 172.25.254.20:/public
exporting 172.25.254.21:/public
测试:
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
[root@nfs-client ~]# cd /mnt
[root@nfs-client mnt]# ls
test1  test2  test3
[root@nfs-client mnt]# touch file
touch: cannot touch ‘file’: Read-only file system ##因为ip是20,所以只读,不能写入

默认情况下,NFS服务器将NFS客户端上的root视为用户nfsnobody。即,如果root尝试访问挂载的导出中的文件,服务器会将其视作用户nfsnobody访问。在NFS导出被无磁盘客户端用作/和root需要被视作root的情况中,这种安全措施存在隐患。若要禁用此保护,服务器需要将no_root_squash添加到在/etc/exports中导出设置的选项列表:

/public     *(rw,sync,no_root_squash)
[root@nfs-server ~]# vim /etc/exports
/public    172.25.254.20(rw,sync)
[root@nfs-server ~]# exportfs -rv
exporting 172.25.254.20:/public
测试:
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
[root@nfs-client ~]# cd /mnt
[root@nfs-client mnt]# ls
test1  test2  test3
[root@nfs-client mnt]# touch file
[root@nfs-client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  4 19:54 file
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test1
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test2
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test3
如要在客户端root用户建立文件时,文件的用户名及组都为root
[root@nfs-server ~]# vim /etc/exports
/public    172.25.254.20(rw,sync,no_root_squash)
[root@nfs-server ~]# exportfs -rv
exporting 172.25.254.20:/public
测试:
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
[root@nfs-client ~]# cd /mnt
[root@nfs-client mnt]# touch file1
[root@nfs-client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  4 19:54 file
-rw-r--r--. 1 root      root      0 Jun  4 19:59 file1
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test1
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test2
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test3
如要在客户端root用户建立文件时,文件的用户名及组也可以为自己设定的,但必须要存在
[root@nfs-server ~]# vim /etc/exports
[root@nfs-server ~]# exportfs -rv
exporting 172.25.254.20:/public
 测试:
[root@nfs-client ~]# useradd westos
[root@nfs-client ~]# id 1001
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@nfs-client ~]# mount 172.25.254.10:/public /mnt
[root@nfs-client ~]# cd /mnt
[root@nfs-client mnt]# touch file3
[root@nfs-client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  4 19:54 file
-rw-r--r--. 1 root      root      0 Jun  4 19:59 file1
-rw-r--r--. 1 westos    westos    0 Jun  4 20:04 file3
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test1
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test2
-rw-r--r--. 1 root      root      0 Jun  4 19:24 test3

6.永久挂载NFS文件系统:
将相应的行添加至/etc/fstab:

[root@nfs-client ~]# vim /etc/fstab 
 172.25.254.10:/public  /mnt   nfs  defaults 0 0 

7.客户端NFS挂载选项

rw:挂载可读写的文件系统
ro:挂载只读文件系统
vers=4:尝试只使用指定的NFS版本进行挂载。如果服务器不支持该版本,则挂载请求失败
soft:如果NFS请求超时,三次尝试后返回错误。权衡数据完整性与提高客户端响应性。(默认行为hard,将无限期地重试)

3.保护NFS输出

两台主机都得更改主机名 一个server20 一个desktop20,这是因为,我们需要下载对应的keytab。

在两台主机,都加入kerberos认证域,得到ldap用户:
在server机做:

先安装服务
yum install authconfig-gtk.x86_64 sssd  krb5-workstation.x86_64
生成认证,classroom.example.com里有可以生成认证的证书,做这个实验需要可以连接到这里。
authconfig-gtk

nfs的一些配置_第1张图片
nfs的一些配置_第2张图片

安装kerberos服务所需的keytab:
wget http://172.25.254.254/pub/keytabs/server20.keytab -O /etc/krb5.keytab 
采用ktutil命令检测keytab
ktutil
ktutil:  rkt /etc/krb5.keytab
ktutil:  list

重启服务:
systemctl start nfs-secure-server
systemctl enable nfs-secure-server.service 
编写/etc/exports,让拥有证书的用户才可以访问
vim /etc/exports
/public         *(rw,sec=krb5p)
exportfs -rv

在客户机做:
先安装服务

yum install authconfig-gtk.x86_64 sssd  krb5-workstation.x86_64
生成认证,classroom.example.com里有可以生成认证的证书,做这个实验需要可以连接到这里。
authconfig-gtk

nfs的一些配置_第3张图片
nfs的一些配置_第4张图片

安装kerberos服务所需的keytab:
wget http://172.25.254.254/pub/keytabs/desktop20.keytab -O /etc/krb5.keytab 
采用ktutil命令检测keytab
ktutil
ktutil:  rkt /etc/krb5.keytab
ktutil:  list
重启服务:(与server主机重启的服务不相同,少了个service)
systemctl start nfs-secure
systemctl enable nfs-secure
做本地解析
vim /etc/hosts
172.25.254.220 server20.example.com
挂载服务:
mount 172.25.254.220:/public /mnt -o sec=krb5p  ##
测试:
[root@desktop20 ~]# su - student
Last login: Sat Jun  3 23:37:20 EDT 2017 on pts/1
[student@desktop20 ~]$ cd /mnt
-bash: cd: /mnt: Permission denied ##student用户没有证书所以访问被拒
[student@desktop20 ~]$ su - ldapuser1    ##必须从普通用户过去,输一次密码才可以进去
Password: 
Last login: Sat Jun  3 23:54:20 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
file  file2  file3  test1  test2  test3

你可能感兴趣的:(linux)