我需要一系列 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_MIN
和GID_MIN
in /etc/login.defs
,以便您保留的 UID 位于SYS_UID_MAX
和之间UID_MIN
,GID(如果有)位于SYS_GID_MAX
和 之间GID_MIN
。这样,普通工具(useradd
、adduser
、usermod
等)不会将它们用于新用户帐户,除非您强制它们(通过显式指定新的 UID 和/或 GID)。您可能需要将这个新间隙范围中的任何现有 UID 重新映射到UID_MIN
..UID_MAX
范围,并将 GID 重新映射到GID_MIN
..GID_MAX
范围,以便工具将它们视为普通用户帐户。
正确的方法是此外配置国家安全局(通常是 PAM)查看这些保留用户,这样工具就不会混淆。
最简单的方法是使用libnss-extrausers
NSS 模块和pam_extrausers
PAM 模块,这样您就可以将这些特殊用户放入/var/lib/extrausers/passwd
(以及 中的无密码条目/var/lib/extrausers/shadow
),以及可选的组信息中/var/lib/extrausers/groups
。这些模块应该在所有常见的 Linux 发行版中可用。
请注意,如果您确实将这些用户添加到 NSS/PAM,您可能希望扩展SYS_UID_MAX
并SYS_GID_MAX
覆盖这些保留用户,只是作为预防措施:您看,我还没有检查是否/哪些工具仅列出UID_MIN
..UID_MAX
用户,或者只需排除SYS_UID_MIN
..SYS_UID_MAX
用户即可。我怀疑有很多程序员错误地认为这两个集合是互补的,因此将这些保留的 UID/GID 视为系统帐户可能是最安全的选择。