当我们执行ls -l
命令列出目录中的文件时,是否访问/etc/passwd
文件。请解释 ??如果是,我该如何验证?
答案 0 :(得分: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
答案 1 :(得分:2)
我向Thomas添加了+1,但我想要注意该文件可能被访问,也可能没有。这取决于“/etc/nsswitch.conf”的内容。
在这种情况下
$ grep passwd /etc/nsswitch.conf
passwd: compat
将访问该文件,在本例中为
$ grep passwd /etc/nsswitch.conf
passwd: ldap
它不会。
答案 2 :(得分:1)
“ls -l”打印有关文件和目录(元数据)的信息,例如:访问权限,大小等。它不读取任何文件或目录的内容。即使您没有对文件的任何访问权限,您仍然可以读取其元数据(例如:访问权限,大小)。这同样适用于目录(例外:如果您无法读取驱动程序,则无法列出其内容,如果您无法“执行”目录,则无法将其用作访问其中某些内容的路径的组件)。
大多数现代Linux系统都配置为使用“影子密码”,这意味着 / etc / passwd 不包含密码哈希值(读取:敏感数据)。密码哈希存储在 / etc / shadow 中。这就是为什么每个人都可以读取 / etc / passwd 的原因(仅包含有关用户的元数据:他们的名字,ID,shell,组等),但 / etc / shadow 只能由root读取。