bash 스크립트에서 암호를 그래픽으로 요청하고 기본 sudo 시간 초과 설정을 유지하십시오.


9

sudo -A(SUDO_ASKPASS) 옵션은 분명히 원인은 제한 시간 (예를 들어, timestamp_timeout) 설정을 잃고 SUDO.

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

BTW, kdesudo는 동일한 문제를 가지고 있습니다. 같은 스크립트에서 1 초 후에도 암호가 호출 될 때마다 암호가 필요합니다.

Kubuntu 12.04 64 비트를 사용하고 있습니다.

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

$ 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

2
gksudo되지는 여기에 옵션? linux.die.net/man/1/gksudo
slm

나는 KDE에있어서 gksudo는 나에게 옵션이 아니지만 kdesudo와 동일하게 작동한다고 들었습니다. kdesudo위에서 설명한 것과 동일한 문제가 발생합니다. 나는 sudo -A대안 으로 테스트 하고 있었고 kdesudo내 상황에 더 좋지만 시간 초과 문제를 해결하지는 못합니다 (적어도 지금까지).
MountainX

답변:


7

이것을 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 &

여기에서 찾았습니다.

/server/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

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

다른 스크립트를 사용하여 기본 스크립트를 시작하고 .desktop 파일을 사용하여 해당 도우미 스크립트를 시작합니다. 매우 간단하지는 않지만 100 % GUI에서 작동하도록 만들 수 있습니다. 나는 여전히 완벽한 솔루션을 찾고 있지만 지금은 트릭을하고 있습니다.


1

방법에 대한 gksudo ?

$ gksudo your_app_launcher.sh

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.