Uji apakah pengguna memiliki hak sudo tanpa memerlukan input pengguna

12

Saya memiliki skrip shell lokal yang melakukan sejumlah tes pada host jarak jauh, sebelum mengirimkan payload; salah satu dari tes ini adalah apakah pengguna memiliki hak sudo, diperiksa hanya dengan sudo -vnamun ini mengharuskan pengguna untuk memasukkan kata sandi mereka. Selain itu host jarak jauh tampaknya memiliki batas waktu sudo instan sehingga entri kata sandi diperlukan pada setiap koneksi baru, dan ini adalah sesuatu yang saya tidak punya izin untuk ubah (sebagai kebijakan).

Tentu saja saya dapat menguji apakah pengguna adalah bagian dari kelompok tertentu, tetapi kemudian ini tidak akan menjadi agnostik untuk konfigurasi host jarak jauh, jadi saya berharap ada metode yang dapat memeriksa yang tidak perlu mengasumsikan grup pengguna, juga karena tidak membutuhkan input pengguna?

Terima kasih!

PEMBARUAN: Untuk menggemakan komentar saya, saya hanya ingin menguji apakah pengguna bisa saja sudo, tanpa memerlukan interaksi pengguna untuk tes itu.

DanH
sumber
apakah Anda perlu memeriksa apakah pengguna memiliki kemungkinan untuk menggunakan sudo, atau jika ia mengeksekusi skrip shell melalui sudo?
Niko SP
Hanya apakah dia memiliki kemungkinan. Script lokal akan memerlukan kata sandi sudo untuk dimasukkan nanti, jadi saya hanya ingin memeriksa sejak awal bahwa pengguna pada host jarak jauh bahkan sudoer.
DanH
cek cepat pada kotak ubuntu saya beri saya sudo -l, ia mengembalikan perintah yang dapat dijalankan pengguna, jika (ALL) ALL adalah bagian dari mereka, pengguna dapat menggunakan sudo untuk perintah apa pun. Mungkin itu sudut yang benar?
Niko SP
1
sudo -lmeminta kata sandi saya.
ThatGraemeGuy
1
Cache Sudo berdasarkan pada tty jadi jika sesi baru memberi Anda tty yang sama Anda mungkin tidak diminta. Coba jalankan sudo -kterlebih dahulu.
Mark Wagner

Jawaban:

13

Saya khawatir satu-satunya hal yang dapat Anda uji adalah jika pengguna memiliki hak sudo tanpa kata sandi.

Menjalankan

sudo -n true

Jika $? adalah 0, pengguna memiliki akses sudo tanpa kata sandi, jika $? adalah 1, pengguna membutuhkan kata sandi.

Jika Anda memerlukan verifikasi untuk program tertentu, ubah truedengan program Anda, dengan cara program tidak melakukan apa pun, sepertichmod --help

erickzetta
sumber
1
Perhatikan bahwa ini tidak membantu mendeteksi awal jika perintah Xini sudomampu tanpa memasukkan password dan tanpa sengaja menjalankannya
try-catch-akhirnya
3

Jika Anda memiliki satu pengguna dengan akses sudo, seperti "root", Anda dapat menggunakannya untuk memeriksa login lainnya. Sebagai pengguna dengan akses dijalankan:

sudo -n -l -U foo 2> & 1 | egrep -c -i "tidak diizinkan menjalankan sudo | pengguna tak dikenal"

Jika mengembalikan nol, "foo" memiliki akses. Kalau tidak, ia tidak memiliki akses sudo.

Todd Moyer
sumber
3
Cukup sudo -n -l cmddan Anda akan diberi tahu jika pengguna saat ini memiliki akses sudo ke cmd. Jika Anda ingin menguji hasilnya.
Philippe A.
1

sudo-l

Itu akan memberi Anda cukup untuk memutuskan apakah Anda memiliki privasi yang Anda inginkan / butuhkan.

dmourati
sumber
1
Ini masih meminta kata sandi di sistem saya (Ubuntu 16.04).
Mario Vilas
1

Saya tahu bahwa ini adalah pertanyaan yang sangat lama, tetapi saya menemukan keberuntungan dengan -nbendera (non-interaktif) dan -v/ -l. Tapi, Anda harus memeriksa hasilnya:

$ 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.

Beberapa redirection-output dan grepping akan membawa Anda ke sana, mungkin:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Matt Moretti
sumber