Большинство современных Unix-систем для обработки аутентификации используют PAM. Модуль pam_unix
выполняет аутентификацию паролем по отношению к /etc/паролю
и /etc/shadow
.
Однако не следует изобретать колесо заново. Запрос пароля пользователя и запуск от имени root является базовой конфигурацией sudo, де-факто стандартного способа повышения привилегий. Обратите внимание, что правильное повышение привилегий - хитрое дело: не забыли ли вы очистить все переменные окружения, которые могут повлиять на вашу программу? Судо требует больших усилий, чтобы сделать это безопасно.
Чтобы позволить пользователю alice
выполнить /usr/local/bin/myprogram
в качестве root с любыми аргументами по его выбору после ввода пароля, используйте следующую строку в файле sudoers
(файл конфигурации sudo):
alice ALL = (root) /usr/local/bin/myprogram
Для редактирования файла sudoers
выполните команду visudo
.
Элис должна будет запустить sudo myprogram
. Если вы хотите, чтобы она смогла ввести только имя программы, спрячьте это в скрипте обертки. Но обратите внимание, что Алиса может предпочесть запустить что-то вроде gksudo myprogram
, чтобы получить графическую подсказку.
Возможно множество вариантов, в том числе запрещение вызывающему абоненту передавать аргументы:
alice ALL = (root) /usr/local/bin/myprogram ""
или применение записи к группе:
%mygroup ALL = (root) /usr/local/bin/myprogram
Если вашей программе необходимо знать, кто ее вызвал, sudo делает это доступным в переменных окружения SUDO_UID
и SUDO_USER
.