Linux中子目录和新文件需通过SGID和default ACL协同实现权限继承:SGID确保属组继承(chown :group + chmod g+s + usermod + umask 002),default ACL(setfacl -d)控制权限位继承,二者缺一不可。

Linux 中子目录和新文件不会自动继承父目录的权限,必须通过明确机制主动启用继承能力。核心方法有两种:SGID 保证属组继承,default ACL 保证权限位继承——两者常配合使用,缺一不可。
SGID 确保新建内容归属正确组
仅靠 chmod 设置目录权限,无法让新文件自动属于项目组。必须闭环完成四步:
- 先用 chown :devteam /shared 指定属组(注意冒号开头,不写用户名)
- 再运行 chmod g+s /shared 或 chmod 2770 /shared 开启 SGID;验证时 ls -ld /shared 应显示组权限位为小写 s(如 drwxrws---)
- 用户需加入该组:usermod -aG devteam alice,并重新登录或执行 newgrp devteam
- 统一设 umask 002(写入 ~/.bashrc 或 /etc/profile),否则新建文件默认无组写权(644 → 应为 664)
default ACL 控制具体权限位继承
SGID 只管“归哪个组”,不管“给什么权限”。要让新文件/子目录自动获得读写执行等权限,必须设置默认 ACL:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 对目录运行:setfacl -d -m g:devteam:rwx /shared(只影响之后新建项)
- 子目录会完整继承该 default ACL,并自动设为自己默认 ACL(可继续向下传)
- 普通文件只继承权限位(如 rwx),但不带 default 标记,因此不能作为继承源
- 实际权限 = default ACL 权限 & ~umask,例如 default 给 rw-rw-rw-、umask=002 → 文件得 rw-rw-r--
粘滞位 + 默认 ACL 防误删与细粒度控制
多人协作时,仅继承权限还不够——别人仍能删你建的文件:
- 加粘滞位:chmod +t /shared 或 chmod 12770 /shared;验证看末位是否为 t(如 drwxrws--t)
- 若需更灵活授权(如允许某组对新文件有写权但不给执行),用 default ACL 更精准:setfacl -d -m u:alice:rw- /shared
- 已有内容不受 default ACL 影响,需单独赋权:setfacl -R -m g:devteam:rwx /shared
- 用 getfacl /shared 查看是否生效;含 default: 行即表示已配置
操作前务必校验路径与效果
权限命令一旦递归执行,极易误伤系统目录:
- 执行前先预览:find /shared -type d -print | head -10 和 find /shared -type f -print | head -10
- 检查当前 ACL 结构:getfacl -R /shared | head -20
- 新建测试文件后立即验证:touch /shared/test.txt && getfacl /shared/test.txt
- 切换到目标用户实测:sudo -u alice ls /shared、sudo -u alice touch /shared/a

















