关于从 16 位 UID 更改为 32 位 UID 的说明

作者:

Chris Wing <wingc@umich.edu>

最后更新时间:

2000 年 1 月 11 日

  • 内核代码在 ioctl 或数据结构中在用户和内核空间之间通信时,必须考虑 __kernel_uid_t 和 __kernel_uid32_t。

  • 内核代码应在内核私有结构和代码中使用 uid_t 和 gid_t。

在所有 Linux 架构上为 32 位 UID 还需要完成的工作

  • 磁盘配额有一个有趣的限制,它与最大 UID/GID 无关。它们受基础文件系统上的最大文件大小限制,因为配额记录写入与相关 UID 对应的偏移量。需要进一步调查以查看配额系统是否可以正确处理巨大的 UID。如果它可以在所有架构上处理 64 位文件偏移量,则这应该不是问题。

  • 决定是否保持与系统帐户文件的向后兼容性,或者是否应该像注释建议的那样破坏它(目前,旧的 16 位 UID 和 GID 仍然写入磁盘,并且先前填充空间的一部分用于存储单独的 32 位 UID 和 GID)

  • 需要验证 OS 仿真是否调用 16 位 UID 兼容系统调用(如果被仿真的操作系统使用了 16 位 UID),或者是否正确使用了 32 位 UID 系统调用。

    这至少会影响

    • Intel 上的 iBCS

    • sparc64 上的 sparc32 仿真(需要支持添加到 sparc32 的任何新的 32 位 UID 系统调用)

  • 验证所有文件系统是否行为正确。

    目前,32 位 UID _应该_适用于

    • ext2

    • ufs

    • isofs

    • nfs

    • coda

    • udf

    Ioctl() 修复已完成

    • ncpfs

    • smbfs

    具有简单修复以防止 16 位 UID 回绕的文件系统

    • minix

    • sysv

    • qnx4

    尚未检查其他文件系统。

  • ncpfs 和 smpfs 文件系统目前无法在所有 ioctl() 中使用 32 位 UID。已添加了一些具有 32 位 UID 的新 ioctl(),但还需要更多。(以及新的用户<->内核数据结构)

  • ELF 核心转储格式仅在 arm、i386、m68k、sh 和 sparc32 上支持 16 位 UID。修复此问题可能不是那么重要,但需要添加一个新的 ELF 部分。

  • 用于控制内核 NFS 服务器的 ioctl() 仅在 arm、i386、m68k、sh 和 sparc32 上支持 16 位 UID。

  • 确保 AX25 网络的 UID 映射功能正常工作(它应该是安全的,因为它总是使用 32 位整数在用户和内核之间通信)