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 suphp
和apachectl restart
,所以我想它会工作,我怎样才能解决这个
。简短的回答:唐'不要这样做。
任何需要运行根目录的任务都应该通过cron作业完成。
为什么你试图这样呢?
我会后悔这样说,我不希望成为一个推动者,但:
你可能会需要recompile。最小的UID和GID不是(只)可配置的项目,也有在编译时进行的最小检查。也不能保证没有以root身份运行的硬编码检查。
您真的应该考虑执行所需任务的另一种方法,它不涉及公开以root用户身份运行的Web应用程序。定期运行的cron作业检查未完成的任务或工作队列服务,可以轻松实现这些目标。网络暴露的前端不需要以root身份运行。
这是不是你正在寻找的答案,但你应该考虑这一点:
尽管有这样的情况,你想这样做,运行所有的PHP脚本以root身份一般是不好的做法你可能会遇到一些障碍。
避免这种情况的一个简单方法是使用sudo。将您的命令添加到sudoers以获得www-data,并让您的脚本使用sudo执行外部命令。
即使外部php脚本也可以通过sudo作为root运行。这样你将实现特权分离。
否则你将不得不以root身份运行apache + modphp或破解suphp的代码。
我假设你知道如何**非常危险**它是以root身份运行任何可通过web访问的应用程序,以及你将要多少次听到这个消息? – Charles 2011-04-13 21:11:45
是的,但是如何在web平台上做'adduser'这样的东西? :( – 2011-04-13 21:13:59
守护进程和工作队列和/或cron作业可以很容易地执行这些任务。 – Charles 2011-04-13 21:15:41