Grafis meminta kata sandi dalam skrip bash dan mempertahankan pengaturan waktu tunggu sudo default


9

Opsi sudo -A(SUDO_ASKPASS) tampaknya menyebabkan sudo kehilangan batas waktu (misalnya, timestamp_timeout).

Saya ingin menggunakan opsi sudo -A tetapi saya ingin mempertahankan batas waktu default (misalnya, 15 menit di Ubuntu) dalam skrip bash. Saya ingin meminta kata sandi pengguna dengan aman dan dalam dialog GUI, tetapi saya hanya ingin meminta satu kali untuk skrip saya (bukan 50+ kali).

Selain itu, saya tidak ingin menjalankan seluruh skrip saya sebagai pengguna root karena saya pikir itu adalah ide yang buruk. Selain itu, file yang dibuat oleh skrip saya memiliki kepemilikan yang salah dalam hal ini.

Opsi sudo -A akan bekerja untuk saya jika mempertahankan batas waktu default.

Dari manual sudo:

Opsi: ‐A

Biasanya, jika sudo memerlukan kata sandi, itu akan membacanya dari terminal pengguna. Jika opsi ‐ A (askpass) ditentukan, program pembantu (mungkin grafis) dijalankan untuk membaca kata sandi pengguna dan mengeluarkan kata sandi ke output standar. Jika variabel lingkungan SUDO_ASKPASS diatur, itu menentukan path ke program pembantu. Jika tidak, jika /etc/sudo.conf berisi baris yang menentukan program askpass, nilai itu akan digunakan. Sebagai contoh:

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

BTW, kdesudo memiliki masalah yang sama - ini membutuhkan kata sandi setiap kali dipanggil, meskipun hanya sedetik kemudian dalam skrip yang sama.

Saya menggunakan Kubuntu 12.04 64 bit.

Berikut adalah contoh kerja penuh dari semua bagian dari solusi. Ini terdiri dari skrip bash, skrip "myaskpass" seperti yang disarankan di sini , dan file ".desktop". Semuanya harus 100% GUI (tidak ada interaksi terminal sama sekali), sehingga file .desktop sangat penting (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=

Dan skrip uji itu sendiri. Yang ini akan meminta kata sandi Anda dua kali saat menggunakan solusi ini.

#!/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
Apakah gksudobukan pilihan di sini? linux.die.net/man/1/gksudo
slm

Saya menggunakan KDE, jadi gksudo bukan pilihan bagi saya, tetapi saya diberitahu bahwa fungsinya sama dengan kdesudo. kdesudomenderita masalah yang sama saya jelaskan di atas. Saya menguji sudo -Asebagai alternatif kdesudodan itu lebih baik untuk situasi saya, tetapi tidak memecahkan masalah batas waktu (setidaknya sejauh ini).
MountainX

Jawaban:


7

Saya menambahkan ini ke skrip bash saya:

# 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 &

Ditemukan di sini:

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

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

Saya menggunakan skrip lain untuk meluncurkan skrip utama saya dan saya menggunakan file .desktop untuk meluncurkan skrip pembantu itu. Ini tidak terlalu mudah, tetapi dapat dibuat untuk bekerja 100% GUI. Saya masih mencari solusi yang sempurna, tetapi ini sedang melakukan trik untuk saat ini.


1

Bagaimana dengan gksudo ?

$ gksudo your_app_launcher.sh

Itu memang menampilkan dialog grafis untuk memasukkan kata sandi administrator dengan aman.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.