Безопасный SSH с Google Authenticator в Unix/Linux

:

: 4

Google Authenticator обеспечивает новый уровень безопасности от хакеров для SSH сервера. В этой статье «Безопасный SSH с Google Authenticator в Unix/Linux» я расскажу как установить и настройить Google Authenticator чтобы защитить свой SSH сервер с двухфакторной аутентификацией с использованием модуля Google Authenticator PAM. С этим модулем вы должны будите сгенерировать код, используя ваш телефон или другие устройства чтобы войти на сервер через SSH.

Хотите защитить SSH сервер с двухфакторной аутентификацией? Google предоставляет необходимое программное обеспечение для интеграции Google Authenticator на основе одноразового пароля (TOTP) с SSH сервером. Вы должны ввести код с вашего телефона при подключении.

Безопасный SSH с Google Authenticator в Debian/Ubuntu

Для deb-‘s операционных систем, имеется готовый пакет, его нужно просто установить.

Установка Google Authenticator.

Для установки пакета Google Authenticator в Debian или Ubuntu, выполните следующую команду:

# apt-get install libpam-google-authenticator

После этого, переходим к настройке и активации данного модуля.

Безопасный SSH с Google Authenticator в RedHat/Fedora/CentOS

Вот следующие шаги по установки и настройки Google Authenticator в RedHat/Fedora/CentOS

Шаг 1: Добавления репозитория. 

Во-первых, необходимо добавить репозиторий RPMForge или EPEL, если не знаете как, то можно прочитать статью тут:

Установка RPMForge репозитория в RHEL / CentOS

Как включить EPEL репозиторий

Шаг 2: Установка Google Authenticator.

Чтобы установить Google authenticator используйте следующую команду:

# yum install google-authenticator

Безопасный SSH с Google Authenticator с исходного кода.

На самом деле, Google Authenticator является системой с полностью открытым исходным кодом. Вы можете скачать его тут:

# cd /usr/local/src && git clone https://github.com/google/google-authenticator.git

Для этого нужно иметь git.

# cd google-authenticator

Выполняем сборку:

# make && make install

Скопируем библиотеки в нужное место:

# cp pam_google_authenticator.so /lib64/security
# cp google-authenticator /usr/local/bin

Настройка безопасного входа через SSH с Google Authenticator в Unix/Linux

Я использую тестовый аккаунт (пользователь captain) для тестирования:

# su - captain

Запускаем google-authenticator:

$ google-authenticator

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/captain@localhost.localdomain%3Fsecret%3DJ4CZKJKMHQYRVPJJ
Your new secret key is: J4CZKJKMHQYRVPJJ
Your verification code is 477729
Your emergency scratch codes are:
 87179898
 49162509
 72309780
 62379946
 13687735

Do you want me to update your "~/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Google Authenticator покажет вам секретный ключ и много «аварийных скретч-кодов». Аварийные коды могут быть использованы только один раз в случае, если вы потеряли секретный ключ, поэтому держите их в безопасном месте.

Используйте Google Authenticator приложения для вашего девайса (Android, iPhone или Blackberry) для того чтобы сгенерировать проверочной код, нужно ввести секретный ключ:

 Вы также можете сканировать штрих-код, предоставляемый по URL, у меня это:

https://www.google.com/chart?chs=200×200&chld=M|0&cht=qr&chl=otpauth://totp/captain@localhost.localdomain%3Fsecret%3DJ4CZKJKMHQYRVPJJ

Вы также можете использовать приложения, основанные на Java для генерация кодов проверки:

# cd /usr/local/src && wget http://www.jcuff.net/files/Authenticator.tgz && tar zxfv Authenticator.tgz

Компилируем утилиту:

~/auth$ javac -cp ./ Authenticator/*.java

Выполните (в папке auth, домашней папки локального пользователя):

~/auth$ java -classpath ./ Authenticator.Main /home/jcuff/.google_authenticator

Пример:

Authenticator Started!
:----------------------------:--------:
: Code Wait Time : Code :
:----------------------------:--------:
+++++++++++++++++++++++++++++: 977773 :
..............+++++++++++++++: 500007 :
.............................: 176547 :
.............................: 543540 :
^C
~/auth$

Выбор за вами, но с мобильными девайсами проблем меньше.

Активация Google authenticator

Для того чтобы активировать google authenticator, нужно добавить в конфигурационный файл:

# vim /etc/pam.d/sshd

Строку что ниже:

# auth required pam_google_authenticator.so

Должно выглядеть вот так:

required pam_google_authenticatorЭто позволит активировать Google authentication для входа в ssh. После чего, открываем конфигурационный файл SSH b добавим изменения:

# vim /etc/ssh/sshd_config

И приводим к виду:

[...]
ChallengeResponseAuthentication yes
[...]
PasswordAuthentication yes
[...]
UsePAM yes
[...]

И последнее, перезапустим службу SSH в CentOS/Fedora/RedHat:

# service sshd restart

И последнее, перезапустим службу SSH в Debian/Ubuntu:

# service ssh restart

Чтобы убедиться что все работает, можно проверить лог-файл:

# tail -f /var/log/secure

PS: Примите во внимание что SELinux должен быть выключен, и как это сделать, можно прочитать статью тут:

Как отключить SELinux на CentOS

Вот пример лога:

Dec 17 19:12:42 localhost sshd[13057]: Server listening on 0.0.0.0 port 22.
Dec 17 19:12:42 localhost sshd[13057]: Server listening on :: port 22.
Dec 17 19:38:26 localhost su: pam_unix(su-l:session): session opened for user root by captain(uid=500)

Пропустить  Google Authenticator авторизацию если подключение с локальной сети.

Вы можете добавить IP вашей локальной сети чтобы опустить SSH соединения с использованием Google Authenticator. Если это так, изменим:

# vim /etc/pam.d/sshd

Прописываем:

auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth required pam_google_authenticator.so

Затем, открываем:

# vim /etc/security/access-local.conf

Добавляем следующие строки:

# Google Authenticator can be skipped on local network
+ : ALL : 192.168.0.0/24
+ : ALL : LOCAL
- : ALL : ALL

Замените 192.168.0.0/24 на вашу локальную сеть.

Тема «Безопасный SSH с Google Authenticator в Unix/Linux» завершена.