Bir kullanıcının kullanıcı girişi gerektirmeden sudo ayrıcalıklarına sahip olup olmadığını test edin


12

Yükü teslim etmeden önce, uzak bir ana bilgisayar üzerinde bir dizi test gerçekleştiren yerel bir kabuk komut dosyası var; bu testlerden biri, kullanıcının sudo ayrıcalıklarına sahip olup olmadığıdır, sadece kontrol edilir, sudo -vancak bu kullanıcının şifresini girmesini gerektirir. Ayrıca, uzak ana bilgisayar, her yeni bağlantıda parola girdisinin gerekli olması için anında sudo zaman aşımına sahip gibi görünüyor ve bu, (ilke olarak) değiştirme iznim yok.

Elbette kullanıcının belirli grupların bir parçası olup olmadığını test edebilirim, ancak daha sonra bu uzak ana bilgisayar yapılandırmasına agnostik olmaz, bu yüzden kullanıcı gruplarını da varsaymaya gerek duymayan bir yöntem olduğunu umuyordum kullanıcı girişi gerekmediği için?

Teşekkürler!

GÜNCELLEME: Yorumlarımı yankılamak için, yalnızca kullanıcının test için kullanıcı etkileşimi gerektirmeden sudo olup olmadığını test etmek istiyorum.


Kullanıcının sudo kullanma olanağına sahip olup olmadığını veya kabuk komut dosyasını sudo üzerinden yürütüp yürütmediğini kontrol etmeniz mi gerekiyor?
Niko SP

Sadece imkanı olup olmadığı. Yerel komut dosyası daha sonra girilmesi gereken sudo şifresini gerektirecektir, bu yüzden sadece uzak ana bilgisayardaki kullanıcının bir sudoer olup olmadığını erken kontrol etmek istiyorum.
DanH

ubuntu kutumdaki hızlı bir kontrol bana sudo -l verdi, kullanıcının çalışabileceği komutları döndürür, (ALL) ALL bunların bir parçasıysa, kullanıcı sudo'yu herhangi bir komut için kullanabilir. Belki de doğru açı budur?
Niko SP

1
sudo -lşifremi girmemi istiyor.
ThatGraemeGuy

1
Sudo önbellek tty dayalı böylece yeni bir oturum size aynı tty verirse, istenmeyebilir. sudo -kİlk önce çalıştırmayı deneyin .
Mark Wagner

Yanıtlar:


13

Korkarım test edebileceğiniz tek şey, kullanıcının şifre olmadan sudo ayrıcalıklarına sahip olup olmadığıdır .

gerçekleştirmek

sudo -n true

Eğer $? 0 ise, kullanıcı şifre olmadan sudo erişimine sahiptir, $? 1 ise, kullanıcının bir parolaya ihtiyacı vardır.

Belirli bir program için doğrulamaya ihtiyacınız varsa, programınızla değiştirin true, böylece program hiçbir şey yapmaz, örneğinchmod --help


1
Komut eğer bu ön tespit sonuçları yardım etmediğini Not Xolan sudoyetenekli bir şifre girmeden ve kazara onu çalıştırmadan
try-catch-nihayet

3

"Root" gibi sudo erişimi olan bir kullanıcınız varsa, diğer girişleri kontrol etmek için kullanabilirsiniz. Erişimi olan kullanıcı olarak:

sudo -n -l -U foo 2> & 1 | egrep -c -i "sudo | unknown user" çalışmasına izin verilmiyor "

Sıfır döndürürse, "foo" erişimi vardır. Aksi takdirde sudo erişimi yoktur.


3
Basitçe sudo -n -l cmdve geçerli kullanıcının cmd'ye sudo erişimi olup olmadığı size söylenecektir. Sonucu test etmek istiyorsanız.
Philippe A.

1

sudo -l

Bu, istediğiniz / ihtiyacınız olan özelliğe sahip olup olmadığınıza karar vermeniz için yeterli olacaktır.


1
Bu hala sistemimde bir şifre istiyor (Ubuntu 16.04).
Mario Vilas

1

Bunun çok eski bir soru olduğunu biliyorum, ama -n(interaktif olmayan) bayrak ve -v/ ile şans buldum -l. Ancak, çıktıyı incelemeniz gerekir:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Bazı çıkış yönlendirme ve selamlama sizi oraya götürecektir, muhtemelen:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
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.