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. Взаимодействие происходит следующим образом:
- Клиент открывает TCP-соединение к порту 514 удалённого хоста.
- Клиент отправляет строку аутентификации, содержащую:
- имя пользователя на локальной машине;
- имя пользователя на удалённой машине (может отличаться);
- команду, которую требуется выполнить;
- (опционально) терминальный тип и размер окна.
- Сервер проверяет аутентификацию, используя файлы
/etc/hosts.equivи~/.rhosts. Если пара «локальный хост — локальный пользователь» доверенная, выполнение команды разрешается без запроса пароля. Если доверия нет, сервер может запросить пароль, но он передаётся в открытом виде. - После успешной аутентификации сервер запускает указанную команду от имени удалённого пользователя и возвращает её стандартный вывод (stdout) и стандартный вывод ошибок (stderr) клиенту.
- После завершения команды соединение закрывается.
Аутентификация
Система аутентификации 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 — интерактивный удалённый вход (но это поведение зависит от реализации).
Примеры использования
- Выполнение команды
ls -lна удалённом хостеserver.example.comот имени пользователяivan:
`` rsh -l ivan server.example.com ls -l ``
- Запуск скрипта на удалённой машине:
`` rsh -l admin backup.example.com /usr/local/bin/backup.sh ``
- Перенаправление вывода в локальный файл:
`` rsh node1.example.com uptime > uptime.log ``
Сравнение с SSH
| Характеристика | rsh | SSH |
|---|---|---|
| Шифрование | Отсутствует | Полное шифрование трафика |
| Аутентификация | По IP/имени хоста (файлы .rhosts) | По паролю, ключам RSA/ECDSA/Ed25519 |
| Защита от подмены IP | Нет (IP-spoofing) | Есть (криптографическая проверка) |
| Передача пароля | В открытом виде | В зашифрованном виде |
| Поддержка портов | TCP 514 | TCP 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.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →