Security

如何限制對 daemon 使用者的 root 訪問?

  • July 4, 2014

我在最新的 Debian 上安裝了 Apache 2.4 和 PHP 5.5.14。根據 Apache 安全提示和技巧,我將 httpd.conf 設置為:

<Directory />
 AllowOverride none
 Require all denied
</Directory>
<Directory "/var/www">
 Options FollowSymLinks
 AllowOverride none
 Require all granted
</Directory>

我重新啟動 Apache 伺服器並執行此 PHP 程式碼:

<?php
 $filename = "/etc/passwd";
 $handle = fopen($filename, "r");
 $contents = fread($handle, filesize($filename));
 fclose($handle);
 echo($contents);
?>

該程式碼獲取整個 /etc/passwd 文件,我認為這是一個巨大的安全問題。現在,幾天來我一直試圖通過閱讀手冊來解決這個問題,但我還沒有運氣。我會向正確的方向推進,thanx。

但請注意,這open_basedir只會限制 PHP 函式等的目錄訪問,但不會限制通過 PHP 執行的外部程序。例如:

   <?php
   $file = shell_exec('cat /etc/passwd');
   echo $file;

/etc/passwd毫無問題地輸出文件的內容,因為文件系統訪問不是由 PHP 本身而是由cat程序呼叫的。cat預設情況下由www-data使用者執行(在 Debian 上),因此此處僅適用正常的作業系統文件訪問權限(即文件所有者、組和世界的訪問權限)。

為了防止這種情況,您可以

  • 禁用諸如exec(), passthru(),之類的函式system(),這些函式通過您的,shell_exec()執行 shell 命令disable_functionsphp.ini
  • 更改文件的權限,因此執行網路伺服器(或 PHP)的使用者沒有讀取文件的權限或
  • 將 Apache 或 PHP 放入 chroot 監獄(儘管我自己從未嘗試過)。

根據您的 Apache/PHP 配置和您的需求,這disable_functions可能是最容易設置的,但它可能會破壞 ImageMagick 之類的東西,這通常是exec()(比如exec('/usr/bin/convert ...')ImageMagick)。

我在 Debian Squeeze 上使用 Apache 和 PHP 作為來自儲存庫的 mod_php 以及通過 php-fpm 執行 Apache 和 PHP 的 Ubuntu 14.04 以及來自儲存庫的包進行了測試。可能這也適用於 Windows 上的 PHP,但我從未嘗試過……雖然cat /etc/passwd 不會工作:-)

引用自:https://serverfault.com/questions/609744