Linux 中 sudo 命令是做什么的
Linux 中 sudo 命令的作用
sudo 是 superuser do 的缩写,核心作用是让普通用户在获得授权的前提下,以超级用户(root)或其他指定用户的身份执行指定的命令 ,是 Linux 系统中实现权限精细化管理的核心工具,也是保障系统安全的重要方式(避免普通用户直接登录 root 带来的风险)。
简单来说:普通用户默认没有修改系统配置、安装软件、操作系统文件等高级权限,通过 sudo 可临时获取这些高权限执行单条 / 多条命令,执行完成后会回到普通用户的权限状态。
核心特性
- 权限可控 :并非所有普通用户都能使用
sudo,只有在授权配置文件/etc/sudoers(或其包含的子文件/etc/sudoers.d/)中被添加的用户 / 用户组,才拥有 sudo 执行权限,且可精准限定其能执行的具体命令。 - 密码验证 :默认情况下,用户第一次执行 sudo 时,需要输入自身的登录密码 (而非 root 密码),验证通过后会有5 分钟左右的免密期(可配置),期间再次执行 sudo 无需重复输密码。
- 操作审计 :所有通过 sudo 执行的命令,都会被记录到系统日志(如
/var/log/auth.log或/var/log/secure)中,方便管理员审计系统操作,排查权限相关问题。 - 灵活切换:可通过 sudo 临时切换到 root 或其他用户的交互终端,也可仅执行单条高权限命令,兼顾便捷性和安全性。
常用基础用法
1. 以 root 身份执行单条命令
这是最常用的场景,格式:sudo 待执行的高权限命令
\# 普通用户无权限修改系统配置文件,通过sudo执行
sudo vi /etc/fstab
\# 普通用户无权限安装软件,通过sudo执行(以apt为例)
sudo apt install nginx
\# 普通用户无权限查看系统核心日志,通过sudo执行
sudo cat /var/log/secure
2. 以 root 身份打开交互终端
临时切换到 root 终端,执行完所有操作后,输入exit可回到原普通用户终端,格式:sudo -i 或 sudo su
\# 方式1:推荐,会加载root的环境变量,更贴合root登录状态
sudo -i
\# 方式2:基础切换,部分环境变量仍保留原用户配置
sudo su
\# 执行完操作后,退出root终端
exit
3. 以指定用户身份执行命令
默认以 root 身份执行,也可通过-u指定其他用户,格式:sudo -u 目标用户名 命令
\# 以用户alice的身份执行ls命令,查看alice的家目录
sudo -u alice ls /home/alice
\# 以用户www-data(web服务默认用户)的身份创建文件
sudo -u www-data touch /var/www/test.txt
4. 免密执行 sudo 命令
执行sudo时跳过密码验证,需管理员在/etc/sudoers中配置(谨慎使用,仅限信任用户),示例配置(给用户 ubuntu 免密所有 sudo 命令):
\# 管理员先通过sudo打开配置文件(必须用visudo,会自动语法检查,避免配置错误)
sudo visudo
\# 在文件末尾添加如下内容,保存退出
ubuntu ALL=(ALL) NOPASSWD: ALL
5. 查看当前用户可执行的 sudo 命令
格式:sudo -l,可查看当前登录用户被授权的所有 sudo 操作,方便确认自身权限范围
sudo -l
与 su 命令的核心区别
很多新手会混淆 sudo 和 su,二者核心差异在于权限管理和使用逻辑,对比更清晰:
| 特性 | sudo | su |
|---|---|---|
| 密码要求 | 输入自身普通用户密码 | 输入目标用户(如 root)密码 |
| 权限控制 | 精细化授权(可限定具体命令) | 完全获取目标用户的所有权限 |
| 系统安全 | 风险低(仅授权必要命令,可审计) | 风险高(直接获取 root 全权限,无细粒度控制) |
| 配置文件 | /etc/sudoers(需 visudo 编辑) |
无需额外配置 |
总结 :生产环境中优先使用 sudo 执行高权限操作,禁止普通用户直接使用 su 切换 root(可通过配置禁用),从源头降低系统误操作、权限泄露的风险。
重要注意事项
- 编辑
sudoers配置文件时,必须使用visudo命令 ,而非直接vi /etc/sudoers:visudo会在保存时自动检查配置语法,若有错误会提示并阻止保存,避免因配置错误导致所有用户无法使用 sudo(直接编辑可能因语法错误让 sudo 失效,且无法恢复)。 - 仅给信任的用户 / 用户组分配 sudo 权限,尤其是免密 sudo,避免权限滥用。
- 若忘记 root 密码,可通过拥有 sudo 权限的普通用户 执行
sudo passwd root,直接重置 root 密码,这是 sudo 的重要实用场景。