2011-04-28 36 views
5

我想將數據寫入文件,但文件句柄應該以對特定用戶的訪問權限打開。如何打開Perl文件句柄以通過sudo(或另一個用戶)寫入數據

因此,下面的語句:

open (FH, "> $filename") or die "[email protected]\n"; 

將允許寫入文件爲特定的用戶。

有沒有一種方法可以在Perl腳本中執行此操作,而不需要整個腳本與sudo -u $username一起運行?

+1

那麼要改變Effective UID'$>'你需要以root身份運行,你的腳本是運行setuid root還是root用戶? – Doon 2011-04-28 19:34:48

回答

2

有兩種確定的方法。堆疊器,你被邀請編輯這個答案來填補每個的缺點。

sudo運行該程序。你在程序中做的第一件事是打開你需要的文件,並保存手柄,然後立即之後drop the root privileges。任何進一步的處理必須以低特權進行。 Apache httpd的工作原理是這樣的,它打開日誌文件爲root,但仍然以nobody或類似的方式運行。

如果你不喜歡這種方式,正常運行的程序,當你需要提升,創建新的進程,並有將其與配置sudosu -的用戶身份運行,kdesu/gksu或諸如此類的東西。 CPAN客戶端的工作原理就是這樣,它可以像普通用戶那樣獲取,解包,構建和測試一個模塊,但在安裝時需要調用sudo make install等。

+0

我不知道我是否可以打開使用'sudo'的可寫文件句柄。我真的試圖避免使用'sudo',除非我可以使該文件句柄對該用戶可寫。至於第二種選擇,我需要將'sudo''程序傳遞給一個Perl哈希引用,不知何故,這似乎並不簡單。這是否有助於這個問題更有意義? – 2011-04-28 21:47:33

0

daxim的建議的另一種選擇是讓腳本擁有特定用戶並具有腳本權限,包括setuid和/或setgid位。

+0

......但是,請注意,這可能是一個長期更新/維護的王室痛苦,因爲大部分(如果不是全部)* nices會在您每次編輯文件時清除suid/sgid位。 – 2011-04-29 08:52:09

相關問題