CentOS用户与权限管理:从useradd到sudoers

[复制链接] |主动推送
查看14 | 回复0 | 2026-5-8 10:24:27 | 显示全部楼层 |阅读模式
在 CentOS(以及 RHEL、Fedora 等红帽系发行版)中,用户和权限管理是系统安全与多用户协作的基础。下面从零开始,系统梳理从创建用户到赋予
  1. sudo
复制代码
权限的完整操作链。




1. 用户与组的基本概念

  • 用户(User):每个使用系统的人或服务都有一个账户,由 UID(用户 ID)唯一标识。  
  • 组(Group):将多个用户组织在一起,方便统一分配权限,由 GID(组 ID)标识。一个用户可以有多个附加组。  
  • 超级用户(root):UID 0,拥有系统最高权限,可以直接安装软件、修改系统配置等。





2. 用户创建:
  1. useradd
复制代码
命令

  1. useradd
复制代码
是最基本的用户创建工具,常用选项如下:
  1. useradd [选项] 用户名
复制代码

常用选项:

    1. -m
    复制代码
    :自动创建用户家目录(默认
    1. /home/用户名
    复制代码
    ),并复制
    1. /etc/skel
    复制代码
    下的骨架文件。
    1. -d 目录
    复制代码
    :指定用户家目录路径。
    1. -s shell
    复制代码
    :指定登录 Shell,如
    1. /bin/bash
    复制代码

    1. -g 组
    复制代码
    :指定主组(必须已存在)。
    1. -G 组1,组2
    复制代码
    :指定附加组(用户同时属于这些组)。
    1. -u UID
    复制代码
    :手动指定 UID。
    1. -c “注释”
    复制代码
    :添加用户描述信息(如全名)。
    1. -e 日期
    复制代码
    :账户过期日期(格式 YYYY-MM-DD)。
    1. -r
    复制代码
    :创建系统账户(UID 在
    1. SYS_UID_MIN
    复制代码
    -
    1. SYS_UID_MAX
    复制代码
    之间,通常无家目录且永不过期,用于运行服务)。


示例:
  1. # 创建普通用户 bob,自动创建家目录,默认 Shell 为 /bin/bash
  2. useradd -m bob
  3. # 创建用户 alice,指定家目录 /data/alice,使用 zsh,并加入 wheel 组(用于 sudo)
  4. useradd -m -d /data/alice -s /bin/zsh -G wheel alice
  5. # 创建系统用户用于运行 web 服务
  6. useradd -r -s /sbin/nologin myapp
复制代码

创建后设置密码
  1. passwd 用户名
复制代码

会提示输入并确认新密码。root 可以重置任何用户密码,普通用户只能修改自己的密码。




3. 用户信息查看与修改

查看用户信息

    1. id 用户名
    复制代码
    :显示 UID、GID 及所属组。
    1. finger 用户名
    复制代码
    (可能需要安装
    1. finger
    复制代码
    包):显示更详细的用户信息。
    1. cat /etc/passwd
    复制代码
    :查看用户账户文件(每行一个用户,格式:
    1. 用户名:x:UID:GID:描述:家目录:Shell
    复制代码
    )。
    1. cat /etc/shadow
    复制代码
    :查看加密后的密码及过期信息(只有 root 可读)。
    1. cat /etc/group
    复制代码
    :查看组信息。


修改用户:
  1. usermod
复制代码


语法类似于
  1. useradd
复制代码
,常用选项:

    1. -l 新用户名
    复制代码
    :更改用户名(需手动重命名家目录)。
    1. -d 新家目录 -m
    复制代码
    :移动旧家目录内容到新路径。
    1. -s /bin/zsh
    复制代码
    :修改登录 Shell。
    1. -g 新主组
    复制代码
    :更改主组。
    1. -aG 组名
    复制代码
    :将用户追加到附加组(务必加
    1. -a
    复制代码
    ,否则会覆盖原有附加组)。
    1. -L
    复制代码
    /
    1. -U
    复制代码
    :锁定 / 解锁用户密码(禁止登录)。


示例:
  1. # 将 bob 改名为 robert
  2. usermod -l robert bob
  3. # 将 alice 同时加入 developers 组
  4. usermod -aG developers alice
  5. # 锁定用户 alice 的密码
  6. usermod -L alice
复制代码

删除用户:
  1. userdel
复制代码


    1. userdel 用户名
    复制代码
    :仅删除
    1. /etc/passwd
    复制代码
    中的账户条目,保留家目录和邮件池。
    1. userdel -r 用户名
    复制代码
    :同时删除家目录和邮件池。





4. 文件权限与归属

Linux 文件权限分为 读(r=4)、写(w=2)、执行(x=1),分别对应三类身份:

  • 所有者(user)
  • 所属组(group)
  • 其他人(others)


  1. ls -l
复制代码
看到类似
  1. -rwxr-xr--
复制代码
的字符串,第一位为文件类型(
  1. -
复制代码
文件,
  1. d
复制代码
目录,
  1. l
复制代码
链接),接着每三个字符一组。

修改权限:
  1. chmod
复制代码


  • 数字模式:
    1. chmod 权限 文件
    复制代码

  1. chmod 755 script.sh   # 所有者 rwx,组 r-x,其他人 r-x
  2.   chmod 600 private.txt # 仅所有者可读写
复制代码

  • 符号模式:

  1. chmod u+x file        # 给所有者加执行权限
  2.   chmod g-w,o-rw file   # 去掉组写权限,去掉其他人读写
  3.   chmod a+r file        # 所有人加读权限
复制代码

修改归属:
  1. chown
复制代码
  1. chgrp
复制代码


    1. chown 用户:组 文件
    复制代码
    :同时修改所有者和所属组。
    1. chown 用户 文件
    复制代码
    :仅修改所有者。
    1. chgrp 组 文件
    复制代码
    :仅修改所属组。
  • 加上
    1. -R
    复制代码
    可递归处理目录。


示例:
  1. chown alice:developers project/
  2. chown -R bob report.txt
  3. chgrp staff /shared
复制代码




5. 临时提权与
  1. sudo
复制代码


普通用户在执行系统管理任务(如安装软件、重启服务)时,需要临时获取 root 权限。  
  1. sudo
复制代码
命令允许授权的用户以其他用户(默认 root)的身份运行命令,并保留审计日志。

安装与启动(CentOS 7/8 一般已预装)
  1. # 检查是否安装
  2. rpm -q sudo
  3. # 若未安装
  4. yum install sudo   # 或 dnf install sudo
复制代码

配置 sudo 权限:
  1. /etc/sudoers
复制代码


直接编辑此文件 必须使用
  1. visudo
复制代码
命令,它会在保存前检查语法错误,防止因配置错误导致所有 sudo 操作失败。

执行:
  1. visudo
复制代码

默认会使用 vi 编辑器,可设置
  1. EDITOR
复制代码
环境变量切换:
  1. EDITOR=nano visudo
复制代码

sudoers 语法规则

基本格式:
  1. 用户/组  主机=(运行身份)  [NOPASSWD:] 命令列表
复制代码

  • 主机通常填
    1. ALL
    复制代码
    ,即可从任何主机匹配(本地就是
    1. localhost
    复制代码
    )。
  • 运行身份:通常写成
    1. (ALL)
    复制代码
    1. (root)
    复制代码
    ,代表可以以哪些用户的身份执行命令。
  • 命令列表:必须是绝对路径,多个命令用逗号分隔,
    1. ALL
    复制代码
    代表所有命令。
  • 可选
    1. NOPASSWD:
    复制代码
    表示执行时不需要输入密码。


常用示例:

  • 授予单个用户全部 sudo 权限(输入密码)

  
  1. alice ALL=(ALL) ALL
复制代码

  • 授予一个组(如
    1. wheel
    复制代码
    1. %sudo
    复制代码
    )全部 sudo 权限


  
  1. %wheel ALL=(ALL) ALL
复制代码
   CentOS 默认已存在此规则并注释掉,只需取消注释,然后将用户加入
  1. wheel
复制代码
组即可:
  
  1. usermod -aG wheel alice
复制代码

  • 无需密码执行所有命令(慎用)

  
  1. bob ALL=(ALL) NOPASSWD: ALL
复制代码

  • 限制用户只能执行特定命令

  
  1. charlie ALL=(ALL) /usr/bin/systemctl restart httpd, /usr/bin/journalctl
复制代码

  • 使用别名简化管理

  
  1. # 用户别名
  2.    User_Alias ADMINS = alice, bob
  3.    # 命令别名
  4.    Cmnd_Alias WEB_CMDS = /usr/bin/systemctl restart httpd, /usr/bin/systemctl status nginx
  5.    # 授权
  6.    ADMINS ALL=(ALL) NOPASSWD: WEB_CMDS
复制代码

  • 针对特定主机的配置(多机共享 sudoers 时有用)

  
  1. alice 192.168.1.100=(root) /usr/bin/systemctl
复制代码

保存退出后,配置立即生效,无需重启。

使用 sudo

    1. sudo 命令
    复制代码
    :以 root 身份运行命令,首次运行会提示输入当前用户的密码,并缓存几分钟。
    1. sudo -u 用户名 命令
    复制代码
    :以指定用户身份运行。
    1. sudo -l
    复制代码
    :列出当前用户被授权执行的命令。
    1. sudo -k
    复制代码
    :立即清除密码缓存,下次执行必须重新输入密码。





6. 最佳实践与安全建议

  • 禁用 root 直接登录

   在
  1. /etc/ssh/sshd_config
复制代码
中设置
  1. PermitRootLogin no
复制代码
,强制通过普通用户 +
  1. sudo
复制代码
访问系统。

  • 使用
    1. wheel
    复制代码
    组统一管理管理员


   凡是需要
  1. sudo
复制代码
权限的用户都加入
  1. wheel
复制代码
组,sudoers 中只需维护一行
  1. %wheel ALL=(ALL) ALL
复制代码


  • 最小权限原则

   只授予用户完成工作所需的最少命令,避免通配
  1. ALL
复制代码


  • 记录与审计

  
  1. sudo
复制代码
的操作默认会记录到
  1. /var/log/secure
复制代码
(CentOS/RHEL),可结合
  1. auditd
复制代码
做更细粒度审计。

  • 定期检查用户列表

   使用
  1. getent passwd
复制代码
  1. grep -v nologin /etc/passwd
复制代码
查看可登录用户,及时清理无用账户。

  • 为服务使用系统账户

  
  1. useradd -r
复制代码
创建无家目录、无登录权限的专用账户,缩小攻击面。




通过掌握从
  1. useradd
复制代码
  1. sudoers
复制代码
的这一系列操作,你就能在 CentOS 上灵活地进行用户生命周期管理和精细化权限控制,构建安全、可维护的多用户环境。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则