2.5 F Аутентифікація

Привіт, привіт! Вітаю всіх причетних з вдень ИБэшника

Хочу поділитися досвідом по налаштуванню 2.5 факторної аутентифікації віддалених користувачів. Чому 2.5, думаю, ви зрозумієте з утримання, якщо вважати модель «1. Що знаю. 2. Що маю. 3. Ким є» еталонної. Якщо зацікавило, прошу!

Що потрібно зробити спробував намалювати на схемі:



Коротко: віддалений користувач має eToken (Alladin), учетку в Active Directory, що входить в певну групу і одноразовий пароль з мобільного додатку Google Authenticator. Йому потрібно успішно підключитися до деякого сервісу.

На Хабре є стаття, в якій описані основні моменти з налаштування CISCO ASA, AnyConnect, Google Auth і Freeradius. Дублювати сенсу не бачу, все практично так, за виключенням наступного.

Рекомендую встановити утиліти RADIUS сервера для тестування командою radtest і дебага radiusd -X

yum install freeradius freeradius-utils

З досвіду з'являлися помилок, мені було б зручніше налаштовувати в наступному порядку:

  1. RADIUS
  2. Google
  3. SSSD
  4. PAM
  5. CISCO
Але як завжди не все так просто і по порядку. На github потрібні нам компоненти Google лежать тут «The pluggable authentication module (PAM) is in a separate project.» При установці можуть виникнути різного роду помилки, тут треба читати і додавати, якщо необхідно інструменти розробників і бібліотеки (gcc, libqrencode тощо).

Тепер, що не вийшло (може і вийшло, але він вирішив не писати про це) у автора статті, наведеною вище.

Для можливості використання облікових записів з AD необхідно встановити SSSD і компоненти.

yum install sssd realmd adcli

Далі додаємо RADIUS сервер в домен:

realm join ваш_домен

Дозволяємо доступ користувачам заздалегідь опреденной групи AD:

realm permit -g ваша_группа_из_AD

На даному етапі може виникнути проблема з іменем домену (.ru, .net, .test тощо) Записи 1 рівня можуть не визначатися, відповідно ім'я вашого домену може бути неповним, це вплине на процес аутентифікації і конфігурацію RADIUS сервера.

У моєму випадку це виглядало так username@domain, де domain це тільки ім'я 2 рівня. До чого це може призвести? Ви просто не зможете успішно аутентифицироваться, якщо не закоментувати наступні рядки у файлі /etc/raddb/policy.d/filter

# if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\\.(.+)$/)) {
# update reply {
#Reply-Message += "Rejected: Realm does not have at least one dot separator"
# }
# reject
# }

Інакше введені вами дані будуть відфільтровані, як помилкові. Для того щоб створити доменному користувачеві Google Authenticator робимо наступне:

su – domain_user@domain
google-кодів

Цей користувач має бути членом групи, яку ми вказали вище командою realm permit.

На цьому етапі виникають проблеми, механізми безпеки не дадуть створити домашню теку для нового користувача. Ця директорія необхідна для файлу ~google-кодів, в якому міститься інформація з кодами верифікації і ключем для кожного користувача.

Щоб це виправити, необхідно компонент SELinux перевезти в дозвільний режим:

setenforce permissive

Далі потрібно перейти в /etc/pam.d/radiusd і записати наступний конфіг:

#%PAM-1.0
auth requisite pam_google_authenticator.so forward_pass
auth required pam_sss.so use_first_pass
account required pam_nologin.so
account include password-auth
session include password-auth

Не забудьте про NTP та синхронізуйте час, інакше одноразові паролі працювати не будуть, а у файлі /var/log/secure буде повідомлення «invalid code»

Коли все готово, можна протестувати:

  1. Після запуску AnyConnect з'явиться вікно eToken PKI Client
  2. Вибираємо свій сертифікат. Вводимо пароль від контейнера — 1 фактор
  3. Далі вводимо облікові дані користувача AD (логін+пароль) — 2 фактор
  4. Додаємо до паролю код з програми на телефоні (без пробілів) — 0.5 фактор
2.5 факторна аутентифікація готова. Якщо я щось забув і у вас не завелося, пишіть в коментарях, спробую допомогти )
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.