Linux su、sudo 完整详解 + 用户权限管理全套知识
一、核心概念先分清
1. 三种身份
- root:超级管理员,UID=0,最高权限,无任何限制
- 普通用户:UID≥1000,权限受限,只能操作自己目录
- 系统用户:UID 1~999,给系统服务用(nginx、mysql等),不能登录
2. 关键文件
| 文件 | 作用 |
|---|---|
/etc/passwd | 所有用户信息(用户名、UID、GID、家目录、Shell) |
/etc/shadow | 用户密码哈希、过期策略、锁定状态(仅root可读) |
/etc/group | 用户组信息 |
/etc/sudoers | sudo权限配置文件,控制谁能sudo、免密、权限范围 |
二、su 命令详解
1. 作用
su = switch user,切换到其他用户身份。
2. 常用语法
# 切换到root,不加载root环境变量
su
# 完整切换root(推荐,加载完整环境、工作目录切到/root)
su -
su - root
# 切换到普通用户xxx
su - xxx3. su 两种区别
su:只切换用户身份,不切换环境变量、不进入对方家目录su -:完全登录式切换,重置环境变量、PATH、家目录、Shell,生产必用
4. su 优缺点
优点
- 知道目标用户密码就能切
- 直接拿到完整root权限
缺点
- 所有人共用root密码,无法审计谁干了什么
- 普通用户知道root密码后权限完全失控
- 不安全,企业生产禁止直接给root密码
5. 实操示例
# 普通用户切root
su -
# root切普通用户,无需输密码
su - tom三、sudo 命令详解(重点)
1. 作用
sudo = super user do
不用知道root密码,授权普通用户临时执行管理员命令,可精细化控制权限、日志审计、免密执行。
2. 核心特点
- 普通用户输自己的密码,不是root密码
- 管理员可限制:只能执行某几条命令,不能全部权限
- 有完整日志
/var/log/secure可查操作记录 - 可配置免密sudo
3. 基础用法
# 以root权限执行一条命令
sudo 命令
# 切换到root终端(不用输root密码)
sudo -i
# 用当前用户环境切root
sudo -s4. sudo 与 su 本质区别
| 特性 | su | sudo |
|---|---|---|
| 认证密码 | 目标用户密码(root密码) | 自己的密码 |
| 权限控制 | 一刀切,全权限 | 可精细化授权单条/类命令 |
| 安全审计 | 无记录区分用户 | 有日志,可溯源 |
| 企业推荐 | 不推荐 | 生产标准用法 |
| 免密支持 | 不支持 | 可配置免密 |
四、配置 sudo 权限 /etc/sudoers
1. 编辑规则(一定要用 visudo)
绝对不要用 vi /etc/sudoers 直接改,语法错会导致系统崩溃!
# 安全编辑,自带语法校验
visudo2. 语法格式
用户名 主机=(可切换用户:可切换组) 允许执行的命令列表
示例1:给用户tom全部root权限
tom ALL=(ALL:ALL) ALL- ALL 所有主机
- (ALL:ALL) 可切换任意用户/组
- ALL 允许所有命令
示例2:免密 sudo
tom ALL=(ALL:ALL) NOPASSWD: ALL以后 sudo xxx 不用输密码
示例3:只授权特定命令(最小权限原则)
只允许执行 systemctl、ls、mkdir
tom ALL=(ALL) /usr/bin/systemctl, /bin/ls, /bin/mkdir示例4:给整个组授权
sudo 组不用逐个加用户
%wheel ALL=(ALL:ALL) ALL把用户加入wheel组就有sudo权限:
usermod -aG wheel tom五、Linux 用户&用户组管理全套命令
1. 用户操作
创建用户
# 基础创建
useradd tom
# 创建并指定家目录、Shell、加入组
useradd -m -d /home/tom -s /bin/bash -G wheel tom-m自动创建家目录-d指定家目录-s指定登录Shell-G附加附属组
设置/修改密码
passwd # 修改当前用户密码
passwd tom # root修改tom密码删除用户
# 删用户,保留家目录
userdel tom
# 删用户 + 删掉家目录邮件
userdel -r tom修改用户属性
# 把tom加入wheel附属组
usermod -aG wheel tom
# 修改登录shell
usermod -s /bin/zsh tom
# 锁定用户(禁止登录)
usermod -L tom
# 解锁
usermod -U tom2. 用户组操作
# 创建组
groupadd dev
# 删除组
groupdel dev
# 把用户加入组
usermod -aG dev tom3. 查看用户信息
# 查看当前用户
whoami
# 查看UID、GID、所属组
id
id tom
# 查看所有用户
cat /etc/passwd
# 查看所有组
cat /etc/group六、sudo 常用实操场景
1. 普通用户无sudo权限报错
xxx is not allowed to execute ... as root
解决:visudo 加权限 或 加入 wheel 组
2. 切换root最常用两种方式
# 方式1(推荐,生产常用)
sudo -i
# 方式2 传统su
su -3. 查看sudo日志
# CentOS/RHEL
tail -f /var/log/secure
# Ubuntu/Debian
tail -f /var/log/auth.log4. 取消sudo免密
visudo 去掉 NOPASSWD: 保存即可
七、企业生产最佳规范
- 禁止使用 su - 共享root密码,全员用 sudo
- 遵循最小权限:普通用户只给必要sudo命令,不直接ALL
- 编辑sudo配置必用
visudo - 运维账号统一加入
wheel组管理sudo权限 - 定期审计 sudo 操作日志
- 业务程序用普通系统用户运行,禁止root跑服务
八、极简总结
- su:切用户,要对方密码,无精细权限,不安全;
su -才是完整登录切换。 - sudo:临时提权,输自己密码,可精细授权、有日志、企业标准用法。
- 改sudo配置必须用 visudo。
- 用户管理:
useradd/userdel/usermod/passwd,组管理:groupadd/groupdel。 - 快速拿root:sudo -i 优先于 su -。
需要我给你整理一份「常用su/sudo/用户管理命令速查表」,可以直接复制收藏日常用吗?