Назад | Перейти на главную страницу

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

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

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

Спасибо!

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

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

Выполнить

sudo -n true

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

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

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

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

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

sudo -l

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

Я знаю, что это очень старый вопрос, но мне повезло с -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