在linux下部署完Symfony2,可能在訪問的時候會報app/logs或者app/cache目錄沒有寫權限的錯誤。在linux下,如果我們在命令行登陸的用戶和web應用服務器(apache、nginx等)的用戶不一樣的時候,
可以使用下面四個方法來解決這個問題。
1、在支持chmod +a 的系統下使用ACL
很多版本的linux系統都支持chmod +a命令,所以我們優先使用這個命令。找出web應用服務器的用戶名賦值到變量HTTPDUSER上。
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/logs6 $ 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目錄讀、寫、創建目錄等權限。
2、如果系統不支持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 選項。
3、不使用ACL
如果不是使用ACL,還可以改變umask,使這兩個目錄的用戶組有創建和修改文件的權限(775,并且web應用服務器和命令行用戶在同一個組)或者所有用戶都擁有創建和修改文件的權限(777),但是這兩組權限都是不安全的,給予的權限過高。把下面的代碼添加到app/console,web/app.php和web/app_dev.php文件的首行。
1 umask(0002); // 生成的目錄(app/cache和app/logs)權限為07752 3 // 或者4 5 umask(0000); // 生成的目錄(app/cache和app/logs)權限為0777
注:php的umask命令是非線程安全的。
4、命令行登陸的用戶和web應用服務器的用戶為同一個用戶。
新聞熱點
疑難解答