Написание модуля PAM, который будет читать пароль из файла и регистрировать пользователя

Я пытаюсь написать модуль pam, который будет читать пароль из файла, а затем позволить пользователю войти в систему без ввода пароля.

[РЕДАКТИРОВАТЬ: файл будет сохранен на внешнем устройстве. (Попытка выполнить двухфакторную аутентификацию). Это может показаться очень небезопасным, но файл будет зашифрован с помощью соответствующего алгоритма шифрования. Обмен ключами и шифрование / дешифрование не проблема]

Когда внешнее устройство подключено, пользователь будет вводить только свое имя пользователя на экране входа в систему (KDM), тогда мой модуль PAM получит требуемый пароль от устройства, а затем войдет в систему.

Я новичок в теме PAM, я провел некоторое исследование, но не смог найти, возможно ли это (если так) или нет.

Буду признателен, если укажете способ решения этой проблемы.


person ayyayyekokojambo    schedule 21.12.2011    source источник
comment
Если ключевой файл можно расшифровать без взаимодействия с пользователем, то шифрование ключевого файла совершенно бесполезно, и вы можете с таким же успехом сохранить файл паролей в виде открытого текста.   -  person jørgensen    schedule 22.12.2011
comment
Процесс шифрования / дешифрования будет осуществляться в соответствии с пин-кодом пользователя. Не зацикливайтесь на задаче шифрования.   -  person ayyayyekokojambo    schedule 22.12.2011


Ответы (4)


Я написал модуль PamUUID, который похож на модуль pamusb, упомянутый Павел Хайдан. Установка правильного USB-накопителя в компьютер предоставляет пользователю доступ.

Модуль очень прост, поэтому вы можете редактировать его для своего приложения. В основном это файл pam_uuid.c, который можно настроить, написав соответствующий pam_uuid.h бесполезным способом. Перо обнаруживается путем поиска устройства, соответствующего UUID в ручке. В файле конфигурации вам нужно только указать ассоциации пользователей UUID.

person LuisR    schedule 19.05.2020

Таким образом, вам вообще не нужен пароль.

Вы говорите, что настоящий пароль зашифрован в файле. С каким ключом? У кого еще есть доступ к файлу паролей (зашифрованный или нет, не имеет значения)? У кого еще есть физический доступ к экрану входа в систему?

Всем, у кого есть физический доступ к вашему экрану входа в систему, необходимо знать только имя пользователя для входа в систему.

Этого легче добиться с помощью существующего модуля pam_permit. Вставьте его в свою конфигурацию и покончите с этим. Подробнее см. man pam_permit и man pam.d.

person A.H.    schedule 21.12.2011

При переводе 1: 1 вашего вопроса будут использоваться элементы PAM для передачи пароля от вашего модуля другому модулю (например, так же, как try_first_pass / use_first_pass, см. Источники Linux-PAM). Это должно быть относительно легко, для этого есть много примеров кода.

Вместо этого вы могли бы попытаться просто распознать правильный USB-ключ. Раньше для этого был модуль pam_usb, см. http://sourceforge.net/projects/pamusb/ и https://github.com/aluzzardi/pam_usb

person Paweł Hajdan    schedule 30.12.2011

Ответ здесь:

  1. Напишите свой собственный модуль pam. (Тонны примеров можно найти в Интернете)
  2. Считайте данные как хотите. (читать из файла или что-то еще с любой функцией, которая вам может понравиться)
  3. Сравните хешированные пароли, как показано ниже, и здесь:
if ((!pwd->pw_passwd[0] && (flags & PAM_DISALLOW_NULL_AUTHTOK)) ||
      (crypt_password = crypt(password, pwd->pw_passwd)) == NULL ||
      strcmp(crypt_password, pwd->pw_passwd) != 0)
      pam_err = PAM_AUTH_ERR;

если совпадение, вернуть успех.

Вот и все.

person ayyayyekokojambo    schedule 28.08.2012