CentOS 7.9 的上传目录设成 1777,A 用户建的子目录 B 用户删不掉,报 Operation not permitted,两个用户在同一个组里,目录权限也是 777。
原因不止一个,得分开看。sticky bit 只允许文件属主、目录属主和 root 删除,同组也不行;子目录里还有文件,删除要先清空内容,权限判定落在子目录上;SELinux 对共享目录里的写入还有额外限制;挂载参数带了 noexec 或 ro,删除动作被文件系统挡住。
动手时先看权限位和属主
ls -ld /data/upload && stat -c '%a %U %G' /data/upload
随后确认子目录的属主是谁
find /data/upload -maxdepth 1 -printf '%u %g %m %p\n' | head
接着用 ACL 给协作组放开权限
setfacl -R -m g:dev:rwx /data/upload && setfacl -R -d -m g:dev:rwx /data/upload
等前面都确认过,再换另一个用户验证删除
su - dev2 -c 'rm -rf /data/upload/testdir' && echo ok
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
改完先别撤,确认这几项。dev2 能删掉自己建的子目录,别人的目录仍然删不掉,getfacl 显示组权限已经生效。
sticky 是防误删不是权限控制,多人协作目录配合 ACL 才顺手;直接把 1777 改成 777 会把保护一起丢掉。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
