在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,add_subdirectory' www
$sudo chmod -R +a '_www allow write,delete,file_inherit,directory_inherit,add_subdirectory' 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,add_subdirectory
1: user:_www allow add_file,delete,file_inherit,directory_inherit,add_subdirectory
该命令的其他用法,请参考原文:OS X ACL usage。