示例/etc/group
文件包含以下条目:
root:*:0:
adm:!:4:logcheck
antoine:x:1000:
我读过的手册页(Debian 和 OSX)说第二个字段是存储组密码。由于很少使用,因此通常会在其中放置星号*
或 a x
,而不是将其留空。
手册shadow
页还说第二个字段应该存储crypt
函数的结果。如果存储了无效结果(例如*
或!
),则表示该密码不能用作身份验证方法。
该group
文件也同样如此吗?为什么我的文件中最终会出现 3 个group
具有相同含义的不同字符?我可以安全地全部更改为 吗*
?
答案1
您认为!
,*
或x
在这里有特殊含义,因此担心它们之间可能存在一些区别。
事实上,选择这些角色只是因为他们很突出,至少在西方人眼中是这样。这些字符表示缺失值、异常情况或警告。你可以放在boogabooga
这里并拥有确切地一样的效果。
这是因为 Unix 类型系统上处理密码的方式所致。当系统收到密码输入时,哈希值并将其与存储的哈希值进行比较。因此,这里重要的是您使用的某些字符或字符序列不可能是有效的密码哈希。 (出于显而易见的原因,它也不能包含冒号。)
尽管从核心操作系统的角度来看,这些字符之间没有区别,但有一些约定:
当 Linux
pwconv(8)
程序看到时x
,它意味着“我已经将此公共密码哈希移动到影子密码文件中”。这在实践中并不是一个重要的案例,因为皈依的日子(或者,天堂会帮助你,从)影子密码现在已经成为过去。
如果您使用
usermod -L
或passwd -l
来锁定用户,则!
具有特殊含义,/etc/shadow
因为这是“破坏此哈希,使其不再匹配”的约定。在存储的哈希中添加任何其他字符也会破坏它。违反此约定只会阻止
usermod -U
或passwd -u
阻止解锁用户的登录。同样正确的是,由于您通过添加虚假字符手动锁定了它,因此您可以通过删除它来手动解锁它。然而,所有这些都只是关于这个问题的琐事。没有
groupmod -L
orgpasswd -l
,因此!
中没有约定/etc/group
。更多琐事:如果你是要手动锁定用户帐户,您应该远离该
[A-Za-z0-9/\]
集合,因为这些是哈希的合法字符。这是usermod
使用!
此处而不是 的原因之一x
。
我不认为规范化所有/etc/group
密码字段有什么问题,如果这能让您感觉更好的话。通过这样做,您已经表示您很乐意手动破解这些文件,因此您可能不是那种使用关心这些区别的工具的人。无论如何,这一变化不会对日常系统操作产生影响。