由于正则表达式错误,无法创建用户。

我正在使用Ubuntu 12.10桌面版32位。目前我只有一个用户,类型是管理员。我想创建另一个管理员用户,但是我一直收到以下错误信息:
“无法创建用户” “GDBus.Error:org.freedesktop.Accounts.Error.Failed: 运行'/usr/sbin/adduser'失败:/usr/sbin/adduser返回了一个错误(1):adduser: 请键入与通过NAME_REGEX[_SYSTEM]配置的正则表达式匹配的用户名。使用`--force-badname'选项来放宽此检查或重新配置NAME_REGEX。”
非常感谢任何建议。

1请问您能否编辑并更具体地告诉我们您是如何出现这个错误的?是一个命令吗? - Zilvador
避免此事的几个原因已经添加在这里:https://askubuntu.com/a/1379862/519455 - Arunas Bartisius
5个回答

您输入的用户名包含非法字符。请尝试输入一个只包含小写英文字母的简单用户名 - daniel 是可接受的,&&Daniel <*> Johnson## 不可接受。

2这是正确的答案。如果错误信息显示实际的正则表达式而不是变量名,会更有帮助... - Gabe Hiemstra
这对我起作用了。谢谢。 - HassanSh__3571619

如果您尝试创建一个用户名包含被视为不可接受的字符的用户,通常会收到此消息。您可以尝试使用图形界面更改用户名,或者通过以下命令在命令行中放宽检查。
sudo adduser --force-badname <username>

如果你想将用户添加到sudo组中,请运行以下命令。
sudo adduser <username> sudo

2-1,我不会鼓励这样做。限制很可能是有原因的。 - alexia
1@nyuszika7h 我想知道这会对系统有什么影响?我只是在寻找一个例子,因为我要为我的邮件账户创建一个用户。 - sitilge

在Debian系统中,定义可接受的用户名的正则表达式可以在/etc/adduser.conf文件中找到。
一个典型的正则表达式(在我的系统上找到)是:
NAME_REGEX="^[a-z][-a-z0-9_]*\$"

我不想过多地偏离正则表达式解析的主题,但插入符号^表示用户名的开头字符必须是小写字母a到小写字母z。其余字符可以是小写字母a-z、0-9、连字符或下划线。正如其他答案中提到的,如果你喜欢,可以覆盖此检查。默认情况下,正则表达式是区分大小写的。


我在写作时遇到了同样的问题,并且解决了它。
# adduser --home /Ali Ali

我得到了一个错误。

adduser --home /Ali Ali
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.

我只是按照下面所示的方法,将大写字母删除后解决了这个问题。
# adduser --home /ali ali
Adding user `ali' ...
Adding new group `ali' (1001) ...
Adding new user `ali' (1001) with group `ali' ...
Creating home directory `/ali' ...
Copying files from `/etc/skel' ...
passwd:     
passwd: password updated successfully

你可以通过使用--force-badname选项'adduser --force-badname Ali'来强制执行此操作,或者通过更改上述配置文件中的正则表达式来实现,但是...
不允许使用大写字母的原因是它会导致用户名模糊和混淆,无论是对人类还是对程序而言。例如,如果允许或强制使用大写字母,John、john、JOHn和JOHN将被视为不同的用户名(四个相同字母的组合有十六种变体,包括大小写)。至于其他符号,它可能在某些情况下导致灾难性和严重后果-例如,在命令行中使用管道符号'|'可能是一个非常糟糕的主意,因为它在命令行中有特殊含义,并且有时对其他程序也可能处理不好用户名中的该符号。对于大写字母,标准电子邮件通常不区分大小写,如果以这种方式使用,可能会导致邮箱混乱或无法投递-通常将所有内容转换为小写,因为这是历史标准,更不用说RFC中包含的内容了。如果你超出了这些限制,请小心。我并不是说永远不要这样做-但请注意,这将是一种实验性的做法,并且可能不适用于你所有的目的。