suPHP以root身份执行PHP脚本

问题描述:

我创建了多个网站。现在我需要执行root任务。我创建了一个网络平台并安装。 root拥有/var/private-www/中的所有脚本,并且它们是chmodded(0777)。在/var/private-www/test.php看台上:<?php echo exec('whoami'); ?>。我suPHP配置是这样的:suPHP以root身份执行PHP脚本

[global] 
;Path to logfile 
logfile=/var/log/suphp/suphp.log 

;Loglevel 
loglevel=info 

;User Apache is running as 
webserver_user=root 

;Path all scripts have to be in 
docroot=/var/private-www 

;Path to chroot() to before executing script 
;chroot=/mychroot 

; Security options 
allow_file_group_writeable=false 
allow_file_others_writeable=false 
allow_directory_group_writeable=false 
allow_directory_others_writeable=false 

;Check wheter script is within DOCUMENT_ROOT 
check_vhost_docroot=true 

;Send minor error messages to browser 
errors_to_browser=false 

;PATH environment variable 
env_path=/bin:/usr/bin 

;Umask to set, specify in octal notation 
umask=0077 

; Minimum UID 
min_uid=0 

; Minimum GID 
min_gid=0 


[handlers] 
;Handler for php-scripts 
application/x-httpd-suphp="php:/usr/bin/php-cgi" 

;Handler for CGI-scripts 
x-suphp-cgi="execute:!self" 

当我在我的网页浏览器执行test.php,它说:。www-data :(不root ......甚至当我在命令行中执行它再说,我也a2enmod suphpapachectl restart ,所以我想它会工作,我怎样才能解决这个

+0

我假设你知道如何**非常危险**它是以root身份运行任何可通过web访问的应用程序,以及你将要多少次听到这个消息? – Charles 2011-04-13 21:11:45

+0

是的,但是如何在web平台上做'adduser'这样的东西? :( – 2011-04-13 21:13:59

+0

守护进程和工作队列和/或cron作业可以很容易地执行这些任务。 – Charles 2011-04-13 21:15:41

在这些已知的Web应用程序的攻击看看:?OWASP以root运行和0777的权限是两件事,你应该尽量避免

。简短的回答:唐'不要这样做。

任何需要运行根目录的任务都应该通过cron作业完成。

为什么你试图这样呢?

我会后悔这样说,我不希望成为一个推动者,但:

你可能会需要recompile。最小的UID和GID不是(只)可配置的项目,也有在编译时进行的最小检查。也不能保证没有以root身份运行的硬编码检查。

您真的应该考虑执行所需任务的另一种方法,它不涉及公开以root用户身份运行的Web应用程序。定期运行的cron作业检查未完成的任务或工作队列服务,可以轻松实现这些目标。网络暴露的前端不需要以root身份运行。

这是不是你正在寻找的答案,但你应该考虑这一点:

尽管有这样的情况,你想这样做,运行所有的PHP脚本以root身份一般是不好的做法你可能会遇到一些障碍。

避免这种情况的一个简单方法是使用sudo。将您的命令添加到sudoers以获得www-data,并让您的脚本使用sudo执行外部命令。

即使外部php脚本也可以通过sudo作为root运行。这样你将实现特权分离。

否则你将不得不以root身份运行apache + modphp或破解suphp的代码。