Host-based аутентификация в OpenSSH

Материал из Xgu.ru

Перейти к: навигация, поиск
Автор: Игорь Чубин

Правильная ссылка: [1]

Благодаря host-based аутентификации, можно сделать так чтобы пользователи одного хоста заходили на другой хост без пароля, на котором включена данная функция. Такой вид аутентификации может быть полезен в средах с одним доверенным хостом (trusted) и несколькими хостами, к которым осуществляется доступ с него (untrusted). В этом случае на хосты, к которым осуществляется доступ, пароли не передаются. Этот способ аутентификации имеет те же преимущества, что и аутентификация через rhosts, но при этом является намного более безопасным.


Содержание

[править] Требования

Рекомендуется чтобы как на клиенте, так и на сервер использовался как минимум OpenSSH 3.4p1.

[править] Сценарий

Есть два хоста: trusted.example.com и untrusted.example.com. Нужно организовать host-based аутентификацию, т.е. сделать так чтобы пользователи trusted.example.com могли заходить на untrusted.example.com без пароля.

Предполагается, что все конфигурационные файлы ssh находятся в /etc/ssh.

[править] Настройка клиента

На клиенте trusted.example.com нужно сделать следующие изменения:

1. Нужно сделать бинарник ssh, расположенный в /usr/bin/ssh или /usr/local/bin/ssh, set-uid'ным:

%# chown root /usr/bin/ssh
%# chmod u+s /usr/bin/ssh
%# ls -l /usr/bin/ssh
-rwsr-xr-x    1 root     root       230216 Jul 31 08:49 /usr/bin/ssh

2. Необходимы ключи хоста (host keys) для SSH версии 2. Файлы называются /etc/ssh/ssh_host_dsa_key и /etc/ssh/ssh_host_rsa_key (и соответствующие открытые ключи с суффиксом .pub в названии). Эти файлы можно создать с помощью программы ssh-keygen.

Если на этом хосте работает демон SSH, sshd, то файлы уже созданы.

3. Host-based аутентификация должна быть включена на клиенте. Добавьте следующие строки в /etc/ssh/ssh_config:

Host *
    HostbasedAuthentication yes

[править] Настройка сервера

На хосте untrusted.example.com необходимы такие изменения:

1. Во-первых, host-based аутентификация должна быть включена на сервере. Для этого нужно изменить файл /etc/ssh/sshd_config и добавить в него следующие строки (фактически, раскомментировать существующие и поменять параметр):

HostbasedAuthentication yes
UseDNS yes

2. Открытый ключ хоста trusted.example.com должен быть добавлен в файл /etc/ssh/ssh_known_hosts на хосте untrusted.example.com. В отличие от файла authorized_keys, этот файл хранится в другом формате, формате файла known_hosts, и в нём перед каждой строкой должен ставиться адрес хоста.

Например, если открытый ключ RSA на trusted.example.com выглядит так:

ssh-rsa AA много-всяких-символов MM= root@trusted.example.com

нужно добавить следующую строку в /etc/ssh/ssh_known_hosts на машине untrusted.example.com (строка получена на основе предыдущей путём добавления спереди имени хоста и его IP-адреса):

trusted.example.com,192.0.2.1 ssh-rsa AA много-всяких-символов MM= root@trusted.example.com

Похожая строка должна быть добавлена для ключа DSA.

3. Теперь untrusted.example.com может аутентифицировать запросы от trusted.example.com. Но необходимо указать чтобы на untrusted.example.com запросы на доступ с trusted.example.com не только аутентифицировались, но и авторизовались (т.е. чтобы доступ предоставлялся).

Для этого необходимо создать файл /etc/ssh/shosts.equiv и добавить в него строку:

+trusted.example.com

или

trusted.example.com

Обе строки эквивалентны.

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

После сделанных изменений должна работать host-based аутентификация с trusted.example.com.


Icon-caution.gif

Имена обоих хостов должны быть доступны через обратное преобразование DNS или через файл /etc/hosts на обоих хостах и должен быть вклдючен UseDNS в /etc/ssh/sshd_config

[править] Вопросы безопасности

  • Если trusted.example.com скомпрометирован (поломан), автоматически компрометируется untrusted.example.com. Следовательно, никогда не надо включать host-based аутентификацию, если у вас нет высокого уровня доверия к машине trusted.example.com, а также если компрометация untrusted.example.com не является меньшим злом в сравнении с компрометацией trusted.example.com.
  • Теперь SSH-клиент на trusted.example.com имеет бит set-uid.
  • Дополнительный способ аутентификации включён на клиенте на хосте trusted.example.com. Это даёт дополнительные возможности для атак (код клиента OpenSSH; атаки со стороны SSH-серверов).
  • Аналогично, на сервере untrusted.example.com появляется код, который подверженный атакам.

[править] Дополнительная информация

[править] Материалы по SSH на xgu.ru