123456823 发表于 2026-5-8 10:24:27

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]
查看完整版本: CentOS用户与权限管理:从useradd到sudoers