Linux su与sudo作用与区别详解

Linux su与sudo的区别详解

我们来详细讲解 Linux 中 susudo 的作用与区别。这是两个用于提升权限的核心命令,理解它们的差异对于系统管理和安全至关重要。

核心概念总结

  • su:用于切换用户。默认切换到 root 用户,需要输入目标用户的密码。
  • sudo:用于以其他用户(默认是 root)的身份执行一条命令。需要输入当前用户自己的密码(前提是该用户已被授权)。

详细解析

1. su

作用substitute userswitch user 的缩写,意思是“切换用户”。

使用方法

  • su:不加任何参数,默认切换到 root 用户。执行后会要求输入 root 用户的密码。成功后,命令行提示符会从 $ 变为 #,表示你获得了 root 的 shell 环境。
  • su -推荐用法。不仅切换用户身份,还会完全切换到目标用户的环境变量(如 HOME, SHELL, USER, PATH 等),就像直接用该用户登录一样。
  • su - <username>:切换到指定的其他用户(如 su - alice),需要输入该用户的密码。

示例

# 切换到 root,环境不变
$ su
密码: <输入root的密码>
# whoami
root
# pwd
/home/your_username  # 注意,工作目录还是原来的

# 完全切换到 root 环境(推荐)
$ su -
密码: <输入root的密码>
# pwd
/root  # 工作目录变成了 root 的家目录

特点

  • 优点:简单直接,切换后可以执行多条需要特权的命令。
  • 缺点
    • 需要知道目标用户(尤其是 root)的密码,存在安全风险。如果多人需要 root 权限,密码就得共享,不利于审计。
    • 一旦切换到 root,用户就拥有了系统的完全控制权,容易因误操作导致问题。

2. sudo

作用substitute user do 的缩写,意思是“以其他用户身份执行”。它允许被授权的用户以 root 或其他用户的身份执行特定的命令。

使用方法

  • sudo <command>:以 root 身份执行一条命令。执行后会要求输入当前用户自己的密码。默认在短时间内(如 5 分钟)再次使用 sudo 无需重复输入密码。
  • sudo -u <username> <command>:以指定用户的身份执行命令(如 sudo -u alice whoami)。

示例

# 以 root 身份更新软件列表
$ sudo apt update
[sudo] your_username 的密码: <输入当前用户自己的密码>

# 以用户 alice 的身份创建一个文件
$ sudo -u alice touch /tmp/alice_file.txt

配置
sudo 的权限由 /etc/sudoers 文件控制。永远不要直接用文本编辑器(如 vim)直接修改这个文件,而应该使用 visudo 命令,因为它会检查语法错误,错误的配置可能导致所有用户都无法使用 sudo

一个典型的授权配置如下:

# 允许 wheel 用户组的成员执行任何命令
%wheel ALL=(ALL) ALL

# 允许用户 alice 执行特定的关机命令,且无需输入密码
alice ALL=(ALL) NOPASSWD: /usr/bin/shutdown

特点

  • 优点
    • 精细化权限控制:可以精确控制某个用户能执行哪些命令,不能执行哪些命令。
    • 不需要共享 root 密码:用户使用自己的密码来提升权限。
    • 有日志审计:所有通过 sudo 执行的命令都会被记录到系统日志中(通常是 /var/log/auth.log),便于追踪和审计“谁在什么时候执行了什么命令”。
    • 更安全:避免了用户长时间停留在 root 权限下,减少了误操作的风险。
  • 缺点:配置稍复杂,需要管理员提前规划和设置。

核心区别对比表

特性susudo
核心功能切换用户身份以其他用户身份执行一条命令
默认目标切换到 root 用户以 root 身份执行命令
密码要求需要目标用户的密码需要当前用户自己的密码
权限范围切换后获得目标用户的完整权限只能执行在 /etc/sudoers明确授权的命令
Shell 环境进入一个新的 shell 会话(特别是 su -在当前 shell 中执行单条命令,不改变环境
审计能力弱。只知道谁切换成了谁,但不知道具体做了什么。强。所有执行的命令都会被详细记录。
使用场景需要长时间以某个用户(尤其是 root)身份进行多项操作。临时需要提升权限来执行特定管理任务。
安全性较低(需要共享密码,权限过大)。较高(无需共享密码,权限可控,有审计)。

现代最佳实践与结合使用

在现代 Linux 发行版(如 Ubuntu 及其衍生版)中,默认不设置 root 密码,而是鼓励用户使用 sudo 来执行管理任务。初始创建的用户默认就在 sudo 组中,拥有使用 sudo 的权限。

有时你会看到一种结合使用的模式:

sudo su -

这条命令的意思是:

  1. 使用 sudo(输入自己的密码)来获得 root 权限。
  2. 然后执行 su - 命令,从而切换到 root 用户并加载其完整环境。

这实际上是一种“曲线救国”的方式,它利用了 sudo 不需要 root 密码的优点来最终实现 su - 的效果。但纯粹主义者认为,既然已经用了 sudo,就应该直接 sudo command,而不是开启一个 root shell。

总结

  • 如果你只是需要临时执行一条管理命令,永远首选 sudo。它是更安全、更符合现代管理理念的工具。
  • 如果你确实需要在一个会话中连续执行大量需要 root 权限的操作,并且你的系统允许,那么可以使用 su -sudo -i(后者是通过 sudo 启动一个 root shell)。

简单来说:sudo 是“做一件事需要老板权限,于是向老板申请”,而 su 是“直接变成老板”。在绝大多数工作场景下,“申请权限”是比“变成老板”更安全、更合理的做法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值