当我在 Yosemite 盒子上工作时,我发现两个用户组的 GID 值低于 0。
$ dscl -plist . -readall /Groups PrimaryGroupID
<dict>
<key>dsAttrTypeStandard:PrimaryGroupID</key>
<array>
<string>-2</string>
</array>
<key>dsAttrTypeStandard:RecordName</key>
<array>
<string>nobody</string>
<string>BUILTIN\Nobody</string>
</array>
</dict>
<dict>
<key>dsAttrTypeStandard:PrimaryGroupID</key>
<array>
<string>-1</string>
</array>
<key>dsAttrTypeStandard:RecordName</key>
<array>
<string>nogroup</string>
</array>
</dict>
它有效吗?它有特殊含义吗?
答案1
用户和组 ID 是无符号的,即始终为正数。然而,二进制补码系统中,有符号值 -1 的表示方式与最大可能的无符号值的表示方式相同 - 在 16 位字段中为 65535 (0xFFFF),在 32 位字段中为 4294967295 (0xFFFF'FFFF)。
在某些操作系统中,“nobody”用户拥有最大的 UID – 在操作系统中并不特殊,只是与 root 的 UID 0 完全相反。某些程序选择将此 UID 写为 -1 或(uid_t) -1
4294967295。
(当其他程序使用相同的值表示“未设置 UID”时,这确实会引起混淆……)