Bash 스크립트에서 그래픽으로 비밀번호를 요청하고 기본 sudo 시간 초과 설정을 유지합니다.

Bash 스크립트에서 그래픽으로 비밀번호를 요청하고 기본 sudo 시간 초과 설정을 유지합니다.

(SUDO_ASKPASS) 옵션으로 sudo -A인해 sudo가 시간 제한(예: timestamp_timeout) 설정을 잃게 되는 것 같습니다.

sudo -A 옵션을 사용하고 싶지만 bash 스크립트의 기본 시간 제한(예: Ubuntu에서는 15분)을 유지하고 싶습니다. GUI 대화 상자에서 사용자에게 암호를 안전하게 묻고 싶지만 스크립트에 대해서는 한 번만 묻는 메시지를 표시하고 싶습니다(50번 이상).

또한 전체 스크립트를 루트로 실행하고 싶지 않습니다. 왜냐하면 그것은 나쁜 생각이라고 생각하기 때문입니다. 또한 이 경우에는 내 스크립트가 만든 파일의 소유권이 잘못되었습니다.

sudo -A 옵션이 기본 시간 초과를 유지하면 나에게 효과적이었습니다.

sudo 매뉴얼에서:

옵션: -A

일반적으로 sudo에 비밀번호가 필요한 경우 사용자 터미널에서 비밀번호를 읽습니다. -A(askpass) 옵션이 지정되면 사용자의 비밀번호를 읽고 해당 비밀번호를 표준 출력에 인쇄하는 (아마도 그래픽) 도우미 프로그램이 실행됩니다. SUDO_ASKPASS 환경 변수가 설정된 경우 도우미 프로그램의 경로를 지정합니다. 그렇지 않고 /etc/sudo.conf에 Askpass 프로그램을 지정하는 행이 포함되어 있으면 이 값이 사용됩니다. 예를 들어:

# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass

그런데 kdesudo에는 동일한 문제가 있습니다. 호출될 때마다 비밀번호가 필요합니다. 동일한 스크립트에서 1초 후에라도 비밀번호가 필요합니다.

저는 쿠분투 12.04 64비트를 사용하고 있습니다.

다음은 솔루션의 모든 부분에 대한 완전한 작업 예입니다. 이는 bash 스크립트와 제안된 "myaskpass" 스크립트로 구성됩니다.여기및 ".desktop" 파일. 모든 것이 100% GUI(터미널 상호 작용이 전혀 없음)로 간주되므로 .desktop 파일이 필수적입니다(내가 아는 한).

$ cat myaskpass.sh 
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0


$ cat askpasstest1.desktop 
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=

테스트 스크립트 자체도 마찬가지입니다. 이 솔루션을 사용할 때 비밀번호를 두 번 입력하라는 메시지가 표시됩니다.

#!/bin/bash

sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log

exit 0

답변1

내 Bash 스크립트에 다음을 추가했습니다.

# ask for password up-front.
sudo -v
# Keep-alive: update existing sudo time stamp if set, otherwise do nothing.
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

여기에서 찾으세요:

https://serverfault.com/questions/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

https://gist.github.com/cowboy/3118588

다른 스크립트를 사용하여 기본 스크립트를 시작하고 .desktop 파일을 사용하여 도우미 스크립트를 시작합니다. 아주 간단하지는 않지만 100% GUI로 작동하도록 만들 수 있습니다. 나는 여전히 완벽한 솔루션을 찾고 있지만 지금은 이것이 도움이 될 것입니다.

답변2

어때요?곡수도?

$ gksudo your_app_launcher.sh

관리자 암호를 안전하게 입력하기 위한 그래픽 대화 상자가 표시됩니다.

관련 정보