在/ etc / group中,第二个字段的含义是什么?


18

一个样本/etc/group文件包含以下条目:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:

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

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

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


将它们全部更改为什么,您将完成什么*
jordanm 2012年

我只看到!目前在我管理的10台以上服务器中的单个服务器上使用该组。为了简化某些检查脚本,始终在其中具有相同的字符会清除内容。好吧,如果实际上意味着相同的话。
托宁2012年

Answers:


28

你在想的!*还是x这里有着特殊的意义,因此令人担忧,有可能是它们之间的一些区别。

事实是,选择这些字符仅仅是因为它们脱颖而出,至少在西方人眼中如此。这些字符表示缺少值,异常情况或警告。您可以将其放在boogabooga此处并获得完全相同的效果。

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

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

  • 当Linux pwconv(8)程序看到时x,将其表示为“我已经将该公共密码哈希移动到影子密码文件中”。

    在实践中,这并不是一个重要的案例,因为现在转换为影子密码(或天堂帮助您)的时代已经过去。

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

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

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

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

我认为所有/etc/group密码字段都正常化没有任何问题,如果这样做会使您感觉更好。这样一来,您已经说过要手动处理这些文件是很高兴的,因此无论如何您可能都不喜欢使用那些关心区别的工具。无论如何,更改不会影响日常的系统操作。


感谢您的完整答复。目前,我正在编写脚本来检查服务器上的用户和组,我还想知道是否可以在该字段中找到其他任何char或char序列。从您的回答以及不那么琐碎的细节来看,我对此有更好的看法。再次感谢!
托宁2012年

1
对于脚本编写,您可能应该getpwent(3)与朋友通话。Perl在其标准库中有这些包装器,其他任何以Unix sysadmin为重点的脚本语言也应如此。如果您使用的语言没有这种包装,这将是一个很好的借口。:)
沃伦·扬

如果您仍在阅读将近六年的历史……谢谢您的回答,我看到了人们使用x*标记“未使用”密码字段之类的一些历史原因。尽管只是有点好奇,但手册页说该字段很可能会留空(数据库字段中的内容可能称为NULL-特别是在Oracle中,NULL和空字符串定义为相同)。因此,回到/ etc / group:为什么使用xor !或or *而不是仅将字段保留为空?与这些字符中的任何一个一样,两个连续的冒号也很突出。不重要-只是好奇
-Mathguy

1
@mathguy:空的密码字段表示“无密码”,与包含永远无法匹配真实密码的字符的密码字段不同。由于大多数Unix系统不使用组密码,因此这是没有区别的区别,但是您不想养成麻烦的习惯,例如大多数Linux系统/etc/shadow。另外,我拒绝双冒号同样清晰的观点。快速,这里有多少个空字段::::::?现在多少::x:*:!:x:*:?我相信冒号的数量相同,但答案却不同。
沃伦·杨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.