Kerberos 是一种计算机网络身份验证协议,它使用票证对计算机进行身份验证并让它们通过非安全网络进行通信。
而 NFS 是在基于 Linux 的计算机之间共享文件的分布式文件系统。
我们可以将 Kerberos 与 NFS 结合起来配置更安全的网络共享。
在本文中,我们将配置一个 Kerberized NFS 服务器并配置一个客户端来访问该共享。
要配置 Kerberized NFS 服务器,我们必须有一个身份管理服务器,例如 FreeIPA,它为客户端提供 Kerberos 票证。
环境
我们使用了两台 Red Hat Enterprise Linux (RHEL) 7 服务器。
一个作为 NFS 服务器以及身份管理服务器,另一个作为 NFS 客户端。
- 身份管理服务器 - ipaserver.onitroad.com
- Kerberized NFS 服务器 - ipaserver.onitroad.com
- Kerberized NFS 客户端 - client2.onitroad.com
配置 Kerberized NFS 客户端
确保我们已经将此机器配置为 FreeIPA 客户端。
(请参阅将 Linux 机器配置为 FreeIPA 客户端)
连接到 client2.onitroad.com 。
并安装 nfs-utils 包。
[root@client2 ~]# yum install -y nfs-utils [root@client2 ~]#
创建一个目录,从 ipaserver.onitroad.com 挂载共享目录。
[root@client2 ~]# mkdir /mnt/nfsshare
检查来自 ipaserver.onitroad.com 的共享目录。
[root@client2 ~]# showmount -e ipaserver.onitroad.com Export list for ipaserver.onitroad.com: /nfsshare client2.onitroad.com [root@client2 ~]#
启动并启用 nfs-secure 服务。
[root@client2 ~]# systemctl start nfs-secure ; systemctl enable nfs-secure ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service'
通过在 /etc/fstab 中添加以下条目来永久挂载此共享目录。
[root@client2 ~]# echo 'ipaserver.onitroad.com:/nfsshare /mnt/nfsshare nfs sec=krb5p,_netdev 0 0' >> /etc/fstab [root@client2 ~]# mount -a [root@client2 ~]#
检查挂载目录的状态。
[root@client2 ~]# mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) ipaserver.onitroad.com:/nfsshare on /mnt/nfsshare type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=krb5p,clientaddr=192.168.1.202,local_lock=none,addr=192.168.1.200,_netdev)
在此共享目录中创建一个文件,以验证文件权限。
[root@client2 ~]# cd /mnt/nfsshare/ [root@client2 nfsshare]# touch test1 [root@client2 nfsshare]# ls -al total 0 drwxrwxr-x. 2 root nfsnobody 18 Jul 31 07:32 . drwxr-xr-x. 4 root root 31 Jul 31 07:23 .. -rw-r--r--. 1 nfsnobody nfsnobody 0 Jul 31 07:32 test1 [root@client2 nfsshare]#
我们已经成功配置了我们的 Kerberized NFS 服务器。
配置 Kerberized NFS 服务器
确保我们已经将此机器配置为 FreeIPA 客户端。
现在,将 NFS 服务添加到我们的 FreeIPA 服务器以创建 Kerberized NFS 服务,如下所示。
[root@ipaserver ~]# kinit admin Password for admin@EXAMPLE.COM: [root@ipaserver ~]# ipa service-add nfs/ipaserver.onitroad.com ---------------------------------------------------- Added service "nfs/ipaserver.onitroad.com@EXAMPLE.COM" ---------------------------------------------------- Principal: nfs/ipaserver.onitroad.com@EXAMPLE.COM Managed by: ipaserver.onitroad.com [root@ipaserver ~]# kadmin.local Authenticating as principal admin/admin@EXAMPLE.COM with password. kadmin.local: ktadd nfs/ipaserver.onitroad.com Entry for principal nfs/ipaserver.onitroad.com with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab. Entry for principal nfs/ipaserver.onitroad.com with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab. Entry for principal nfs/ipaserver.onitroad.com with kvno 1, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab. Entry for principal nfs/ipaserver.onitroad.com with kvno 1, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab. kadmin.local: quit [root@ipaserver ~]# klist -k Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ------------------------------------------------------------------------- 3 host/ipaserver.onitroad.com@EXAMPLE.COM 3 host/ipaserver.onitroad.com@EXAMPLE.COM 3 host/ipaserver.onitroad.com@EXAMPLE.COM 3 host/ipaserver.onitroad.com@EXAMPLE.COM 1 nfs/ipaserver.onitroad.com@EXAMPLE.COM 1 nfs/ipaserver.onitroad.com@EXAMPLE.COM 1 nfs/ipaserver.onitroad.com@EXAMPLE.COM 1 nfs/ipaserver.onitroad.com@EXAMPLE.COM
要配置 NFS 服务,我们必须安装 nfs-utils 包。
通常,此软件包会在安装 Red Hat Enterprise Linux (RHEL) 7 期间自动安装。
但是,我们可以随时使用 yum 命令安装它。
[root@ipaserver ~]# yum install -y nfs-utils Loaded plugins: langpacks, product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version Nothing to do [root@ipaserver ~]#
nfs-utils 已经安装在我们的系统上。
创建一个目录以与其他客户端共享。
[root@ipaserver ~]# mkdir /nfsshare [root@ipaserver ~]# chgrp nfsnobody /nfsshare/ [root@ipaserver ~]# chmod g+w /nfsshare/
我们创建了一个目录 nfsshare ,将其组更改为 nfsnobody 并且 w 权限已授予组。
因此,匿名用户可以在此共享目录上创建文件。
调整 /nfsshare 目录的 SELinux 类型。
[root@ipaserver ~]# semanage fcontext -a -t nfs_t "/nfsshare(/.*)?" [root@ipaserver ~]# restorecon -Rv /nfsshare/ restorecon reset /nfsshare context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:nfs_t:s0
如果 semanage 命令在系统上不可用,则安装 policycoreutils-python 包。
现在将此目录导出/共享给特定客户端。
[root@ipaserver ~]# echo '/nfsshare client2.onitroad.com(rw,sec=krb5p,sync)' >> /etc/exports [root@ipaserver ~]# exportfs -r
启用并启动 nfs-server 和 nfs-secure-server 服务。
[root@ipaserver ~]# systemctl start nfs-server ; systemctl enable nfs-server ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service' [root@ipaserver ~]# systemctl start nfs-secure-server; systemctl enable nfs-secure-server ln -s '/usr/lib/systemd/system/nfs-secure-server.service' '/etc/systemd/system/nfs.target.wants/nfs-secure-server.service'
允许 nfs 和其他补充服务通过 Linux 防火墙。
[root@ipaserver ~]# firewall-cmd --permanent --add-service={mountd,nfs,rpc-bind} success [root@ipaserver ~]# firewall-cmd --reload success