.
一位学生刚刚问,用户名中有一个点 ( ) 有什么缺点。例如:john.doe
这会对系统或者任何应用程序产生什么影响?
答案1
POSIX状态关于用户名:
[...] 为了便于在符合 IEEE Std 1003.1-2001 的系统间移植,该值由可移植文件名字符集中的字符组成。连字符不应用作可移植用户名的第一个字符。
... 便携式文件名字符集是:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -
此外,/etc/adduser.conf
该文件的手册页状态:
VALID NAMES
adduser and addgroup enforce conformity to IEEE Std 1003.1-2001,
which allows only the following characters to appear in group
and user names: letters, digits, underscores, periods, at signs
(@) and dashes. The name may not start with a dash. The "$" sign
is allowed at the end of usernames (to conform to samba).
An additional check can be adjusted via the configuration
parameter NAME_REGEX to enforce a local policy.
然而,
虽然两个规范似乎都包含点,但 Ubuntu(至少在我的 13.04 上)似乎不允许它:
⊳ sudo adduser as.df
adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX[_SYSTEM] configuration variable. Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.
NAME_REGEX
Ubuntu 中的默认设置是(来自/etc/adduser.conf
手册页):
^[a-z][-a-z0-9]*$
- 以小写字母开头,然后是任意数量的破折号、小写字母或数字。没有
_
,@
或.
。
所以,
总之,.
Ubuntu 用户名可以使用点,NAME_REGEX
只需将 中的 改为 即可。由于它符合 POSIX,因此在任何符合 POSIX 的程序中,在用户名中/etc/adduser.conf
使用 应该不会有任何问题。.
在用户名中启用点
在终端中运行此命令:
sudo nano /etc/adduser.conf
找到此行(靠近文件末尾)
#NAME_REGEX="^[a-z][-a-z0-9]*$"
并将其替换为
NAME_REGEX='^[a-z][-.a-z0-9]*$'
请注意,
-
必须保留括号表达式中的第一个字符[...]
,否则它将被视为指定范围a-z
。按Ctrl+ X,然后Y按Enter。
参考:
答案2
Marc Haber 解释了 Debian 漏洞可能带来的负面影响#604242(默认允许用户名中包含点):
用户名中包含点会给使用 的脚本带来一些问题
chown
,因为该脚本仍然接受点作为用户名和组名之间的分隔符。如果chown
仍然接受点,那么将有脚本使用此表示法,如果用户名包含点,则脚本将中断。我建议保留当前默认值(可以通过本地配置覆盖),直到
chown
停止接受点作为分隔符。
并且chown
仍然接受点作为分隔符,尽管它不再有文档记录。我同意 POSIX 兼容性应该占上风,而且我确实在多个系统上使用包含点的用户名,没有任何不利影响。
答案3
读取用户名的应用程序可能会使用正则表达式,该正则表达式假定您的用户名遵循规则,因此无法处理您的用户名。
答案4
这种限制似乎是有原因的。
如果您尝试为脚本运行 systemd 服务,则它可能以 root 身份启动,而不是以用户身份启动。这是因为 systemd 无法将带点的用户(例如 domain.com 用户名)识别为有效用户,而是以 root 身份运行服务。尽管如此,这个问题在 systemd 端已经可以修复,但仍存在风险。
此外,用户名中包含点还会对使用 chown 的脚本造成一些问题,因为 chown 仍接受点作为用户名和组名之间的分隔符。如果 chown 仍接受点,则将有脚本使用此表示法,如果用户名中包含点,则脚本将无法运行。