/etc/group - 组信息文件/etc/gshadow - 组密码文件/etc/passwd - 用户信息文件/etc/shadow - 用户密码文件gpasswd [选项] 组名
| 参数 | 说明 |
|---|---|
| -a, --add 用户名 | 将用户添加到组中 |
| -d, --delete 用户名 | 从组中删除用户 |
| -r, --remove-password | 删除组密码 |
| -R, --restrict | 限制用户通过newgrp加入组 |
| -A, --administrators 用户列表 | 设置组管理员列表 |
| -M, --members 用户列表 | 设置组成员列表 |
| -N, --new-group | 创建新组(某些系统) |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
# 将用户john添加到developers组
sudo gpasswd -a john developers
# 输出:正在将用户"john"加入到"developers"组中
# 可以一次添加多个用户
sudo gpasswd -a alice developers
sudo gpasswd -a bob developers
# 验证用户是否在组中
groups john
# 输出:john : john developers
# 从developers组中删除用户john
sudo gpasswd -d john developers
# 输出:正在将用户"john"从"developers"组中删除
# 验证删除结果
groups john
# 输出:john : john
# 设置alice为developers组的管理员
sudo gpasswd -A alice developers
# 设置多个管理员
sudo gpasswd -A "alice,bob,charlie" developers
# 查看组管理员
sudo getent group developers
# 输出:developers:x:1001:alice,bob,charlie
# 查看/etc/gshadow文件
sudo grep developers /etc/gshadow
# 输出:developers:!:alice,bob,charlie:
# 为developers组设置密码
sudo gpasswd developers
# 输入新的组密码两次
# 查看组密码是否设置
sudo grep developers /etc/gshadow
# 输出:developers:加密的密码::
# 删除组密码
sudo gpasswd -r developers
# 验证密码已删除
sudo grep developers /etc/gshadow
# 输出:developers:!::
# 使用-M参数批量设置组成员
sudo gpasswd -M "user1,user2,user3,user4" testgroup
# 查看组成员
sudo getent group testgroup
# 输出:testgroup:x:1002:user1,user2,user3,user4
# 清空所有组成员
sudo gpasswd -M "" testgroup
# 或者
sudo gpasswd -M "" testgroup && sudo gpasswd -M "user1" testgroup
# 限制用户通过newgrp加入组
sudo gpasswd -R developers
# 验证限制
sudo grep developers /etc/gshadow
# 输出:developers:!::
# 解除限制
sudo gpasswd -R "" developers
# 创建新组并设置初始成员
sudo gpasswd -N newgroup
sudo gpasswd -a user1 newgroup
sudo gpasswd -a user2 newgroup
# 或者使用groupadd创建组
sudo groupadd newgroup2
sudo gpasswd -a user1 newgroup2
组管理员是gpasswd的一个重要功能,允许某些用户管理组的成员关系:
| 权限 | 组管理员 | 普通组成员 | 非组成员 |
|---|---|---|---|
| 添加用户到组 | 允许 | 禁止 | 禁止 |
| 从组删除用户 | 允许 | 禁止 | 禁止 |
| 查看组成员 | 允许 | 允许 | 限制 |
| 设置组密码 | 禁止 | 禁止 | 禁止 |
# 1. 普通用户成为组管理员
# root用户设置alice为developers组管理员
sudo gpasswd -A alice developers
# 2. 组管理员添加用户
# 以alice身份执行
gpasswd -a bob developers
# 不需要sudo,因为alice是该组的管理员
# 3. 组管理员删除用户
gpasswd -d charlie developers
# 4. 组管理员查看组信息
getent group developers
# 注意:组管理员不能修改组密码或设置其他管理员
#!/bin/bash
# 项目组成员管理脚本
PROJECT_GROUP="project_alpha"
ADMIN_USER="project_lead"
# 创建项目组
sudo groupadd $PROJECT_GROUP
# 设置项目负责人为组管理员
sudo gpasswd -A $ADMIN_USER $PROJECT_GROUP
# 添加项目成员
sudo gpasswd -a dev1 $PROJECT_GROUP
sudo gpasswd -a dev2 $PROJECT_GROUP
sudo gpasswd -a dev3 $PROJECT_GROUP
# 设置项目目录权限
sudo mkdir -p /projects/$PROJECT_GROUP
sudo chgrp $PROJECT_GROUP /projects/$PROJECT_GROUP
sudo chmod 2775 /projects/$PROJECT_GROUP # 设置SGID位
echo "项目组 $PROJECT_GROUP 设置完成"
echo "管理员: $ADMIN_USER"
echo "成员: dev1, dev2, dev3"
#!/bin/bash
# Web服务器用户组管理
WEB_GROUP="www-data"
NEW_USER="webadmin"
# 将用户添加到www-data组
sudo gpasswd -a $NEW_USER $WEB_GROUP
# 设置Web目录权限
WEB_ROOT="/var/www/html"
sudo chgrp -R $WEB_GROUP $WEB_ROOT
sudo chmod -R g+rwX $WEB_ROOT
sudo find $WEB_ROOT -type d -exec chmod g+s {} \;
# 验证设置
echo "用户 $NEW_USER 已加入 $WEB_GROUP 组"
groups $NEW_USER
ls -ld $WEB_ROOT
#!/bin/bash
# 批量管理用户组脚本
GROUP_NAME="staff"
USERS_FILE="staff_users.txt"
# 从文件读取用户列表
if [[ -f "$USERS_FILE" ]]; then
# 清空现有成员
sudo gpasswd -M "" $GROUP_NAME
# 批量添加用户
while IFS= read -r user || [[ -n "$user" ]]; do
# 跳过空行和注释
[[ -z "$user" || "$user" =~ ^# ]] && continue
# 检查用户是否存在
if id "$user" &>/dev/null; then
sudo gpasswd -a "$user" $GROUP_NAME
echo "已添加用户: $user"
else
echo "警告: 用户 $user 不存在,跳过"
fi
done < "$USERS_FILE"
else
echo "错误: 用户列表文件 $USERS_FILE 不存在"
exit 1
fi
echo "批量添加完成"
sudo getent group $GROUP_NAME
/etc/group,密码信息在/etc/gshadownewgrp命令gpasswd:专门管理组,可以设置组密码、组管理员usermod:管理用户,修改用户属性,包括所属组gpasswd -a添加用户到组,不会影响用户的主要组usermod -G会覆盖用户的附加组列表# gpasswd添加用户到附加组
sudo gpasswd -a user group
# usermod修改用户组(会覆盖原有附加组)
sudo usermod -aG group user # -a参数表示追加而不是覆盖
/etc/gshadow文件:
# 查看特定组的管理员
sudo grep developers /etc/gshadow
# 输出:developers:!:alice,bob:user1,user2
# 管理员是冒号后的第一部分(alice,bob)
# 查看所有组的管理员
sudo cat /etc/gshadow | grep -v '^!' | awk -F: '{print $1 ": " $3}'
newgrp临时加入组# 不推荐的做法
sudo gpasswd developers # 设置组密码
# 用户可以使用:newgrp developers 并输入密码
# 推荐的做法
sudo gpasswd -A alice developers # 设置组管理员
# 管理员alice可以管理组成员,无需共享密码
创建新的用户组:
sudo groupadd newgroup
sudo groupadd -g 1001 developers
删除用户组:
sudo groupdel oldgroup
# 注意:只能删除空组
查看用户所属组:
groups username
# 或
id -Gn username
修改用户属性,包括组:
sudo usermod -aG group1,group2 user
sudo usermod -g maingroup user