在WEB開發時,網站是以 的用戶運行的,而我在本地是以 的用戶編輯的。這就帶來一個問題:如果所有文件屬於 ,那麼網站運行需要寫文件時就因 無許可權而失敗 ;如果所有文件屬於 ,那麼 則需要 獲取許可權才能寫進去 。最鬱悶的是使用git合併的時候,如果忘了加 ,就會因許可權不足提示大量的合併失敗,需要先回滾 ...
在WEB開發時,網站是以_www
的用戶運行的,而我在本地是以liuwencan
的用戶編輯的。這就帶來一個問題:如果所有文件屬於liuwencan
,那麼網站運行需要寫文件時就因無許可權而失敗;如果所有文件屬於_www
,那麼liuwencan
則需要sudo
獲取許可權才能寫進去。最鬱悶的是使用git合併的時候,如果忘了加sudo
,就會因許可權不足提示大量的合併失敗,需要先回滾,再重合併下,甚是不爽。
這個問題,在標準LINUX下,是可以用setfacl
/getfacl
做ACL控制解決此問題,但是MAC OS X上並沒有這兩個命令。百度了OS X ACL
半天得到的不是打不開就是跟問題不搭邊,最後去查看這些打不開的頁面的快照(快照啊,找得是多蛋疼),找到了答案。
MAC OS X上使用chmod +a
增加ACL許可權, chmod -a
刪除ACL許可權,ls -le
查看ACL許可權。
要解決上面提到的問題,執行以下兩條命令修改網站根目錄的擴展許可權即可(www
是我網站根目錄名稱,註意-R
參數必須有,將www
下麵的所有文件也一併設置):
$sudo chmod -R +a 'liuwencan allow write,delete,file_inherit,directory_inherit' www
$sudo chmod -R +a '_www allow write,delete,file_inherit,directory_inherit' www
執行以下命令確認許可權設置有成功:
$ls -le #以下為命令輸出,對比可確認許可權設置符合預期
total 0
drwxr-xr-x+ 37 liuwencan staff 1258 8 5 10:04 www
0: user:liuwencan allow add_file,delete,file_inherit,directory_inherit
1: user:_www allow add_file,delete,file_inherit,directory_inherit
該命令的其他用法,請參考原文:OS X ACL usage。