我打算尝试 Solaris 11,并且想知道为什么新用户的默认 UID 如此高得离谱 - 例如从 65534 开始,然后向下下降(65533、65532,...)?这有充分的理由吗?我当然知道如此高的数字是“负数”,并且通常用于像无人用户这样的非特权用户......但这些是正常的特权用户。
从某个低得多的值(例如 1000)开始并向上计数(1001、1002,...)不是更合乎逻辑吗?有什么充分的理由不这样做吗?
更多的专业 Solaris 管理员在为用户分配 UID 时会做什么?
有任何文件/来源解释默认编号方案的原因吗?
答案1
听起来您的环境中的某些东西创建了高于预期的 uid,因此它只是从那里开始工作。
这索拉里斯11.1用户添加手册页状态:
UID 默认为当前分配的最高编号之上的下一个可用(唯一)编号。例如,如果分配了 UID 100、105 和 200,则下一个默认 UID 编号将为 201。
答案2
只是猜测,但这听起来像是一种避免低编号“标准”用户 ID 和本地 UID 之间冲突的方法。本地 UID 从最大值开始倒数,系统 UID 从最小值开始倒数,它们发生冲突的可能性几乎为零。
(我只使用过一次在一台机器上拥有超过 64K 普通用户的系统,那是在 LDAP 出现之前的时代。)
您提到的常见 1-1000 方案有几个问题:
您将烧毁所有尚未使用的值。您必须保留比您认为需要的更多的东西。
如果你猜错了,就会遇到向前兼容性问题。我使用过的 *ixes 在一个版本中阈值是 500,然后在下一个版本中阈值是 1000,毫无疑问是因为有人认为他们已经用完了标准 UID,或者有危险。
答案3
我不会说 65534 是一个高得离谱的数字。它并没有那么负面(标准没有说明 uid_t 是 16 位还是 32 位,也没有说明它是有符号还是无符号),并且与 Solaris 允许的范围相比仍然相当低。如果 useradd 选择 2147483647(Solaris 支持的最高用户 ID 号),我可能只会反对。我对您的案例中选择的 65534 感到困惑,因为它应该已经被设置为旧版 NFS 匿名用户。
无论如何,我不会重现您所描述的内容:
# cat /etc/release
Oracle Solaris 11.1 X86
Copyright (c) 1983, 2012, Oracle and/or its affiliates. All rights reserved.
Assembled 19 September 2012
# tail /etc/passwd
webservd:x:80:80:WebServer Reserved UID:/:
postgres:x:90:90:PostgreSQL Reserved UID:/:/usr/bin/pfksh
svctag:x:95:12:Service Tag UID:/:
unknown:x:96:96:Unknown Remote UID:/:
nobody:x:60001:60001:NFS Anonymous Access User:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:
aiuser:x:61:61:AI User:/:
pkg5srv:x:97:97:pkg(5) server UID:/:
jlliagre:x:100:10:jlliagre:/home/jlliagre:/usr/bin/ksh
#
# useradd foo
# tail -2 /etc/passwd
jlliagre:x:100:10:jlliagre:/home/jlliagre:/usr/bin/ksh
foo:x:101:10::/export/home/foo:/usr/bin/bash
这与用户添加手册页其中规定:UID 默认为当前分配的最高编号之上的下一个可用(唯一)编号。