2013-08-22 50 views
2

我創建了一個PHP腳本,可以生成一些.gz文件,當我通過命令行(cli)執行PHP腳本時,它會生成具有「沙漠」作爲用戶的.gz文件,但是當腳本通過瀏覽器執行時,會生成以'nobody'作爲用戶的.gz文件不應該發生。當腳本通過瀏覽器執行時,我希望生成的文件具有「沙漠」用戶而不是「無人」用戶。不希望PHP腳本在通過瀏覽器執行時以apache用戶的身份執行shell命令?

這裏是我創建的代碼:

$file='test'; 
$newFileGZipCommand = 'cat '.$file.'_new | gzip > '.$file.'.gz'; 
//$newFileGZipCommand = 'sudo -u desert cat '.$file.'_new | gzip > '.$file.'.gz'; // This does not work 
$newFileGZipCommandExecute = shell_exec($newFileGZipCommand); 
//chmod($file.'.gz',0777) or die("Unable to change file permission"); 
//chown($file.'.gz', 'directu') or die("Unable to change file Owner"); 

我試圖做改變經過CHMOD文件的權限和所有者()和chown()在PHP的功能,但它說:「CHOWN():不允許操作」。

任何指針,這是非常感謝。

[注:我不能改變的httpd.conf或任何其他配置文件]

回答

0

須藤通常需要一個交互的shell輸入密碼。這顯然不會發生在PHP腳本中。如果您確定自己知道自己在做什麼,並且已經涵蓋了安全問題,請嘗試允許Apache用戶在沒有密碼的情況下運行sudo,但僅限於某些命令。

例如,在sudoers文件中添加以下行將允許Apache在沒有密碼的情況下運行sudo,僅用於gzip命令。

nobody ALL=NOPASSWD: gzip 

調整路徑並添加任何參數以滿足您的需要。

注意:

  1. 還有可能是由於一路併發症PHP電話殼 命令。
  2. 請記住,允許網絡服務器以root身份運行命令 是非常危險的!

另一種選擇:

寫有suid位shell腳本,使它以root運行不管是誰調用它。

可能是一個更好的選擇:

命令寫入隊列,並有cron的去接他們,驗證他們(只允許已知的好請求),並運行它們,然後標記該隊列完成日期和結果。

您的最終用戶可以使用ajax點擊/等待更新。

希望它有助於解決您的答案。

+0

沒有成功@Kailash Yadav –

+0

@MahavirM​​unot你試過了哪個選項?我認爲最後的選擇將是更好的選擇。你將在哪裏運行shell腳本,它可以爲你做所有的GZIP –

+0

yes shell腳本也以nobody身份生成用戶文件。仍然沒有進展 –

相關問題