Триступінчаста аутентифікація?


9

Я використовую Ubuntu.

Мені просто цікаво, чи можливо мати лібпам-google-автентифікатор (який дозволяє входити в систему за допомогою коду, згенерованого вашим телефоном) І встановити автентифікацію сертифікатів для спільної роботи, і якщо це можливо, як я б ішов налаштування його. Таким чином - щоб увійти до мого облікового запису, ви повинні мати мій пароль, мій телефон (та його пароль) І мій сертифікат / приватний ключ та його пароль.

Я змусив обох працювати самостійно, але ніколи не зміг змусити їх працювати разом. Я впевнений, що якось це можливо.

Дякую.


Зазвичай дублюючими факторами ви не заробляєте багато. Генератор сертифікатів та кодів відповідає вмісту "щось у вас є". Пароль відповідає "щось, що ви знаєте". Інший поширений фактор - «щось ти є» (біометричні дані).
Зоредаче

Відповіді:


8

Це можна зробити, з'єднавши разом модулі 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


Відмінна відповідь! Якби я міг би схвалити це не раз, я б.
Аарон Міллер

Дякую! Хоча - для входу в сертифікат я додаю свій відкритий ключ у .ssh / санкціонований_кейс (використовуючи параметри RSAAuthentication і PubkeyAuthentication в sshd_config), а для коду OTP я використовую pam_google_authenticator - google-authenticator.googlecode.com/hg . То як би це працювало?
Jesse W

@JesseW Для цього вам потрібно встановити SSHD для використання PAM, а також відкритого ключа. Хоча я не впевнений у конкретних характеристиках, вам, безумовно, потрібно буде встановити ChallengeResponseAuthenticationта UsePAM"так", а потім встановити рядки, детальні у моїй відповіді вище, або в /etc/pam.d/sshd або /etc/pam.d/common -а, залежно від того, чи хочете ви виконати це для всіх вхідних даних або просто SSH. Не забудьте видалити рядок заповнення "pam_certificate_auth.so" та змінити рядок [success = <n> як результат.
Xenopathic

2

Я прочитав цю публікацію і подумав, що це звучить круто - ось як я отримав трифакторну автентифікацію для роботи. Я написав повідомлення в блозі про це тут .

В основному, я встановив Google Authenticator і пароль в PAM, потім встановив аутентифікацію відкритих ключів у OpenSSH (це обходить два інших), і нарешті потрібно, щоб OpenSSH також пройшов автентифікацію через PAM (останній рядок)

Від / etc / ssh / sshd_conf

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

1

Тільки Pubkey + GoogleAuth, який ви повинні додати до початку /etc/pam.d/sshd

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

Я припускаю, що у вас є OpenSSH> = 6.2 та sshd_config відредагований

Для більшої параноїдальної безпеки додайте кілька додаткових конфігурацій: D

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.