如何配置安全的Kerberized NFS服务器(RHEL/CentOS 7)
Kerberos用于身份验证,其思想是在Kerberos中保留一组凭据,因此我们将配置一个Kerberized NFS服务器。
Kerberos将了解NFS服务器,Kerberos将了解NFS客户端,而Kerberos将了解用户。
Kerberized NFS服务器
我们需要使用Kerberized NFS,因为NFS的安全性非常有限。
它仅检查客户端的IP地址或者主机名,如果客户端的IP地址或者主机名正确,则将授予访问权限。
如果我们想进一步加强安全性,可以使用sec =
选项,该选项可与其他参数一起使用。
重要的提示:
我已经写了详细的分步教程来配置FreeIPA服务器和客户端。
因此,我将使用相同的设置来演示有关设置Kerberized NFS服务器的文章。
在IPA服务器上创建NFS服务
在开始NFS服务配置之前,我们必须在IPA服务器或者客户端上的任何一个上添加新服务。
对于本文,我将在IPA服务器(即node1.example.com
)上创建NFS服务。
请按照以下屏幕截图实现相同的效果。
我将使用node1上的浏览器登录到我的IPA服务器。
example.com
接下来,从下拉菜单中将服务选择为" nfs",然后选择必须在其上创建服务的主机(node1.example.com对我们而言)
验证我们刚刚创建的服务。
现在,由于我已经将IPA服务器配置为NFS服务器,因此,我不需要导入keytab文件,但是如果我们使用的是其他NFS服务器,请按照以下命令进行操作
[root@node3 ~]# ipa-getkeytab -s -p nfs/-k /etc/krb5.keytab Keytab successfully retrieved and stored in: /etc/krb5.keytab
查看可用的凭证
[root@node1 ~]# klist -k Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ------------------------------------------------------------------------- 2 host/[email protected] 2 host/[email protected] 2 host/[email protected] 2 host/[email protected] 2 host/[email protected] 2 host/[email protected] 1 nfs/[email protected] 1 nfs/[email protected]
在服务器上配置Kerberized NFS共享
首先,让我们首先创建一个NFS共享路径,该路径将通过网络共享给我们的客户。
[root@node1 ~]# mkdir /secureshare
为了本文的目的,我将完全同意我的分享。
[root@node1 ~]# chmod 777 /secureshare/
有三种配置Kerberized NFS的选项:krb5,krb5i和krb5p。sec =
可以使用不同的安全性选项
none
:它允许匿名访问文件和写入服务器,以nfsnobody
发出。sys:在这种情况下,文件访问基于UID和GID映射,这意味着如果服务器上的文件由用户1000拥有,并且来自客户端的用户1000尝试访问该文件,则我们将获得访问权限服务器中用户1000的权限。
由于没有检查这些用户是否相同,因此从安全角度来看并不理想。krb5:
客户必须使用kerberos证明IDkrb5i:
类似于krb5,但增加了保证数据未被篡改krb5p:
在上面添加了加密
实际上,除了krb5p
之外,没有其他任何理由,因为使用该选项,客户端必须使用Kerberos票证来证明ID。
同样,Kerberos的作用是确保数据不会被篡改,并且还添加了加密。
如果要使用Kerberized NFS,这是一个非常不错的选择
[root@node1 ~]# cat /etc/exports /secureshare *(sec=krb5p,rw)
下一步,启动nfs-server并检查状态以确保服务正常运行。
[root@node1 ~]# systemctl start nfs-server [root@node1 ~]# systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Wed 2019-04-10 05:52:13 IST; 4s ago Process: 4960 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi (code=exited, status=0/SUCCESS) Process: 4923 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 4921 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 4923 (code=exited, status=0/SUCCESS) Tasks: 0 CGroup: /system.slice/nfs-server.service Apr 10 05:52:08 node1.example.com systemd[1]: Starting NFS server and services... Apr 10 05:52:13 node1.example.com systemd[1]: Started NFS server and services.
验证新创建的安装点
[root@node1 ~]# showmount -e localhost Export list for localhost: /secureshare *
[root@node1 ~]# exportfs -v /secureshare (sync,wdelay,hide,no_subtree_check,sec=krb5p,rw,secure,root_squash,no_all_squash)
在防火墙上启用NFS
将防火墙中的NFS服务添加到来自客户端的所有所有身份验证请求中。
[root@node1 ~]# firewall-cmd --permanent --add-service=nfs success [root@node1 ~]# firewall-cmd --permanent --add-service=mountd success [root@node1 ~]# firewall-cmd --permanent --add-service=rpc-bind success
重新加载防火墙服务
[root@node1 ~]# systemctl reload firewalld
验证新添加的防火墙服务。
[root@node1 ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client freeipa-ldap freeipa-ldaps dns nfs mountd rpc-bind ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
在客户端节点上配置Kerberized NFS服务
现在,让我们在客户端节点上开始配置。
首先,使用管理员用户生成一个kerberos令牌。
[root@node2 ~]# kinit admin Password for [email protected]:
使用klist验证kerberos凭证
[root@node2 ~]# klist -k Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ------------------------------------------------------------------------- 1 host/[email protected] 1 host/[email protected]
接下来,我们需要安装使用kerberos身份验证配置NFS客户端所需的所有rpm
[root@node2 ~]# yum groups install -y "Network File System Client"
下次启动并启用nfs-secure
服务
[root@node2 ~]# systemctl enable nfs-secure [root@node2 ~]# systemctl start nfs-secure
为NFS共享创建安装点
[root@node2 ~]# mkdir /securenfs
现在是时候在我们的客户端节点上挂载NFS共享了。
[root@node2 ~]# mount -o sec=krb5p node1.example.com:/secureshare /mnt
因此,成功挂载了NFS共享,我们可以使用mount命令来验证该共享。
[root@node2 ~]# mount | grep securenfs node1:/secureshare on /securenfs type nfs4 (rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5p,clientaddr=10.0.2.31,local_lock=none,addr=10.0.2.30)
LDAP用户访问NFS安全共享
现在,系统用户可以访问此共享,但是使用Kerberized NFS共享的好处是LDAP用户也可以使用它。
现在我有一个LDAP用户'hynman',所以让我尝试使用hynman用户来访问NFS共享。
[root@node2 securenfs]# su - hynman Last login: Mon Nov 25 20:56:05 IST 2019 on :0
我将尝试浏览我的NFS共享。
[hynman@node2 ~]$cd /securenfs/ -bash: cd: /securenfs/: Permission denied
如我们所见,我们的权限被拒绝。
现在这是预期的行为。
由于没有为'hynman'用户生成令牌。
因此,让我们使用" kinit"为" hynman"用户生成一个kerberos令牌。
[hynman@node2 ~]$kinit hynman Password for [email protected]: Password expired. You must change it now. Enter new password: Enter it again:
下次尝试访问NFS共享。
[hynman@node2 ~]$cd /securenfs/ [hynman@node2 securenfs]$pwd /securenfs [hynman@node2 securenfs]$touch file [hynman@node2 securenfs]$ls -l total 0 -rw-rw-r--. 1 hynman hynman 0 Apr 10 06:10 file
因此," hynman"用户现在可以访问共享,并且还具有对该共享的写许可权。