背景:我使用的是Debian 7系统,我已经使用libnss-ldap , libpam-krb5和nscd与LDAP + Kerberos系统集成。 我修改了sudoers ,允许LDAP组有权sudo并获得超级用户权限。 因此,我可以作为LDAP组login来pipe理机器。 这一切工作正常, sshlogin与LDAP用户很好地工作。
我只是在我的用户帐户Cosmic Ossifrage的主目录中试验一个.k5login文件。 在文件中,我列出了:
[email protected]
这是一个有效的Kerberos身份。 SSH用户继续正确使用.k5login文件。
但是,在我的主目录中有这个.k5login文件, 我不再能够使用sudo -i获得超级用户权限。 这似乎没有任何意义,因为.k5login位于我的主目录中,而不是root目录,所以在我看来, root用户和sudo命令都不应受到任何限制。 sudoers文件。
但是,使用上面的.k5login文件, sudo -i和sudo su都不起作用,而之前是这样。 一旦.k5login文件被删除,这个function被恢复,我可以再次sudo 。
在日志文件/var/log/auth.log ,此时报告的许多错误消息中有一个来自sudo,指出:
[pam:sudo] krb5_kuserok failed for user cosmic_ossifrage
我是否错过了.k5login应该做什么的定义中的基本内容? 这是预期的行为,如果是这样,为什么?
根据Mark的 评论 , .k5login文件必须满足以下要求:
.k5login文件每行必须包含一个主体,由用户拥有,不能被组或其他人写入(但必须被任何人读取)。
根据Kerberos 源代码中的注释。
在这种情况下,除了Cosmic Ossifrage用户之外,任何人都无法读取.k5login文件。 在其上存储用户主目录的NFS挂载也强制执行root压缩,甚至禁止root用户访问。 通过使文件世界可读, sudo到rootfunction被返回。
(标注社区wiki,因为答案最初来自评论。)