Intereting Posts
компиляция PHP 5.4 и выше с MySQL Awk – значения совпадения между двумя файлами и создание нового файла использование chown в linux В bash, каковы потенциальные негативные последствия приостановки процесса с контролем-z? Описание списка пакетов Существуют ли какие-либо недостатки в отношении использования qsub для запуска задач все время? Самостоятельное ядро: не удалось установить / dev: нет такого устройства Папки и файлы, потерянные с рабочего стола Какой драйвер для USB-накопителя я должен установить? journalctl – проверять коррупцию в отчетах Почему соединение с использованием ключа ssh прерывается с одним именем хоста, но работает с другими? Необходимо открыть порт 1111 на сервере unix Если значение попадает в диапазон, напечатайте сумму значений Настройка ClusterSSH для использования шрифтов Freetype Launcher для программы Python, которая требует дополнительных библиотек

n-factor SSH-аутентификация для CentOS 7

Как я могу включить (и потребовать) n-factor аутентификацию для всех SSH-соединений на сервере CentOS 7?

Я прочитал о Google Authenticator, который обеспечивает двухфакторную аутентификацию. Но это ограничивается штырем, предоставляемым приложением, которое вы должны установить на мобильном устройстве каждого пользователя.

Как добавить переменные количества факторов аутентификации? Некоторые примеры дополнительных факторов могут включать:

 1.) a pin code emailed to the administrator's work email address 2.) a USB key 3.) a pin texted to the administrator using a tool like twilio etc.) ... 

Программу Java для отправки писем и текстов контактов можно было бы легко создать и вызывать сценарий оболочки, который заменяет скрипт аутентификации ssh по умолчанию, но я никогда раньше не писал сценарий оболочки.

Как бы выглядел код оболочки для выполнения этого, предполагая, что Java уже написан? И где бы я поместил сценарий оболочки? Псевдокод для сценария оболочки может включать следующие шаги:

 1.) Trigger the Java program to send email, text, etc. with custom pins when administrator types ssh adminaccount@secureserver.com 2.) Replace the login password prompt with a series of prompts to get the pins/credentials from 2.) Possibly interact with a client program to get the usb signature 3.) Send the credentials to the java program, with time stamp to ensure login was done within a minute after java sent the pins 4.) Compare the Boolean returned by the java program with the CentOS password check 5.) Either authenticate or reject the user 

Мое предположение о первом проекте сценария оболочки может быть:

 #!/bin/bash USER_NAME=#How do I populate this? TEXT_PIN=shuf -i 1-10000 -n 1 EMAIL_PIN=shuf -i 1-10000 -n 1 CLASSPATH=/path/to/classes java -cp $CLASSPATH my.package.SendPinsClass TEXT_PIN EMAIL_PIN if [ $? -eq 0 ] then echo -n "We were not able to send authentication credentials. Please log the current time and report this to the chief administrator. " else echo -n "Pin numbers have been sent to your email and phone number. Please check your email and text messages now before continuing the authentication process. " fi echo -n "Enter Pin number from cell phone: " read TEXT_PIN echo -n "Enter Pin number from email: " read EMAIL_PIN java -cp $CLASSPATH my.package.AuthenticationClass USER_NAME TEXT_PIN EMAIL_PIN if [ $? -eq 0 ] then #DO NOT AUTHENTICATE else #LOG THIS USER IN! fi #HOW DO WE CHECK THE USER'S CentOS 7 PASSWORD? #THIS SCRIPT MUST INCLUDE A PASSWORD CHECK IN AUTHENTICATION PROCESS. 

Что еще входит в сценарий оболочки? И как я его положил?

Спецификации для ответа приведены выше. Тем не менее, комментарии, предлагающие более простые инструменты, а не их собственные, также приветствуются в качестве комментариев .


РЕДАКТИРОВАТЬ:


Основываясь на моих текущих исследованиях, я просто добавил более подробную информацию к черновику сценария оболочки выше, чтобы документировать шаги, которые должен выполнить скрипт для аутентификации пользователя. Ключевыми шагами можно считать успешное выполнение двумя «черными ящиками» java-программ, которые вызывается сценарием оболочки. Основные оставшиеся вопросы, на которые необходимо ответить до этого, могут быть завершены:

 1.) How does the script receive and populate the value for the USER_NAME variable? 2.) How does the script check the user's CentOS 7 OS password, and how should the password be integrated into the script's authentication process? Note the security of the password needs to be protected. 3.) How does the script process the approval or rejection of the authentication request with the CentOS 7 operating system? 4.) How is the working shell script placed in the authentication process to replace the default authentication script? 

Примечание. Если реализация сценария в CentOS 7 включает в себя связывание скрипта в качестве PAM module как предлагает @steve в своем комментарии, тогда принятый ответ должен давать явные инструкции не только для изменения сценария оболочки, но и для интеграции сценария оболочки в PAM module и любые другие аспекты процесса аутентификации. Ответ должен работать на CentOS 7.


ВТОРОЙ РЕДАКТИРОВАНИЕ:


По этой ссылке, которая была размещена в комментарии от @steve ниже, содержимое /etc/pam.d/sshd по умолчанию выглядит следующим образом:

 #%PAM-1.0 auth required pam_sepermit.so auth substack password-auth auth include postlogin account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth session include postlogin 

Обратите внимание, что в CentOS 7, /lib/security/ не существует и, следовательно, не является местом расположения модулей PAM, как в ссылке @ steve, которая предназначена для Debian. Таким образом, без модулей PAM мы не можем хранить сценарий оболочки в моем OP как /lib/security/2ndfactor.so . Учебное пособие по ссылке @ steve предлагает следующий код для назначения сценария /lib/security/2ndfactor.so . Как изменить следующий код?

 apt-get update apt-get install build-essential libpam0g-dev libcurl4-openssl-dev gcc -fPIC -lcurl -c 2ndfactor.c ld -lcurl -x --shared -o /lib/security/2ndfactor.so 2ndfactor.o 

Ссылка @ steve также предполагает, что мы редактируем /etc/pam.d/sshd чтобы добавить ссылку на 2ndfactor.o после @common-auth следующим образом:

 # PAM configuration for the Secure Shell service # Read environment variables from /etc/environment and # /etc/security/pam_env.conf. auth required pam_env.so # [1] # In Debian 4.0 (etch), locale-related environment variables were moved to # /etc/default/locale, so read that as well. auth required pam_env.so envfile=/etc/default/locale # Standard Un*x authentication. @include common-auth auth required 2ndfactor.so base_url=http://my.server.com/send_code.php code_size=5 

Но, как вы можете видеть выше, /etc/pam.d/sshd который используется по умолчанию в CentOS 7, не содержит @include common-auth . Кроме того, ссылка @ steve использует веб-url для php-скрипта, но я пытаюсь вызвать java-программу из сценария оболочки. Должен быть способ сделать это, не подвергая веб-URL.

Наконец, ссылка @ steve говорит, чтобы установить ChallengeResponseAuthentication = yes в /etc/ssd/sshd_config , но в CentOS 7 нет каталога /etc/ssd/ .

Может ли кто-нибудь показать, как адаптировать все это для работы с CentOS 7 и Java?

В стандартном стеке аутентификации * nix используется PAM. Вы захотите изучить модуль для PAM: http://www.linux-pam.org/Linux-PAM-html/

Как правило, многофакторные продавцы могут предоставить один. Например, вот руководство по внедрению аутентификатора Google в качестве второго фактора для входа в SSH: http://spod.cx/blog/two-factor-ssh-auth-with-pam_oath-google-authenticator.shtml

Вы можете настроить PAM для поддержки множества различных факторов как достаточных или обязательных.


EDIT: Я не пытаюсь быть трудным – я пытаюсь перенаправить ваши исследования. Из вашего второго редактирования вы просите о помощи, адаптируя набор строк, который включает в себя: gcc -fPIC -lcurl -c 2ndfactor.c Это gcc -fPIC -lcurl -c 2ndfactor.c . Вы не можете скомпилировать сценарий оболочки. Модули PAM записываются на C и скомпилированы (в этом примере) с gcc. Возможно, вы сможете вызвать Java-приложение из модуля PAM, но это выходит за рамки этого сайта и выходит за рамки моих знаний.

Другие примечания:

  • Модули PAM для современной версии CentOS будут в / lib64 / security /, выполнены, если вам нужны 32 и 64-битные библиотеки
  • Lastly, @steve's link says to set ChallengeResponseAuthentication = yes in /etc/ssd/sshd_config, but in CentOS 7 there is no /etc/ssd/ directory. Это, вероятно, только опечатка и должна быть / etc / sshd

Альтернатива: Как администратор sys, я препятствую использованию «странных» конфигураций. PAM – известный и общепринятый способ аутентификации, и множество приложений, кроме sshd, могут и будут использовать его.

Однако, если вас беспокоит реализация 2FA для сеансов sshd в сеансах tty, вы можете посмотреть, как использовать параметр ForceCommand в конфигурации sshd: http://ben.akrin.com/?p=1290

Вы должны заметить, что для пользователей, прошедших проверку подлинности, относительно легко обойти будущие попытки принудительного применения 2FA через ForceCommand, поэтому это не очень хорошее решение: https://serverfault.com/questions/639771/how-secure-is- SSH-forcecommand-на-прыжок-хозяина