Це можна зробити, з'єднавши разом модулі PAM. Але перш ніж я розібраюся в будь-яких деталях:
Неправильне налаштування PAM може і НЕ МОЖЕ заважати вам увійти в систему
На щастя, ви завжди можете завантажуватися в єдиний користувальницький режим і виправляти проблему, але просто попередити, що PAM - це не те, з чим ви хочете возитися більше, ніж потрібно.
У всякому разі, ідея в тому , що можна використовувати для штабелювання модулів PAM , щоб переконатися , що pam-google-authenticator
, pam_unix
(це перевіряє ваш пароль) і модуль сертифіката все повинні досягти успіху , щоб дозволити вам доступ. За замовчуванням PAM налаштовано так, щоб дозволити будь-якому модулю аутентифікації аутентифікувати вас, пропускаючи інші.
У /etc/pam.d/common-auth ви побачите вгорі рядок, схожий на таке:
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
Це повідомляє PAM, що це повинно pam_unix.so
досягти успіху, воно пропустить наступні два правила (які зазвичай є ще одним модулем аутентифікації, а потім pam_deny.so
) і перейде до додаткових модулів. Однак, якщо модуль вийшов з ладу, він буде ігноруватися, а управління перейде до наступного модуля в ланцюзі. Це триває вниз кожен модуль аутентифікації, поки будь-який елемент управління не перейде до необов'язкового блоку, або PAM потрапить у пам’ятку.so та не вийде з ладу.
Це можна використати для того pam-google-authenticator
, щоб переконатися, що pam_unix.so
і ваш PAM модуль сертифіката повинен мати успіх, щоб дозволити вам отримати доступ. Я не знаю імені модуля аутентифікатора Google чи модуля сертифікатів, який ви використовуєте, але ви повинні мати змогу знайти їх у вашому спільному файлі auth. Отже, поставивши щось подібне вгорі:
auth requisite pam_unix.so nullok_secure
auth requisite pam_google_authenticator.so
auth requisite pam_certificate_auth.so
auth [success=<n>] pam_permit.so
Заміна <n>
кількості модулів між модулем pam_permit.so тут і наступним pam_permit.so
модулем - іншими словами, цей параметр повинен бути встановлений у коді [успіх = n за замовчуванням = ігнорувати "найбільшого автентичного модуля + 1. Цей синтаксис трохи фанк , але по суті пропускає автентичні модулі після досягнення вищевказаних модулів.
Звичайно, вам може бути цікаво, як обмежити цю триступеневу автентифікацію лише вашим обліковим записом користувача. Це можна зробити за допомогою pam_succeed_if.so
модуля, і його слід вставити над описаним вище тришаговим блоком аутентифікації:
auth [success=ignore default=4] pam_succeed_if.so user = <username>
Де <username>
замінено ваше ім'я користувача. Цей рядок просто говорить про те, що у випадку успіху пам’ятника_у_файла (він же ім’я користувача відповідає імені користувача у цьому рядку), тоді PAM повинен переходити до наступних модулів, які є тришаговими модулями авторизації. В іншому випадку PAM повинен перейти до реальних модулів, які в 4 модулях від цього.
Для узгодження кількох речей, наприклад, членства в групі разом із певним іменем користувача, потрібно використовувати кілька рядків, наприклад:
auth [success=1 default=ignore] pam_succeed_if.so user = <username>
auth [success=ignore default=4] pam_succeed_if.so user ingroup <group>
Перш ніж робити що-небудь із цього, я б створив резервну копію файлу common-auth, а також ознайомлюся з режимом єдиного користувача та способом відновлення старого файлу у разі надзвичайної ситуації. Ця конфігурація не перевірена мною, але вона повинна працювати.
Щоб перевірити це вперше, відкрийте корінну оболонку або дві відкриті і просто залиште їх у спокої. Вони діють як резервні копії, якщо щось піде не так, оскільки ви можете легко замінити common-auth на резервну копію. Потім внесіть ці зміни. Далі спробуйте скористатися su
для входу у свій обліковий запис користувача - вам потрібно буде пройти тришаговий процес аутентифікації.
Повну документацію для pam_succeed_if.so
модуля можна знайти на веб-сайті http://linux.die.net/man/8/pam_succeed_if