以root身份将文件写入非root拥有的目录为什么会很糟糕?


28

这是对另一个问题的评论,如果有人可以向我解释其原因,我将非常乐意。

我建议让Apache将给定VHost的错误记录到用户的主目录中。这是因为不安全而被拒绝的。为什么?

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

谢谢,

巴特


4
Apache以root身份运行时在做什么-最小特权原则对此大声疾呼!
乔纳森·莱夫勒

1
Apache以www的身份运行,但以root身份启动,因此它可以按规范绑定到端口80。显然,它也以root用户身份登录。
巴特B

Answers:


31

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

例如,如果用户找到了从假定的Apache日志到/ etc / shadow进行符号链接的方法,您将突然拥有一个无法使用的系统。Apache()将覆盖用户的凭据,从而导致系统出现故障。root

ln -s /etc/shadow /home/eviluser/access.log

如果用户无法写入access.log文件,则可能很难劫持该文件,但最好避免这种情况!

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

ln -s /etc/shadow /home/eviluser/access.log.1

注意事项

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

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


有没有一种方法可以设置权限,使他们只能读取文件,不能删除,编辑或执行其他任何操作(例如chown,chmod等)?
约书亚

您应该对每个可能的目标文件执行此操作!这个可写文件是喜欢的文件,而不是攻击者创建它时所拥有的链接本身。
drAlberT

2
@Joshua:chown只能由root执行。chmod可以由拥有该文件的任何人执行。IIRC,重命名可以由拥有该目录的任何人完成。正如AlberT所提到的,任何可以写入目录的人都可以 root创建文件之前创建链接。
atk

2
@atk:此外,拥有目录的任何人都可以从其中删除文件(除非+t设置了粘性位),即使它们本身对文件没有写权限(因为unlink()是对目录的写操作,而不是对目录的写操作)文件)。即使root提前创建了文件,目录所有者也仍然可以删除它,并用符号链接替换到其他文件。
James Sneeringer

1
如果eviluser可以在/ home / eviluser中写(或者可以更改目录的权限-他们拥有IOW),那么对access.log的权限是什么都没有关系;邪恶用户可以(重新)移动文件并将其符号链接放置在文件中。另一个问题是该软件是否关注其打开的内容。
乔纳森·莱夫勒

1

不让进程写入它们不拥有或不信任的目录的一般原则是一个很好的原则。但是在这种特殊情况下,可以合理地相信Apache代码使用O_NOFOLLOWetc 打开日志:登录用户的主目录是一种常见设置。

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.