Linux su 命令核心用法总结

Linux su 命令核心用法总结

一、su 命令核心作用

susubstitute user (切换用户)或 switch user 的缩写,核心作用是完全切换到另一个用户的身份(默认切换到 root),获得该用户的所有权限,进入其专属的命令行环境(加载目标用户的环境变量、配置文件等)。

简单来说:su 是 "完整切换用户",切换后从头到尾都以目标用户身份操作,直到主动退出;而 sudo 是 "临时借用权限",仅单条 / 短期命令提权。

二、核心特性

  1. 权限完全切换:切换后获得目标用户的所有权限(无任何命令限制),等同于直接用该用户登录;
  2. 密码验证要求 :需输入目标用户的密码 (而非当前用户密码),例如 su root 需输入 root 密码,su alice 需输入 alice 密码;
  3. 环境变量加载
  • 默认 su:仅切换用户身份,保留当前用户的环境变量(如 PATHHOME);
  • - 选项(su -):完整切换环境,加载目标用户的所有环境变量和配置文件(推荐用法);
  1. 无操作审计 :默认情况下,su 切换后的操作不会单独记录(需额外配置日志),无法精准追溯操作人;
  2. 无需提前授权 :只要知道目标用户密码,任何用户均可尝试 su 切换(无配置文件限制,仅依赖密码验证)。

三、常用基础用法

1. 切换到 root 用户(默认行为)

复制代码
\# 方式1:仅切换身份,保留当前环境变量

su

\# 方式2:完整切换环境(推荐),等同于 root 直接登录

su -

\# 方式3:简写形式(同 su -)

su - root

\# 退出 root,返回原用户

exit

2. 切换到指定普通用户

格式:su [选项] 目标用户名

复制代码
\# 切换到用户 alice,保留当前环境

su alice

\# 完整切换到 alice 的环境(加载其 .bashrc 等配置)

su - alice

\# 退出 alice,返回原用户

exit

3. 仅执行单条目标用户命令(不切换终端)

格式:su - 目标用户 -c "命令"-c 表示执行单次命令)

复制代码
\# 以 root 身份执行单次查看系统日志命令,执行后返回原用户

su - root -c "cat /var/log/secure"

\# 以 alice 身份执行单次创建文件命令

su - alice -c "touch /home/alice/test.txt"

四、与 sudo 命令的核心差异(补充对比)

特性 su sudo
核心逻辑 完整切换用户身份 临时借用目标用户权限
密码要求 输入「目标用户密码」 输入「当前用户密码」(需授权)
权限范围 目标用户的所有权限 仅授权的指定命令
环境变量 可选择是否加载目标环境 默认保留当前用户环境(sudo -i 加载 root 环境)
操作审计 无默认日志,需额外配置 自动记录到系统日志(可追溯)
安全风险 高(密码泄露即全权限泄露) 低(精细化授权 + 审计)
配置依赖 无需配置,仅依赖密码 依赖 /etc/sudoers 授权
适用场景 临时需要长期使用目标用户权限 日常单条 / 多条高权限操作(推荐)

五、重要注意事项

  1. 生产环境慎用 su切换 root

    由于 su 无细粒度权限控制,且依赖 root 密码(多人共用易泄露),风险极高,建议生产环境禁用普通用户 su 切换 root(可通过 sudoers 配置限制);

  2. 优先使用 su -而非 su

    su - 会加载目标用户的完整环境(如 PATHHOME),避免因环境变量不一致导致命令执行异常(例如 su 切换 root 后,可能无法使用 sudo 等命令);

  3. su切换后注意权限边界

    切换到 root 后拥有系统最高权限,误操作(如 rm -rf /)会直接导致系统崩溃,需格外谨慎;

  4. 忘记 root 密码时无法用 su重置

    若 root 密码丢失,su root 无法执行(需输入 root 密码),此时需通过 sudo passwd root 重置(前提是当前用户有 sudo 授权)。

六、常见使用场景

  1. 临时需要长期操作 root 权限(非生产环境,如本地测试机);
  2. 切换到普通用户排查其专属权限问题(如用户目录权限、配置文件问题);
  3. 无 sudo 授权时,通过已知密码切换用户执行操作(仅限信任环境)。
相关推荐
小学仔2 小时前
科大镜像科大镜像科大镜像
java
岚天start2 小时前
Python HTTP服务器添加简单用户名密码认证的三种方案
服务器·python·http
小旭95272 小时前
Java 反射详解
java·开发语言·jvm·面试·intellij-idea
PPPPPaPeR.2 小时前
环 境 变 量
linux·运维·windows
HalvmånEver2 小时前
Linux:线程创建与终止上(线程五)
java·linux·jvm
嵌入小生0072 小时前
双向链表、双向循环链表之间的异同---嵌入式入门---Linux
linux·c语言·数据结构·链表·嵌入式·小白
H Journey2 小时前
Linux sudo 命令完全指南
linux·运维·服务器·sudo
m0_748233172 小时前
PHP版本演进:从7.x到8.x全解析
java·开发语言·php
qq_12498707532 小时前
基于springboot的林业资源管理系统设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计