Перевірте, чи має користувач привілеї sudo, не вимагаючи введення користувача


12

У мене є локальний скрипт оболонки, який виконує ряд тестів на віддаленому хості, перш ніж доставити корисне навантаження; Один з таких тестів, чи є у користувача привілеї sudo, перевіряється просто, sudo -vпроте це вимагає від користувача ввести свій пароль. Крім того, здається, що віддалений хост має миттєвий тайм-аут sudo, тому введення пароля потрібно при кожному новому з'єднанні, і це те, що я не маю дозволу змінювати (як політику).

Я, звичайно, можу перевірити, чи є користувач частиною певних груп, але тоді це не буде агностично для конфігурації віддаленого хоста, тому я сподівався, що існує метод, який може перевірити, чи не потрібно припускати групи користувачів. як не потрібен ввід користувача?

Дякую!

ОНОВЛЕННЯ: Щоб повторити свої коментарі, я хочу лише перевірити, чи міг користувач користуватися судом, не вимагаючи взаємодії з користувачем для цього тесту.


чи потрібно перевірити, чи є у користувача можливість використовувати sudo, чи він виконує скрипт оболонки через sudo?
Ніко СП

Тільки чи є у нього можливість. Локальний сценарій вимагатиме введення пароля sudo пізніше, тому я просто хочу перевірити, чи користувач на віддаленому хості навіть є sudoer.
DanH

Швидка перевірка мого ubuntu вікна дала мені sudo -l, він повертає команди, які користувач може виконувати, якщо (ВСЕ) ВСЕ є частиною їх, користувач може використовувати sudo для будь-якої команди. Може, це правильний кут?
Ніко СП

1
sudo -lзапрошує мене на пароль.
ThatGraemeGuy

1
Судо кешується на основі tty, так що якщо новий сеанс надає вам ті ж самі tty, вам може не запропонувати. Спробуйте виконати sudo -kспочатку.
Марк Вагнер

Відповіді:


13

Боюся, єдине, що ви можете перевірити, - це якщо користувач має привілеї sudo без пароля.

Виконати

sudo -n true

Якщо $? 0, користувач має доступ до sudo без пароля, якщо $? є 1, користувачеві потрібен пароль.

Якщо вам потрібна перевірка для певної програми, змініть її true, щоб програма нічого не робила, як-отchmod --help


1
Зверніть увагу , що це не допомагає попередні виявляє , якщо команда Xзнаходиться в sudoстані без введення пароля і без випадково запустити його
спробуйте зловити, нарешті ,

3

Якщо у вас є один користувач із доступом до sudo, наприклад "root", ви можете використовувати його для перевірки інших входів. Оскільки користувач із доступом працює:

sudo -n -l -U foo 2> & 1 | egrep -c -i "не дозволяється запускати sudo | невідомий користувач"

Якщо він повертає нуль, "foo" має доступ. В іншому випадку він не має доступу до судо.


3
Просто sudo -n -l cmdі вам скажуть, чи має поточний користувач sudo доступ до cmd. Якщо ви хочете перевірити результат.
Філіп А.

1

судо -л

Це повинно дати вам достатньо, щоб вирішити, чи є у вас приват, який ви хочете / потребуєте.


1
Це все ще запитує пароль у моїй системі (Ubuntu 16.04).
Маріо Вілас

1

Я знаю, що це дуже давнє запитання, але я знайшов удачу з -n(неінтерактивним) прапором та -v/ -l. Але вам доведеться перевірити вихід:

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

Певне переадресація виводу та прив'язка приведе вас туди, ймовірно:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.