LNMP環境下php項目目錄權限配置

說明

nginx僅能處理靜態文件,當遇到php文件時須轉發給php-fpm處理,所以項目中的php文件須同時具備給nginx和php-fpm執行的權限,必要時還要加上的權限。nginx和php-fpm的權限來源於它們的執行用戶的權限,這裏使這二者設置爲同一執行用戶來統一權限是比較方便的作法。
示範環境:php

  • CentOS7.4
  • Nginx1.12.2
  • php7.2
  • 項目根目錄是sorgo/
  • 項目管理員的用戶名是uu,umask值是0002

操做

設置nginx和php-fpm爲同一執行用戶

新建執行用戶www並自帶用戶組www,且不可登陸.nginx

useradd www -s /usr/sbin/nologin

將已有的項目管理人員帳號(如:uu,固然你也能夠再建立一個專用的)加入wwwlaravel

usermod -G www uu

修改nginx配置文件,變動執行用戶爲www,個人環境中該文件路徑是:/etc/nginx/nginx.conf
修改nginx配置文件
修改php-fpm配置文件,變動執行用戶爲www,個人環境中該文件路徑是:/etc/php-fpm.d/www.conf
修改php-fpm配置文件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權限但還報錯,真見鬼了,簡直要瘋掉了。。。
因而才下決心正面解決這個問題,就在網絡上找了各類解決方案,有靠譜的也有不靠譜的,以上方案是經我整理實踐後確承認靠的方案,但願對你有用。
若是你還知道更好的方案,也請留言分享出來,謝謝~框架

相關文章
相關標籤/搜索