我创建了几个网站。现在我需要执行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
,所以我认为它会起作用。我该如何解决这个问题?
答案 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的代码。