You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux粘滞位权限异常行为排查与技术咨询

Linux目录权限与文件追加异常问题解析

场景回顾

  1. 以root操作:将/shared设为1755(drwxr-sr-t,属主root:root);创建/shared/rnd/rnd-test,将/shared/rnd及其内容设为3770(drwxrws--T,属主root:rnd)。
  2. trent和walter均为rnd组成员,分别创建trent-test和walter-test。
  3. 当前/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
  1. 异常现象:
    • 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位):限制用户只能删除自己创建的文件。

内容的提问来源于stack exchange,提问作者scbroke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:24:57