Як використовувати ssh-сервер з PAM, але заборонити автентифікацію пароля?


13

Багато навчальних посібників говорять вам про те, як налаштувати свій ssh-сервер так:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

але з цією установкою ви не можете використовувати PAM, оскільки я планую використовувати 2-факторну автентифікацію з Google Authenticator (пароль Onetime OTP), мені потрібна PAM.

Отже, як налаштувати свіжий debian jessie ssh deamon, якщо я хочу запобігти входу за допомогою звичайного пароля, але все ж дозволяю використовувати PAM.

можливо, точне питання полягає в тому, як налаштувати пам’ять на заборону паролів?

Детальніше про автентифікацію PAM

Відключення автентифікації паролів на основі PAM є досить неінтуїтивно зрозумілим. Він потрібен майже для всіх дистрибутивів GNU / Linux (за винятком винятків Slackware), а також для FreeBSD. Якщо ви не будете обережні, ви можете встановити параметр "ні" і все одно увійти з паролем за допомогою автентифікації PAM. Виявляється, вам потрібно встановити "ChallengeResponseAuthentication" на "ні", щоб по-справжньому відключити автентифікацію PAM. На сторінках FreeBSD можна сказати про це, що може допомогти трохи прояснити ситуацію:

Зауважте, що якщо ChallengeResponseAuthentication "так", а політика автентифікації PAM для sshd включає pam_unix (8), то автентифікація паролів буде дозволена через механізм відповіді на виклик незалежно від значення PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

Відповіді:


23

можливо, точне питання полягає в тому, як налаштувати пам’ять на заборону паролів?

Правильно. Ви вже натрапили на той факт, що налаштування UsePAM no- це погана порада. Він не тільки запобігає будь-якій формі аутентифікації на основі PAM, але також відключає accountі sessionмодулі. Контроль доступу та конфігурація сеансу - хороші речі.

Спочатку давайте складемо список вимог:

  • OTP через pam_google_authenticator.so. Для цього потрібно UsePAM yesі ChallengeResponseAuthentication yes. Зрештою, ви запросите їх на отримання довіри!
  • Ніякої іншої форми автентифікації пароля через PAM. Це означає, що вимкнути будь-який authмодуль, який, можливо, дозволить передати пароль через keyboard-interactiveлогіни. (яку ми маємо залишити включеною для OTP)
  • Аутентифікація на основі ключів. Нам потрібно вимагати publickeyавтентифікацію, і, можливо, у gssapi-with-micвас налаштований Kerberos.

Зазвичай аутентифікація за допомогою ключа повністю пропускає аутентифікацію на основі PAM. Це зупинило б нас у наших треках із старими версіями opensh, але Debian 8 (jessie) підтримує AuthenticationMethodsдирективу. Це дозволяє нам вимагати декількох методів аутентифікації, але працює лише з клієнтами, що реалізують SSHv2.


sshd config

Нижче наведено рядки, які я пропоную /etc/ssh/sshd_config. Переконайтеся, що у вас є спосіб отримати доступ до цієї системи, sshdякщо ви щось не зламаєте!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

Не забудьте перезавантажити, sshdколи ці зміни були внесені.

Конфігурація PAM

Нам залишається налаштувати PAM. Припускаючи чисту установку Debian 8 (на ваше запитання):

  • Коментар @include common-authвід /etc/pam.d/sshd.
  • Перегляньте /etc/pam.d/sshdта підтвердьте, що жодних рядків, що починаються з auth, немає. Не повинно бути, якщо це чиста установка, але краще бути в безпеці.
  • Додати authзапис для pam_google_authenticator.so.

Пам'ятайте, що локальні паролі все ще працюють.

Ми не вносили жодних змін, які впливали б на вхід через локальну консоль, або заважали користувачам використовувати паролі для оновлення своїх привілеїв через sudo.Це було поза межами питання. Якщо ви вирішили взяти участь у подальшому, пам’ятайте, що корінь завжди повинен бути дозволений для локального входу через пароль. Ви ризикуєте випадково заблокувати себе із системи.


ще не перевірив її, але це виглядає логічно, і з 5 оновлених результатів я думаю, що я можу це прийняти.
c33s

Я перевірив себе. якщо ви хочете повністю відключити пароль, вам також потрібно встановити виклик ChallengeResponseAuthentication. дивіться blog.tankywoo.com/linux/2013/09/14/…
анонімний

@anonymous Зверніться до питання ОП та першої кулі. Якщо вимкнути ChallengeResponseAuthenticationфункцію розбиття клавіатури, інтерактивна аутентифікація потрібна для модулів аутентифікації PAM, що працюють з OTP. (бажано ОП) Вимкнення CRA безпечно для виконання лише у тому випадку, якщо у вас є дійсно нульові модулі PAM в authстеку, які потрібно запустити. Якщо PasswordAuthenticationі GSSAPIAuthenticationвимкнено, пароль не буде прийнятий, якщо PAM не має включеного модуля авторизації, який запитує його.
Ендрю Б

(що сказало, це все-таки чудове посилання)
Ендрю Б

1

заборонити запит пароля

прокоментуйте цей рядок

#auth       substack     password-auth

в /etc/pam.d/sshd

і не забудьте не мати nullok в кінці цього рядка, якщо не буде добре аутентифікуватись через ssh без використання OTP

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