Я работаю над сценарием, который запускает команду как sudo и выводит строку текста ТОЛЬКО, если мои привилегии sudo истекли, поэтому только если выполнение команды с sudo потребовало бы, чтобы мой пользователь (не root) снова ввел свой пароль.
Как мне это проверить? Имейте в виду, что $(id -u)
даже при запуске в качестве sudo вернет мой текущий идентификатор пользователя, так что невозможно проверить, чтобы он соответствовал 0 ...
Мне нужен метод, который бы проверял это спокойно.
sudo -n true
и фактическим их использованием»: документация немного расплывчата по этому вопросу, но я думаю, что выполнениеsudo
команды, даже простоsudo -n true
, сбрасывает время ожидания Часы. В любом случае,-v
это явно задокументировано как таковое, и в любом случае,sudo -n -v
вероятно, более уместно, чемsudo -n true
для этой цели.hostname sudo[8870]: username : a password is required ; TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/usr/bin/true
. Например, если вы используете его в приглашении bash, это приведет к большому количеству сообщений об ошибках.Бег:
Если ваши привилегии sudo истекли, это завершится с кодом выхода 1 и выведет:
Если у вас есть действительные кэшированные учетные данные, эта команда будет выполнена успешно и ничего не выведет.
Итак, чтобы собрать все воедино, вот скриптлет, который будет молча проверять, есть ли у вас действительные кэшированные учетные данные:
Как уже упоминалось в других ответах / комментариях,
-v
опция («проверить») sudo молча обновляет кэшированные учетные данные, если есть какие-либо или иные запросы на аутентификацию для генерации кэшированных учетных данных, а-n
опция («неинтерактивная») предотвращает генерацию sudo любые интерактивные подсказки, такие как подсказка аутентификации.источник
sudo -nv
работает нормально, но загрязняет системные журналы ошибками sudo и информацией аутентификации pam. Мне нужно было проверить привилегии sudo для моего приглашения bash, поэтому оно выполнялось довольно часто, и мои журналы состояли почти только из этого шума.Можно напрямую проанализировать файл метки времени sudo - я написал для него небольшую утилиту C:
источник