Fedora 26 NFS + Kerberos“预认证失败”(挂载导致无权限)

Rom*_*tti 5 fedora nfs kerberos

我很难在 Fedora 26上设置nfs+ kerberos

我遵循了本教程:

RHEL7:使用 Kerberos 控制对 NFS 网络共享的访问 | 证书仓库

目前,纯 NFS 工作正常,kinit单独工作正常,但我在尝试挂​​载时仍然没有获得许可,并且在/var/log/krb5kdc.log.

krb5kdc[12560](info): AS_REQ (8 etypes {18 17 16 23 25 26 20 19}) 192.168.0.13: NEEDED_PREAUTH: nfs/rbenedettin.local@LOCAL for krbtgt/LOCAL@LOCAL, Additional pre-authentication required                        
krb5kdc[12560](info): preauth (encrypted_timestamp) verify failure: Preauthentication failed                                                                                                                      
krb5kdc[12560](info): AS_REQ (8 etypes {18 17 16 23 25 26 20 19}) 192.168.0.13: PREAUTH_FAILED: nfs/rbenedettin.local@LOCAL for krbtgt/LOCAL@LOCAL, Preauthentication failed
Run Code Online (Sandbox Code Playgroud)

我想使用zero-config,我试过不使用它(编辑/etc/hosts),但问题仍然存在,其他一些教程指向authconfig-guiauthconfig-tui但 Fedora 26 不再有它。网络上几乎没有关于最近的 Fedora 版本和 nfs + kerberos 的信息,所以我真的很感激任何关于它的信息。

Rom*_*tti 4

\n

问题出在哪里

\n\n

事实上,本教程完全忽略了许多所需的元素(sssdpam等),可能这不是重点,因为重点似乎是 RHEL 考试。我对这项任务涉及的所有工具仍然有点迷失,因为我不是系统管理员(一会儿有很多问题),但我已经设法让它工作。感谢freeIPA大多数。

\n\n

我会尝试把我所做的放在这里。我希望它能够帮助您了解如何在 Fedora 26 甚至 25 以上版本中获得基于 Kerberos 的 NFS 环境。如有发现程序不当的地方,请指正。它只触及零配置,没有 SELinux 环境,因此欢迎任何可以弥补差距的人来纠正它。

\n\n

如果你已经搞砸了

\n\n

如果您有足够的勇气尝试很多事情,甚至在没有结果的情况下建立一个 OpenLDAP 服务器,将其全部删除,删除 和Kerberos,删除和OpenLDAP中的配置文件和缓存,如果您已经让 NFS 服务器正常工作,则可以维护它克伯罗斯。如果您尝试删除 /etc/sssd 并重新安装该软件包。/etc/var/lib/sssd

\n
\n\n
\n\n

如何在 fedora 26 中获取 NFS + Kerberos

\n\n

在简短的描述中,您将需要:

\n\n
    \n
  1. 主机名(读取观察结果
  2. \n
  3. NFS 服务器工作。
  4. \n
  5. 安装免费IPA
  6. \n
  7. 配置 IPA + Kerberos + NFS
  8. \n
  9. 观察结果
  10. \n
\n\n

主机名

\n\n
\n

在继续之前,请阅读答案末尾与主机名相关的观察结果。

\n
\n\n

如前所述,我想要一个zero-conf设置。我命名了我的机器并启用/取消屏蔽avahi服务。如果您有普通的 Fedora 安装 Avahi 应该已打开。

\n\n

您可以使用 获取或更改主机名hostnamectl

\n\n
$ hostnamectl set-hostname "myhostname"\n
Run Code Online (Sandbox Code Playgroud)\n\n

感谢avahi,您的所有本地网络都将通过本地域,您将获得像yourhostname.local这样的计算机地址。我们将继续使用两台机器进行设置:

\n\n

server.local -> 服务器

\n\n

client.local -> 客户端

\n\n

Kerberos(freeIPA 服务器)可以位于第三台计算机上,但为了简单起见,两者freeIPANFS将由一台计算机提供服务。

\n\n

NFS服务器

\n\n
    \n
  • 服务器端

  • \n
\n\n

我会认为你假装使用 NFSv4,所以它只需要这个:

\n\n
$ dnf install  nfs-utils\n\n$ systemctl enable nfs-server\n$ systemctl start nfs-server\n\n$ firewall-cmd --permanent --add-service=nfs\n$ firewall-cmd --reload\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑导出/etc/exports

\n\n
# if using "sec=krb5p" your will need Kerberos, remove it for tests\n/path/to/exported/dir client.local(rw,sync,sec=krb5p)\n
Run Code Online (Sandbox Code Playgroud)\n\n

导出目录:

\n\n
$ exportfs -avr\n$ systemctl restart nfs-server\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 客户端

  • \n
\n\n

安装需要的包:

\n\n
$ dnf install nfs-utils\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以使用以下方法进行测试:

\n\n
$ mount -t nfs server.local:/path/to/exported/dir /path/to/local/dir\n
Run Code Online (Sandbox Code Playgroud)\n\n

安装免费IPA

\n\n
    \n
  • 服务器端

  • \n
\n\n

安装freeipa-server并给出明确的答案:

\n\n
$ dnf install freeipa-server\n$ ipa-server-install\n...\nDo you want to configure integrated DNS (BIND)? [no]: **no**\n...\nServer host name [server.local]: **press enter**    \n...\nPlease confirm the domain name [local]: **press enter**\n...\nPlease provide a realm name [LOCAL]: **press enter**\n...\nDirectory Manager password: *******\nPassword (confirm): *******\n...\nIPA admin password: *******\nPassword (confirm): *******\n...\nContinue to configure the system with these values? [no]: **yes**\n
Run Code Online (Sandbox Code Playgroud)\n\n

打开所需的防火墙端口:

\n\n
$ firewall-cmd --add-service={freeipa-ldap,freeipa-ldaps} --permanent \n$ firewall-cmd --reload \n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 客户端

  • \n
\n\n

安装freeipa-client并给出明确的答案:

\n\n
$ dnf install freeipa-client\n$ ipa-client-install --server=serve.local --domain LOCAL\n... \nProceed with fixed values and no DNS discovery? [no]: **yes**\n...\nContinue to configure the system with these values? [no]: **yes**\n...\nUser authorized to enroll computers: **admin**\n...\nPassword for admin@SERVER.LOCAL: ******\n
Run Code Online (Sandbox Code Playgroud)\n\n

配置 IPA + Kerberos + NFS

\n\n

此时,您将拥有一个可操作的 kerberos 服务器和客户端,我将假设您在服务器和客户端上只有一个名为 user 的用户

\n\n
    \n
  • 服务器端

  • \n
\n\n

我们必须以管理员身份进行身份验证:

\n\n
$ kinit admin\nPassword for admin@SERVER.LOCAL: *****\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以通过以下方式确认您已通过身份验证klist

\n\n
$ klist\nTicket cache: KEYRING:persistent:1000:krb_ccache_######       \nDefault principal: admin@LOCAL                            \n\nValid starting       Expires              Service principal    \n17-10-2017 20:41:20  18-10-2017 20:41:17  krbtgt/LOCAL@LOCAL       \n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我们可以添加用户主体,我建议您使用与您的 Unix 用户相同的名称和密码:

\n\n
$ ipa user-add user --email=user@yourmail.com --first=User --last="Foo" --password\npassword: ******\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加服务主体NFS

\n\n
# --force is needed otherwise will complain about DNS record missing\n$ ipa service-add nfs/server.local --force\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取主机和服务密钥:

\n\n
$ ipa-getkeytab -s server.local -p host/server.local -k /etc/krb5.keytab\nKeytab successfully retrieved and stored in: /etc/krb5.keytab\n\n$ ipa-getkeytab -s server.local -p nfs/server.local -k /etc/krb5.keytab\nKeytab successfully retrieved and stored in: /etc/krb5.keytab\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 客户端

    \n\n

    在服务器端,以管理员身份进行身份验证并添加客户端主机:

    \n\n

    $ kinit admin\nadmin@SERVER.LOCAL 的密码: *****

    \n\n

    $ ipa-getkeytab -s server.local -p host/client.local -k /etc/krb5.keytab\nKeytab 已成功检索并存储在:/etc/krb5.keytab

  • \n
\n\n

配置 freeIPA 和其他所有内容后,不要忘记在服务器上sec=krb5p添加。/etc/export重新启动服务器和客户端或重新启动NFS服务IPA。此时,您将能够在客户端挂载远程文件夹。

\n\n
$ mount -v -t nfs -o sec=krb5p server.local:/path/to/exported/dir /path/to/local/dir\n
Run Code Online (Sandbox Code Playgroud)\n\n

观察结果

\n\n

零配置设置效果不佳...

\n\n

不幸的是,FreeIPA 似乎强烈依赖BINDDNS 服务器,遗憾的是它对于家庭使用来说太多了,并且会给低端设备带来性能负担。最简单的解决方案是不使用dhcp,在所有计算机上设置静态IP并在`/etc/hosts\xc2\xb4中定义别名:

\n\n
x.x.x.x server.local server      \ny.y.y.y client.local client \n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么不配置 pam,以便我在登录时获得 Kerberos 身份验证?

\n\n

通过我们在这里可以看到freeipa,如果使用则sssd不需要authconfig --enablekrb5 --update

\n\n

分区挂载但访问目录时获得“无权限”和空文件夹

\n\n

您的用户可能需要访问其主密钥(只有 root 有权访问/etc/krb5.keytab),根据krb5.conf手册页,sssd用户的默认位置keytab/var/kerberos/krb5/user/%{UID}/client.keytab%{UID} 是用户的用户 ID。

\n\n
$ ipa-getkeytab -s server.local -p user -k /var/kerberos/krb5/user/%{UID}/client.keytab --password\npassword: ******\nKeytab successfully retrieved and stored in: /var/kerberos/krb5/user/%{UID}/client.keytab \n
Run Code Online (Sandbox Code Playgroud)\n\n

使用与 unix 用户相同的密码,我们可以使用 -r,但不建议这样做,实际上需要额外的命令才能从服务器检索现有密钥(从我们添加用户时开始)。

\n\n

计时还是NTP???

\n\n

我不确定 freeIPA 是否可以很好地工作,chrony较新的版本可能需要--force-ntpd替换chronyNTP

\n