CentOS用户与权限管理:从useradd到sudoers
在 CentOS(以及 RHEL、Fedora 等红帽系发行版)中,用户和权限管理是系统安全与多用户协作的基础。下面从零开始,系统梳理从创建用户到赋予 sudo 权限的完整操作链。1. 用户与组的基本概念
[*]用户(User):每个使用系统的人或服务都有一个账户,由 UID(用户 ID)唯一标识。
[*]组(Group):将多个用户组织在一起,方便统一分配权限,由 GID(组 ID)标识。一个用户可以有多个附加组。
[*]超级用户(root):UID 0,拥有系统最高权限,可以直接安装软件、修改系统配置等。
2. 用户创建:useradd 命令
useradd 是最基本的用户创建工具,常用选项如下:
useradd [选项] 用户名
常用选项:
[*]-m:自动创建用户家目录(默认 /home/用户名),并复制 /etc/skel 下的骨架文件。
[*]-d 目录:指定用户家目录路径。
[*]-s shell:指定登录 Shell,如 /bin/bash。
[*]-g 组:指定主组(必须已存在)。
[*]-G 组1,组2:指定附加组(用户同时属于这些组)。
[*]-u UID:手动指定 UID。
[*]-c “注释”:添加用户描述信息(如全名)。
[*]-e 日期:账户过期日期(格式 YYYY-MM-DD)。
[*]-r:创建系统账户(UID 在 SYS_UID_MIN-SYS_UID_MAX 之间,通常无家目录且永不过期,用于运行服务)。
示例:
# 创建普通用户 bob,自动创建家目录,默认 Shell 为 /bin/bash
useradd -m bob
# 创建用户 alice,指定家目录 /data/alice,使用 zsh,并加入 wheel 组(用于 sudo)
useradd -m -d /data/alice -s /bin/zsh -G wheel alice
# 创建系统用户用于运行 web 服务
useradd -r -s /sbin/nologin myapp
创建后设置密码
passwd 用户名
会提示输入并确认新密码。root 可以重置任何用户密码,普通用户只能修改自己的密码。
3. 用户信息查看与修改
查看用户信息
[*]id 用户名:显示 UID、GID 及所属组。
[*]finger 用户名(可能需要安装 finger 包):显示更详细的用户信息。
[*]cat /etc/passwd:查看用户账户文件(每行一个用户,格式:用户名:x:UID:GID:描述:家目录:Shell)。
[*]cat /etc/shadow:查看加密后的密码及过期信息(只有 root 可读)。
[*]cat /etc/group:查看组信息。
修改用户:usermod
语法类似于 useradd,常用选项:
[*]-l 新用户名:更改用户名(需手动重命名家目录)。
[*]-d 新家目录 -m:移动旧家目录内容到新路径。
[*]-s /bin/zsh:修改登录 Shell。
[*]-g 新主组:更改主组。
[*]-aG 组名:将用户追加到附加组(务必加 -a,否则会覆盖原有附加组)。
[*]-L / -U:锁定 / 解锁用户密码(禁止登录)。
示例:
# 将 bob 改名为 robert
usermod -l robert bob
# 将 alice 同时加入 developers 组
usermod -aG developers alice
# 锁定用户 alice 的密码
usermod -L alice
删除用户:userdel
[*]userdel 用户名:仅删除 /etc/passwd 中的账户条目,保留家目录和邮件池。
[*]userdel -r 用户名:同时删除家目录和邮件池。
4. 文件权限与归属
Linux 文件权限分为 读(r=4)、写(w=2)、执行(x=1),分别对应三类身份:
[*]所有者(user)
[*]所属组(group)
[*]其他人(others)
用 ls -l 看到类似 -rwxr-xr-- 的字符串,第一位为文件类型(- 文件,d 目录,l 链接),接着每三个字符一组。
修改权限:chmod
[*]数字模式:chmod 权限 文件
chmod 755 script.sh # 所有者 rwx,组 r-x,其他人 r-x
chmod 600 private.txt # 仅所有者可读写
[*]符号模式:
chmod u+x file # 给所有者加执行权限
chmod g-w,o-rw file # 去掉组写权限,去掉其他人读写
chmod a+r file # 所有人加读权限
修改归属:chown 与 chgrp
[*]chown 用户:组 文件:同时修改所有者和所属组。
[*]chown 用户 文件:仅修改所有者。
[*]chgrp 组 文件:仅修改所属组。
[*]加上 -R 可递归处理目录。
示例:
chown alice:developers project/
chown -R bob report.txt
chgrp staff /shared
5. 临时提权与 sudo
普通用户在执行系统管理任务(如安装软件、重启服务)时,需要临时获取 root 权限。
sudo 命令允许授权的用户以其他用户(默认 root)的身份运行命令,并保留审计日志。
安装与启动(CentOS 7/8 一般已预装)
# 检查是否安装
rpm -q sudo
# 若未安装
yum install sudo # 或 dnf install sudo
配置 sudo 权限:/etc/sudoers
直接编辑此文件 必须使用 visudo 命令,它会在保存前检查语法错误,防止因配置错误导致所有 sudo 操作失败。
执行:
visudo
默认会使用 vi 编辑器,可设置 EDITOR 环境变量切换:
EDITOR=nano visudo
sudoers 语法规则
基本格式:
用户/组主机=(运行身份) 命令列表
[*]主机通常填 ALL,即可从任何主机匹配(本地就是 localhost)。
[*]运行身份:通常写成 (ALL) 或 (root),代表可以以哪些用户的身份执行命令。
[*]命令列表:必须是绝对路径,多个命令用逗号分隔,ALL 代表所有命令。
[*]可选 NOPASSWD: 表示执行时不需要输入密码。
常用示例:
[*]授予单个用户全部 sudo 权限(输入密码)
alice ALL=(ALL) ALL
[*]授予一个组(如 wheel 或 %sudo)全部 sudo 权限
%wheel ALL=(ALL) ALL
CentOS 默认已存在此规则并注释掉,只需取消注释,然后将用户加入 wheel 组即可:
usermod -aG wheel alice
[*]无需密码执行所有命令(慎用)
bob ALL=(ALL) NOPASSWD: ALL
[*]限制用户只能执行特定命令
charlie ALL=(ALL) /usr/bin/systemctl restart httpd, /usr/bin/journalctl
[*]使用别名简化管理
# 用户别名
User_Alias ADMINS = alice, bob
# 命令别名
Cmnd_Alias WEB_CMDS = /usr/bin/systemctl restart httpd, /usr/bin/systemctl status nginx
# 授权
ADMINS ALL=(ALL) NOPASSWD: WEB_CMDS
[*]针对特定主机的配置(多机共享 sudoers 时有用)
alice 192.168.1.100=(root) /usr/bin/systemctl
保存退出后,配置立即生效,无需重启。
使用 sudo
[*]sudo 命令:以 root 身份运行命令,首次运行会提示输入当前用户的密码,并缓存几分钟。
[*]sudo -u 用户名 命令:以指定用户身份运行。
[*]sudo -l:列出当前用户被授权执行的命令。
[*]sudo -k:立即清除密码缓存,下次执行必须重新输入密码。
6. 最佳实践与安全建议
[*]禁用 root 直接登录
在 /etc/ssh/sshd_config 中设置 PermitRootLogin no,强制通过普通用户 + sudo 访问系统。
[*]使用 wheel 组统一管理管理员
凡是需要 sudo 权限的用户都加入 wheel 组,sudoers 中只需维护一行 %wheel ALL=(ALL) ALL。
[*]最小权限原则
只授予用户完成工作所需的最少命令,避免通配 ALL。
[*]记录与审计
sudo 的操作默认会记录到 /var/log/secure(CentOS/RHEL),可结合 auditd 做更细粒度审计。
[*]定期检查用户列表
使用 getent passwd 或 grep -v nologin /etc/passwd 查看可登录用户,及时清理无用账户。
[*]为服务使用系统账户
useradd -r 创建无家目录、无登录权限的专用账户,缩小攻击面。
通过掌握从 useradd 到 sudoers 的这一系列操作,你就能在 CentOS 上灵活地进行用户生命周期管理和精细化权限控制,构建安全、可维护的多用户环境。
页:
[1]