0

我创建了几个网站。现在我需要执行root任务。我创建了一个网络平台并安装了。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......即使我在命令行中执行它。此外,我做了a2enmod suphpand apachectl restart,所以我认为它会起作用。我该如何解决这个问题?

4

4 回答 4

1

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

于 2011-04-13T21:14:00.980 回答
1

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

任何需要以 root 身份运行的任务都应通过 cron 作业完成。

你为什么要这样尝试呢?

于 2011-04-13T21:17:51.320 回答
1

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

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

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

于 2011-04-13T21:18:01.260 回答
0

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

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

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

甚至外部 php 脚本也可以通过 sudo 以 root 身份运行。这样,您将实现权限分离。

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

于 2012-10-14T11:04:32.290 回答