/etc/passwd 中是否允许有注释行

/etc/passwd 中是否允许有注释行

我知道,在 RHEL 7.8 中,可以有空行/etc/passwd

但是你能有注释行吗?如果有的话,注释行会以什么开头?

答案1

用于处理帐户数据库getpwent()等的 musl C 库例程不允许在/etc/passwd/etc/shadow文件中进行任何类型的注释。 图书馆代码根本不把任何角色当作评论介绍人。 (它也不会将一行识别+为 YP 标志,也根本不允许使用任何特殊标记。)

如果你有任何针对 musl C 库构建的程序,请勿尝试向这些文件添加注释。

然而,GNU C 库和 FreeBSD C 库都允许评论。

更确切地说:

GNU C 库代码提供files所有 NSS 数据库的源代码(请参阅手册)允许以 a作为第一个非空白字符的nsswitch.conf行注释。#所以不仅仅是/etc/passwd可以/etc/shadow包含评论。

在 BSD 上,该/etc/passwd文件不是帐户数据库。在 BSD 上的帐户数据库不是一个平面文件数据库,但却是一个 Berkeley DB 文件(实际上是两个/etc/pwd.db/etc/spwd.db),根据 Berkeley DB 文件的性质,它不允许进行注释。 /etc/master.passwd编译成该工具的帐户数据库pwd_mkdb

/etc/passwdBSD 上的文件是由 发出的虚拟向后兼容文件,pwd_mkdb实际上并不用于 C 库例程的查找,并且仅适用于使用直接awk /etc/passwd等方式使用 shell 脚本的人,而不是更好的getent passwd命令(它包装了 C 库shell 脚本)。

在 FreeBSD 及其衍生产品上,/etc/master.passwd可以包含评论pwd_mkdb工具将评论复制到从/etc/master.passwd/etc/passwd,而不将其放入主 Berkeley DB 文件中。可以#选择在 之前仅添加 TAB 和 SPC 字符,这不是相当与 GNU C 库相同(它允许isspace()使用 GNU C 库例程的进程的语言环境中满足的任何空白字符,这可能是一个非常晦涩的 it-sometimes-a-comment-sometimes-a-secret-超级用户记录等待发生的错误)。

相比之下, OpenBSD 和 NetBSD 的pwd_mkdb命令不允许在 dummy 中添加注释/etc/master.passwd,也不会将注释插入到 dummy 中/etc/passwd

所以在FreeBSD 上你可以使用#TAB 和 SPC 前面的注释;/etc/master.passwd#以当前语言环境isspace()字符开头的注释/etc/passwd/etc/shadow以及基于 Linux 的操作系统上的一大堆其他 NSS 源代码,只要所有(相关)程序都链接到 GNU C 库。

答案2

中只允许用户输入/etc/passwd,其他任何内容都被视为格式错误,并导致某些依赖于该文件的工具失败。

TLDR:没有

答案3

中的每条记录/etc/passwd描述一个用户帐户,不支持注释行。

文件格式请参见passwd(5)( )。man 5 passwd

相关内容