普通用户可以读取/ etc / passwd,这是一个安全漏洞吗?


19
ls -l /etc/passwd

$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1862 2011-06-15 21:59 /etc/passwd

因此普通用户可以读取该文件。这是安全漏洞吗?

Answers:


49

实际的密码哈希存储在中/etc/shadow,普通用户无法读取。 /etc/passwd包含有关所有用户必须可读的用户ID和Shell的其他信息,系统才能正常运行。


3
并非如此-过去密码一直保存在/ etc / passwd中-但这使暴力匹配变得简单明了-因此,现代系统使用/ etc / shadon和pam_unix等。
symcbean 2011年

4
现代Linux的使用/etc/shadow。BSD使用/etc/master.passwd。Solaris使用/etc/security/passwd。HP-UX的使用情况/.secure/etc/passwd在继续……
Chris S

16

通常,散列密码存储在/etc/shadow大多数Linux系统上:

-rw-r----- 1 root shadow 1349 2011-07-03 03:54 /etc/shadow

(它们存储在/etc/master.passwdBSD系统。)

需要执行身份验证的程序仍然需要以root特权运行:

-rwsr-xr-x 1 root root 42792 2011-02-14 14:13 /usr/bin/passwd

如果您不喜欢setuid root程序和系统中包含所有哈希密码的单个文件,则可以将其替换为Openwall TCB PAM模块。这为每个用户提供了自己的文件,用于存储其哈希密码 -结果,setuid root可以大大减少系统上的程序数量。


13

密码已经存储/etc/passwd多年了;名称是旧的,保留了作为本地用户数据库的功能,并且为此目的所有人都必须可读。


2
世界的可读性是设计决定,而不是必须的
Ben Voigt

@Ben:因此没有人可以识别属于其他人的文件是合理的吗?如今,这是NSS的本地商店,而不是 PAM 的本地商店。
geekosaur 2011年

1
完全有可能使用特权服务执行uid->名称转换,而不允许非特权用户枚举整个用户列表。一些操作系统选择该选项。
Ben Voigt

1
@joechip当前的操作系统并非旨在使用户彼此隐藏。可以用/ etc / passwd以外的更多方式枚举所有用户。在Linux上为ls -la / home,在MacOS X上为ls -la / Users,在Windows 7中为dir C:\ Users,在Unix系统中为ps -afux。更改设计选择Ben Voigt只会在不更改安全性的情况下使生活变得困难。
Magicianeer

1
@Magicianeer-只是说Windows示例不是很正确。您可以通过其他方法来获取用户,但是查看C:\ users文件夹将仅列出已登录的用户。没有任何系统用户。
burnt_hand 2011年

6

在某种程度上是可以识别用户的。过去,您还可以获取他们的密码。但是,一个真正值得破解的用户名root是没有密码文件而众所周知的。

具有使密码文件世界可读的实用程序通常远远超过了风险。即使它不是世界可读的,但正常运行的getent passwd命令会使安全性丧失。

非root用户识别其他人拥有的文件的能力将消失。能够识别拥有的(用户位于passwd文件中)和未拥有的文件(用户不在passwd文件中)对于检查文件系统的内容很有用。尽管可以使用适当的setuid程序解决此问题,但这将通过这些程序增加巨大的攻击载体。

最后,这是一个平衡的问题,在这种情况下,我要说的是,平衡性完全取决于密码世界的可读性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.