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/sudoerssudo权限配置文件,控制谁能sudo、免密、权限范围

二、su 命令详解

1. 作用

su = switch user,切换到其他用户身份。

2. 常用语法

# 切换到root,不加载root环境变量
su
 
# 完整切换root(推荐,加载完整环境、工作目录切到/root)
su -
su - root
 
# 切换到普通用户xxx
su - xxx

3. 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. 核心特点

  1. 普通用户输自己的密码,不是root密码
  2. 管理员可限制:只能执行某几条命令,不能全部权限
  3. 有完整日志 /var/log/secure 可查操作记录
  4. 可配置免密sudo

3. 基础用法

# 以root权限执行一条命令
sudo 命令
 
# 切换到root终端(不用输root密码)
sudo -i
 
# 用当前用户环境切root
sudo -s

4. sudo 与 su 本质区别

特性susudo
认证密码目标用户密码(root密码)自己的密码
权限控制一刀切,全权限可精细化授权单条/类命令
安全审计无记录区分用户有日志,可溯源
企业推荐不推荐生产标准用法
免密支持不支持可配置免密

四、配置 sudo 权限 /etc/sudoers

1. 编辑规则(一定要用 visudo)

绝对不要用 vi /etc/sudoers 直接改,语法错会导致系统崩溃!

# 安全编辑,自带语法校验
visudo

2. 语法格式

用户名  主机=(可切换用户:可切换组)  允许执行的命令列表

示例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 tom

2. 用户组操作

# 创建组
groupadd dev
 
# 删除组
groupdel dev
 
# 把用户加入组
usermod -aG dev tom

3. 查看用户信息

# 查看当前用户
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.log

4. 取消sudo免密

visudo 去掉 NOPASSWD: 保存即可


七、企业生产最佳规范

  1. 禁止使用 su - 共享root密码,全员用 sudo
  2. 遵循最小权限:普通用户只给必要sudo命令,不直接ALL
  3. 编辑sudo配置必用 visudo
  4. 运维账号统一加入 wheel 组管理sudo权限
  5. 定期审计 sudo 操作日志
  6. 业务程序用普通系统用户运行,禁止root跑服务

八、极简总结

  1. su:切用户,要对方密码,无精细权限,不安全;su - 才是完整登录切换。
  2. sudo:临时提权,输自己密码,可精细授权、有日志、企业标准用法。
  3. 改sudo配置必须用 visudo
  4. 用户管理:useradd/userdel/usermod/passwd,组管理:groupadd/groupdel
  5. 快速拿root:sudo -i 优先于 su -。

需要我给你整理一份「常用su/sudo/用户管理命令速查表」,可以直接复制收藏日常用吗?