Открыть сервисСервис

rsh

rsh (сокращение от англ. remote shell — удалённая оболочка) — это сетевая утилита и протокол прикладного уровня, предназначенные для удалённого выполнения команд на другой Unix-подобной системе без интерактивного входа в систему. rsh является частью пакета программ r-commands (r-команды), разработанного в начале 1980-х годов в Калифорнийском университете в Беркли для операционной системы BSD (Berkeley Software Distribution). Протокол rsh обеспечивает однократную передачу команды на удалённый хост и возврат результата её выполнения, не создавая постоянного сеанса связи. В отличие от более поздних протоколов, таких как SSH, rsh не шифрует передаваемые данные, включая пароли, что делает его крайне уязвимым для перехвата и сниффинга трафика. В современных условиях rsh считается устаревшим и небезопасным, его использование настоятельно не рекомендуется; вместо него применяются защищённые аналоги, в первую очередь SSH.

История

Протокол rsh был создан как часть набора утилит для удалённого администрирования в среде BSD Unix. Разработка велась под руководством Билла Джоя (Bill Joy), одного из сооснователей Sun Microsystems и ключевого разработчика BSD. Первая версия rsh появилась в 1983 году в составе релиза 4.2BSD. Вместе с rsh в пакет входили утилиты rlogin (удалённый вход), rcp (удалённое копирование файлов), rwho (просмотр удалённых пользователей) и другие. Все они использовали единую систему аутентификации на основе файлов /etc/hosts.equiv и ~/.rhosts, которая доверяла хостам по IP-адресу или имени, а не по паролю.

В 1980-е — начале 1990-х годов rsh был стандартным средством удалённого управления в университетских и исследовательских сетях, где вопросы безопасности не стояли остро. С ростом интернета и увеличением числа атак на сетевые сервисы недостатки rsh стали очевидны: отсутствие шифрования, передача паролей в открытом виде, слабая аутентификация (доверие по IP). В 1995 году финский исследователь Тату Илёнен (Tatu Ylönen) разработал протокол SSH (Secure Shell), который полностью заменил rsh в большинстве современных Unix-систем. Начиная с 2000-х годов, дистрибутивы Linux и BSD по умолчанию отключают или не устанавливают rsh. В некоторых системах rsh заменён символической ссылкой на SSH-клиент.

Протокол и принцип работы

Архитектура

Протокол rsh работает по модели «клиент-сервер». Клиентская утилита rsh (или rcmd) запускается на локальной машине и подключается к серверному демону rshd (remote shell daemon), который ожидает соединения на TCP-порту 514. Взаимодействие происходит следующим образом:

  1. Клиент открывает TCP-соединение к порту 514 удалённого хоста.
  2. Клиент отправляет строку аутентификации, содержащую:
  • имя пользователя на локальной машине;
  • имя пользователя на удалённой машине (может отличаться);
  • команду, которую требуется выполнить;
  • (опционально) терминальный тип и размер окна.
  1. Сервер проверяет аутентификацию, используя файлы /etc/hosts.equiv и ~/.rhosts. Если пара «локальный хост — локальный пользователь» доверенная, выполнение команды разрешается без запроса пароля. Если доверия нет, сервер может запросить пароль, но он передаётся в открытом виде.
  2. После успешной аутентификации сервер запускает указанную команду от имени удалённого пользователя и возвращает её стандартный вывод (stdout) и стандартный вывод ошибок (stderr) клиенту.
  3. После завершения команды соединение закрывается.

Аутентификация

Система аутентификации rsh основана на доверии к хостам, а не к пользователям. Основные механизмы:

  • /etc/hosts.equiv — глобальный файл, в котором перечислены доверенные хосты. Если IP-адрес или имя клиента совпадает с записью в этом файле, любой пользователь с этого хоста получает доступ к любому локальному пользователю (кроме root, если не указано иное).
  • ~/.rhosts — файл в домашнем каталоге пользователя. Он содержит список пар «хост — пользователь», которым разрешён доступ к данному аккаунту. Например, запись client.example.com john позволяет пользователю john с хоста client.example.com выполнять команды от имени владельца файла.
  • /etc/hosts.lpd — дополнительный файл для управления доступом к принтерам (в контексте rsh не используется напрямую).

Эти файлы хранятся в открытом виде и могут быть изменены злоумышленником, получившим доступ к системе. Кроме того, IP-адрес легко подделывается (IP-spoofing), что делает аутентификацию rsh крайне ненадёжной.

Отсутствие шифрования

Весь трафик rsh, включая пароли (если они запрашиваются), передаётся в незашифрованном виде. Это позволяет любому, кто имеет доступ к сети (например, через сниффер пакетов), перехватить команды, результаты их выполнения и учётные данные. В современных сетях, особенно в интернете, использование rsh эквивалентно передаче пароля в открытом тексте.

Утилита rsh

Синтаксис

Команда rsh имеет следующий синтаксис (в BSD-стиле):

`` rsh [опции] хост [команда] ``

Основные опции:

  • -l имя_пользователя — указать имя пользователя на удалённой системе (если отличается от локального).
  • -n — перенаправить стандартный ввод из /dev/null (полезно при запуске в фоне).
  • -d — включить отладку (вывод диагностической информации).

Если команда не указана, rsh выполняет rlogin — интерактивный удалённый вход (но это поведение зависит от реализации).

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

  1. Выполнение команды ls -l на удалённом хосте server.example.com от имени пользователя ivan:

`` rsh -l ivan server.example.com ls -l ``

  1. Запуск скрипта на удалённой машине:

`` rsh -l admin backup.example.com /usr/local/bin/backup.sh ``

  1. Перенаправление вывода в локальный файл:

`` rsh node1.example.com uptime > uptime.log ``

Сравнение с SSH

ХарактеристикаrshSSH
ШифрованиеОтсутствуетПолное шифрование трафика
АутентификацияПо IP/имени хоста (файлы .rhosts)По паролю, ключам RSA/ECDSA/Ed25519
Защита от подмены IPНет (IP-spoofing)Есть (криптографическая проверка)
Передача пароляВ открытом видеВ зашифрованном виде
Поддержка портовTCP 514TCP 22 (по умолчанию)
Современная поддержкаОтсутствует (устарел)Активно развивается
Интерактивный сеансТолько через rloginВстроен (терминальный сеанс)
ТуннелированиеНетПоддержка туннелей (порты, X11, агент)

Безопасность и критика

Основные проблемы безопасности rsh:

  • Отсутствие шифрования — перехват трафика позволяет злоумышленнику получить пароли и команды.
  • Слабая аутентификация — доверие по IP-адресу легко обходится через ARP-spoofing, IP-spoofing или компрометацию DNS.
  • Уязвимость к атакам «человек посередине» (MITM) — злоумышленник может перехватить соединение и подменить команду.
  • Отсутствие журналирования — rsh не ведёт детальных логов подключений (в отличие от SSH).
  • Проблемы с root-доступом — по умолчанию rsh запрещает выполнение команд от root, но это ограничение можно обойти через настройки.

Из-за этих недостатков rsh был признан небезопасным и заменён SSH. Многие организации и дистрибутивы Linux (например, Red Hat Enterprise Linux, Debian, Ubuntu) полностью удалили rsh из стандартной поставки или помечают его как устаревший пакет. В некоторых системах rsh может быть установлен только для обратной совместимости с очень старым оборудованием или программным обеспечением.

Применение в современных системах

В настоящее время rsh практически не используется. Исключения составляют:

  • Устаревшие встраиваемые системы — некоторые промышленные контроллеры, маршрутизаторы и сетевое оборудование, выпущенные до 2000 года, могут поддерживать только rsh.
  • Тестирование и отладка — в изолированных лабораторных сетях, где безопасность не критична, rsh может использоваться для быстрой передачи команд без настройки SSH.
  • Совместимость с легаси-кодом — старые скрипты или программы, написанные для BSD-систем, могут вызывать rsh. В таких случаях рекомендуется заменить вызовы на SSH-аналоги.

Во всех остальных случаях категорически не рекомендуется использовать rsh в производственных средах, особенно в сетях с доступом в интернет.

Интересные факты

  • Название «r-команды» (r-commands) происходит от префикса r (remote) в именах утилит: rsh, rlogin, rcp, rwho, rusers, rwall.
  • Протокол rsh описан в RFC 1282 (1991 год), который является информационным и не был принят в качестве стандарта IETF.
  • В некоторых Unix-системах (например, Solaris) утилита rsh может быть заменена на remsh (remote shell) для избежания конфликта с командой restricted shell (ограниченная оболочка).
  • В 1990-е годы rsh часто использовался в кластерных вычислениях для запуска задач на узлах, но с появлением SSH и специализированных менеджеров ресурсов (PBS, SLURM) от него отказались.
  • Существует модифицированная версия rsh, называемая krsh (Kerberized rsh), которая использует протокол Kerberos для аутентификации и шифрования. Она была разработана в Массачусетском технологическом институте (MIT) в рамках проекта Athena, но не получила широкого распространения.

Источники

  • RFC 1282 — BSD Rlogin (содержит описание протокола rsh).
  • W. Richard Stevens, «TCP/IP Illustrated, Volume 1: The Protocols», 1994.
  • Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, John S. Quarterman, «The Design and Implementation of the 4.4BSD Operating System», 1996.
  • Документация BSD: man-страницы rsh(1), rshd(8), hosts.equiv(5), rhosts(5).
  • OpenBSD FAQ: «Why is rsh insecure?» (раздел безопасности).
  • История развития SSH: Tatu Ylönen, «SSH — Secure Login Connections over the Internet», 1995.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru