Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Как в Linux получить доступ через SSH с помощью одноразовых паролей

Оригинал: How to secure SSH login with one-time passwords on Linux
Автор: Dan Nanni
Дата публикации: March 30, 2015
Перевод: Н.Ромоданов
Дата перевода: июнь 2015 г.

Как кто-то сказал, безопасность не результат, а процесс. Хотя сам по себе протокол SSH является криптографически безопасным, кто-нибудь может создать хаос в сервисе SSH, если он не ведется правильно, будь то использование слабых паролей, скомпрометированных ключей или устаревшие клиентских программ SSH.

Что касается аутентификации SSH, то аутентификация с открытым ключом в общем считается более безопасной, чем аутентификации по паролю. Но использование ключа аутентификации на самом деле нежелательно и даже менее безопасно в случае, если вы входите с публичного компьютера или компьютера общего пользования, в которых всегда есть место таким вещам, как стелс-кейлоггеры или сканеры памяти. Если вы не можете довериться компьютеру, с которого работаете, то лучше воспользоваться чем-нибудь иным. Это как раз такой случай, когда могут пригодиться "одноразовые пароли". Как следует из названия, каждый одноразовый пароль подходит для однократного использования. Такие одноразовые пароли можно безопасно использовать в ненадежных средах, поскольку даже если их украдут, ими нельзя воспользоваться повторно.

Один из способов генерации одноразовых паролей — использование сервиса Google Authenticator. В этой статье я собираюсь рассказать еще об одном способе создания одноразовых паролей для входа через SSH: о пакете OTPW, создающим одноразовые пароли для входа в систему. В отличие от сервиса Google Authenticator, вам не потребуется полагаться на средства генерации одноразовых паролей и их проверки, осуществляемые какой-либо третьей стороной.

Что такое OTPW?

OTPW состоит из генератора одноразовых паролей и процедур проверки, интегрированных в PAM. В OTPW, одноразовые пароли генерируются с помощью генератора заранее и передаются пользователю надежным способом (например, в напечатанном на бумаге виде). Затем криптографический хэш сгенерированных паролей сохраняется на сервере SSH. Когда пользователь входит в систему с одноразовым паролем, модуль PAM пакета OTPW проверяет пароль и помечает его с тем, чтобы его нельзя было использовать повторно.

Шаг 1: Установка и конфигурирование пакета OTPW на Linux

Debian, Ubuntu или Linux Mint:

Установите пакеты OTPW с помощью команды apt-get.

$ sudo apt-get install libpam-otpw otpw-bin

Откройте с помощью текстового редактора конфигурационный файл PAM для SSH (/etc/pam.d/sshd) и закомментируйте следующую строку (для того, чтобы отключить аутентификацию по паролю).

#@include common-auth

и добавьте следующие две строки (чтобы включить аутентификацию с помощью одноразовых паролей):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

Fedora или CentOS/RHEL:

В системах, базирующихся на Red Hat, пакет OTPW не доступен в двоичным виде. Поэтому давайте соберем пакет OTPW из исходного кода.

Во-первых, установите пакеты, необходимые для сборки:

$ sudo yum git gcc pam-devel
$ git clone https://www.cl.cam.ac.uk/~mgk25/git/otpw
$ cd otpw 

Откройте в текстовом редакторе файл Makefile и отредактируйте строку, которая начинается с "PAMLIB=" следующим образом.

На 64-разрядной системе:

PAMLIB=/usr/lib64/security

На 32-разрядной системе:

PAMLIB=/usr/lib/security

Откомпилируйте и установите пакет. Обратите внимание на то, что при установке пакета сервер SSH будет автоматически перезапущен. Так что будьте готовы к потере соединения SSH в случае, если вы его используете.

$ make
$ sudo make install 

$ sudo grep sshd /var/log/audit/audit.log | audit2allow -M mypol
$ sudo semodule -i mypol.pp 

Затем с помощью текстового редактора откройте конфигурационный файл PAM для SSH (/etc/pam.d/sshd), и закомментируйте следующую строку (чтобы отключить аутентификацию по паролю).

#auth       substack     password-auth

и добавьте следующие две строки (чтобы включить аутентификацию с помощью одноразовых паролей):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

Шаг 2: Конфигурируем сервер SSH для использование одноразовых паролей

Следующим шагом является настройка сервера SSH так, чтобы он мог принимать одноразовые пароли.

Откройте с помощью текстового редактора файл /etc/ssh/sshd_config и задайте следующие три параметра. Убедитесь в том, что вы добавили следующие строки только один раз, поскольку в противном случае сервер SSH работать не будет.

UsePrivilegeSeparation yes
ChallengeResponseAuthentication yes
UsePAM yes

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

PubkeyAuthentication yes
PasswordAuthentication no

Теперь перезапустите сервер SSH.

Debian, Ubuntu или Linux Mint:

$ sudo service ssh restart

Fedora или CentOS/RHEL 7:

$ sudo systemctl restart sshd

Шаг 3: С помощью OTPW создаем одноразовые пароли

Как уже упоминалось ранее, вам нужно создать одноразовые пароли заранее и сохранить их на сервере SSH. Для этого запустите команду otpw-gen как пользователь, в роли которого вы будет входить в систему.

$ cd ~
$ otpw-gen > temporary_password.txt 

Вам будет предложено установить префикс пароля. При последующем входе в систему вам потребуется ввести этот префикс пароля и одноразовый пароль. По существу префикс пароля является еще одним уровнем защиты. Даже если лист с паролями попадает в чужие руки, префикс пароль вынудит использовать для подбора метод грубой силы (brute-force).

После того, как префикс пароля будет установлен, команда сгенеририрует 280 одноразовых паролей и сохранит их в текстовом файле (например, в temporary_password.txt). Каждому паролю (его длина 8 символов по умолчанию) предшествует трехзначный индекс. Вы должны распечатать файл и носить распечатку с собой.

Вы также увидите созданный файл ~/.otpw, в котором хранятся криптографические хеши этих паролей. Первые три цифры в каждой строке указывают индекс пароля, который будет использоваться для входа в систему через SSH.

$ more ~/.otpw 
OTPW1
280 3 12 8
191ai+:ENwmMqwn
218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

Проверяем одноразовые пароли с помощью SSH

Теперь давайте войдите на сервер SSH обычным образом:

$ ssh user@remote_host 

Если установлен пакет OTPW, то вы увидите несколько иной запрос пароля:

Password 191:

Теперь откройте свой список паролей и найдите в нем индекс "191"

023 kBvp tq/G  079 jKEw /HRM  135 oW/c /UeB  191 fOO+ PeiD  247 vAnZ EgUt

Согласно списку указанному выше, одноразовый пароль для индекса "191" будет является "fOO+PeiD". Вы должны добавить к нему ваш префикс пароля. Например, если ваш префикс пароля "000", то в качестве текущего одноразового пароля необходимо ввести "000fOO+PeiD".

После того как вы успешно вошли, использованный пароль автоматически будет аннулирован. Если вы проверите файл ~/.otpw, вы увидите, что соответствующая строка будет заменена на "---------------", что означает, что пароль "191" был аннулирован.

OTPW1
280 3 12 8
---------------
218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

Заключение

В этой статье я рассказал о том , как с помощью пакета OTPW создать одноразовый пароль входа через SSH. Вы должны понимать, что распечатанный список паролей можно считать менее симпатичным вариантом токена безопасности двухфакторной аутентификации. Тем не менее, это проще, и вы не полагаетесь на какую-либо третью сторону при ее реализации. Какой бы механизм вы не использовали для создания одноразовых паролей, каждый из них может быть полезен в случае, когда вам нужно войти на сервер SSH с общественного компьютера, не обладающего достаточной надежностью. Не стесняйтесь поделиться своим опытом или мнением на эту тему.