1

当我们执行ls -l命令列出目录中的文件时,/etc/passwd文件是否被访问。请解释 ??如果是,我该如何验证?

4

3 回答 3

5

是的。/etc/passwd用于将用户 ID 映射到用户名。我们可以使用 关闭-n它,它将显示数字用户 ID 和组 ID(uids、gids):

$ ls -l
total 0
-rw-rw-r-- 1 thomas thomas 0 Sep 30 10:54 bar

$ ls -n
total 0
-rw-rw-r-- 1 1000 1000 0 Sep 30 10:54 bar

终极证明:

$ strace ls -l 2>&1 | grep /etc/passwd
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4

$ strace ls -n 2>&1 | grep /etc/passwd
# no output
于 2012-09-30T09:56:17.060 回答
2

我向 Thomas 添加了 +1,但我想指出该文件可能会被访问​​,也可能不会。这取决于“/etc/nsswitch.conf”的内容。

在这种情况下

$ grep passwd /etc/nsswitch.conf
passwd:         compat

该文件将被访问,在这种情况下

$ grep passwd /etc/nsswitch.conf
passwd:         ldap

它不会。

于 2012-09-30T10:15:33.523 回答
1

"ls -l" 打印有关文件和目录(元数据)的信息,例如:访问权限、大小等。它不读取任何文件或目录的内容。即使您对文件没有任何访问权限,您仍然可以读取其元数据(例如:访问权限、大小)。这同样适用于目录(例外:如果您无法读取目录,则无法列出其内容,如果无法“执行”目录,则无法将其用作路径的组件来访问其中的内容)。

大多数现代 Linux 系统都配置为使用“影子密码”,这意味着/etc/passwd不包含密码哈希(读取:敏感数据)。密码哈希存储在/etc/shadow中。这就是为什么/etc/passwd对所有人都可读(仅包含有关用户的元数据:他们的姓名、ID、shell、组等),但/etc/shadow只能由 root 读取的原因。

于 2012-09-30T10:05:26.257 回答