Php

將 www-data 添加到 /etc/sudoers 以以不同使用者身份執行 php-cgi 的安全隱患

  • July 5, 2014

我真正想做的是讓“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代替(使用一台伺服器管理所有使用者,但如果您使用操作碼記憶體通常不安全),或者使用runitspawn-fcgi 生成後端。

然後從 lighttpd 配置中刪除 spawn 選項(bin-path、max-procs、bin*-environment)

Apache 有一個擴展,它允許伺服器在執行 CGI 程序之前***安全地更改使用者。***這就是所謂的SuEXEC

需要進行大量檢查、平衡和清理,否則包裝器將不會執行或更改使用者。這是因為有很多事情可能會出錯,進而危及系統的安全性。我會認真建議不要做你正在做的事情。

我以前從未執行過 Lighttpd,僅僅是因為通過適當的調整、配置、測試和基準測試……它可以表現得非常好。

但是,我發現了這一點:它似乎是 SuEXEC 的實現,但適用於 Lighttpd。

這是一些關於如何使用它的附加文件。

祝你好運。

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