用户名中有一个点有什么缺点?

用户名中有一个点有什么缺点?

.一位学生刚刚问,用户名中有一个点 ( ) 有什么缺点。例如: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_REGEXUbuntu 中的默认设置是(来自/etc/adduser.conf手册页):

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

所以,

总之,.Ubuntu 用户名可以使用点,NAME_REGEX只需将 中的 改为 即可。由于它符合 POSIX,因此在任何符合 POSIX 的程序中,在用户名中/etc/adduser.conf使用 应该不会有任何问题。.

在用户名中启用点

  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,然后YEnter


参考:

答案2

Marc Haber 解释了 Debian 漏洞可能带来的负面影响#604242(默认允许用户名中包含点):

用户名中包含点会给使用 的脚本带来一些问题 chown,因为该脚本仍然接受点作为用户名和组名之间的分隔符。如果chown仍然接受点,那么将有脚本使用此表示法,如果用户名包含点,则脚本将中断。

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

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

答案3

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

答案4

这种限制似乎是有原因的。

如果您尝试为脚本运行 systemd 服务,则它可能以 root 身份启动,而不是以用户身份启动。这是因为 systemd 无法将带点的用户(例如 domain.com 用户名)识别为有效用户,而是以 root 身份运行服务。尽管如此,这个问题在 systemd 端已经可以修复,但仍存在风险。

此外,用户名中包含点还会对使用 chown 的脚本造成一些问题,因为 chown 仍接受点作为用户名和组名之间的分隔符。如果 chown 仍接受点,则将有脚本使用此表示法,如果用户名中包含点,则脚本将无法运行。

相关内容