Answers:
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
只需在中更改即可/etc/adduser.conf
。看到它符合POSIX,.
在任何符合POSIX的程序的用户名中都应该没有任何问题。
在终端中运行以下命令:
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。
参考文献:
NAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"
在/etc/adduser.conf
做。
useradd
:sudo useradd -m my.user
。这就是我们在Userify中所做的,并且它也是跨平台的。
马克·哈伯(Marc Haber)解释了Debian错误#604242中的可能缺点(默认情况下,用户名中允许使用点):
用户名中包含圆点会导致使用scips产生一些问题
chown
,仍然会使用 圆点作为用户名和组名之间的分隔符。如果chown
仍然接受点,则将有使用此符号的脚本,如果用户名包含点,则脚本将中断。我建议保持当前的默认设置(可以被本地配置覆盖),直到
chown
不再接受点作为分隔符为止。
而chown
仍然接受的点作为分隔符,虽然它不再被记录在案。我同意应优先考虑POSIX兼容性,并且确实在多个系统上使用了包含点的用户名,而没有任何不利影响。