將 Apache 虛擬主機與系統的其餘部分隔離開來
我正在設置一個 Web 伺服器,它將託管許多不同的網站作為 Apache VirtualHosts,每個網站都可以執行腳本(主要是 PHP,可能還有其他)。
我的問題是我如何將這些虛擬主機中的每一個與系統的其他部分隔離開來?我不希望例如網站 X 讀取網站 Y 的配置或任何伺服器的“私有”文件。
目前,我已經按照此處所述(http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec )設置了帶有 FastCGI、PHP 和 SUExec 的 VirtualHosts -easy-way.html),但 SUExec 僅阻止使用者編輯/執行除自己以外的文件 - 使用者仍然可以讀取敏感資訊,例如配置文件。
我曾考慮刪除伺服器上所有文件的 UNIX 全域讀取權限,因為這將解決上述問題,但我不確定是否可以在不中斷伺服器功能的情況下安全地執行此操作。
我也研究過使用 chroot,但似乎這只能在每個伺服器的基礎上完成,而不是在每個虛擬主機的基礎上。
我正在尋找任何可以將我的 VirtualHosts 與系統其餘部分隔離的建議。
PS 我正在執行 Ubuntu 12.04 伺服器
**我的回答:**我幾乎按照我目前的配置結束了,但是為所有虛擬主機做了一個 chroot 監獄,例如擁有 chroot 監獄,
/var/www
然後將所有使用者的數據放在子文件夾中,每個子文件夾都具有 group/others r/w/x 權限禁用。這個選項是可取的,特別是因為它在不修改原始碼的情況下都是可能的。我選擇了@Chris 的答案,因為它寫得很透徹,也被認為是 FTP 和 SELinux
這可以通過在 Apache 中啟用 mod_users 模組來完成。
您需要在 apache 配置中設置 UserDir。我建議您在單獨的配置文件中執行此操作並將其包含在內。將包含包裹在
<IfModule mod_users.c> Include conf/extra/userdir.conf </IfModule>
我可以給你整個教程,但這應該讓你開始配置 Apache: http ://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/
提示如果您正在執行 SELinux(並且應該),您必須授予 Apache 對使用者主目錄的讀取權限。您可以通過設置來做到這一點:
sudo setsebool -P httpd_enable_homedirs=On
它還需要使用者 dirs public_html 目錄的文件權限和父目錄的 rx 權限,直到 root。
顯然,您需要為使用者設置 chroot,例如在 vsftpd 中。安裝:
apt-get vsftpd
使用 vi 或 nano 配置 chrooting 打開 /etc/vsftpd/vsftpd.conf。查找並取消註釋或添加:chroot_local_user=yes
您可以通過 FTP 獲得與我推薦的 sftp 相同的行為,打開 /etc/ssh/sshd_config 並添加一個 Match 塊和這一行:
Subsystem sftp internal-sftp Match Group web_users ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no Match
這將 chroot web_users 組中的任何使用者。您還需要通過將其設置為 /sbin/nologin 來拒絕對 shell 的訪問:
useradd -G "web_users" -s /sbin/nologin new_user
如果這是一個公共生產伺服器,我也強烈建議你對作業系統、OpenSSH、Apache、PHP、vsftpd 進行一些加固,並應用一些嚴格的 iptables 和 TCP 包裝器。我建議您也保留 SELinux。