[英]PHP let www-data run a command as if it were a different user
所以我想在我的PHP腳本中執行以下命令:
exec("/path/to/command");
因為是運行php腳本的www-data用戶,所以我目前無法運行此命令。 我已經閱讀了一些有關suexec能夠像其他用戶一樣運行命令的信息。 我發現很難理解它是如何工作的。
我已經安裝了suexec並編輯了/ etc / apache2 / suexec / www-data文件並添加了:
/home/user_to_run_command/script.php
我還編輯了/ etc / apache2 / sites-enabled / 000-default並添加了:
SuexecUserGroup user_to_run_command user_to_run_command
我有什么想念的嗎?
suEXEC僅在以CGI模式執行PHP時有效,而在PHP作為apache2模塊運行時則無效。 我想您正在將其作為模塊運行。
另一種選擇是將所有權轉移給所需的用戶,然后設置suid
位:
chown desired_user your.program
chmod u+s your.program
現在,在執行your.program
它具有權限,就好像它是由其所有者執行時一樣。 請關注我鏈接的Wiki文章,以獲取更多信息。
注意:這僅適用於二進制文件(不適用於shell腳本,因為它們由未設置suid位的shell二進制文件執行)
我遇到了同樣的問題,最后找到了一個解決方案,據我所知,該解決方案既安全又簡單。 這種方法的一個缺點是,發布安全更新時,您必須注意這些更新。
我們要做的是制作我們自己的特殊外殼,將其穿梭給我們並希望用戶執行任務的SUID。 為了安全起見,該用戶應該是沒有廣泛系統權限的普通用戶,並且應將腳本放置在不允許其他人使用的位置。 現在,我們讓php執行一個使用此特殊shell的腳本,並且該腳本中的所有命令都將以所選用戶的身份執行。
在實踐中:
sudo mkdir /usr/lib/specialshell
sudo chown user_who_may_run_command:root /usr/lib/specialshell
sudo chmod 700 /usr/lib/specialshell
sudo cp /bin/perl specialperl
sudo chown user_to_run_command:usergroup_to_run_command specialperl
sudo u+s specialperl
sudo mv specialperl /usr/lib/specialshell
現在,我們創建一個名為command.script的腳本,其中包含:
#!/usr/lib/specialshell/specialperl
$ENV{"PATH"} = "/usr/bin";
system("/path/to/command");
從PHP代碼,我們使用:
exec("/path/to/command.script");
等等,沒有代碼更改,只是php中的命令名稱。
編輯:僅適用於perl作為外殼,因此將bash更改為perl並將外殼放置在安全的地方
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.