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
kdesudo
menderita masalah yang sama saya jelaskan di atas. Saya menguji sudo -A
sebagai alternatif kdesudo
dan itu lebih baik untuk situasi saya, tetapi tidak memecahkan masalah batas waktu (setidaknya sejauh ini).
gksudo
bukan pilihan di sini? linux.die.net/man/1/gksudo