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


8

那么,为什么在Debian(以及其他发行版)中,下划线被认为是用户名的错误字符,而adduser在Ubuntu中,下划线已被从NAME_REGEX中删除了?


Debian已将下划线设置为与软件包相关的用户名的要求。debian.org/doc/debian-policy/...
Rfraile

Answers:


7

POSIX 指定使用可移植字符作为用户名和组名。
_ - .允许使用的字符,请NAME_REGEX检查用户名是否仅包含指定的字符。发行版开发人员定义是否拒绝其他字符。例如,Ubuntu确实.默认禁止使用。

添加此限制可避免干扰其他系统工具,这些工具可能会解释特殊字符。考虑变量$PATH,当您有一个具有名称的用户my:user并将您的主目录添加到$PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/my:user/bin

目录/home/myuser/bin并且(可能)不存在。此外,/etc/passwd将有两个:以上的需求。

编辑:
Debian的adduser(3.110版)使用/^[_.A-Za-z0-9][-\@_.A-Za-z0-9]*\$?$/的用户名检查,_ 允许的,只要NAME_REGEX不禁止这样做。


1
但问题_不是:……
乔什(Josh)

至少根据adduser的说法-posix中也不允许使用@
山姆

是的,虽然这解释了为什么您不应该允许:它没有解释_为什么不好。
山姆

1
_默认为允许,请参见编辑。我举了一个禁止字符的例子来说明:它可能存在的问题。
摇摆

@ Sam,@在POSIX中不允许使用,请参见askubuntu.com/a/405668/13482
Daniel Serodio

3

这里已经回答类似的问题

从理论上讲,您几乎可以将任何想要使用的ASCII字符用作用户名,但是,为了避免某些错误,例如上面文章中提到的错误,可以设置避免某些问题的正则表达式。


:即使您/etc/passwd手动编辑(或大多数其他用户数据库),也无法在用户名中使用,换行符或空字符。
吉尔斯(Gilles)“所以

@Gilles是的,我纠正了答案,但是下划线很好,可以回答NAME_REGEX可以防止某种错误的问题,但未将其设置为默认值,因为通常允许使用这些字符。
tmow 2011年

0

我正在使用Debian Squeeze,并且设法创建了一个带下划线的用户adduser user_1。您为什么说不允许他们?


也许我误解了。我只是记得在Debian服务器上编辑/etc/adduser.conf,而NAME_REGEX(即不允许的名称regex)包含下划线。但是,在此处对此进行了评论,但我想我认为它代表默认的NAME_REGEX。
山姆

NAME_REGEX允许的名称正则表达式,而不是不允许的名称regex ...即,如果名称匹配,NAME_REGEX则该名称有效。
乔什(Josh)

Debian的莱尼(稳定,我写)没有NAME_REGEX/etc/adduser.conf,和内置的默认者禁用_
吉尔(Gilles)“所以,别再邪恶了”,
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.