使用setfacl设置g:www-data:rwx权限时报Operation not permitted的问题求助
setfacl设置g:www-data:rwx权限时报Operation not permitted的问题求助
我来帮你分析下这个问题的原因和解决办法:
首先看你的命令:setfacl -R -dm g:www-data:rwx /var/www/portaldev-api.lurity.com/temp
这里的核心问题出在小写的x上,结合-R递归参数时,它会尝试给目标路径下**所有对象(包括文件和目录)**强制添加执行权限。
为什么会报错?
- 系统出于安全考虑,普通文件默认不需要执行权限,而你的部署用户可能没有权限给
temp/cache目录下的某些文件设置执行权限(比如这些文件的所有者不是部署用户,且部署用户没有足够的ACL修改权限),导致setfacl执行到这些文件时抛出"Operation not permitted"错误。 - 你需要的其实是目录的执行权限(因为删除目录内的文件需要先进入目录,这依赖目录的x权限),而非所有文件的执行权限。
解决办法很简单:把小写x换成大写X,修改后的命令如下:setfacl -R -dm g:www-data:rwX /var/www/portaldev-api.lurity.com/temp
大写X是条件性的执行权限,它只会在两种情况下设置x权限:
- 目标是目录(这正是你需要的,让www-data组能进入目录、操作里面的文件);
- 文件本身已经拥有执行权限(比如脚本或可执行程序)。
这样既满足了你删除文件的权限需求,又不会尝试给普通文件添加不必要的执行权限,自然就不会触发权限不足的报错了。
另外你也可以先检查下报错的cache目录的基础权限:ls -ld /var/www/portaldev-api.lurity.com/temp/cache
确认部署用户是否拥有该目录的写权限(修改ACL需要目录的w权限),如果没有的话,可能需要先调整目录的所有者或基础权限再执行setfacl命令。
备注:内容来源于stack exchange,提问作者Čamo




