我想知道当前 GNU/Linux 系统(例如 Ubuntu 11.04)的最大用户名长度是多少。
8 个字符似乎是一些历史标准,但我已经注意到在我当前的 Ubuntu 系统上这个限制并不适用。
答案1
当前限制为 32 个字符(根据useradd
手册页)。
答案2
答案略有不同。
useradd(1) 引用了 32 个字符的限制。据 AFAIU 介绍,这是基于 libc6 的。
某些实用程序或系统可能会强制使用较短的名称,或者在出现较长的名称时行为不一致,包括 top、ps、w/who、finger、NFS 和各种多平台目录系统 (NIS/NIS+、SMB、CIFS、Kerberos),这可能是基于其他/远程平台的限制。psutil
如果后者超过 8 个字符,许多各种命令将显示 UID 而不是用户名。
某些实用程序和应用程序可能会施加自己的任意限制。例如:IBM 的 DB2 显然不允许用户名超过 8 个字符的用户登录:https://www.toolbox.com/tech/data-management/question/length-of-username-permitted-on-db2-95-aix-6-012010/
8 个字符通常是一个合理的限制,并可节省打字时间。
答案3
正如其他答案所解释的那样,可以使用更长的用户名,但尝试限制最多 8 个字符的另一个实际原因是ps(1) 报告数字 uid,而不是超过 8 个字符的用户名。
答案4
从内核的角度来看,答案取决于 glibc 和 LOGIN_NAME_MAX —— 现在它更接近 256。
来自 centos 7 上的 /usr/include/bits/local_lim.h:
/* Maximum login name length. This is arbitrary. */
#define LOGIN_NAME_MAX 256
但是,这与使用 adduser/addgroup 或 useradd/groupadd 时的限制不同,因为它们依赖于下面的文件。
回想一下,可以通过 /etc/nsswitch.conf 配置 glibc 使用不同的后端,例如
passwd: files sss
在这种情况下,它会首先依赖 /etc/passwd,它可能(通过 useradd/groupadd 的方式)对用户/组名有 32 个字符的限制,然后再回退到 sss ( sssd
),这可能会有一个非常不同的限制(如果有 ActiveDirectory 支持,则似乎是 1024)。
请注意,/usr/include/grp.h 也有效地将组名定义为 256(在 centos 7 上检查)。
因此,对于本地帐户,限制可能是 useradd/groupadd 中引用的值(可能为 ~31)。对于不同的 nss 实现,它可能取决于服务器限制和系统上的 glibc — 在许多情况下,这可能是 256。