帮你快速理解、总结文档立即下载

用户和组管理

最近更新时间:2026-08-24 18:27:31
我的收藏

概述

本文介绍在 TencentOS Server 4 上进行用户账号管理、组管理、sudo 权限配置和文件权限控制的操作方法,帮助系统管理员高效完成日常权限管理任务。

注意事项

如需创建或删除账号,请确认已获取 root 权限或使用具备 sudo 权限的普通账号。

用户管理

创建用户

创建普通用户(同时创建家目录,默认 Shell 为 bash):
useradd -m -s /bin/bash <username>
创建系统用户(无家目录,无登录 Shell,适合服务账号):
useradd -r -s /sbin/nologin <service_user>
创建用户并加入指定主组:
useradd -m -g <groupname> <username>
创建用户同时加入多个附加组。加入附加组前请确保对应组已存在,可使用 groupadd <组名> 创建:
useradd -m -G wheel,docker,<groupname> <username>
设置用户密码:
passwd <username>

查看用户信息

# 查看当前用户
whoami
# 查看用户信息
id <username>
# 输出示例:uid=1001(alice) gid=1001(alice) groups=1001(alice),10(wheel)
# 查看所有用户(含系统用户)
cat /etc/passwd
# 查看登录中的用户
who
w
# 查看最近登录记录
last

修改用户

警告:锁定账号会导致该用户无法登录,正在运行的服务进程不受影响,但用户将无法建立新会话。请确认操作影响范围后再执行。
# 修改用户主组
usermod -g <groupname> <username>
# 将用户添加到附加组(-a 追加,否则会替换)
usermod -aG wheel <username>
usermod -aG docker <username>
# 修改用户家目录
usermod -d /new/home -m <username>
# 修改用户默认 Shell
usermod -s /bin/zsh <username>
# 修改用户名(登录名)
usermod -l <newname> <oldname>
# 锁定用户账号(禁止登录)
usermod -L <username>
passwd -l <username>
# 解锁用户账号
usermod -U <username>
passwd -u <username>

删除用户

警告userdel -r 会同时删除用户家目录及其中所有数据,操作不可逆,请确认已备份后再执行。
# 删除用户(保留家目录)
userdel <username>
# 删除用户及其家目录(慎用!)
userdel -r <username>

用户密码管理

# 设置密码
passwd <username>
# 设置密码过期策略
chage -M 90 <username> # 最长 90 天有效
chage -l <username> # 查看密码过期信息
# 强制用户下次登录修改密码
passwd --expire <username>
chage -d 0 <username>

组管理

# 创建组
groupadd <groupname>
# 创建指定 GID 的组
groupadd -g 2000 <groupname>
# 将用户加入组
usermod -aG <groupname> <username>
gpasswd -a <username> <groupname>
# 将用户从组中移除
gpasswd -d <username> <groupname>
# 查看组信息
groups <username>
cat /etc/group | grep <groupname>
# 删除组
groupdel <groupname>

sudo 权限配置

sudo 允许普通用户以 root 或其他用户身份执行命令,避免直接使用 root 登录。

通过 wheel 组配置

# 将用户加入 wheel 组(TencentOS 默认 wheel 组成员可使用 sudo)
usermod -aG wheel <username>
# 验证
su - <username>
sudo whoami # 输出 root

自定义 sudoers 配置

警告:编辑 /etc/sudoers 必须使用 visudo 命令,避免语法错误导致权限锁死。
visudo
常用配置示例:
# 允许 alice 执行所有命令(需输入密码)
alice ALL=(ALL) ALL
# 允许 alice 执行所有命令(无需密码,如 CI/CD 账号)
alice ALL=(ALL) NOPASSWD: ALL
# 允许 developers 组的成员执行所有命令
%developers ALL=(ALL) ALL
# 只允许执行特定命令(最小权限原则)
bob ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
# 允许 alice 以 mysql 用户身份执行命令
alice ALL=(mysql) /usr/bin/mysqldump
也可以在 /etc/sudoers.d/ 目录下创建独立文件(推荐,避免修改主配置文件):
# 创建 alice 的 sudo 配置
echo "alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx" > /etc/sudoers.d/alice
chmod 440 /etc/sudoers.d/alice

文件权限管理

基本权限(rwx)

# 修改文件权限
chmod 755 /opt/myapp/start.sh # rwxr-xr-x
chmod 644 /etc/myapp/config.yaml # rw-r--r--
# 递归修改目录权限
chmod -R 755 /opt/myapp/
# 用符号修改权限
chmod u+x script.sh # 给所有者添加执行权限
chmod go-w file.txt # 去掉组和其他人的写权限
chmod a+r file.txt # 给所有人添加读权限
# 修改所有者和所属组
chown <username>:<groupname> /opt/project/
chown -R <username>:<groupname> /opt/project/ # 递归

特殊权限位

# SUID(以文件所有者权限运行)
chmod u+s /usr/bin/passwd # 示例:passwd 命令需要 SUID 修改 /etc/shadow
# SGID(以文件所属组权限运行,对目录=新建文件继承目录的组)
chmod g+s /shared/project/
# Sticky Bit(目录:只有文件所有者才能删除自己的文件)
chmod +t /tmp
ls -la /tmp # 显示为 drwxrwxrwt

ACL(访问控制列表)

ACL 提供比传统 rwx 更细粒度的权限控制:
# 安装 acl 工具
dnf install -y acl
# 给特定用户设置权限
setfacl -m u:bob:rw /shared/file.txt
# 给特定组设置权限
setfacl -m g:developers:rx /opt/project/
# 查看 ACL
getfacl /shared/file.txt
# 删除 ACL
setfacl -x u:bob /shared/file.txt
# 递归设置 ACL
setfacl -R -m u:bob:rX /opt/project/

验证

# 验证用户创建
id <username>
cat /etc/passwd | grep <username>
# 验证组成员
groups <username>
# 验证 sudo 权限
sudo -l -U <username> # 列出用户的 sudo 权限
# 验证文件权限
ls -la /opt/myapp/
getfacl /shared/file.txt # 查看 ACL

常见问题

问题:用户加入组后权限未生效
处理方案:当用户加入新组后,当前已登录的会话不会立即获取新组成员身份。可选择重新登录或使用 newgrp 命令在当前会话中刷新组信息:
# 当前会话生效(无需重新登录)
newgrp <groupname>
问题: 报错sudo: user is not in the sudoers file
处理方案:将用户添加至 wheel组。
# 以 root 权限将用户加入 wheel 组
usermod -aG wheel <username>
# 或在 /etc/sudoers.d/ 中添加配置