Проверьте, есть ли у пользователя права sudo, не требуя ввода данных пользователем

12

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

Конечно, я могу проверить, является ли пользователь частью определенных групп, но тогда это не будет зависеть от конфигурации удаленного хоста, поэтому я надеялся, что есть метод, который может проверять, что также не нужно принимать группы пользователей. как не нужно вводить пользователя?

Благодарность!

ОБНОВЛЕНИЕ: Чтобы повторить мои комментарии, я только хочу проверить, может ли пользователь возможно sudo, не требуя взаимодействия с пользователем для этого теста.

Danh
источник
Вам нужно проверить, есть ли у пользователя возможность использовать sudo, или он выполняет сценарий оболочки через sudo?
Нико С.П.
Просто есть ли у него возможность. Локальный сценарий потребует, чтобы пароль sudo вводился позже, поэтому я просто хочу проверить на раннем этапе, что пользователь на удаленном хосте даже является sudoer.
DanH
быстрая проверка моего окна ubuntu дала мне sudo -l, он возвращает команды, которые пользователь может выполнить, если (ALL) ALL является частью их, пользователь может использовать sudo для любой команды. Может быть, это правильный угол?
Нико С.П.
1
sudo -lзапрашивает у меня пароль
ThatGraemeGuy
1
Кэши Sudo основаны на tty, поэтому, если новый сеанс даст вам тот же tty, вам может быть не предложено. Попробуйте выполнить sudo -kсначала.
Марк Вагнер

Ответы:

13

Боюсь, единственное, что вы можете проверить, - это если у пользователя есть права sudo без пароля.

казнить

sudo -n true

Если $? 0, пользователь имеет доступ к sudo без пароля, если $? равен 1, пользователю нужен пароль.

Если вам нужна проверка для конкретной программы, измените ее true, чтобы программа ничего не делала, напримерchmod --help

erickzetta
источник
1
Обратите внимание, что это не помогает предварительно определить X, sudoспособна ли команда без ввода пароля и без случайного его запуска
try-catch-finally
3

Если у вас есть один пользователь с доступом sudo, например «root», вы можете использовать его для проверки других имен входа. Как пользователь с доступом запускается:

sudo -n -l -U foo 2> & 1 | egrep -c -i "запрещено запускать sudo | неизвестный пользователь"

Если он возвращает ноль, «foo» имеет доступ. В противном случае он не имеет доступа sudo.

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

судо-л

Это должно дать вам достаточно, чтобы решить, есть ли у вас привилегии, которые вы хотите / нужны.

dmourati
источник
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.

Некоторое перенаправление вывода и grepping приведут вас туда, вероятно:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Мэтт Моретти
источник