在Linux的用户名中,我应该使用或不使用哪些字符?


39

我想创建一个以域名命名的用户帐户。adduser抱怨用户名需要匹配NAME_REGEX正则表达式。

adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.

我可以使用useradd添加用户而不会有所抱怨。是否有一个原因,我不应该修改正则表达式允许.-_

哪些字符会引起问题,并且不应在用户名中使用?

这是默认值NAME_REGEX

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

1
请注意,只要不是第一个字符,它就NAME_REGEX已经可以接受-
环Ø

为什么不添加.?考虑一个名为.或的用户..。然后,rm该用户名为..
乔恩

1
@Jon没问题,因为rm不是删除用户时要使用的命令。我同意..出于类似原因,这不是一个明智的名称,但rm也不是其中之一。
toon81 '18 -10-29

Answers:


26

我的建议是遵循默认NAME_REGEX推荐的标准。实际上,您几乎可以在* NIX下的用户名中放入任何内容,但是使用库代码进行假设时可能会遇到奇怪的问题。例子:

http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html

我对你的问题是:如果去除不常见的标点符号,您是否会有很多域名会相互冲突?例如,您是否同时具有“ QUALITY-ASSURANCE”和“ QUALITYASSURANCE”作为域名?

另外,您可以在/ etc / passwd信息中使用GECOS字段的“真实名称”部分来存储未经修改的原始domaain名称,脚本可以很容易地将其提取。


我担心的是随机遇到的意外错误部分。我可以很容易地删除句点,但仍然没有名称冲突的机会,但是-可能会引起问题。仍然不太可能。
Ed Haber

因此,我正在使用的debian系统正在使用用户www-data。因此,看起来像-应该可以在用户名中使用。
Ed Haber

实际上,该正则表达式在用户名中允许使用“-”!第一个字母必须为az,但用户名的后续字母可以为“-”,az或0-9。
steveha

哦!你是对的。我错过了额外的东西-当我看着它的时候。
Ed Haber

22

更具体地说,POSIX(“ Unix的便携式操作系统接口”)标准(IEEE标准1003.1 2008)规定


3.431用户名

用于标识用户的字符串;另请参阅用户数据库。为了在符合POSIX.1-2008的系统之间可移植,该值由可移植文件名字符集中的字符组成。该<hyphen>字符不应用作可移植用户名的第一个字符。


3.278可移植文件名字符集

The set of characters from which portable filenames are constructed.

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 . _ -

符合此标准的任何用户名都符合POSIX,并且应该是安全的。


6
虽然这是事实,但用户名中通常使用大写字符,这是人们普遍反对的-人们对区分大小写的密码有足够的麻烦,并且使他们不得不记住用户名中的大小写只会在用户名不符时被踢了。(例外:当您的用户名约定ALL UPPERCASE CHARACTERS
为时

1
从POSIX.1-2017开始,这些定义有所变化。3.431用户名现在是3.437用户名,3.278可移植文件名字符集
Chuck Wolber

@ voretaq7我认为合法的是保留用户名中的大小写,但使登录名不区分大小写。因此,用户名可以是CatInTheHat,但要登录以指定catinthehat或catintheHAT或其他名称。
StackOverflowUser

1

从NAME_REGEX可以推断出,除了a到z以及大写和小写以及数字0到9之外的所有内容都是不好的。


您要查找的单词是“推导”的。
wfaulk

再次查看正则表达式,-也被接受(只是不作为第一个字符。)还请注意,默认情况下,不接受大写字母( OP中提供的正则表达式中没有g标志,也没有A-Z包含NAME_REGEX。)NAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman
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.