用户组的意义

把用户分组,统一管权限——不用每个文件给每个用户单独设。

例:开发团队 5 个人都要能读 /srv/code 目录 → 建个 dev 组,5 人加入,目录归 dev 组,组权限 r-x

/etc/group:组清单

cat /etc/group | head -3
# root:x:0:
# daemon:x:1:
# sudo:x:27:wadely,alice

每行 4 列:

组名 : 密码占位 : GID : 成员列表(用户名,逗号分隔)

4 个常用命令

# 建组
sudo groupadd dev

# 看组成员
getent group dev
# dev:x:1001:wadely,alice

# 加用户到组
sudo usermod -aG dev wadely             # 推荐(-a 追加)
sudo gpasswd -a wadely dev              # 同上,另一种写法

# 从组里移除
sudo gpasswd -d wadely dev

# 删组
sudo groupdel dev                       # 组必须没有用户作"主组"才能删

主组 vs 附加组

每个用户只有一个主组(primary group,写在 /etc/passwd 第 4 列),但可以加入多个附加组(supplementary groups)。

id wadely
# uid=1000(wadely) gid=1000(wadely) groups=1000(wadely),27(sudo),1001(dev)
#                     ↑               ↑
#                  主组              附加组

主组的作用:新建的文件 / 目录默认归主组所有

改主组:

sudo usermod -g dev wadely        # 主组改成 dev

实战:共享目录给一组人

# 1. 建组 + 加人
sudo groupadd team
sudo usermod -aG team wadely
sudo usermod -aG team alice

# 2. 建共享目录
sudo mkdir /srv/share
sudo chown root:team /srv/share
sudo chmod 2775 /srv/share        # 2 = SGID 位(详见下一篇)

# 含义:rwxrwsr-x
# 所有者 / 组成员都能读写;其他人只读
# SGID:在此目录里新建的文件都自动归 team 组

SGID 在共享目录上极有用——避免每个新文件都要 chgrp

看用户属于哪些组

groups wadely
# wadely : wadely sudo dev team

id wadely             # 更详细

看组里有谁

getent group sudo
# sudo:x:27:wadely,alice

下一篇:权限的数字表示法(755 / 644 等)。