Вы можете использовать sudo для этого. sudo имеет опцию -l для проверки привилегий sudo, которые пользователь имеет, и -S для чтения в пароле из stdin. Однако независимо от того, какой уровень привилегий у пользователя есть, если он успешно прошел проверку подлинности, sudo возвращается с статусом завершения 0. Таким образом, вы можете принять любой другой статус выхода в качестве индикатора того, что аутентификация не сработала (если предположить, что sudo
Что-то вроде:
#! /bin/bash
IFS= read -rs PASSWD
sudo -k
if sudo -lS &> /dev/null << EOF
$PASSWD
EOF
then
echo 'Correct password.'
else
echo 'Wrong password.'
fi
Этот сценарий немного зависит от того, конфигурации sudoers. Я предполагал установку по умолчанию. Вещи, которые могут привести к сбою:
targetpw или runaspw установлено listpw is never и т. Д.Другие проблемы включают (спасибо Eliah):
targetpw или runaspw установлено sudo должно выполняться как пользователь, для которого вы аутентифицируетесь. Если у вас нет привилегий sudo, чтобы вы могли запускать sudo -u foo sudo -lS, это означает, что вам нужно будет запустить сценарий в качестве целевого пользователя.Теперь, причина, по которой я здесь использовал, - это препятствовать подслушиванию. Переменная, используемая как часть командной строки, легче обнаружить с помощью top или ps или других инструментов для проверки процессов.