İzin verilmeyen komut çalıştırılırken sudo'nun parola sormasını engelleyin


15

Bir gruba sudo üzerinden parola olmadan belirli komutları çalıştırma izni verdim. Kullanıcılardan biri yazım hatası yaptığında veya yanlış komutu çalıştırdığında sistem parolalarını ister ve ardından bir hata alır. Bu kullanıcı için kafa karıştırıcı, bu yüzden bir şifre istemek yerine sadece bir hata görüntülemek istiyorum. Mümkün mü?

İşte sudoers dosyamın bir örneği:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

Yanlış komut dosyasını çalıştırdıklarında örnek:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

Istenilen çıktı:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

Şifre isteminin eksikliğine dikkat edin.

Benim google-fu bana başarısız oldu ve sadece kullanıcı ne zaman bir şifre isteyen olmamasına sonuçları döndürür etmiştir edilir komutu çalıştırmak için izin verdi.


8
Mümkünse, (küçük) bir güvenlik deliği açabilir. Eğer oturumunuzu açık bıraktıysanız ve klavyenizi "ödünç alıyorum" sudo, şifrenizi girmeden hangi komutların çalışmanıza izin vereceğini göremiyorum . İstediğiniz özellik sayesinde, bu bilgileri belirli komutlar için alabilirim.
Keith Thompson

4
Bu oldukça büyük bir güvenlik sorunu. Komut olarak sudo'yu komut dosyalarıyla kullanmamalısınız. İnsanlar senaryoyu düzenleyebilir ve istedikleri şeyi bir denetimden tamamen maskeleyebilirler. Bunun yerine sudo çağrısını komut dosyasının içine ekleyin.
coteyr

1
@coteyr sudo, kullanıcıların bu dosyalara yazma erişimine sahip olması durumunda ikili dosyaları çalıştırmak da bir sorun kadar büyüktür.
Dmitry Grigoryev

1
@CarlWitthoft bu yüzden sudoer'larda izin verilen programları belirtmek için mutlak yollar kullanırsınız.
Dmitry Grigoryev

1
@DmitryGrigoryev, evet, ancak sed veya böyle bir dosyayı sadece bir dosya için kullanacaksanız, sudo'ya faydası olmaz. Kullanıcının bir dosyayı değiştirmesine izin vermek, dosyaların izinlerine sahip olmasının nedenidir. Tekerleği yeniden icat etmek zorunda değilsiniz. Kullanıcının bir dosyayı değiştirmesini istiyorsanız, bırakın. Kullanıcının parola olmadan bir dosyayı değiştirmesine izin vermek için sudo ile çemberler arasında geçiş yapmanıza gerek yoktur. Onlara her zaman izin verebilirsiniz. Doğru iş için doğru araç.
coteyr

Yanıtlar:


25

Kısa bir okumadan sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

Ve şüpheler için:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

Bu şekilde test edilmiştir:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

Bir Yani aliasiçin sudobu millet için büyük olasılıkla hile yapacağını, şifre istemi önlemek için. Şimdi neden özel derleme gerektirdiğini sudobilmiyorum, sadece kılavuzu okudum.


Aslında. Ben alias sudo="$(which sudo) -n"/ etc / bashrc gibi bir şey koymak , sonra sudo(ayarlanmış davranış) veya command sudo(varsayılan davranış) istediğiniz gibi kullanın.
CVn

7

Benim için çalışan bir şey, (Sudo sürüm 1.8.17p1), ancak probleminizin sadece bir kısmını karşılar, şifre denemelerinin sayısını 0 olarak ayarlamaktır.

Defaults:%mygroup passwd_tries = 0

Bu, şifre gerektiren herhangi bir komut denendiğinde kod 1 ile sudo çıkışını yapar. Ancak, herhangi bir hata iletisi üretmez.


Bu da geçerli bir cevap ama hata mesajı eksikliği kafa karıştırıcı olabilir. Yukarıdaki cevabın doğru ama beklenmedik hatası da kafa karıştırıcı. Sanırım bu bir atış. Alternatif bir cevap verdiğiniz için teşekkür ederiz, seçenekler her zaman takdir edilir!
user184982

2

Yapamazsın.

Kimlik doğrulaması yapılana kadar kim olduğunuzu söylemenin bir yolu yoktur ve varsayılan olarak parola olmadan kimlik doğrulaması yapamazsınız.

USB anahtarları, parmak izi tarayıcıları, ses kimlik doğrulaması, yüz tanıma veya bir sürü başka şeyi kullanmak için kimlik doğrulamasını değiştirebilirsiniz, ancak nokta aynıdır.

Kimlik doğrulaması yapmadan ve kimlik doğrulaması yapmadan önce sudo'yu doğrulayamazsınız.


2
Sudo komutunu çalıştırdığınızda parolanızı yazmak tanımlama değildir (“kim olduğunuzu söyleyin”). Sudo kim olduğunu biliyor. Parolanızı girmek iletişim durumu onayıdır.
Gilles 'SO- kötü olmayı kes'

Durum onayını "kimlik doğrulama" olarak görüyorum. Kimlik Doğrulamada, ardından Yetkilendirmede olduğu gibi.
coteyr

2
Cevap "kimlik doğrulama" değil "kimlik doğrulama" diyor. Sudo kim biliyor mu iken , olduğunu iddia o terminali üzerinde kaydedilir kullanıcıya dayanarak, kim bilmez olan bu kimlik doğrulanmış kadar.
Dave Sherohman

2

@StrongBad, cevap olmayı hak eden bir yorum yaptı:

En iyi çözüm her zaman sudodoğru parametreleri ile çağıran bir sarıcı komut dosyası yazmak olacağını düşünüyorum . (Dahil -n)

Sarıcı komut dosyası, bağımsız değişken ayrıştırma vb. Yapabilir, böylece çağrılan sudo komut dosyası mümkün olduğunca küçük olur ve bu nedenle hatalara sahip olma olasılığı daha düşüktür.


1

Bu mümkün değil. Tek yol kaynak kodunu değiştirmek ve kendi çatalınızı derlemektir.sudo


Haklısın, ama tüm üretim sunucularımıza sudo'nun özel bir sürümünü yükleme izni alacağımı sanmıyorum. hah
user184982
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.