如何監禁 fastcgi 伺服器(或網路代理伺服器)?
如果您有一個網路伺服器(例如 nginx),您通常會使用一個 fast-cgi 伺服器或另一個應用程序 http-server 來獲取動態內容。這意味著在這兩種情況下,您在 web-server 程序和 fast-cgi(或 application-http-server 程序 - 以下稱為 slave)之間都有很好的程序分離。
網路伺服器被配置為 fast-cgi 通過套接字或代理 http 請求。
如果從屬程序中存在安全問題,則為從屬和 Web 伺服器創建不同的使用者可以保護文件系統位置。
但是我如何在 Linux 下讓從屬程序更加牢靠呢?
(使其無法上網、發送郵件等)
我可以想到以下路線:
- SELinux
- Linux 系統命名空間(“容器”、cgroups)
在目前發行版(例如 Debian)上最方便的方法是什麼?在實踐中怎麼做?任何配置範例?
在 Ubuntu 下,另一種監禁方式是apparmor!
它是一個基於路徑的強制訪問控制 (MAC) Linux 安全模組 (LSM)。在 Ubuntu 10.04 中,它預設為選定的服務啟用。
文件非常零散。Ubuntu 文件可能……更好。甚至上游文件也沒有給出很好的介紹。參考頁指出:
警告:本文件處於創建的早期階段,尚未用作參考手冊
但是,入門相對容易。AppAmor 配置文件匹配可執行路徑,例如
/var/www/slave/slave
. 如果沒有其他匹配項,配置文件的預設規則是拒絕(這很好)。配置文件拒絕規則總是在允許規則之前匹配。一個空的個人資料否認一切。不同二進製文件的配置文件儲存在
/etc/apparmor.d
.apparmor_status
顯示哪些配置文件處於活動狀態,哪些配置文件處於強制模式(良好)或僅處於投訴模式(僅列印日誌消息)。創建一個新的配置文件
/var/www/slave/slave
只是:aa-genprof /var/www/slave/slave
從另一個終端開始
/var/www/slave/slave
,做一個典型的案例。完成後按s
並f
在上一個終端中。現在
/etc/apparmor.d
包含一個配置文件var.www.slave.slave
。如果從伺服器進行了一些分叉,則配置文件非常稀疏——所有子節點的訪問都將被忽略。無論如何,配置文件現在在強制模式下處於活動狀態,您可以迭代地觸發從屬設備中的操作並監視
tail -f /var/log/messages
違規行為。在另一個終端中,您編輯配置文件並aa-enforce var.www.slave.slave
在每次更改後執行。然後日誌顯示:audit(1308348253.465:3586): operation="profile_replace" pid=25186 name="/var/www/slave/slave"
違規行為如下所示:
operation="open" pid=24583 parent=24061 profile="/var/www/slave/slave" requested_mask="::r" denied_mask="::r" fsuid=10004 ouid=10000 name="/var/www/slave/config"
配置文件規則,例如:
/var/www/slave/config r,
將允許將來訪問。
這一切都很簡單。
AppAmor 支持粗粒度的網路規則,例如
network inet stream,
如果沒有這個規則,就不可能訪問網際網路(包括本地主機),也就是說,有了這個規則,您可以使用
iptables
更細粒度的規則(例如,基於從屬 uid)。另一個文件片段包含有關php 腳本的子配置文件的內容。
var.www.slave.slave 配置文件骨架如下所示:
#include <tunables/global> /var/www/gapapp/gap.wt { #include <abstractions/base> network inet stream, /var/www/slave/config r, /var/www/slave/exehelper/foo ix, /var/www/slave/db/* rw, ... }
有了這樣的配置文件,奴隸就不能再呼叫像
sendmail
。