网站搜索

如何在 Linux 中使用 Sudo 命令运行 Shell 脚本


sudo 是一个功能强大的命令行工具,它使“允许的用户”能够按照安全策略的定义,以另一个用户(默认为超级用户)的身份运行命令。在大多数(如果不是全部)Linux 系统上,安全策略由 /etc/sudoers 文件驱动。

另请阅读:在 Linux 中设置“sudo”的 10 个有用的 Sudoers 配置

因此,要以 root 身份运行 shell 脚本或程序,需要使用 sudo 命令。但是,sudo 仅识别并运行 /etc/sudoerssecure_path 中指定的目录中存在的命令,除非该命令存在于secure_path,您将遇到如下错误。

即使脚本存在于 PATH 环境变量中的目录中,也会发生这种情况,因为当用户调用 sudo 时,PATH 会被替换为 安全路径

echo  $PATH
ls  -l
sudo proconport.sh 80

在上面的场景中,目录 /home/aaronkilik/bin 位于 PATH 环境变量中,我们尝试运行脚本 /home/aaronkilik/bin /proconport.sh(查找在端口上侦听的进程)具有 root 权限。

然后我们遇到了错误“sudo:proconport.sh:找不到命令”,因为/home/aaronkilik/bin不在sudo secure_path中> 如下一个屏幕截图所示。

要解决此问题,我们需要通过编辑 /etc/sudoers 文件,使用 visudo 命令sudo secure_path 中添加包含脚本的目录如下。

sudo visudo

注意:此方法具有严重的安全隐患,尤其是在 Internet 上运行的服务器上。这样,我们的系统就面临着遭受各种攻击的风险,因为成功访问已添加到 secure_path 的不安全(没有超级用户权限)目录的攻击者可以使用 sudo 命令运行恶意脚本/程序

出于安全原因,请查看 sudo 网站上的以下文章,其中解释了与 secure_path 相关的漏洞:https://www.sudo.ws/sudo/alerts/secure_path.html

最好,我们可以在使用 sudo 运行脚本时提供脚本的绝对路径:

sudo ./proconport.sh 80

就是这样!您可以关注有关 sudo 命令的文章列表:

  1. 如何在 Linux 中运行“sudo”命令而无需输入密码
  2. 如何在 Linux 中保持“sudo”密码超时会话更长的时间
  3. 如何修复“用户名不在 sudoers 文件中。此事件将在 Ubuntu 中报告
  4. 当你输入错误的密码时让 Sudo 侮辱你

如果您对本文有任何疑问或想法,请通过下面的评论表与我们分享。