在我从事 IT 的整个职业生涯中,我经常看到用户名长度受到限制(通常为 8 个字符)。这种情况在各种系统上都会发生,包括 Active Directory 和数据库应用程序。
这有什么原因吗?关于用户名创建有最佳实践吗?
答案1
这是传统 Unix 系统的一个限制,国家情报系统目录服务尤其如此。通常,只有在组织试图保持所有应用程序中的用户名一致时才会设置此限制(这通常是一个好主意)。
答案2
最近我发现的主要问题是 Solaris (10) 上的 ps,它会删掉第 9 个以上的字符,因此例如如果你需要 grep 用户名它就不会匹配。
$ sudo -u longusername ps -fu longusername
UID PID PPID C STIME TTY TIME CMD
longuser 14012 11985 0 09:58:39 pts/2 0:00 ps -fu longusername
如果对包含属于该用户的文件的目录执行 ls -l,则列会变得不对齐。
$ ls -ld /export/home/l*
drwxr-xr-x 2 lauser users 6 Mar 23 10:21 /export/home/lzuser
drwxr-xr-x 2 longusername users 6 May 4 10:02 /export/home/longusername
drwxr-xr-x 2 lzuser users 6 Mar 12 11:21 /export/home/lzuser
基本上,您需要警惕任何处理登录名而不仅仅是 UID 的工具。这可能包括读取或写入日志文件或数据库的内容,或使用 last、who、finger、ls、ps 等工具的输出。
通过 Google 快速搜索,你找到了这个页面(存档于 Wayback Machine):
这又增加了一些理由。
关于用户名创建的最佳实践,使用大写字母而不是小写字母的登录名也会带来麻烦,因此也应该避免这种情况。
当某些(较旧的)系统看到仅使用大写字母登录时,它们会默认假设用户的终端不支持小写字母,因此将所有内容设置为大写字母(这可以防止输入密码并且在登录后无法输入 Unix 命令!)
编辑(2019/04/16):
我刚刚注意到在 RHEL 7.5 上,ps 的输出也不能很好地显示:
$ ps -fulongusername
UID PID PPID C STIME TTY TIME CMD
longuse+ 1230 27243 0 Apr13 pts/0 00:00:00 vim somescript.sh
longuse+ 1701 27243 0 Apr05 pts/0 00:00:00 vim another-script.sh
longuse+ 3116 27243 0 Apr12 pts/0 00:00:01 vim test_script.sh
它用“+”截断用户名,如果您不熟悉用户,这没有帮助,并且意味着您不能依赖 ps 的输出作为需要知道谁拥有进程的脚本的输入。