在 /etc/group 中的第二个字段是什么意思?

Læt*_*æti 21 users password group

示例/etc/group文件包含以下条目:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:
Run Code Online (Sandbox Code Playgroud)

我读过的手册页(Debian 和 OSX)说第二个字段是存储组密码。由于它们很少使用,通常在其中放置星号*或 ax而不是将其留空。

shadow手册页也说,这第二个字段应存储的结果crypt功能。如果存储了无效的结果(例如*!),则意味着密码不能用作身份验证方法。

这也适用于group文件吗?为什么我的group文件中有 3 个不同的字符都具有相同的含义?我可以安全地全部更改为*吗?

War*_*ung 32

您认为!,*x在这里具有特殊含义,因此担心它们之间可能存在某些区别。

事实是,选择这些角色只是因为它们与众不同,至少在西方人眼中是如此。这些字符意味着缺失值、异常情况或警告。你可以放在boogabooga这里并产生完全相同的效果。

这是因为在 Unix 类型系统上处理密码的方式。当系统收到密码条目时,它会对其进行散列并将其与存储的散列进行比较。因此,这里重要的是您使用了一些不可能是有效密码哈希的字符或字符序列。(出于显而易见的原因,它还不能包含冒号。)

尽管从核心操作系统的角度来看,这些字符之间没有区别,但有一些约定:

  • 当 Linuxpwconv(8)程序看到 时x,这意味着“我已经将这个公共密码哈希移动到影子密码文件中”。

    这在实践中并不是一个重要的案例,因为转换为(或者,天堂帮助你,来自)影子密码的日子已经过去了。

  • 如果您使用usermod -Lpasswd -l锁定用户,则!具有特殊含义,/etc/shadow因为这是“打破此散列使其不再匹配”的约定。

    向存储的哈希添加任何其他字符也会破坏它。违反此约定只是防止usermod -Upasswd -u解锁用户的登录。同样正确的是,由于您通过添加虚假字符手动锁定了它,因此您可以通过删除它来手动解锁它。

    然而,关于这个问题,所有这些都只是琐事。没有groupmod -Lor gpasswd -l,因此没有!约定/etc/group

    更多琐事:如果你用手工将锁定用户帐户,则应该从远离[A-Za-z0-9/\]集,这是因为它们的散列合法字符。这是usermod使用!here 而不是x.

我认为标准化所有/etc/group密码字段没有任何问题,如果这能让您感觉更好。通过这样做,您已经说您很高兴手动破解这些文件,因此您可能不是那种使用关心区别的工具的人。无论如何,更改不会对日常系统操作产生影响。