suPHP以root身份执行PHP脚本

时间:2011-04-13 21:09:06

标签: php security root suphp

我创建了几个网站。现在我需要执行root个任务。我创建了一个webplatform并进行了安装。 root拥有/var/private-www/中的所有脚本,并且它们是chmodded(0777)。 /var/private-www/test.php代表:<?php echo exec('whoami'); ?>。我的suPHP配置是这样的:

 [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 ...即使我在命令行执行它。此外,我做了{ {1}}和a2enmod suphp,所以我认为它会起作用。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

看看这些已知的网络应用攻击:OWASP。以root身份运行和0777权限都是您应该避免的事情。

答案 1 :(得分:1)

简短回答:不要这样做。

任何需要运行root的任务都应该通过cron作业来完成。

你为什么要这样尝试呢?

答案 2 :(得分:1)

我会后悔说这个,我不想成为推动者,但是:

您可能需要recompile。最小UID和GID不是(仅)可配置项,在编译时也进行了最小化检查。也不能保证不存在以root身份运行的硬编码检查。

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

答案 3 :(得分:0)

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

虽然有些情况下您希望这样做,但通常以root身份运行所有PHP脚本是不好的做法,您可能会面临许多障碍。

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

即使是外部php脚本也可以通过sudo以root身份运行。这样您就可以实现权限分离。

否则你必须以root身份运行apache + modphp或者破解suphp的代码。