1

在阅读有关 shell 脚本和临时文件处理的信息时,我遇到了 Symlink Exploits。http://www.linuxsecurity.com/content/view/115462/151/是基本思想。我想知道 Python open() 是否检查它即将打开的文件以查看它是否是符号链接,并尝试以“w”模式打开符号链接文件。令我惊讶的是,它打开了链接,因此覆盖了链接指向的文件。现在,如果我的 python 程序正在执行大量文件处理,并且也以可预测的方式进行处理,那么攻击者不可能通过我的程序应该创建的文件名创建链接并将其链接到关键系统文件。这会覆盖系统文件并使系统崩溃吗?我使用了 Python 2.4。后续的 python 版本是否解决了这个问题?

或者这根本就是个问题?

4

3 回答 3

2

如果您的程序以提升的权限(例如 root)运行,那么您可以通过不写入低权限用户能够创建符号链接的目录中的文件来防止此类攻击。

这个问题不能通过语言或运行时库来解决,必须在程序运行的环境中解决。

(请注意,如果您的程序没有以提升的权限运行,那么创建符号链接的用户将不会让他们访问没有您的程序他们无法完成的任何事情。)

于 2010-12-24T05:08:33.023 回答
1

首先,运行脚本的用户不应该有写入关键系统文件的权限。其次,解决这个问题不是蟒蛇的任务。这是脚本开发人员的任务。Python至少从 2.3 开始提供临时文件。

于 2010-12-24T05:09:22.840 回答
1

仅当您创建具有可预测名称并且位于其他用户可以写入的目录中的临时文件(通常是写入文件)时,才会出现问题。因此,如果您的脚本只写入您的主目录,那么您就可以了。如果您需要在共享写入目录中创建临时文件,例如 /tmp,您应该使用类似 http://docs.python.org/library/tempfile.html

于 2010-12-24T05:12:54.053 回答