nginx僅能處理靜態文件,當遇到php文件時須轉發給php-fpm處理,所以項目中的php文件須同時具備給nginx和php-fpm讀
與執行
的權限,必要時還要加上寫
的權限。nginx和php-fpm的權限來源於它們的執行用戶的權限,這裏使這二者設置爲同一執行用戶來統一權限是比較方便的作法。
示範環境:php
sorgo/
uu
,umask
值是0002新建執行用戶www
並自帶用戶組www
,且不可登陸.nginx
useradd www -s /usr/sbin/nologin
將已有的項目管理人員帳號(如:uu
,固然你也能夠再建立一個專用的)加入www
組laravel
usermod -G www uu
修改nginx配置文件,變動執行用戶爲www
,個人環境中該文件路徑是:/etc/nginx/nginx.conf
修改php-fpm配置文件,變動執行用戶爲www
,個人環境中該文件路徑是:/etc/php-fpm.d/www.conf
shell
修改完後重啓nginx和php-fpm.安全
下面以laravel項目目錄爲例,只給相關用戶必要的權限,又不會像設置777
那樣權限過大而存在可能的安全問題。網絡
chown -R uu:www sorgo/ #設置歸屬 chmod -Rf g+s sorgo/ #SGID,新生成文件或文件夾保持與父目錄同一權限組 chmod -R 750 sorgo/ #設置具體權限 chmod -R 770 sorgo/storage/ #程序須要寫入和建立新文件的加`寫`權限
SGID屬性對於像laravel框架這種有tinker讓開發者在交互式命令行界面調試代碼的特別有用。好比你使用tinker新建了一個日誌文件,若是沒有SGID那這個新日誌文件的全部者和全部組會是uu:uu
,這時www
用戶執行下的程序要寫入東西到這個新日誌的話就會因權限受阻而報錯;而父目錄有SGID屬性的則會是uu:www
,同時保證了兩個相關的用戶都能正常讀寫。php7
曾經有過各類因權限問題而報錯的,基本辦法也都是設置777
權限了事,直到後來一次在我一怒之下將整個項目文件都設了777
權限但還報錯,真見鬼了,簡直要瘋掉了。。。
因而才下決心正面解決這個問題,就在網絡上找了各類解決方案,有靠譜的也有不靠譜的,以上方案是經我整理實踐後確承認靠的方案,但願對你有用。
若是你還知道更好的方案,也請留言分享出來,謝謝~框架