Mou*_*inX 10 gui bash sudo scripts kde4
我制作了一个专门使用 kdialog 与用户交互的 bash 脚本。它从“.desktop”文件启动,因此用户永远不会看到终端。它看起来 100% 像一个 GUI 应用程序(即使它只是一个 bash 脚本)。它仅在 KDE (Kubuntu 12.04) 中运行。
我唯一的问题是安全方便地处理密码输入。我找不到满意的解决方案。
该脚本旨在以普通用户身份运行,并在首次需要 sudo 命令时提示输入密码。这样,大多数不需要 sudo 权限的命令都以普通用户身份运行。发生的情况(当脚本从终端运行时)是用户被提示输入密码一次,默认的 sudo 超时允许脚本完成,包括任何其他 sudo 命令,而不会再次提示用户。这也是我希望它在 GUI 后面运行时的工作方式。
主要问题是使用kdesudo
启动我的脚本,这是标准的GUI方式,意味着整个脚本由root用户执行。所以文件所有权被分配给 root 用户,我不能依赖~/
路径,而且许多其他事情都不理想。以 root 用户身份运行整个脚本只是一个非常不令人满意的解决方案,我认为这是一种不好的做法。
我很欣赏让用户通过 GUI 只输入一次 sudo 密码而不以 root 身份运行整个脚本的任何想法。谢谢。
Eri*_*lho 17
该-A
sudo的选项允许你指定一个辅助程序(在SUDO_ASKPASS变量),将要求输入密码。
创建一个脚本来询问密码(myaskpass.sh):
#!/bin/bash
zenity --password --title=Authentication
Run Code Online (Sandbox Code Playgroud)
然后在脚本的开头插入这一行:
export SUDO_ASKPASS="/path/to/myaskpass.sh"
Run Code Online (Sandbox Code Playgroud)
并将所有出现的替换为sudo <command>
:
sudo -A <command>
Run Code Online (Sandbox Code Playgroud)
您可以使用任何您想要的密码询问程序而不是zenity
. 我必须在脚本中封装它,因为SUDO_ASKPASS必须指向一个文件,因此它不会与工作--password
所要求的选项zenity
。
如果它从命令行运行,或者如果您在文件管理器中双击脚本文件后选择在终端中运行,则上面的工作就像一个魅力,但如果您选择运行或尝试从 .desktop 文件启动它,每个人sudo
都会要求再次输入密码。
如果您根本不需要终端窗口,则可以将密码存储在变量中并将其通过管道传输到sudo -S
. 也许存在一些安全问题,但我认为它非常安全(阅读对此答案的评论)。
在脚本的开头插入这一行:
PASSWD="$(zenity --password --title=Authentication)\n"
Run Code Online (Sandbox Code Playgroud)
并将所有出现的替换为sudo <command>
:
echo -e $PASSWD | sudo -S <command>
Run Code Online (Sandbox Code Playgroud)