据我所知,从属 UID 和 GID 是以形成连续范围的方式分配给帐户的。
默认情况下,范围从 100000 开始,可能会延伸到 UID/GID 的理论最大值(尽管我还没有找到从 shell 查询此值的方法,/etc/login.defs
仅列出了工具允许的值)。
n*100000
现在,如果范围以 100000 的倍数开始,即以n
正整数 ( n>0
) 而不是 开始,对我来说会方便很多100000+n*65536
。这样我就能够立即看到哪个文件属于哪个主机用户。
有没有一种方法能够以某种方式影响从属 UID/GID 的分配,shadow-utils
从而实现更易于人类阅读的分配?
如果没有,是否可以简单地覆盖文件/etc/subuid
并/etc/subgid
使用符合要求的数据来获得我想要的内容?
答案1
您可以使用usermod
命令为 SUBUID 和 SUBGID 设置特定的 FIRST 和 LAST 值。例如:
user=<insertusername>
uid=$(id -u $user)
sudo usermod -v $((uid+200000))-$((uid+200000+65535)) -w $((uid+200000))-$((uid+200000+65535)) $user
这将向 /etc/subuid 和 /etc/subgid 添加一个具有所需值的条目。请参阅man usermod
获取更多信息。
答案2
是的,可以/etc/login.defs
使用SUB_UID_MIN
、SUB_UID_MAX
和SUB_UID_COUNT
参数及其SUB_GID_*
对应项进行配置。
所有这些参数都在 (5) 手册页中进行了描述login.defs
,但是本文档中给出的默认值并不适用于所有平台。
根据手册页,默认情况下应使用与您描述的行为类似的行为,并将范围设置为 10000 的倍数。但是,这会导致某些系统帐户和组出现问题,这些帐户和组在某些平台上受影响的 UID 和 GID 高于 65000(例如 Debian 及其衍生品)。因此,默认范围 65536 已被强制执行,并产生了您知道的副作用。
因此,为了获得更多人类可读的范围,您可以在文件中显式设置以下值/etc/login.defs
:
SUB_UID_MIN 100000
SUB_UID_MAX 600100000
SUB_UID_COUNT 100000
SUB_GID_MIN 100000
SUB_GID_MAX 600100000
SUB_GID_COUNT 100000
顺便说一句,文件/etc/subuid
确实/etc/subgid
可以手动编辑,但要确保范围不重叠,并且确保不会干扰任何进程、文件或任何其他对象所有权。换句话说,虽然在实际使用该系列之前这样做是安全的,但在使用之后就需要特别小心了。