Arka planda şifre girişi gerektiren bir sudo komutunu nasıl çalıştırırım?


29

Kısa süre önce, sudokimlik doğrulama önbelleğe alma özelliğini devre dışı bıraktım, böylece artık her zaman bir şifre sormamı istiyor.

Ve bu güvenlik için iyi olsa da, çözüm bulamadığım küçük bir soruna yol açtı, şu satırları kapsayan komutları çalıştıramıyorum:

sudo <command> &

Geçmişte sudoondan önce bir komut çalıştırırdım , şifremi önbelleğe alırdı sudove önümüzdeki birkaç dakika boyunca komutları istemeden komutları çalıştırmama izin verirdi ve böylece komutu çalıştırmamı sağlardı.
Ama şimdi çalıştırdığımda, elden önce önbellekleme olmadığından ve hemen yeni bir iş parçacığı başladığından ve sudohatta bir parola sormadığım için, bu şekilde çalıştıramıyorum.

Bundan sudo -iönce kaçmazsam, bu biçimde oldukça rahatsız edici hale gelen bir komutu çalıştıramıyorum.
Yani bunu aşmanın ve hala bu şekilde programlar ve komutlar çalıştırmanın bir yolu olup olmadığını merak ediyordum.

GNOME 3.18 ile Ubuntu GNOME 15.10 kullanıyorum ve özellikle bu şekilde çalıştırmak istediğim program etherapeherhangi bir fark yaratıyorsa, ancak çözümün tüm programlar ve komutlar için çalışmasını istiyorum.


3
@kossince &gerçekten aranabilir değil, bunu değiştiriyorum … sudo command in the background.
Muru

@muru Popüler arama motorlarının bunun yerine özel karakterleri arayabilmesini sağlayabilirsiniz. : P
kos

1
@kos, şaşıracaksınız . : D
muru

Yanıtlar:


56

sudoArka planda çalışmak yerine sudo, komutu arka planda çalıştırmayı söyleyin . Kimden man sudo:

-b, --background
     Run the given command in the background.  Note that it is not
     possible to use shell job control to manipulate background
     processes started by sudo.  Most interactive commands will
     fail to work properly in background mode.

Örneğin:

sudo -b sleep 10

Başka bir yol da komutu çalıştırmak için sadece bir kabuk kullanmak olacaktır:

sudo sh -c 'sleep 10 &'

Başka bir seçenek, şifreyi elde etmek için grafiksel bir program belirlemek ve sudoyine de arka plana göndermek olacaktır:

-A, --askpass
     Normally, if sudo requires a password, it will read it from
     the user's terminal.  If the -A (askpass) option is
     specified, a (possibly graphical) helper program is executed
     to read the user's password and output the password to the
     standard output.  If the SUDO_ASKPASS environment variable is
     set, it specifies the path to the helper program.  Otherwise,
     if sudo.conf(5) contains a line specifying the askpass
     program, that value will be used.  For example:

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

     If no askpass program is available, sudo will exit with an
     error.

Askpass programları genellikle SSH için kullanılır. Bunlardan bir tanesi ssh-askpass-gnome, varsayılan olarak kurulmuş olan paket tarafından en az Ubuntu 15.10'a verilir.

SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A sleep 10 &

11

timestamp_timeoutEn azından gibi bir şeye ayarlamaya istekliysen 0.02(1.2 saniye, aynen güvenli diyebilirim 0)/etc/sudoers (ama varsayılan ayarlarla veya sizin durumunuzda gerekli timestamp_timeoutbir şey sette ama 0kimse sadece aşağıdakileri yapmanız olabilir) , bunun gibi bir takma ad girebilirsiniz ~/.bashrc; bu, komutu çalıştırmadan önce bir şey yapmayı hatırlamanızı gerektirmez ve işlemin kontrolünü elinde tutmanıza izin verir:

alias sudo='sudo -v; [ $? ] && sudo'

Buradaki hile, Bash'in sudo -vönce ve ayrı ayrı ayrıştırılmasını , kullanıcının kimliğini doğrulamasını ve olası arka plan kısmını [ $? ] && sudokomutla sınırlandırmasını sağlayan sudo -v, başarılı olup olmadığını kontrol edip sudotekrar çalıştırma (potansiyel olarak arka plana alma) durumundaki noktalı virgüldür .

$ alias sudo='sudo -v; [ $? ] && sudo'
$ sudo -H gedit &
[sudo] password for user:
[1] 19966
$ jobs
[1]+  Running                 [ $? ] && sudo -H gedit &

sudo -vÖnbelleğe alma devre dışı bırakılmış olsa bile kimlik bilgilerini önbelleğe almayı uzatır mı ? Ve, IIRC <takma adların genişlemesi için, boşluk komutun sonunda değil başında olmalıdır.
muru

@muru Sağ seçeneğini Onun etti unuttum timestamp_timeoutayarlı 0. Ve evet, tamamen aslında takma, takma genişleme şeyle berbat etmemelidir genişletin. Teşekkürler.
kos

Bu alias sudo='sudo -v && sudo'kadar iyi olmaz mıydı?
G-Man 26:16 '

@ G-Man Hayır, bu çalışır çünkü ;Bash sudo -vilk ve ayrı ayrı ayrıştırır ; &&Bash kullanarak hem tek bir komut hem de arka plan olarak ayrıştırılır.
kos

8

Yapamazsın &Hemen arka plana komutu gönderir. Yani, arka planda bir alt kabuk oluşturulur ve komut orada yürütülür. Bu komut, bir komut istemi yayınladığında olduğu gibi sudo, bilgi istemi arka planda görüntülenir ve onu asla göremezsiniz.

Bunun tek yolu, komutu geri ön plana getirmek, şifreyi sağlamak ve arka plana geri göndermek. Örneğin:

$ sudo command &
$ fg
sudo command
[sudo] password for terdon: 

Şimdi şifrenizi girin, tuşuna basın Enterve ardından tuşuna basın.CtrlZ arkaplana geri göndermek ve bgçalışmaya devam etmesini sağlamak için tuşuna basın.

Daha basit bir yaklaşım asla kullanmak &ve yerine işleri manuel olarak arka plana göndermek olacaktır.CtrlZ ve bgbaşlattıktan sonra .

Son olarak, sudo'nun şifre zaman aşımını 1 veya 2 saniye gibi bir değere ayarlamayı düşünebilirsiniz. Bu size hala yeterli güvenlik sağlar (Flash'a karşı koruma sağlamaya çalışmadığınız sürece) ve beklendiği gibi komutları çalıştırmanıza izin verir.


Flash çikolatalı

2
Firmware'i etkileyen Adobe güvenlik açıkları ve kötü amaçlı yazılımların bu döneminde, Flash'a karşı temkinli olunması garanti edilir.
Damian Yerrick


Bir yandan notta zaman aşımını saniye olarak ayarlamak gerçekten mümkün müdür? man sudoersdiyor timestamp_timeout'ın değeri (bu arada yapar olası bir fraksiyonel bölümü ile dakika belirtecektir sudoben birini belirtmek çalışırsanız emin niçin, dışarı hata).
kos

2
@kos evet gibi geliyor. 2.5Burada iyi çalışıyor (Arch, sudosürüm 1.8.15).
terdon
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.