У меня есть локальный сценарий оболочки, который выполняет ряд тестов на удаленном хосте перед доставкой полезной нагрузки; один из этих тестов - наличие у пользователя прав 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