保留一系列匿名 UID; /etc/subuid

保留一系列匿名 UID; /etc/subuid

我需要一系列 uid(比如几千个)供 setuid-root 工具使用。是否有一个协议来注册这样的范围,或者我只是选择一个范围并希望没有其他程序会使用这些 uid?

(我不想因此而造成混乱/etc/passwd。)

我遇到了/etc/subuid(以及其他记录在https://www.mankier.com/8/usermod)并且似乎做了类似的事情。到底是什么/etc/subuid?我可以用它来为我的 setuid 工具注册一个范围吗?

看起来这个/etc/subuid东西被 docker 用于某种 uid 映射。如果我为我的应用程序创建一个新用户,请通过/etc/subuid以下方式为其保留子范围不是将它与 docker 一起使用,这是让系统的其余部分知道我已经保留了 uid 范围的好方法吗?

答案1

有一个 hack,然后就有一个方法可以做到这一点正确的

黑客的方法是提高UID_MINGID_MINin /etc/login.defs,以便您保留的 UID 位于SYS_UID_MAX和之间UID_MIN,GID(如果有)位于SYS_GID_MAX和 之间GID_MIN。这样,普通工具(useraddadduserusermod等)不会将它们用于新用户帐户,除非您强制它们(通过显式指定新的 UID 和/或 GID)。您可能需要将这个新间隙范围中的任何现有 UID 重新映射到UID_MIN..UID_MAX范围,并将 GID 重新映射到GID_MIN..GID_MAX范围,以便工具将它们视为普通用户帐户。

正确的方法是此外配置国家安全局(通常是 PAM)查看这些保留用户,这样工具就不会混淆。

最简单的方法是使用libnss-extrausersNSS 模块和pam_extrausersPAM 模块,这样您就可以将这些特殊用户放入/var/lib/extrausers/passwd(以及 中的无密码条目/var/lib/extrausers/shadow),以及可选的组信息中/var/lib/extrausers/groups。这些模块应该在所有常见的 Linux 发行版中可用。

请注意,如果您确实将这些用户添加到 NSS/PAM,您可能希望扩展SYS_UID_MAXSYS_GID_MAX覆盖这些保留用户,只是作为预防措施:您看,我还没有检查是否/哪些工具仅列出UID_MIN..UID_MAX用户,或者只需排除SYS_UID_MIN..SYS_UID_MAX用户即可。我怀疑有很多程序员错误地认为这两个集合是互补的,因此将这些保留的 UID/GID 视为系统帐户可能是最安全的选择。

相关内容