2014-02-06 43 views
4

我做了一個perl腳本來更改其他用戶擁有的文件的所有者。腳本是完整的。我的管理員將其保存在/ sbin目錄中,並使用chmod u + s name_of_script爲其設置uid。但是,當我運行這個腳本時,它給了我錯誤的chown操作是不允許的。我製作了一個C程序,並按照相同的步驟工作。所以我的問題是,如果setuid正在爲perl工作,那麼我不應該得到那個錯誤,因爲C代碼沒有給我任何錯誤。所以我可以爲perl腳本setuid或我應該去與c代碼。我可以爲perl腳本setuid嗎?

不要讓我每次都要求管理員更換主人。其實在服務器我有用戶名登臺,我在它託管一個joomla網站。現在,當我安裝一些插件時,與該插件相關的文件由www-data擁有。所以這就是爲什麼我不想每次都去管理員。或者你也可以給我一些關於我的問題的其他解決方案。

謝謝。

回答

5

不,您不能在腳本上使用setuid又名chmod +s。腳本的解釋器應該是實際上需要的東西,但這樣做是一個非常糟糕的主意。特別糟糕。

如果你絕對必須有用Perl編寫的東西setuid,那麼典型的做法是製作一個小的C包裝,它的編號爲setuid,並在啓動後執行Perl腳本。這爲您提供了兩種最好的方式,即擁有一個小而有限的setuid腳本,但仍然可以使用腳本語言來完成這項工作。

6

許多unix系統(可能是最現代的系統)忽略解釋器腳本上的suid位,因爲它打開了太多的安全漏洞。

但是,如果您使用perl < 5.12.0,則可以使用setuid set運行perl腳本,它們將以root身份運行。它的工作原理是當普通的perl解釋器運行時,並檢測到你正在執行的文件已經設置了setuid位,然後它執行一個名爲suidperl的程序。 Suidperl負責提升用戶的權限,並以超安全模式啓動perl解釋器。 suidperl本身就是用setuid root運行的。

這樣做的後果之一是污染模式會自動打開。其他附加檢查也會執行。您可能會看到如下消息:

Insecure $ENV{PATH} while running setuid at ./foobar.pl line 3. 

perlsec提供了有關保護此類腳本的一些有用信息。

suidperl默認情況下通常不會安裝。您可能需要通過單獨的軟件包進行安裝。如果沒有安裝,那麼你得到這個消息:

Can't do setuid (cannot exec sperl) 

說了這一切 - 你會好得多使用sudo執行與提升權限的操作。它更安全,因爲您可以準確指定允許通過sudoers文件執行的操作。

從perl 5.12.0開始,suidperl被刪除。因此,如果你想用setuid set在perl> = 5.12.0上運行一個perl腳本,你將不得不編寫你自己的C wrapper。我再次推薦sudo作爲更好的選擇。

+0

如何安裝suidperl? apt-get install perl-suid在debian wheezy中不起作用。 apt-cache search perl不顯示與suid有關的任何內容。我的執行腳本顯示chown不允許的錯誤。我正在使用perl 5.14。2 –

+0

@SumitRathore似乎suidperl已經從5.12(http://perldoc.perl.org/perl5120delta.html)的perl中刪除。這對你的用例來說很不幸。閱讀這個線程http://www.nntp.perl.org/group/perl.perl5.porters/2008/12/msg142839.html看來,你將不得不寫你自己的C包裝或使用sudo。我會相應地更新答案。 – harmic

相關問題