2010-12-24 84 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