Проверка пользователя

Предположим, что я написал исполняемый файл setuid root, и я хочу, чтобы он удостоверился, что пользователь не является скриптом, попросив пользователя предоставить свой пароль (предоставленный, пользователи могут сохранять свой пароль и использовать его в скрипте, но это doesn Меня это беспокоит.

Что было бы хорошим способом сделать это? Чем портативнее, тем лучше.

2 Solutions collect form web for “Проверка пользователя”

Большинство современных Unix-систем используют PAM для аутентификации. Модуль pam_unix – это тот, который выполняет аутентификацию пароля с /etc/password и /etc/shadow .

Однако вы не должны изобретать велосипед. Задавать пароль пользователя и выполнять его как root – это базовая конфигурация sudo , стандартного способа повышения привилегий. Обратите внимание, что правильное повышение привилегий является сложным: не помните, чтобы очистить все переменные среды, которые могут повлиять на вашу программу? Судо прилагает все усилия, чтобы сделать это безопасно.

Чтобы пользователь мог запустить /usr/local/bin/myprogram как root с любыми аргументами по ее выбору после ввода пароля, используйте следующую строку в файле sudoers (файл конфигурации sudo):

 alice ALL = (root) /usr/local/bin/myprogram 

Чтобы отредактировать файл sudoers , запустите команду visudo .

Алисе нужно будет запустить sudo myprogram . Если вы хотите, чтобы она могла набирать только имя программы, скройте ее в сценарии оболочки. Но обратите внимание, что Алиса может предпочесть запустить что-то вроде gksudo myprogram чтобы получить приглашение GUI.

Возможны многие варианты, в том числе запрет вызова вызывающим из аргументов:

 alice ALL = (root) /usr/local/bin/myprogram "" 

или применения записи к группе:

 %mygroup ALL = (root) /usr/local/bin/myprogram 

Если ваша программа должна знать, кто ее вызвал, sudo делает это доступным в переменных среды SUDO_UID и SUDO_USER .

Я искал что-то вроде этого

(Удар):

 hash=$(sudo cat /etc/shadow |grep "^$USER:" |cut -d: -f2) cmphash=$(mkpasswd -m sha-512 -S "$(echo "$hash" | cut -d '$' -f3)") cmp <(echo "$hash") <(echo "$cmphash") && echo "Correct password!" 

Это работает, но кодирует хеш-метод, который каким-то образом идентифицируется по числу в echo "$hash" | cut -d '$' -f2 echo "$hash" | cut -d '$' -f2 который в этом случае равен 6. Мне еще предстоит выяснить, как сопоставить число с хэш-методом.

  • Как предотвратить chgrp от очистки «бит setuid»?
  • Пример setuid из Википедии: 4700
  • почему разрешение setgid на SO вызывает сбои?
  • Дарвинский планшет из интерпретатора в исполнении хеш-банга
  • crontab не выполняет мой скрипт?
  • Изменение UID файлов в / proc
  • Как настроить скрипт для запуска с правами неинтерактивно?
  • почему suid бит не отменяется после изменения файла
  • Почему не работает setuid с mount?
  • Linux - почему для двоичных файлов su и sudo необходимо установить root-UID?
  • открытие ошибки kcheckpass / var / log / faillog
  • Interesting Posts

    Дружественная виртуальная машина командной строки

    Что означает различие с фигурными фигурными скобками?

    Причина изменения в ctime при изменении содержимого файла

    Shell Script для изменения языка не имеет эффекта

    Ошибка при создании Apache 2.4.25 из источника с открытым ssl 1.1.0c

    Насколько похож CentOS 6.6 на Rocks 6.2?

    Какие дистрибутивы Linux упрощают обновление?

    less '+>' / path / to / file

    Команда запуска, когда температура превышает пороговое значение, без демона

    Поймать / диагностировать процесс уничтожения пользователя – Необязательно выходить из системы автоматически

    Необязательный выбор шрифта Fontconfig по умолчанию, как он определяется в конфигурациях XML? Не удалось найти в документации

    Как искать файл, начинающийся с a или z и заканчивая символом a или z?

    Неверный inode: поврежден f2fs, fsck.f2fs не может восстановить

    bind не разрешает FQDN из файла корневых ссылок

    Предотвратите блокировку стандарта GNU-Screen

    Linux и Unix - лучшая ОС в мире.