为什么让 root 将文件写入不属于 root 的目录是不好的?

Bar*_*t B 30 security linux permissions

这是对另一个问题的评论,如果有人能向我解释原因,我会很高兴。

我建议让 Apache 将给定 VHost 的错误记录到用户的主目录中。这被击落了,因为它不安全。为什么?

我在回复评论中要求澄清,但我得到的只是在不属于 root 的文件夹中写入 root 是不安全的。再次,有人可以解释一下吗?

谢谢,

巴特。

drA*_*erT 34

由于一个不幸的用户可以恶意尝试指向该文件root被写入到不同的位置。这不是那么简单,但确实可能。

举个例子,如果用户想办法从假定的 Apache 日志中创建符号链接,比如/etc/shadow,你会突然拥有一个无法使用的系统。Apache ( root) 会覆盖您用户的凭据,从而导致系统出现故障。

ln -s /etc/shadow /home/eviluser/access.log
Run Code Online (Sandbox Code Playgroud)

如果access.log文件不是用户可写的,则很难劫持它,但最好避免这种可能性!

一种可能性是使用 logrotate 来完成这项工作,创建指向尚不存在的文件的链接,但是一旦日志增长,该logrotate将覆盖:

ln -s /etc/shadow /home/eviluser/access.log.1
Run Code Online (Sandbox Code Playgroud)

注意

符号链接的方法是仅作为一个概念证明的可能的攻击之一。

安全必须以白名单的心态来制定,而不是将我们知道的问题列入黑名单。

  • @Joshua:chown 只能由 root 执行。chmod 可以由拥有该文件的任何人执行。IIRC,重命名可以由拥有目录的人完成。正如 AlberT 所提到的,在 root 创建文件之前*创建链接可以由可以写入目录的任何人完成。 (2认同)
  • @atk:此外,拥有该目录的人通常可以从中删除文件(除非设置了粘性 `+t` 位),即使他们对文件本身没有写权限(因为 unlink() 是对文件的写操作)目录,而不是文件)。即使 root 提前创建了文件,目录所有者仍然可以删除它并将其替换为指向其他内容的符号链接。 (2认同)