有技术原因吗?这是 Linux 或 Unix 早期的产物吗?如果是的话,它有什么理由持续存在吗?
答案1
某些命令(例如chown
)可以接受用户名或数字用户 ID,因此允许全数字用户名会破坏这一点。
允许名称以数字开头并包含一些字母的规则可能被认为不值得付出努力;相反,只要求以字母字符开头。
编辑:
从其他回复看来,某些发行版已经突破了这一限制;在这种情况下,根据GNU Core Utils 文档:
POSIX 要求这些命令首先尝试将指定的字符串解析为名称,只有失败后,才尝试将其解释为 ID。
$ useradd 1000 # on most systems this will fail with:
# useradd: invalid user name '1000'
$ mkdir /home/1000
$ chown -R 1000 /home/1000 # This will first try to map
# to username "1000", but this may easily be misinterpreted.
添加名为“0”的用户只会带来麻烦(UID 0 == root 用户)。但请注意,组/用户 ID 参数前面可以带有“+”,以强制将其解释为整数。
答案2
这是在 ubuntu 14.04 上使用数字进行的测试:
root@ubuntu:~# useradd 232
root@ubuntu:~# mkdir /home/232
root@ubuntu:~# chown 232.232 /home/232
root@ubuntu:~# passwd 232
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ubuntu:~# login
c2 login: 232
Password:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information disabled due to load higher than 2.0
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$
$ whoami
232
和一个使用 unicode U+1F600 -
答案3
*Nix 用户名通常是由实用程序创建的 32 个字符长的字符串useradd
。正如您所说,这是早期 Unix(技术上是 BSD)标准的直接结果。根据 FreeBSD 手册页passwd(5)
:
登录名不得以连字符 (`-') 开头,并且不能包含 8 位字符、制表符或空格,或以下任何符号:`,:+&#%^()!@~*?<> =|/"'。美元符号 (`$') 只能作为 Samba 中使用的最后一个字符。任何字段都不能包含冒号 (`:'),因为历史上一直使用冒号来分隔用户中的字段数据库。
某些 *Nix 系统过去常常在用户名中出现特殊字符时抛出模糊错误,因此最终,特殊字符被禁止。在大多数现代 *Nix 系统中,更改passwd
/实用程序以支持特殊字符用户名相对容易useradd
,但大多数人都不愿意更改这样一个不重要的事情,因为它几乎没有影响,并且会导致向后不兼容。
编辑:
正如 Adonis 所说,实际上可以在现代 Linux 发行版中执行此操作,但这是不明智的(尤其是在遇到标准化或遗留程序时)。
答案4
正如答案中指出的,Linux 用户名能为全数字。然而,这是一个坏主意,因为它会让许多软件工具(以及人类系统管理员!)感到困惑。
出于这个原因,例如,全数字用户名和组名在 RHEL 7 中已弃用,在 RHEL 8 中被禁止:
8.7.1.
shadow-utils
不再允许全数字的用户名和组名和
useradd
命令groupadd
不允许用户名和组名仅包含数字字符。不允许此类名称的原因是,这可能会混淆许多使用用户和组名称以及用户和组 ID(数字)的工具。请注意,Red Hat Enterprise Linux 7 中已弃用全数字用户名和组名,并且 Red Hat Enterprise Linux 8 中完全删除了对它们的支持。