为什么这会绕过 SUDO 密码?

为什么这会绕过 SUDO 密码?

我有一个用于自动执行 SVN 签出的 bash 脚本。该文件的内容如下:

#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/

然后当我双击该文件时它会询问我该怎么做,我会单击按钮“在终端运行“然后会弹出一个终端并要求我输入 SUDO 密码。我输入密码后,脚本就会执行,然后终端就会关闭。

我想给出某种迹象表明脚本运行成功,因此我将文件编辑如下:

#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
echo "Head revision has been pushed to live server"

我原本以为终端现在会保持打开状态,然后告诉我消息。令我惊讶的是,它现在打开后立即关闭。脚本确实执行了,我不再需要输入 SUDO 密码。

对吗?我不明白为什么会发生这种情况,看起来像是一个安全问题。

答案1

sudo 会记住你的密码一段时间(默认 15 分钟)。你可以运行以下命令让 sudo 忘记密码sudo -k

答案2

当您直接从终端运行脚本时会发生什么?通常,如果 sudo 密码被输入一次,它会被记住 15 分钟。如果您以图形方式运行它,终端提示将在完成执行后关闭。我没有 SVN 存储库可供使用 - 但是,我做了一个类似的测试,它将收集用户的输入并触摸该名称的文件。

#!/usr/bin/env bash

echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"

从终端执行时:

替代文本

然后双击:

替代文本

替代文本

提示完成后关闭但会执行请求的操作。

答案3

为了在执行脚本后保持提示符打开,您可以尝试两件事:

  • 添加该read命令作为最后一行。
  • 要创建一个在终端中执行命令并保持窗口打开的启动器,请为 gnome-terminal 创建一个配置文件,比如 Hold,它的作用正是如此(查看配置文件选项)并使用以下命令。

    gnome-terminal --window-with-profile="Hold" -e "/path/to/script"
    

相关内容