Cgroups

如何監禁 fastcgi 伺服器(或網路代理伺服器)?

  • January 15, 2015

如果您有一個網路伺服器(例如 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,做一個典型的案例。完成後按sf在上一個終端中。

現在/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,

 ...
}

有了這樣的配置文件,奴隸就不能再呼叫像mail或之類的實用程序了sendmail

引用自:https://unix.stackexchange.com/questions/14686