linux以其他用户身份执行是什么-sudo 命令使用和实例

Linux sudo 命令

sudo 的全称是 Super User DO,它使得授权用户可以以另一个用户(通常是 root)的身份运行命令。通过 sudo 执行的任何操作都等同于目标用户亲自执行。

使用权限:仅限在 /etc/sudoers 文件中列出的用户。

语法格式

sudo [参数] 命令

示例:

sudo apt update          # 使用 root 权限更新软件源列表
sudo vim /etc/hosts     # 编辑需要管理员权限的文件

常用参数说明

  • -i: 模拟初始登录过程,加载目标用户的环境变量
  • -s: 启动 shell 环境
  • -u user: 以指定用户身份执行命令
  • -l: 查看当前用户被允许使用的 sudo 命令
  • -v: 验证用户身份(刷新 sudo 缓存时间)
  • -k: 清除当前用户的 sudo 缓存

示例操作

以 root 权限运行单一命令:

sudo apt update
sudo systemctl restart nginx
sudo mkdir /opt/myapp

切换到 root shell 环境:

sudo -i    # 登录式 shell,加载 root 用户配置
sudo -s    # 非登录式 shell
sudo su -  # 另一种方法

以其他用户身份运行命令:

sudo -u username command
sudo -u postgres psql  # 使用 postgres 用户启动 psql

查看当前用户可执行的 sudo 权限:

sudo -l

编辑受保护的系统文件:

sudo nano /etc/hosts
sudo vim /etc/nginx/nginx.conf

配置管理

sudo 的配置信息保存在 /etc/sudoers 文件中,推荐使用 visudo 工具进行修改:

sudo visudo

典型配置示例:

# 允许用户无需密码执行所有命令
username ALL=(ALL) NOPASSWD: ALL

授权用户组执行特定命令

%wheel ALL=(ALL) /bin/systemctl, /usr/bin/apt

常见问题处理

提示“不在 sudoers 文件中”错误:

需要由 root 用户将该用户加入对应组:

usermod -aG sudo username # Ubuntu/Debian 系统 usermod -aG wheel username # CentOS/RHEL 系统

修改缓存有效时间:

在 /etc/sudoers 中设置 timestamp_timeout 参数(单位为分钟):

Defaults timestamp_timeout=30

su 与 sudo 的差异对比

特性 su sudo
所需密码 目标用户密码 当前用户密码
会话持续时间 需手动退出 单次或短暂缓存
配置复杂度 简单直接 需编辑 sudoers 文件
安全性 需要知道 root 密码 更细粒度权限控制
日志审计能力 较弱 详细记录

尽管 su 命令使用简便,但在实际运维工作中,sudo 更加安全可靠,具备更强的权限管理和日志追踪能力,因此更推荐使用。