我想创建以域名命名的用户帐户。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]*\$"
更具体地说,POSIX(“Unix 的便携式操作系统接口”)标准(IEEE 标准 1003.1 2008)规定:
3.437 用户名
3.282 可移植文件名字符集
任何符合此标准的用户名都符合 POSIX 标准,并且应该是安全的。
我对您的建议是遵循默认 NAME_REGEX 推荐的标准。实际上,您几乎可以在 *NIX 下的用户名中添加任何内容,但您可能会在使用做出假设的库代码时遇到奇怪的问题。一个例子:
https://web.archive.org/web/20170928165345/http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html
我的问题是:如果去掉不寻常的标点符号,您是否有很多域名会相互冲突?例如,您是否同时拥有“QUALITY-ASSURANCE”和“QUALITYASSURANCE”作为域名?如果没有,您可以简单地采用去除不寻常字符并使用剩余内容作为用户名的策略。
此外,您可以使用 /etc/passwd 信息中GECOS 字段的“真实姓名”部分来存储原始的、未修改的域名,脚本可以很容易地提取它。
这种限制似乎是有原因的。
如果您尝试为脚本运行 systemd 服务,它可以以 root 而不是用户身份启动。这是由于 systemd 无法将带点的用户(例如 domain.com 用户名)识别为有效用户,而是以 root 身份运行服务。这仍然可以在 systemd 端修复,但仍然存在风险。
用户名中还有点会在使用 chown 的脚本中产生一些问题,它仍然接受点作为用户名和组名之间的分隔符。如果 chown 仍然接受点,则会有使用此表示法的脚本,如果用户名包含点,则会中断。
从 NAME_REGEX 可以推断出除了大小写的 a 到 z 以及数字 0 到 9 之外的所有内容都是不好的。