要使新文件自动归属指定组并保留组写权限,必须同时满足四点:先chown :groupname设属组,再chmod 2770启用SGID;用户须属该组且已重载组信息;umask必须为002;多人共写时还需加Sticky Bit(chmod +t)。

chmod 2770 不是终点,只是其中一环。只加 SGID 权限无法让新文件自动归属指定组并保留组写权限——必须四件事同时到位。
先设属组,再开 SGID,顺序不能反
chown :groupname 必须在 chmod 2770 之前执行,否则 SGID 继承的是目录当前的默认属组(比如用户自己的主组),不是你想要的协作组。
- 用 chown :devteam /srv/shared 显式指定目标组(注意冒号开头、不写用户名)
- 再运行 chmod 2770 /srv/shared:首位 2 是 SGID,770 表示属主和属组都有 rwx,其他人无权
- 验证是否生效:ls -ld /srv/shared 输出应为 drwxrws---——第 4 位是小写 s,不是 x 或大写 S;若出现大写 S,说明组缺执行权,补 chmod g+x
用户必须属于该组,且 shell 已加载新组信息
即使目录开了 SGID,如果用户不在 devteam 组里,或当前会话没刷新组列表,新建文件仍按其主组走。
- 加组命令必须带 -aG:例如 usermod -aG devteam alice(-a 表示追加,避免覆盖原有组)
- 用户需重新登录;或临时切换:newgrp devteam(退出当前 shell 后失效)
- 检查是否生效:groups 或 id -nG 输出中必须包含 devteam
umask 必须设为 002,否则组写权限被过滤
SGID 只继承组名,不继承写权限。默认 umask 0022 会让新文件变成 -rw-r--r--,组无法编辑。
- 推荐全局设为 umask 002:写入 /etc/profile.d/team.sh(所有用户)或 ~/.bashrc(单用户)
- 效果:新文件权限 = 666 & ~002 = 664(即 -rw-rw-r--),新目录 = 777 & ~002 = 775(即 drwxrwxr-x)
- 验证:cd /srv/shared && touch test.txt && ls -l test.txt,组权限位必须含 w,如 -rw-rw----
多人共写时,别忘了 Sticky Bit 防误删
SGID 不控制删除行为。任何人只要对目录有写权限,就能删别人创建的文件。
- 加 Sticky Bit 后,只有文件所有者、目录所有者或 root 才能删文件
- 命令:chmod +t /srv/shared,或一步到位:chmod 12770 /srv/shared
- 验证:ls -ld /srv/shared 应显示 drwxrws--t(小写 t 表示组有执行权)或 drwxrws--T(大写 T 表示无执行权)
最常被跳过的其实是 umask 和组成员重载——这两点一漏,chmod 2770 就成了“看起来对、实际没用”的摆设。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...










