我有一个从使用Kerberos进行安全保护的文件服务器导出的NFS树,并使用LDAP进行身份validation和uid / gidpipe理。 对于每个客户端机器和每个单独的用户,一切都可以顺利运行,但是我不确定如何将访问权限部分授予守护进程。
守护进程通常使用setuid来运行本地系统帐户,所以服务器上没有任何特定的凭据。 如果我可以进入并使用源代码,我通常可以让他们在启动时使用ktabber中存在的用户的keytab文件来调用kinit,但这并不总是可行的。
我们的环境禁止我通过使它们全世界可读,或者完全从NFS中删除Kerberos来破解事物。
我用all_squash , anonuid=...和anongid=... set来添加一个子树到/etc/exports ,但是这只是让每个客户端机器anongid=...读。 它只能被某个机器访问。
我尝试过使用samba,但是我们有一些守护进程使用“NFS或者bust”方法来处理共享(例如任何涉及mercurial的东西)。
我们的大多数服务器运行Ubuntu 10.04 LTS,但是这个问题也影响到我们拥有的12.04 LTS客户端。
有没有一种方法可以将整个系统授予特定Kerberos用户的系统范围的票证,以便该系统上的任何用户都可以随时访问该共享? 或者还有其他一些方法可以实现我可以调查的这种访问吗?
做到这一点的“正确”方式将包括重写init脚本,以便在守护进程模式和每个守护进程的keytabs中使用k5start。 这将确保运行的守护程序在运行时可以访问有效的凭证caching。
您可能需要守护进程/主机名。域.tld风格的原则。 他们更容易跟踪和更容易pipe理的关键标签。 将密钥添加到密钥表中会自动增encryption钥版本号(KVNO)并随机化该主体的“密码”。
如果您正在运行gssproxy,则使用标准的nfs-clientconfiguration,如下所示:
[service/nfs-client] mechs = krb5 cred_store = keytab:/etc/krb5.keytab cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U cred_store = client_keytab:/var/lib/gssproxy/clients/%U.keytab cred_usage = initiate allow_any_uid = yes trusted = yes euid = 0
您可以将服务的密钥表放在/var/lib/gssproxy/clients/%UID%.keytab中,gssproxy将为您创build票据。 这可能比使用k5start更可取,因为k5start可能会混淆SELinux转换。