將 www-data 添加到 /etc/sudoers 以以不同使用者身份執行 php-cgi 的安全隱患
我真正想做的是讓“www-data”使用者能夠以另一個使用者身份啟動 php-cgi。我只是想確保我完全理解安全隱患。
伺服器應支持共享主機環境,在該環境中,各種(可能不受信任的)使用者對伺服器具有 chroot 的 FTP 訪問權限,以儲存他們的 HTML 和 PHP 文件。然後,由於 PHP 腳本可能是惡意的並且可以讀取/寫入其他人的文件,我想確保每個使用者的 PHP 腳本以該使用者的相同使用者權限執行(而不是作為 www-data 執行)。
長話短說,我在我的
/etc/sudoers
文件中添加了以下行,我想通過社區執行它作為健全性檢查:www-data ALL = (%www-data) NOPASSWD: /usr/bin/php-cgi
這一行應該只允許 www-data 執行這樣的命令(沒有密碼提示):
sudo -u some_user /usr/bin/php-cgi
…
some_user
組 www-data 中的使用者在哪裡。這對安全有什麼影響?這應該允許我像這樣修改我的 Lighttpd 配置:
fastcgi.server += ( ".php" => (( "bin-path" => "sudo -u some_user /usr/bin/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => 1, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "4", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" )) )
…允許我為每個使用者生成新的 FastCGI 伺服器實例。
我建議使用php-fpm代替(使用一台伺服器管理所有使用者,但如果您使用操作碼記憶體通常不安全),或者使用runit和spawn-fcgi 生成後端。
然後從 lighttpd 配置中刪除 spawn 選項(bin-path、max-procs、bin*-environment)
Apache 有一個擴展,它允許伺服器在執行 CGI 程序之前***安全地更改使用者。***這就是所謂的
SuEXEC
需要進行大量檢查、平衡和清理,否則包裝器將不會執行或更改使用者。這是因為有很多事情可能會出錯,進而危及系統的安全性。我會認真建議不要做你正在做的事情。
我以前從未執行過 Lighttpd,僅僅是因為通過適當的調整、配置、測試和基準測試……它可以表現得非常好。
但是,我發現了這一點:它似乎是 SuEXEC 的實現,但適用於 Lighttpd。
這是一些關於如何使用它的附加文件。
祝你好運。