Быстро проверьте, доступны ли разрешения sudo
Вопрос
Я хочу иметь возможность быстро проверить, есть ли у меня обоих доступ к sudo и мой пароль уже проверен.Меня не беспокоит доступ к sudo специально для операции, которую я собираюсь выполнить, но это было бы приятным бонусом.
В частности, я пытаюсь использовать это для сценария, который я хочу, чтобы его могли запускать различные пользователи.У некоторых есть доступ sudo.Все знают пароль root.
Когда они запускают мой сценарий, я хочу, чтобы он использовал разрешения sudo без запроса пароля, если это возможно, а в противном случае возвращался к запросу пароля. корень пароль (потому что у них может не быть доступа к sudo).
Моя первая нерабочая попытка была раскошелиться sudo -S true
с закрытым STDIN или чтением из /dev/null.Но все равно запрашивает пароль и ждет пару секунд.
Я пробовал несколько других вещей, включая ожидание 0,3 секунды, чтобы увидеть, удалось ли это немедленно, но все, что я пробовал, в какой-то ситуации заканчивалось неудачей.(И не потому, что у меня слишком мало тайм-аута.) Трудно понять, что происходит, потому что я не могу просто заниматься трассировкой, как обычно.
Одна вещь, которую я знать не работает, это закрыть STDIN или присоединить его к каналу перед запуском sudo -S true
.Я надеялся, что это приведет к немедленному сбою запроса пароля, но он все равно запрашивает и ведет себя странно.Я думаю, ему может понадобиться терминал.
Решение
С новыми версиями sudo
для этого есть вариант:
sudo -n true
я использую true
здесь для бездействия, но вы можете использовать любую команду.
Другие советы
Я не знаю, какова конечная причина необходимости это сделать, но думаю, возможно, вам придется переосмыслить основную причину.Попытка сделать сложные и необычные действия с разрешениями часто приводит к дырам в безопасности.
Точнее, все, что пытается сделать сценарий, лучше делать с помощью setuid, а не sudo.(Мне также хотелось бы задаться вопросом, почему так много людей имеют пароль root.Sudo существует специально для того, чтобы не сообщать людям пароль root.)
getent group admin | grep $particular_user
Вы можете использовать whoami, чтобы получить текущего пользователя.
Редактировать:Но это не поможет вам узнать, разрешены ли вам выполнять задачи sudo...Хм..
Бег
sudo -S true < /dev/null &>/dev/null
кажется, работает, хотя и задерживается на секунду, прежде чем выйти из строя.