JD *_*cks 6 security bash sudo scripts
我有一个用于自动执行 SVN 结帐的 bash 脚本。该文件的内容是:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
Run Code Online (Sandbox Code Playgroud)
然后,当我双击该文件时,它会问我要做什么,我会单击“在终端中运行”按钮,然后会弹出一个终端并询问我的 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"
Run Code Online (Sandbox Code Playgroud)
我希望终端现在保持打开状态,然后告诉我消息。令我惊讶的是,它现在打开并立即关闭。脚本确实执行了,我不再需要输入 SUDO 密码。
这是正确的吗?我不明白为什么会发生这种情况,这似乎是一个安全问题。
当您直接从终端运行脚本时会发生什么?通常,如果 sudo 密码在记住 15 分钟后已输入。如果您以图形方式运行它,终端提示将在完成执行后关闭。我没有可以玩的 SVN 存储库 - 但是,我做了一个类似的测试,它将收集用户的输入并触摸该名称的文件。
#!/usr/bin/env bash
echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"
Run Code Online (Sandbox Code Playgroud)
从终端执行时:

然后双击:


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