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

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

(我宁愿不用这个创建非混乱的/ etc / passwd.)

我遇到了/ etc / subuid(在https://www.mankier.com/8/usermod中记录的其他地方),似乎有类似的东西. / etc / subuid究竟是什么,我可以用它来为我的setuid工具注册一个范围吗?

似乎这个/ etc / subuid东西被docker用于某种uid-mapping.如果我为我的应用程序创建一个新用户,通过/ etc / subuid为它保留一个subid范围,然后不用它与docker一起使用,这是让系统其他人知道我保留了一个uid范围的好方法?

最佳答案
有一个黑客,然后有一种方法来做到这一点.

hacky方法是在/etc/login.defs中引发UID_MIN和GID_MIN,以使您的保留UID介于SYS_UID_MAX和UID_MIN之间,以及SYS_GID_MAX和GID_MIN之间的GID(如果有).这样,普通工具(useradd,adduser,usermod等)不会将它们用于新用户帐户,除非你强制它们(通过明确指定新的UID和/或GID).您可能需要将此新间隙范围中的任何现有UID重新映射到UID_MIN..UID_MAX范围,并将GID重新映射到GID_MIN..GID_MAX范围,以便工具将它们视为普通用户帐户.

正确的方法是另外配置NSS(和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视为系统帐户可能是最安全的选择.

转载注明原文:docker – 保留一系列匿名UID;在/ etc / subuid - 代码日志