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

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 основана на доверии к хостам, а не к пользователям. Основные механизмы:

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

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

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

Утилита rsh

Синтаксис

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

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

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

Если команда не указана, 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:

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

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

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

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

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

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →