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

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 30 декабря 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

0 голосов
/ 28 августа 2012

Ответ здесь:

  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;

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

Вот и все.

0 голосов
/ 22 декабря 2011

Таким образом, вы просто не хотите пароль вообще.

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

Каждый, кто имеет физический доступ к экрану входа в систему, должен знать только имя пользователя для входа в систему.

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

...