设置目录sgid权限的核心目标是使新创建文件和子目录自动继承目录属组,需四步配合:一、先用chown :groupname设属组再chmod 2770开启sgid;二、用户须属该组且会话更新;三、统一umask为002确保组写权限;四、可选加sticky bit(chmod +t)防误删。

设置目录的 SGID 权限,核心目标是让该目录下新创建的文件和子目录自动继承目录的属组,而不是创建者默认的主组。这不单是执行一条 chmod g+s 就能完成的事,需要几个关键环节配合生效。
一、先设属组,再开 SGID
目录必须明确归属目标组,否则 SGID 没有“继承对象”。不能跳过属组直接加权限。
- 用
chown :groupname单独设置属组(注意冒号开头,不写用户名),例如:sudo chown :devteam /srv/shared - 再开启 SGID 并赋予组读写执行权限:
sudo chmod 2770 /srv/shared
其中 2 表示 SGID,770 表示属主和属组可读写执行、其他人无权限 - 验证是否生效:
ls -ld /srv/shared应显示类似drwxrws---—— 组执行位是小写 s,不是 x 或大写 S
二、确保用户属于该组且会话已更新
即使目录开了 SGID,如果用户不在目标组里,或当前 shell 没加载新组信息,新建文件仍按其默认主组走。
- 把用户加入组:
sudo usermod -aG devteam alice - 用户需重新登录;或临时切换主组:
newgrp devteam(退出当前 shell 后失效) - 检查是否生效:
groups或id -nG输出应包含 devteam
三、统一 umask 保证组写权限不被过滤
SGID 只继承组名,不继承写权限。若用户 umask 是 022,新建文件默认为 -rw-r--r--,组无法修改。
- 推荐全局设为
umask 002:
在/etc/profile或/etc/bash.bashrc中追加:umask 002 - 个人配置可加到
~/.bashrc - 验证效果:在共享目录中
touch test.txt,再ls -l test.txt,应显示类似-rw-rw----(组含 w)
四、可选:加 Sticky Bit 防误删
多人共写同一目录时,仅 SGID 不防删除。加 Sticky Bit(t 位)后,只有文件所有者、目录所有者或 root 才能删文件。
- 命令:
sudo chmod +t /srv/shared
或一步到位:sudo chmod 12770 /srv/shared - 验证:
ls -ld /srv/shared显示应为drwxrws--t(小写 t 表示有执行权)











