2010-06-30 136 views
3

我試圖在Ubuntu服務器上運行一個由PHP中的非特權用戶擁有的shell腳本。與權限問題使exec()運行它不切實際,因爲它是運行它的www-data。我搜索了一下,發現了對suExec的varius引用(這似乎太麻煩了,以解決這樣一個小問題),設置suid位,以及一個有趣的方法在這裏涉及Python服務器的Stackoverflow監聽發送的命令由PHP。從PHP運行shell腳本作爲不同(非root)用戶

無論如何,在所有這些解決方案中,我傾向於設置suid位,嘗試它並且不起作用:chmod u+s script.sh,並且我的Apache日誌仍顯示權限錯誤,所以我知道腳本不是因爲它的主人,但作爲www-data

我需要做些什麼才能使這個工作,並有一個更簡單的解決方案,這個問題?

+2

不可以。您的用戶(www-data)需要執行權限才能運行腳本。什麼是使你想使用shell腳本的根本問題,也許有一個有用的答案。 – clyfe 2010-06-30 12:57:17

+0

基本上我正在嘗試創建一個http://php.opensourcecms.com/的內部版本(開源CMS的演示程序會在某個時間在inverval中自動重置)。我已經將cron作爲非特權用戶每2小時運行一次腳本運行,但是我希望添加功能性來按需執行它。我可以將它作爲www-data運行,但這意味着我也可以從www-data的cron運行它,因爲替換的文件歸www-data所有。無論如何,我想避免讓www數據出於安全原因擁有所有文件。 – Andrei 2010-06-30 13:23:54

+0

這個腳本是做什麼的? – clyfe 2010-06-30 14:53:47

回答

4

看看sudo的手冊頁:sudo -u your_other_user將允許您像其他用戶一樣執行該命令。

還可以使用man sudoers查找用戶可以使用sudo執行哪些命令的選項。

+0

尋找到你的解決方案,但迄今沒有運氣讓它的工作。我已經嘗試啓用sudoers文件中特定命令的無密碼sudo:'www-data ALL =(ALL)NOPASSWD:/ user/bin/sudo -u user/path/to/command'但是如果我'su www-data'並嘗試運行它仍然要求輸入密碼。與'/ user/bin/sudo -u user'一樣 – Andrei 2010-06-30 20:55:51