2010-12-24 83 views
1

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

或者这是一个问题呢?

回答

1

只有当您创建具有可预测名称并位于其他用户可写入的目录中的临时文件(以及一般 - 写入文件)时,才会出现此问题。所以如果你的脚本只写入你的主目录,那你很好。 如果您需要在共享写入目录中创建临时文件,例如/ tmp,你应该使用像 http://docs.python.org/library/tempfile.html

+0

我有一个脚本,需要以root身份运行。它有一个基本目录。它写入base_directory/tmp和base_directory/output。为了保护它,我应该给基础目录递归755权限为'root'吗?那个尺度是否足够 – RedBaron 2010-12-24 05:21:28

+0

为什么不是700?但是,是的,只要其他用户无法将符号链接添加到创建文件的目录中,则此特定问题不适用。 – 2010-12-24 05:23:19

+0

感谢您的帮助 – RedBaron 2010-12-24 05:43:40

2

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

此问题无法通过语言或运行库解决,但必须在运行程序的环境中解决。

(请注意,如果你的程序是使用提升的权限运行,则用户可以创建一个符号链接不会让他们什么,他们不能刚才做自己没有你的程序。)

1

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