我跟着这些说明构建 Shadow,它提供了groupadd
命令。我现在在尝试此操作时遇到错误:
$ groupadd automake1.10
groupadd: 'automake1.10' is not a valid group name
我检查了字母数字名称,它们工作正常。
答案1
具体看源码libmisc/chkname.c
。 Shadow 相当保守:名称必须与正则表达式匹配[_a-z][-0-9_a-z]*\$?
,并且最多可以有GROUP_NAME_MAX_LENGTH
一个字符长(配置选项,默认为 16;用户名通常最多可以达到 32 个字符,具体取决于编译时确定)。
Debian 放宽了很多检查。从挤压开始,除了空白和:
都是允许的。看错误#264879和错误#377844。
POSIX要求允许任意大小写的字母、数字和._-
(就像文件名一样)。如果你不关心可移植性,POSIX 不会设置任何限制。许多建议的限制来自于使用:
- 冒号、换行符和空值都被排除在外;你只是不能在
/etc/passwd
or中使用它们/etc/group
。 - 仅由数字组成的名称是一个坏主意 -如果数字序列位于用户/组数据库中,则应该将其视为名称,但其他应用程序可能会将任何数字视为数字 ID
chown
。chgrp
- 强烈建议不要在用户名中使用首字母
-
或 a.
,因为许多应用程序希望能够传递$user.$group
给外部实用程序(例如chown $user.$group /path/to/file
)。组名中的A.
应该会引起更少的麻烦,但我仍然建议不要使用它。 /
也可能会造成麻烦,因为某些程序希望能够在文件名中使用用户名。- 外壳扩展的任何角色都可能有风险。
- 如果您不关心与可能使用不同编码的系统共享,那么非 ASCII 字符应该没问题。
1所有现代实现都期望chown $user:$group
但支持chown $user.$group
向后兼容性,并且有太多应用程序通过传递点来删除兼容性支持。
答案2
如果您喜欢冒险,可以/etc/group
直接编辑并输入您喜欢的任何组名称。此外,这还有一个额外的好处,当您遇到 @Gilles 提到的问题之一时,您可能无法加载编辑器来解决问题,甚至根本无法登录 - 为您提供恢复损坏系统的宝贵经验!
答案3
为最近探索此问题的任何人提供更新:
@gilles-so-stop-being-evil 是正确的,权威来源是https://github.com/shadow-maint/shadow/blob/master/libmisc/chkname.c
,特别是该is_valid_name
函数,但该文件中的正则表达式自发布原始答案以来已发生变化:现在是
[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?
代码中强制执行一项警告,那就是禁止使用全数字名称。长度检查由 强制执行is_valid_group_name
,它调用is_valid_name
IFF 长度检查通过(同样对于useradd
, via is_valid_user_name
)。