Спроба отримати SSH з відкритим ключем (без пароля) + автентифікатором google, що працює на Ubuntu 14.04.1


20

Я використовую Ubuntu 14.04.1 (з OpenSSH 6.6 та libpam-google-автентифікатором 20130529-2).

Я намагаюся налаштувати входи в SSH, де відкритий ключ підтверджує автентифікацію (без пароля) і користувачеві пропонується отримати код від Генератора даних Google.

Дотримуючись / адаптуючи ці інструкції, я отримав запит на введення пароля, а також підказку Google Auth:

Я встановив пакет, відредагував мій /etc/ssh/sshd_configі /etc/pam.d/sshфайли

В /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

і внизу /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

Я знаю, що PAM залежить від порядку, але sshd_configтакож?

Що я роблю неправильно? Будь-яка допомога буде вдячна.

Відповіді:


28

Налагодили роботу добре, спершу зробили:

apt-get install libpam-google-authenticator

У /etc/pam.d/sshdя змінив / додав наступні рядки (вгорі):

# @include common-auth
auth required pam_google_authenticator.so

І в /etc/ssh/sshd_config:

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

Добре працює, і тепер я отримую підказку "Код підтвердження" після аутентифікації з відкритим ключем. Я не впевнений, як я дозволив би підтвердити автентифікацію паролем + маркер АБО + ключ + маркер, так як зараз ефективно видалив метод автентифікації пароля з PAM.

Використання Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generic x86_64) з ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 січня 2014


Отже, заради нащадків я зрозумів свою проблему. Я також намагався PasswordAuthentication no, але це було не все. Проблема полягає в тому, що у моєму файлі ~ / .ssh / config я мав / маю ControlMaster autoта має ControlPathдирективи. Я хотів переконатися, що я не заблокував себе, тому завжди залишав сеанс SSH відкритим. Оскільки мій комп'ютер просто їх повторно використовувати, я завжди входив без системи, яка просила маркер. Я позначив вашу відповідь правильною, оскільки хтось, що стежить за нею, дійсно отримав би робочу настройку. Спасибі!
JT.

2
Я використовую CentOS 7. У мене є PasswordAuthentication no, ChallengeResponseAuthentication yes, AuthenticationMethods publickey,keyboard-interactiveі UsePAM yesв sshd_config. Він підтверджує мій ключ, а потім запитує у мене маркер Google Authenticator, а потім також запитує мене для пароля. Змушує мене робити всіх трьох - не можу пропустити жодного з них. Я також спробував, AuthenticationMethods publickey,keyboard-interactive:pamяк запропонував сторінку man, але це нічого не змінило. Будь-які ідеї?
Нік Вільямс

6
@NickWilliams У мене виникло те саме питання. Що для мене виправило те, що мені потрібно було висловити позицію щодо @include common-authлінії, яку показують відповіді. Я просто думав, що це спочатку коментар до pam_google_authenticatorрядка в /etc/pam.d/sshd.
фреб

5
Дякую! Моє рішення було зовсім не таким (мені потрібно було прокоментувати auth substack password-auth), але ваш коментар вирішив мою проблему!
Нік Вільямс


7

Нарешті мені вдалося налагодити цю роботу, розмістивши auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullokвгорі /etc/pam.d/sshd.

Відповідно до сторінки чоловіка pam.d :

  • success=done означає, що якщо Google Authenticator вимкнеться, більше ніякої автентифікації не буде виконуватися, тобто додаткове запит на отримання пароля.
  • default=die означає, що якщо Google Authenticator відхилить спробу входу, аутентифікація негайно завершиться невдало, пропустивши підказку пароля.

Таким чином, [success=done new_authtok_reqd=done default=die]це своєрідна суміш між величинами sufficientта requisiteзначеннями контролю, оскільки ми хочемо поведінки обох: якщо успіх, негайно припиніть (достатньо), а якщо невдача, також негайно припиніть (необхідний).

Зауважте, що nullokаргумент pam_google_authenticator.so означає, що якщо ~/.google_authenticatorфайл не знайдено для користувача, автентифікація відкритого ключа проходить як звичайне. Це корисно, якщо я хочу заблокувати лише підмножину моїх облікових записів із 2FA.


6

Відповідь Лінуса Кендала повинна працювати на старих системах, але на нових версіях Linux це проблематично; на моєму веб-сервері арки linux, що конфігурація призводить до того, що пам’ять запитує мій код автентифікатора та пароль після отримання мого ключа ssh (тобто мені потрібні всі 3).

Більш просте рішення, яке запобігає цій проблемі і яке повинно працювати в кожній системі, - це змінити запис /etc/pam.d/sshdна:

auth sufficient pam_google_authenticator.so

А потім внести ті самі зміни до `/ / etc / ssh / sshd`, про які згадував Лінус:

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

Це повинно запитати ваш маркер автентифікатора після того, як сервер приймає ваш відкритий ключ. Він не повинен запитувати ваш пароль.

Як бічна примітка, якщо ви хочете мати обліковий запис користувача sftp, вам, ймовірно, потрібно буде обійти автентифікатор google, щоб змусити його працювати. Ось пропозиція, як це зробити безпечно, використовуючи в'язницю sftp. В etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

Вам потрібно буде зробити дозволу на / шлях / до / FTP / реж кореневої запису тільки (наприклад chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir. Всі перераховані вище цього каталогу батьків також потрібні безпечні дозволу. Те , як я зазвичай роблю це, зробивши каталог кореневих /home/shared/user, створюючи каталог там (наприклад, "дані"), а потім монтуйте будь-який каталог, який я хочу поділитися таким:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

Якщо ви дотримуєтесь усіх цих кроків, для ваших ssh користувачів у вас буде відкритий ключ + логін автентифікатора google та функціональний обліковий запис sftp, захищений паролем.


Це чудово працює. А оскільки мені чомусь просто не комфортно коментувати спільнокореневі, це було більш ідеально, ніж рішення Лінуса.
Лука Сапан

Дуже дякую! витратив нічну налагодження ssh, цікавившись, чому мені все одно доводиться вводити пароль після паблікі + authcode ……
felix021
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.