groupadd 允许的组名称是什么?

groupadd 允许的组名称是什么?

我跟着这些说明构建 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/passwdor中使用它们/etc/group
  • 仅由数字组成的名称是一个坏主意 -如果数字序列位于用户/组数据库中,则应该将其视为名称,但其他应用程序可能会将任何数字视为数字 ID chownchgrp
  • 强烈建议不要在用户名中使用首字母-或 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_nameIFF 长度检查通过(同样对于useradd, via is_valid_user_name)。

相关内容