Bash komut dosyasında grafik olarak parola sor ve varsayılan sudo zaman aşımı ayarını koru


9

sudo -A(SUDO_ASKPASS) seçeneği görünüşte nedenleri aşımını (örneğin timestamp_timeout) ayarını kaybetmek sudo.

Sudo -A seçeneğini kullanmak istiyorum ama bir bash komut dosyasında varsayılan zaman aşımı (örneğin, Ubuntu üzerinde 15 dakika) korumak istiyorum. Güvenli ve bir GUI iletişim kutusunda kullanıcının parolasını sormak istiyorum, ama sadece bir kez benim komut dosyası (50 + kez değil) istemek istiyorum.

Ayrıca, tüm betiğimi kök kullanıcı olarak çalıştırmak istemiyorum çünkü sadece kötü bir fikir olduğunu düşünüyorum. Ayrıca, komut dosyam tarafından oluşturulan dosyalar bu durumda yanlış sahipliğe sahip.

Sudo -A seçeneği, varsayılan zaman aşımı tutarsa ​​benim için çalışır.

Sudo kılavuzundan:

Seçenek: ‑A

Normalde, sudo bir parola gerektiriyorsa, kullanıcının terminalinden okuyacaktır. ‑A (askpass) seçeneği belirtilirse, kullanıcının parolasını okumak ve parolayı standart çıktıya çıkarmak için bir (muhtemelen grafik) yardımcı program yürütülür. SUDO_ASKPASS ortam değişkeni ayarlanmışsa, yardımcı programın yolunu belirtir. Aksi takdirde, /etc/sudo.conf askpass programını belirten bir satır içeriyorsa, bu değer kullanılır. Örneğin:

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

BTW, kdesudo'da aynı sorun var - aynı komut dosyasında bir saniye sonra bile, her çağrıldığında parola gerekiyor.

Kubuntu 12.04 64 bit kullanıyorum.

İşte çözümün tüm bölümlerinin tam çalışma örneği. Bir bash betiği, burada önerildiği gibi bir "myaskpass" betiği ve bir ".desktop" dosyasından oluşur. Her şey% 100 GUI (terminal etkileşimi yok) olmalıdır, bu nedenle .desktop dosyası esastır (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=

Ve bir test senaryosunun kendisi. Bu, bu çözümü kullanırken iki kez şifrenizi soracaktır.

#!/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
gksudoburada değil bir seçenek? linux.die.net/man/1/gksudo
slm

KDE'deyim, bu yüzden gksudo benim için bir seçenek değil, ama kdesudo ile aynı şekilde çalıştığı söylendi. kdesudoyukarıda tarif ettiğim aynı problemi yaşıyor. sudo -ABir alternatif olarak test yapıyordum kdesudove durumum için daha iyi, ancak zaman aşımı sorununu çözmedi (en azından şimdiye kadar).
MountainX

Yanıtlar:


7

Bunu benim bash betiğime ekliyorum:

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

Burada buldum:

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

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

Ana komut dosyamı başlatmak için başka bir komut dosyası ve yardımcı komut dosyasını başlatmak için bir .desktop dosyası kullanıyorum. Çok basit değil, ancak% 100 GUI çalışmak için yapılabilir. Hala mükemmel bir çözüm arıyorum, ama şimdilik bu hile yapıyor.


1

Gksudo'ya ne dersin ?

$ gksudo your_app_launcher.sh

Yönetici parolasını güvenli bir şekilde girmek için grafiksel bir iletişim kutusu gösterir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.