Файл .rhosts
файл .rhosts — это конфигурационный файл в операционных системах семейства Unix, используемый для настройки доверительных отношений между хостами (компьютерами) в сети. Он позволяет пользователям удалённо входить на систему без ввода пароля, если запрос поступает с доверенного хоста и от доверенного пользователя. Файл является частью механизма аутентификации r-команд (rlogin, rsh, rcp), которые были широко распространены в ранних версиях Unix, но впоследствии признаны небезопасными и вытеснены SSH.
История и происхождение
Механизм r-команд и файл .rhosts были разработаны в 1980-х годах в рамках операционной системы BSD Unix. Основной целью было упрощение администрирования в локальных сетях, где требовалось частое взаимодействие между несколькими машинами. Вместо ввода пароля при каждом подключении администраторы могли указать список доверенных хостов и пользователей, которым разрешался доступ без аутентификации. Это было удобно для автоматизации задач и работы в кластерных средах, но не учитывало угроз безопасности, связанных с перехватом сетевого трафика или компрометацией одного из доверенных узлов.
В 1990-х годах, с ростом интернета и распространением атак на протоколы r-команд (например, подмена IP-адреса), использование .rhosts стало считаться опасным. Начиная с версии OpenSSH 3.0 (2001 год), появилась поддержка более безопасного аналога — файла ~/.shosts, который работает аналогично, но только с SSH. Во многих современных дистрибутивах Linux и BSD поддержка r-команд по умолчанию отключена или полностью удалена.
Расположение и синтаксис
Файл .rhosts является скрытым (имя начинается с точки) и располагается в домашнем каталоге пользователя (~/.rhosts). Системный эквивалент для всех пользователей — файл /etc/hosts.equiv, который задаёт доверительные отношения на уровне всей системы. Синтаксис обеих файлов одинаков: каждая строка содержит два поля, разделённых пробелом или табуляцией:
- Имя хоста (hostname) — полное доменное имя (FQDN) или IP-адрес доверенной машины. Допускается использование символа
+для обозначения «любой хост». - Имя пользователя (username) — учётная запись на удалённом хосте, которой разрешён доступ. Если поле опущено, то разрешается доступ только от пользователя с тем же именем, что и на локальной машине. Символ
+означает «любой пользователь».
Пример содержимого файла .rhosts: `` server.example.com admin 192.168.1.100 + + user ` Первая строка разрешает доступ пользователю admin с хоста server.example.com. Вторая — любому пользователю с IP-адреса 192.168.1.100. Третья — пользователю user` с любого хоста.
Механизм работы
При попытке удалённого входа с помощью rlogin или rsh на сервере выполняются следующие шаги:
- Сервер получает запрос, содержащий имя удалённого пользователя и IP-адрес клиента.
- Проверяется, включена ли аутентификация через .rhosts (обычно задаётся в файле
/etc/pam.d/rloginили аналогичных конфигурациях). - Если включена, сервер читает файл
/etc/hosts.equivи, при отсутствии совпадения, файл~/.rhostsцелевого пользователя. - Для каждой строки файла сервер проверяет, совпадает ли имя хоста клиента (через обратное DNS-разрешение) и имя удалённого пользователя с указанными в строке.
- При совпадении доступ предоставляется без запроса пароля. Если совпадений нет, сервер запрашивает пароль или отклоняет соединение.
Важно, что проверка IP-адреса основана на обратном DNS-запросе, что делает систему уязвимой для атак с подменой DNS или IP-адреса (IP spoofing).
Уязвимости и критика
Основные недостатки использования файла .rhosts связаны с отсутствием шифрования и аутентификации на уровне сети:
- Перехват трафика — все данные, включая пароли (если они вводятся вручную) и содержимое сессии, передаются в открытом виде.
- Подмена IP-адреса — злоумышленник, подделавший IP-адрес доверенного хоста, может получить доступ без пароля.
- Компрометация одного хоста — если злоумышленник получает root-доступ на одном из доверенных узлов, он может подставить его IP и войти на все машины, где этот хост указан в .rhosts.
- Неверная конфигурация — использование символа
+для хоста или пользователя делает систему открытой для всех, что часто приводило к случайным утечкам.
Из-за этих рисков большинство организаций и операционных систем по умолчанию отключают поддержку r-команд и .rhosts. В современных системах (например, RHEL 8+, Ubuntu 20.04+) пакеты rsh-client и rsh-server либо отсутствуют, либо требуют явного включения через PAM-модули.
Современные альтернативы
Для безопасной аутентификации без пароля в современных Unix-системах используются:
- SSH-ключи — пара из открытого и закрытого ключей, хранящаяся в файлах
~/.ssh/id_rsa.pubи~/.ssh/authorized_keys. Аутентификация происходит по криптографическому протоколу, исключающему перехват. - Файл .shosts — аналог .rhosts для SSH, работающий через файл
~/.shostsили/etc/ssh/shosts.equiv. Поддерживается в OpenSSH, но требует явной настройки и также не рекомендуется из-за рисков, связанных с доверием к хостам. - Kerberos — протокол аутентификации, использующий билеты и центр распределения ключей (KDC), обеспечивающий взаимную проверку подлинности.
В подавляющем большинстве современных систем файл .rhosts считается устаревшим и не используется в продуктивной среде.
Интересные факты
- В некоторых старых версиях Unix (например, SunOS 4.x) файл .rhosts мог быть прочитан любым пользователем, что позволяло злоумышленнику узнать, какие хосты и пользователи считаются доверенными.
- Символ
+в поле хоста или пользователя интерпретируется как «любой», но в некоторых реализациях (например, в IBM AIX) он может означать «любой, кроме localhost», что создавало путаницу. - В 1998 году был выпущен патч для OpenSSH, добавляющий поддержку .rhosts через механизм RhostsRSAAuthentication, который сочетал проверку .rhosts с RSA-аутентификацией, но эта функция также была признана небезопасной и удалена в более поздних версиях.
Источники
- Stevens, W. Richard. «UNIX Network Programming, Volume 1: Networking APIs — Sockets and XTI». Prentice Hall, 1998.
- Garfinkel, Simson; Spafford, Gene. «Practical UNIX and Internet Security». O'Reilly Media, 2003.
- Документация OpenSSH:
man sshd_config, раздел «HostbasedAuthentication». - RFC 1282 — «BSD Rlogin» (1991).
- Руководство по безопасности Red Hat Enterprise Linux 8: раздел «Securing r-commands».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →