GID低于0是什么意思?

GID低于0是什么意思?

当我在 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) -14294967295。

(当其他程序使用相同的值表示“未设置 UID”时,这确实会引起混淆……)

相关内容