所有 unix 和类 Unix 系统上的文件 /etc/shadow 和 /etc/passwd 的格式是否相同或是否存在显着差异?
我的意思是文件的语法,而不是文件位置或名称
据我所知,所有unix变体都有一个/etc/passwd
具有传统布局的文件,以便应用程序直接读取该文件。文件中的每一行都包含与struct passwd
字段对应的以冒号分隔的记录:
不同系统之间存在的一件事是,您可以对语法有多大的自由度。例如,GNU libc(即 Linux)会忽略以#
: 开头的行,它们是注释。GNU libc 还忽略行首的空格,因此可以缩进。无效行可能会导致程序停止处理文件或跳到下一行。
大多数现代系统不再在第二个字段中存储加密密码。该字段的内容并不能可靠地指示用户是否设置了密码(即使您发现了这一点,这也不能可靠地指示用户是否可以登录,因为还有许多其他身份验证方法,例如SSH 密钥、一次性密码、生物识别、智能卡、\xe2\x80\xa6)。
\n\n当密码不在 中时/etc/passwd
,它们的位置取决于系统。Rosetta Stone for Unix提到了许多 unix 变体。
/etc/shadow
,并且这已被包括 Linux 在内的其他人复制。Linux 和 Solaris 影子文件具有相同的格式;我不知道具有名为 的文件的其他系统是否/etc/shadow
使用相同的格式。/etc/master.passwd
,并且还具有用于更快访问的数据库文件,由pwd_mkdb
.请记住,/etc/passwd
几十年来一直无法保证包含完整的用户列表:用户可以来自其他数据库,例如NIS (YP)或LDAP。作为系统管理员,避免/etc/passwd
直接编辑文件;如果您的系统提供了它,请改用vipw
它(如果没有,请查阅您的手册以了解建议使用什么方法来修改用户数据库)。
我上面写的内容也适用于团体。中的字段/etc/group
是struct group
成员:组名、密码(大部分未使用)、数字组 ID 和以逗号分隔的用户名列表(将该组作为辅助组的用户)。Linux 有一个/etc/gshadow
文件,但很少使用,因为组身份验证尚未广泛应用。