Linux粘滞位权限异常行为排查与技术咨询
Linux目录权限与文件追加异常问题解析
场景回顾
- 以root操作:将
/shared设为1755(drwxr-sr-t,属主root:root);创建/shared/rnd/rnd-test,将/shared/rnd及其内容设为3770(drwxrws--T,属主root:rnd)。 trent和walter均为rnd组成员,分别创建trent-test和walter-test。- 当前
/shared/rnd下文件权限:
total 12 -rwxrwx--T 1 root rnd 60 Jan 29 20:17 rnd-test -rw-rw-r-- 1 trent rnd 12 Jan 29 19:19 trent-test -rw-rw-r-- 1 walter rnd 7 Jan 29 20:18 walter-test
- 异常现象:
trent和walter均可读取rnd-test,且能追加内容到rnd-test,但无法追加到对方创建的文件。- root可追加内容到
rnd-test,但无法追加到trent-test和walter-test。
核心问题解答
1. 为何同组成员能修改root属组文件,却无法修改对方文件?
rnd-test可修改的原因:该文件权限为-rwxrwx--T,组权限位是rwx,trent/walter作为rnd组成员,拥有写入权限,因此可以直接追加内容。- 对方文件无法修改的原因:Ubuntu默认启用了内核参数
fs.protected_regular(默认值为1),该参数的作用是阻止普通用户修改不属于自己的文件,即使文件权限位允许。所以即使walter-test的组权限是rw,trent作为非文件所有者,也无法写入。 - root无法追加的特殊情况:如果root也无法操作,大概率是目标文件被设置了
chattr +a属性(仅允许追加,禁止修改/删除,root也受此限制),可通过lsattr trent-test命令验证。
2. 目录粘滞位对追加操作的影响,以及echo >>的工作机制
- 目录粘滞位的真实作用:目录的粘滞位(t位)仅限制删除、重命名、移动目录内文件的操作,要求操作者必须是文件所有者、目录所有者或root,它不直接控制文件的写入/追加权限。
- 粘滞位与追加权限的关联假象:你测试中出现的「有粘滞位无法追加、无粘滞位可以追加」,实际是因为
fs.protected_regular参数在目录存在粘滞位时的生效逻辑更严格,并非粘滞位本身影响了写入权限。 echo >>的工作方式:echo '内容' >> 文件是直接打开目标文件并在末尾追加内容,不会像vim那样创建临时文件再替换原文件。vim的替换操作需要目录的删除权限(会被粘滞位限制),但echo >>仅需要文件自身的写入权限。
3. 如何实现你的配置意图
要满足「用户仅能删除自己创建的文件、组文件自动归属组、组外用户无访问权、组成员可访问组文件」的要求,正确配置如下:
/shared目录设为0755(drwxr-xr-x):保证普通用户能进入目录,组外用户仅能读目录。/shared/rnd目录设为3770(drwxrws--T):- SGID位(s位):确保新创建的文件自动归属
rnd组。 - 权限
770:组内成员可读写,组外用户无任何权限。 - 粘滞位(t位):限制用户只能删除自己创建的文件。
- SGID位(s位):确保新创建的文件自动归属
内容的提问来源于stack exchange,提问作者scbroke
相关产品推荐
相关产品推荐

