Linux下部署Symfony2對app/cache和app/logs目錄的權限設置

  在linux下部署完Symfony2,可能在訪問的時候會報app/logs或者app/cache目錄沒有寫權限的錯誤。在linux下,若是咱們在命令行登錄的用戶和web應用服務器(apache、nginx等)的用戶不同的時候,php

可使用下面四個方法來解決這個問題。linux

  

  一、在支持chmod +a 的系統下使用ACLnginx

  不少版本的linux系統都支持chmod +a命令,因此咱們優先使用這個命令。找出web應用服務器的用戶名賦值到變量HTTPDUSER上。web

1 $ rm -rf app/cache/*
2 $ rm -rf app/logs/*
3 
4 $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
5 $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
6 $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

  第四行命令是:找出web應用服務器的用戶名賦值給變量HTTPDUSER;第五行命令是:賦予web應用服務器對app/logs或者app/cache目錄讀、寫、建立目錄等權限;第六行命令是:賦予命令行登錄用戶對app/logs或者app/cache目錄讀、寫、建立目錄等權限。apache

 

  二、若是系統不支持chmod +a ,那麼就使用setfacl命令來設置ACL安全

  首先要肯定目錄所在分區支持ACL和已經安裝setfacl命令。服務器

1 $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
2 $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

  若是不起做用,在第二行命令添加 -n 選項。app

 

  三、不使用ACLspa

  若是不是使用ACL,還能夠改變umask,使這兩個目錄的用戶組有建立和修改文件的權限(775,而且web應用服務器和命令行用戶在同一個組)或者全部用戶都擁有建立和修改文件的權限(777),可是這兩組權限都是不安全的,給予的權限太高。把下面的代碼添加到app/consoleweb/app.php 和 web/app_dev.php 文件的首行。命令行

1 umask(0002); // 生成的目錄(app/cache和app/logs)權限爲0775
2 
3 // 或者
4 
5 umask(0000); // 生成的目錄(app/cache和app/logs)權限爲0777

  注:php的umask命令是非線程安全的。

 

  四、命令行登錄的用戶和web應用服務器的用戶爲同一個用戶。

相關文章
相關標籤/搜索