unix中的ls -l命令和密码文件

时间:2012-09-30 09:52:15

标签: shell unix filesystems

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

3 个答案:

答案 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读取。