在用户名中加点有什么缺点?


27

一名学生刚刚问.,在用户名中打点()可能有什么弊端。例如:john.doe

这将如何影响系统或任何与此相关的应用程序?

Answers:


38

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_REGEXUbuntu中的默认值为(来自/etc/adduser.conf联机帮助页):

^[a-z][-a-z0-9]*$
  • 以小写字母开头,然后是任意数量的破折号,小写字母或数字。不_@或者.

所以,

总之.,Ubuntu用户名可以使用圆点,NAME_REGEX只需在中更改即可/etc/adduser.conf。看到它符合POSIX,.在任何符合POSIX的程序的用户名中都应该没有任何问题。

在用户名中启用点

  1. 在终端中运行以下命令:

    sudo nano /etc/adduser.conf
    
  2. 找到此行(在文件末尾附近)

    #NAME_REGEX="^[a-z][-a-z0-9]*$"
    

    并替换为

    NAME_REGEX='^[a-z][-.a-z0-9]*$'
    

    请注意,-必须保留括号表达式中的第一个字符[...],否则将其视为指定范围a-z

  3. Ctrl+ X,然后Y,然后Enter


参考文献:


@ vasa1感谢您指出这一点,已修复。
kiri 2014年

2
你好minerz029,在接受我所看到的答案之前,毫无疑问,这是一个很好的答案,能否请您提供Ubuntu做出此决定的原因。
Luis Alvarado 2014年

2
@LuisAlvarado:可能是为了与[non POSIX]程序兼容,这些程序期望使用更有限的字符集的用户名。Ubuntu缺省默认允许的字符几乎可以在几乎所有程序中使用。adduser手册页将默认正则表达式描述为“最保守”,这是用户名的安全方面。
kiri 2014年

1
这并没有为我工作,但添加NAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"/etc/adduser.conf做。
马里奥

1
不要更改正则表达式。只需致电useraddsudo useradd -m my.user。这就是我们在Userify中所做的,并且它也是跨平台的。
Jamieson Becker

3

读取用户名的应用程序可能会使用正则表达式,假定您的用户名遵循规则,因此无法处理您的用户名。


但是同样,他们随后可能会做出与发行版的假设相冲突的假设,对吗?
0xC0000022L 2014年

3

马克·哈伯(Marc Haber)解释了Debian错误#604242中的可能缺点(默认情况下,用户名中允许使用点):

用户名中包含圆点会导致使用scips产生一些问题chown,仍然会使用 圆点作为用户名和组名之间的分隔符。如果chown仍然接受点,则将有使用此符号的脚本,如果用户名包含点,则脚本将中断。

我建议保持当前的默认设置(可以被本地配置覆盖),直到chown不再接受点作为分隔符为止。

chown仍然接受的点作为分隔符,虽然它不再被记录在案。我同意应优先考虑POSIX兼容性,并且确实在多个系统上使用了包含点的用户名,而没有任何不利影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.