Apache-2.2

Apache 安全配置 - Ubuntu 12

  • December 27, 2013

我在 Ubuntu 12 上執行 LAMP 堆棧,其主要功能是提供基於 PHP 的 API。

我只想向公眾公開一個文件,名為:api.php

它需要引用我擁有的配置文件,/cfg/api-config.php其中包含數據庫密碼,以便 API 可以寫入數據庫等。

所以我只希望api.phpapache 被“服務”並公開。

我放入 /cfg 的配置文件必須可以被 api.php 讀取,但不能被任何可能訪問該站點的人讀取。

我沒有.htaccess,只是httpd.conf按照下面的配置。

<VirtualHost *:44448>
   DocumentRoot "/api"
   ServerName localhost:44448
   ServerAlias Server.local
   DirectoryIndex index.html
   CustomLog "/var/log/apache_access.log" combined
   ErrorLog "/var/log/apache_error.log"

   SetEnv APPLICATION_ENV development
   php_flag magic_quotes_gpc off

   <Directory "/api">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

我的/cfg/api文件夾的權限是:我的敏感配置文件的drwxr-xr-x權限和數據庫密碼位於/cfg/api-config.php``-rw-r--r--

我想知道是否有人可以告訴我這是否設置正確且安全?

藉此:

A)除 之外的所有文件/api/api.php都不是公開的,並且無法訪問我的伺服器文件。

B)任何訪問該站點的人也無法讀取帶有 db 密碼(用於 api)的配置文件?

我試圖通過在/cfgwith中創建一個新文件夾來測試這一點chmod 777,但我似乎無法訪問它,這很好!

您有兩個文件(假設它們位於 /var/www)

  • /var/www/api/api.php
  • /var/www/cfg/api-config.php

首先,使用 apache 限制對 /cfg 的訪問(這確保沒有人可以從 http 訪問它)並允許訪問 /api:

<Directory /var/www/api>
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
<Directory>

<Directory /var/www/cfg>
   Options None
   AllowOverride None
   Order allow,deny
   Deny from all
<Directory>

接下來,使用 open_basedir 限制您的 php:

open_basedir = /var/www/api:/var/www/cfg

(如果需要,在此處添加 /tmp、session 和其他目錄)

接下來,更改 /var/www/cfg 目錄和 /var/www/cfg/api-config.php 文件的訪問模式(假設您的 apache 使用者是 www-data):

 chown -Rv root:root /var/www/{cfg,api}
 chmod -v 711 /var/www/cfg
 chmod -v 755 /var/www/api
 chmod -v 644 /var/www/api/api.php /var/www/cfg/api-config.php

通過在 /cfg 上使用711,您可以確保沒有人可以讀取(列出)目錄的內容,同時仍然可以讀取 api-config.php(您需要這個來通過 PHP 讀取文件)

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