Nginx 中每個虛擬主機的使用者
是否可以在 nginx 中為每個虛擬主機配置不同的使用者?
就像是
server { user myprojectuser myprojectgroup; ... }
不,因為 nginx 配置中的所有伺服器節都由同一組工作程序提供服務。此外,從安全的角度來看,您最好這樣執行它,因為這意味著網路伺服器自動無法寫入內容(沒有像 a 這樣的愚蠢行為
chmod -R 0777
),因此如果 nginx 中存在漏洞,則沒有內容有風險。
是的。它是可能的,並建議額外的安全性(請參閱下面的原因)。
考慮到您正在使用 PHP-FPM(您可能是,因為它是最常見的),您可以為每個域創建一個由不同使用者擁有的假離線。
***PS:***我在這裡寫了一個詳細的分步教程:
https://learnwithdaniel.com/2019/06/user-per-virtual-host-nginx/
1. 創建線軸:
將線軸添加到每個新線軸
/etc/php/7.0/fpm/pool.d/www.conf
或為每個新線軸創建一個新.conf
文件。線軸 #1 (myuser1):
[myprojectuser1] user = myuser1 group = myprojectgroup .. listen = /run/php/myuser1.sock ... listen.owner = www-data listen.group = www-data
假離線 #2 (myuser2):
[myprojectuser2] user = myuser2 group = myprojectgroup .. listen = /run/php/myuser2.sock ... listen.owner = www-data listen.group = www-data
PS:將您的 listen.owner/listen.group 保留給同一個 nginx 使用者(通常是www-data)。
2. 將每個假離線分配給它的伺服器塊(apache 使用者的虛擬主機):
主機1:
server { ... location ~ \.php$ { fastcgi_pass unix:/run/php/myuser1.sock; } ... }
主持人2:
server { ... location ~ \.php$ { fastcgi_pass unix:/run/php/myuser2.sock; } ... }
重啟 FPM 和 NGINX 服務
sudo /etc/init.d/php7.0-fpm restart sudo service nginx restart
測試:
創建將顯示目前程序使用者的pinfo.php(或任何名稱)文件:
<?php echo str_replace("\n", '<br>', shell_exec('ps -u -p '.getmypid()));
或者通過 bash創建pinfo.php文件:
echo "<?php echo str_replace(\"\\n\", '<br>', shell_exec('ps -u -p '.getmypid()));" > pinfo.php
然後在瀏覽器上打開“ http://…/pinfo.php ”。
為什麼要使用多個使用者(安全原因):
如果您在同一使用者 ( www-data ) 下執行所有網站,則對 system()/passthru()/exec() 的 PHP 呼叫將可以訪問所有網站!**NGINX 不會保護您免受這種情況的影響。**PHP 只是一個例子,但任何流行的網路伺服器語言都有類似的呼叫。作為黑客,您可以“ ls .. ”瀏覽所有網站,“ cp/echo/mv ”可以在任何文件(包括其他網站文件)中編寫自己的程式碼。即使伺服器上的所有網站都歸同一個人(例如您)所有,建議使用不同的使用者執行每個網站,因為這樣可以防止最終的黑客/病毒(例如 Wordpress 病毒)訪問您的其他網站。