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.
Имена обоих хостов должны быть доступны через обратное преобразование 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 появляется код, который подверженный атакам.
[править] Дополнительная информация
- Host-based authentication using OpenSSH (англ.)
- Host-Based Authentication на сайте SSH.COM (англ.)
- How do I get trusted-host (SSH-2 "hostbased", SSH-1 "RhostsRSA") authentication working? в SSH Frequently Asked Questions (англ.)
[править] Материалы по SSH на xgu.ru
- SSH — основная страница
- Host-based аутентификация в OpenSSH — беспарольная аутентификация пользователей одного хоста на другом
- SFTP — протокол и программы для копирования файлов поверх SSH
- Хранение открытых ключей SSH в DNS
- Управление ключами SSH с помощью агента
- ssh-copy-id — программа для инсталляции открытых ключей на другой хост