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