У меня есть локальный сценарий оболочки, который выполняет ряд тестов на удаленном хосте перед доставкой полезной нагрузки; Один из этих тестов заключается в том, есть ли у пользователя привилегии sudo, проверяется просто с помощью, sudo -v
однако это требует от пользователя ввода своего пароля. Кроме того, кажется, что удаленный хост имеет мгновенный тайм-аут sudo, поэтому при каждом новом подключении требуется ввод пароля, и у меня нет разрешения на изменение (как политика).
Конечно, я могу проверить, является ли пользователь частью определенных групп, но тогда это не будет зависеть от конфигурации удаленного хоста, поэтому я надеялся, что есть метод, который может проверять, что также не нужно принимать группы пользователей. как не нужно вводить пользователя?
Благодарность!
ОБНОВЛЕНИЕ: Чтобы повторить мои комментарии, я только хочу проверить, может ли пользователь возможно sudo, не требуя взаимодействия с пользователем для этого теста.
sudo -l
запрашивает у меня парольsudo -k
сначала.Ответы:
Боюсь, единственное, что вы можете проверить, - это если у пользователя есть права sudo без пароля.
казнить
Если $? 0, пользователь имеет доступ к sudo без пароля, если $? равен 1, пользователю нужен пароль.
Если вам нужна проверка для конкретной программы, измените ее
true
, чтобы программа ничего не делала, напримерchmod --help
источник
X
,sudo
способна ли команда без ввода пароля и без случайного его запускаЕсли у вас есть один пользователь с доступом sudo, например «root», вы можете использовать его для проверки других имен входа. Как пользователь с доступом запускается:
sudo -n -l -U foo 2> & 1 | egrep -c -i "запрещено запускать sudo | неизвестный пользователь"
Если он возвращает ноль, «foo» имеет доступ. В противном случае он не имеет доступа sudo.
источник
sudo -n -l cmd
и вам скажут, если текущий пользователь имеет доступ sudo к cmd. Если вы хотите проверить результат.Это должно дать вам достаточно, чтобы решить, есть ли у вас привилегии, которые вы хотите / нужны.
источник
Я знаю, что это очень старый вопрос, но мне повезло с
-n
(неинтерактивным) флагом и-v
/-l
. Но вы должны проверить вывод:Некоторое перенаправление вывода и grepping приведут вас туда, вероятно:
источник