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

我想创build以域名命名的用户帐户。 adduser抱怨用户名需要匹配NAME_REGEX正则expression式。

 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的用户没有投诉。 是否有一个原因,我不应该修改正则expression式允许.-_

什么字符会导致问题,不应该被允许在用户名?

这是默认的NAME_REGEX

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

我对你的build议是遵循默认的NAME_REGEXbuild议的标准。 实际上,你可以在* NIX下的用户名中放入几乎任何东西,但是你可能会遇到一些奇怪的问题,这些问题可以用来作出假设。 例如:

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

我对你的问题:如果你去除不寻常的标点符号,你是否有很多域名会相互冲突? 例如,您是否同时拥有“QUALITY-ASSURANCE”和“QUALITYASSURANCE”作为域名?如果不是,您可以简单地采用剥离不寻常字符并使用剩下的用户名称的策略。

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

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


3.431用户名

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


3.278便携式文件名字符集

 The set of characters from which portable filenames are constructed. ABCDEFGHIJKLMNOPQRSTU VWXYZ abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9 . _ - 

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

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