网络文件系统(NFS)
1.简介
网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。NFS协议有多个版本:Linux支持版本4、版本3和版本2, 而大多数系统管理员熟悉的是NFSv3。默认情况下,该协议并不安全,但是更新的版本(如NFSv4)提供了对更安全的身份验证的支持,甚至可以通过kerberos进行加密。
2.共享配置
服务端
[root@server34 ~]# yum install nfs-utils -y ##安装服务
[root@desktop34 ~]# systemctl enable nfs-server.service ##开启服务
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
[root@server34 ~]# systemctl start nfs-server.service
[root@server34 ~]# systemctl start firewalld ##设置防火墙
[root@server34 ~]# firewall-cmd --permanent --add-service=rpc-bind
success
[root@server34 ~]# firewall-cmd --permanent --add-service=nfs
success
[root@server34 ~]# firewall-cmd --permanent --add-service=mountd
success
[root@server34 ~]# firewall-cmd --reload
success
客户端测试
showmount- e 172.25.254.134 ##连接成功
[root@server34 ~]# mkdir /public ##建立共享目录
[root@server34 ~]# touch /public/westostest
[root@server34 ~]# chmod 777 /public/
[root@server34 ~]# vim /etc/exports ##更改配置文件
[root@server34 ~]# cat /etc/exports
/public *(sync) ##表示将/public目录共享给所有人并数据同步
[root@server34 ~]# exportfs -rv ##刷新服务,让更改生效
exporting *:/public
客户端测试
showmount -e 172.25.254.134
mount 172.25.254.134:/public /mnt ##共享成功
cd /mnt/
ls
/public 172.25.254.0*(sync) ##表示将/public目录共享给254网段所有主机
/public *.example.com(sync) ##表示将/public目录共享给example.com域的所有主机
/public 172.25.254.234(rw,sync) 172.25.254.6(ro,sync) ##目录共享给234主机是可读写,6主机是只读
234主机测试
[root@desktop34 ~]# mount 172.25.254.134:/public /mnt ##挂载成功
[root@desktop34 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3157004 7316896 31% /
devtmpfs 927072 0 927072 0% /dev
tmpfs 942660 140 942520 1% /dev/shm
tmpfs 942660 17064 925596 2% /run
tmpfs 942660 0 942660 0% /sys/fs/cgroup
172.25.254.134:/public 10473984 6827776 3646208 66% /mnt
[root@desktop34 ~]# cd /mnt/
[root@desktop34 mnt]# touch file1
6主机测试
[root@foundation6 ~]# mount 172.25.254.134:/public /mnt
[root@foundation6 ~]# cd /mnt/
[root@foundation6 mnt]# ls
westostest
[root@foundation6 mnt]# touch file1 ##没有挂载权限
touch: cannot touch ‘file1’: Read-only file system
/public *(rw,sync,no_root_squash) ##共享给所有人,当客户端使用root挂载时不转换用户身份
客户端测试
[root@desktop34 ~]# mount 172.25.254.134:/public /mnt/
[root@desktop34 ~]# cd /mnt
[root@desktop34 mnt]# ls
file1 westostest
[root@desktop34 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 8 09:08 file1
-rw-r--r--. 1 root root 0 Jun 8 08:32 westostest
[root@desktop34 mnt]# touch file2
[root@desktop34 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 8 09:08 file1
-rw-r--r--. 1 root root 0 Jun 8 09:28 file2 ##建立file2时不转换身份,直接以root身份执行
-rw-r--r--. 1 root root 0 Jun 8 08:32 westostest
/public *(rw,sync,anonuid=1001,anongid=1000) ##public共享给所有人以1001uid和1000gid
客户端测试
[root@desktop34 ~]# mount 172.25.254.134:/public /mnt/
[root@desktop34 ~]# cd /mnt
[root@desktop34 mnt]# touch test
[root@desktop34 mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 8 09:08 file1
-rw-r--r--. 1 root root 0 Jun 8 09:28 file2
-rw-r--r--. 1 1001 student 0 Jun 8 09:38 test ##建立的文件uid为1001,gid为1000
-rw-r--r--. 1 root root 0 Jun 8 08:32 westutostest
3.利用kerberos保护nfs输出
服务端
开启kerberos认证,得到ldap用户
[root@server34 ~]# yum install sssh krb5-workstation.x86_64 authconfig-gtk.x86_64 -y ##安装服务
[root@server34 ~]# authconfig-gtk ##认证用户
[root@server34 ~]# wget http://172.25.254.254/pub/keytabs/server34.keytab -O /etc/krb5.keytab ##下载证书
[root@server34 ~]# ktutil ##查看证书是否下载成功
ktutil: rkt /etc/krb5.keytab
ktutil: list
[root@server34 ~]# systemctl start nfs-secure-server
[root@server34 ~]# systemctl enable nfs-secure-server
[root@server34 ~]#vim /etc/resolv.conf ##在服务端作解析
nameserver 172.25.254.254
[root@server34 ~]# vim /etc/exports ##/public共享所有人,使用kerberos票据认证
/public *(rw,sec=krb5p)
[root@server34 ~]# exportfs -rv
exporting *:/public
客户端
开启kerberos认证,得到ldap用户
[root@desktop34 ~]# wget http://172.25.254.254/pub/keytabs/desktop34.keytab -O /etc/krb5.keytab ##下载证书
[root@desktop34 ~]# authconfig-gtk ##认证用户
[root@desktop34 ~]# ktutil
ktutil: rkt /etc/krb5.keytab
ktutil: list
[root@desktop34 ~]# systemctl start nfs-secure-server
[root@desktop34 ~]# systemctl enable nfs-secure-server
[root@desktop34 ~]# vim /etc/hosts ##客户端作解析
172.25.254.134 server34.example.com
[root@desktop34 ~]# mount 172.25.254.11:/public /mnt -o sec=krb5p
su - student ##先切换到普通用户,因为普通用户切换是需要输入密码就可以完成认证,而root切换不需要输入密码无法完成认证
cd /mnt
su - ldapuser1
klist
ls /mnt