概述
本文介绍在 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# 查看登录中的用户whow# 查看最近登录记录last
修改用户
警告:锁定账号会导致该用户无法登录,正在运行的服务进程不受影响,但用户将无法建立新会话。请确认操作影响范围后再执行。
# 修改用户主组usermod -g <groupname> <username># 将用户添加到附加组(-a 追加,否则会替换)usermod -aG wheel <username>usermod -aG docker <username># 修改用户家目录usermod -d /new/home -m <username># 修改用户默认 Shellusermod -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/alicechmod 440 /etc/sudoers.d/alice
文件权限管理
基本权限(rwx)
# 修改文件权限chmod 755 /opt/myapp/start.sh # rwxr-xr-xchmod 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 /tmpls -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/# 查看 ACLgetfacl /shared/file.txt# 删除 ACLsetfacl -x u:bob /shared/file.txt# 递归设置 ACLsetfacl -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/ 中添加配置