簡體   English   中英

PHP讓www-data像其他用戶一樣運行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM