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

一位学生刚刚问到用户名中有一个点( . )的缺点是什么。 例如: john.doe

这将如何影响系统或任何应用程序?

POSIX 说明了这个用户名:

[…]要在符合IEEE Std 1003.1-2001的系统之间移植,该值由便携式文件名字符集中的字符组成。 连字符不应用作便携式用户名的第一个字符。

…便携式文件名字符集是:

 ABCDEFGHIJKLMNOPQRSTU VWXYZ abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9 . _ - 

此外,/ /etc/adduser.conf文件的联机帮助页 Manpage图标 状态:

  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. 

Ubuntu中的默认NAME_REGEX是(来自/etc/adduser.conf联机帮助页):

 ^[az][-a-z0-9]*$ 
  • 从小写字母开始,然后是任意数量的破折号,小写字母或数字。 没有_@.

所以,

总之一点. 可以用于Ubuntu用户名,只需在/etc/adduser.conf更改/etc/adduser.conf 。 看来它符合POSIX,不应该有任何问题. 在任何POSIX兼容程序的用户名中。

在用户名中启用点

  1. 在终端中运行此命令:

     sudo nano /etc/adduser.conf 
  2. 找到这一行(靠近文件末尾)

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

    并替换它

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

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

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


参考文献:

  • 为什么在某些发行版中的用户名中不允许使用下划线(例如Debian)
  • man adduser.conf

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

Marc Haber解释了Debian bug #604242可能存在的缺点(默认情况下允许用户名中的点数):

在用户名中包含点会产生一些使用chown scipts问题,它仍然接受点作为用户名和组名之间的分隔符。 如果chown仍接受点,则会有使用此表示法的脚本,如果用户名包含点,则会中断。

我建议保持当前默认值(可以通过本地配置覆盖),直到chown停止接受点作为分隔符。

并且chown仍然接受点作为分隔符,尽管它不再被记录。 我同意POSIX兼容性应该占上风,并且我确实在几个系统上使用包含点的用户名而没有任何不利影响。