Глава 28 Доступ к удаленным компьютерам
Глава 28 Доступ к удаленным компьютерам
Мы уже неоднократно упоминали о том, что любая UNIX-подобная операционная система может удаленно администрироваться и конфигурироваться. Говорили мы и о возможности удаленной работы на компьютере под управлением Linux, а также и об администрировании через Web-интерфейс. Настало время познакомиться с полным удаленным администрированием, которое обеспечивает протокол Telnet и одноименные программа-сервер и программа-клиент.
Telnet
Под Telnet понимают трехкомпонентную систему, состоящую из:
• Telnet-клиента;
• Telnet-cepBepa;
• Telnet-протокола.
В общем, ничего оригинального. Клиент-серверная система, использующая свой протокол обмена. Начнем с протокола.
Протокол Telnet
Протокол Telnet описан в стандарте RFC854. Авторы стандарта определяют назначение Telnet следующим образом:
"Назначение Telnet-протокола – дать общее описание, насколько это только возможно, двунаправленного, восьмибитового взаимодействия, главной целью которого является обеспечение стандартного метода взаимодействия терминального устройства и терминал-ориентированного процесса. При этом протокол может быть использован и для организации взаимодействий «терминал-терминал» (связь) и «процесс-процесс» (распределенные вычисления)."
Telnet является протоколом приложения и использует транспортный протокол TCP. Протокол Telnet для обеспечения функциональности основан на следующих базовых концепциях:
• сетевого виртуального терминала (Network Virtual Terminal, NV'T):
• согласования параметров взаимодействия;
• симметрии связи «терминал-процесс». Рассмотрим эти концепции подробнее.
Сетевой виртуальный терминал позволяет абстрагироваться от реалий жизни. Удаленная программа может считать, что она использует один тип терминала, а у клиента может быть совершенно другой тип терминала. Сетевой виртуальный терминал – это стандартное описание наиболее широко используемых возможностей реальных физических терминальных устройств. Сетевой виртуальный терминал позволяет описать и преобразовать в стандартную форму способы отображения и ввода информации. Telnet-клиент и Telnet-cepвep преобразовывают характеристики физических устройств в спецификацию сетевого виртуального терминала, что позволяет унифицировать характеристики физических устройств и обеспечить принцип совместимости устройств с разными возможностями. Характеристики диалога диктуются устройством с меньшими возможностями.
В протоколе Telnet сетевой виртуальный терминал определен как "двунаправленное символьное устройство, состоящее из принтера и клавиатуры". Принтер предназначен для отображения приходящей по сети информации, а клавиатура – для ввода данных, передаваемых по сети. По умолчанию предполагается, что для обмена информацией используется 7-битовый код ASCII, каждый символ которого закодирован в 8-битовое поле.
Согласование параметров взаимодействия позволяет унифицировать возможности представления информации на терминальных устройствах. Благодаря этой концепции можно использовать большинство возможностей современных терминалов. Обычно для этого существует специальная таблица соответствия, которая позволяет нестандартные команды терминала заменить стандартными наборами команд. Как правило, процесс согласования форм представления информации происходит в начальный момент организации Telnet-соединения. Каждый из процессов старается установить максимальные параметры сеанса. В UNIX-системах параметры терминалов содержатся в базе данных описания терминалов termcap. При инициировании Telnet-соединения обычно именно эти параметры используются в процессе согласования формы представления данных. При этом из одной системы в другую передается значение переменной окружения term. В процессе договора останутся только те функции, которые поддерживаются на обоих концах соединения.
Симметрия взаимодействия позволяет клиенту и серверу в течение одной сессии меняться ролями.
Команды Telnet
В табл. 28.1 приведены некоторые команды протокола Telnet с кратким пояснением. Как видно из таблицы, каждая команда представлена одним байтом, и чтобы различать команды и передаваемые данные, используется специальный признак команды.
Таблица 28.1. Команды протокола Telnet
Протокол Telnet предусматривает единый TCP-канал и для данных пользователя, и для управления. Поскольку по протоколу Telnet команды управления чередуются с данными, командам должен предшествовать специальный символ, называемый IAC (Interpret as Command, интерпретировать как команду) с кодом 255. В том случае, если необходимо передать символ данных с десятичным кодом 255, следует его передать дважды.
Команды протокола Telnet имеют размер не менее двух байтов. Первый из них всегда символ перехода в командный режим – IAC. Второй – команда протокола Telnet.
Программа-клиент telnet
Программа telnet – стандартный Telnet-клиент, входящий во все операционные системы UNIX-семейства и в практически все операционные системы Windows.
Для подключения к удаленной системе обычно используется команда вида:
telnet имя_хоста
Основные команды программы telnet приведены в табл. 28.2. Таблица 28.2. Команды программы telnet
Программа-сервер telnetd
Программа telnetd – это сервер, который обслуживает протокол Telnet. Программа telnetd обслуживает ТСР-порт 23, но ее можно сконфигурировать на использование другого порта.
При установке взаимодействия с удаленным клиентом telnetd обменивается командами настройки – включение режима эха, обмен двоичной информацией, тип терминала, скорость обмена, переменные окружения.
Применение Telnet и безопасность
Протокол Telnet долгие годы был единственной универсальной возможностью удаленно работать с различными консольными программами. По своей простоте, нетребовательности к ресурсам и полосе пропускания он до сих пор не имеет себе равных. Помимо этого, клиентская программа telnet позволяет устанавливать соединения и с другими сервисами – например с почтовым сервером SMTP или POP3, что дает возможность производить различные манипуляции (например, просмотреть без почтового клиента содержимое своего почтового ящика или отправить письмо). Однако при всех его достоинствах протокол Telnet имеет один огромный недостаток – весь трафик пересылается в открытом виде. Из-за этого любому злоумышленнику не составляет труда перехватить логин и пароль пользователя, а также другую информацию. В современном мире, где новые вирусы и троянские программы возникают ежедневно, а скандальные взломы различных серверов случаются еженедельно, использование протокола Telnet недопустимо. В качестве альтернативы протоколу Telnet используются программные пакеты SSH или OpenSSH. Но о них чуть позже.
Семейство r-команд
Приблизительно в то же время, что и протокол Telnet, были созданы программы, предназначенные для удаленного администрирования и работы, так называемые r-команды (remote-команды).
Команда rlogin
Команда rlogin (remote login) предназначена для захода удаленным терминалом между UNIX-хостами. Стандарт RFC 1282 содержит спецификацию протокола rlogin. Программа rlogin использует одно TCP-соединение между клиентом и сервером. Для нормального функционирования необходимо создать файл. rhosts, содержащий список хостов и пользователей, которым разрешено удаленно регистрироваться в системе. Каждая строка представляет собой пару «хост—пользователь», разделенную пробелом.
Команда rsh
Команда rsh (remote shell) используется для запуска командной оболочки на удаленном компьютере, после чего на нем возможно выполнять различные программы.
Команда rep
Команда rep (remote сору) используется для копирования файлов между компьютерами, причем эта операция может производиться между двумя удаленными компьютерами. Данная команда может копировать как один файл, так и группу файлов или каталогов.
Команда rsyne
Команда rsync, аналогично команде гер, позволяет копировать файлы между удаленными компьютерами. Однако, в отличие от гер, может значительно ускорить процесс копирования часто изменяемых пользователем файлов, поскольку благодаря используемым алгоритмам передает только измененные части файлов. Также позволяет копировать ссылки (links), специальные устройства (device), владельца и группу файла, права доступа.
Команда rdist
Эта команда позволяет осуществить массовую автоматическую рассылку файлов с локального хоста на большую группу хостов с проверкой наличия места, рассылкой извещений о проблемах, исполнением завершающих процедур и т. п. Сохраняет имя владельца, имя группы, права доступа и время модификации файла.
Применение r-команд и безопасность
Как и в ситуации с Telnet, r-комавды имеют ту же проблему с безопасностью – абсолютно незащищенную передачу информации, поэтому использование r-команд категорически не рекомендуется.
SSH и OpenSSH
Протокол SSH обеспечивает возможность удаленного выполнения команд и копирования файлов с аутентификацией клиента и сервера и шифрованием передаваемых данных, в том числе имени и пароля пользователя. Дополнительно обеспечивается шифрование данных X Windows и перенаправление любых TCP-соединений. Существует несколько программных реализаций, в частности, коммерческий SSH и бесплатный пакет с открытым исходным кодом OpenSSH.
Принцип работы SSH
SSH представляет собой протокол транспортного уровня, аутентификации и соединения и программные средства безопасного доступа к компьютерам по небезопасным каналам связи (telnet, X11, rsh, FTP). Аутентификация производится с использованием асимметричного шифрования с открытым ключом (SSH1 – RSA, SSH2 – RSA/DSA). Обмен данными – симметричное шифрование. Целостность переданных данных проверяется с помощью специальных контрольных сумм. Протокол транспортного уровня работает поверх TCP и использует 22-й порт. В качестве ключа берется случайная строка, которую генерирует клиент, шифрует с помощью открытого ключа сервера и передает серверу. Протокол аутентификации работает поверх протокола транспортного уровня и обеспечивает аутентификацию клиента для сервера. Шифрование трафика начинается после аутентификации сервера, но до аутентификации клиента, таким образом пароли в открытом виде не передаются. Возможно соединение произвольных портов TCP по защищенным каналам. Предусматривается возможность сжатия.
Существует две версии протокола – SSH1 и SSH2. По своей реализации – совершенно разные протоколы. Протокол SSH2 был разработан с учетом найденных в первом варианте уязвимостей.
OpenSSH
Некоммерческая реализация протокола SSH с открытым кодом. Программный пакет способен работать с протоколами SSH1 и SSH2. Имеется также поддержка r-команд.
Для дистрибутива Red Hat установка пакета OpenSSH включена в стандартную инсталляцию и никаких проблем не вызывает.
Конфигурирование OpenSSHКонфигурирование OpenSSH очень сильно зависит от вашей концепции обеспечения безопасности и необходимости поддержки старого типа протокола. Поскольку использование протокола SSH1 из-за найденных уязвимостей не рекомендуется – при конфигурировании необходимо запретить его использование. Также рекомендуется запретить использование r-команд и всего, что с ними связано. При конфигурировании OpenSSH необходимо произвести настройку сервера и клиента. Конфигурационный файл сервера называется sshd_config, а клиента – ssh_config.
Файл sshd_config
Файл sshd_config задает параметры SSH-серверу и может содержать внушительный список различных параметров. Ниже приведены его основные конфигурационные параметры:
• AllowGroups список-имен-групп-через-пробел – вход разрешен только пользователям, чья группа входит в этот список;
• AllowTcpForwarding yes/no – разрешает или запрещает TCP Forwarding:
• AllowUsers список-имен-через-пробел – вход разрешен только перечисленным пользователям;
• AuthorizedKeysFile имя-файла-с-публичным ключом – задает имя файла, содержащее публичный ключ;
• Banner сообщение-перед-аутентификацией – текст сообщения, выводимого сервером перед аутентификацией клиента;
• ciphers – список алгоритмов симметричного шифрования для SSH2: aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, arcfour;
• clientAllveinterval секунд – определяет интервал в секундах, через который сервер будет производить проверку, произошло или нет отключение клиента;
• GiientAllveCountMax число – данный параметр определяет число неудачных проверок существования связи с пользователем до разрыва сессии;
• DenyGroups список-имен-групп-через-пробел – определяет список групп пользователей, которым запрещено устанавливать соединение с сервером;
• DenyUsers список-имен-через-пробел – определяет список пользователей, которым запрещено устанавливать соединение с сервером;
• GatewayPorts no/yes – данный параметр определяет, разрешать или нет удаленным хостам доступ к перенаправленным портам;
• HostbasedAuthentication no/yes – разрешить или запретить аутентификацию, используя имя хоста (только для SSH2);
• HostKey имя-файла-содержащего-приватный-ключ – с помощью данного параметра можно указать серверу, где расположен файл, содержащий секретный ключ шифрования;
• IgnoreRhosts yes/no – этот параметр позволяет определить, использовать или нет файлы. rhosts и. shosts для аутентификации. Для увеличения безопасности системы рекомендуется запретить использование этих файлов;
• IgnoreUserKnownHosts no/yes – параметр позволяет запретить использование файла ~/.ssh/known_hosts во время аутентификации rhosts+RSA;
• KeepAllve yes/по – параметр позволяет использовать механизм регулярных сообщений для проверки разрыва связи;
• KerberosAuthentication yes/no – параметр позволяет запретить использование kerberos при аутентификации;
• KerberosOrLocaiPasswd yes/no – в том случае, если аутентификация через kerberos не прошла, данный параметр позволяет использовать /etc/passwd для аутентификации;
• KeyRegenerationintervai 3600 – параметр задает интервал регенерации ключа сервера;
• ListenAddress о.о.о. о – параметр определяет, к каким адресам прислушиваться; при использовании необходимо также определить параметр Port;
• LoginGraceTime секунд – данный параметр определяет, через сколько секунд произойдет разрыв соединения, если при аутентификации пользователь за это время не введет пароль;
• LogLevel info – параметр определяет, какой уровень использовать при создании сообщений в журнал системы. Можно использовать следующие уровни – quiet, fatal, error, info, verbose, debug;
• MACs алгоритмы-проверки-целостности-данных – этот параметр определяет, какой алгоритм будет использоваться для проверки целостности данных – hmac-md5, hmac-shal, hmac-ripemdl60, hmac-shal-96, hmac-md5-96;
• MaxStartups 10 – данный параметр задает максимально возможное количество соединений, ожидающих аутентификации;
• PasswordAuthentication yes/no – параметр разрешает аутентификацию по паролю;
• PermitEmptyPasswords no/yes – параметр разрешает использование пустых паролей;
• PermitRootLogin yes/no/without-password/forced-commands-only – параметр разрешает пользователю root подключаться к серверу;
• PidFile имя-файла – параметр задает имя файла, в котором будет храниться PID процесса сервера;
• Port 22 – параметр определяет, какой порт слушает сервер;
• PrintMotd yes/no – параметр разрешает использование /etc/motd при входе пользователя в систему для выдачи сообщения;
• Protocol 2 – параметр определяет, с какой версией протокола работает сервер;
• PubkeyAuthentication yes/no – параметр разрешает использовать публичный ключ при аутентификации;
• ReverseMappingCheck no/yes – параметр разрешает после определения адреса по имени хоста производить проверку того, что обратная зона для этого адреса указывает на тот же самый хост;
• RhostsAuthentication no/yes – параметр разрешает аутентификацию только на основании файлов. rhosts или /etc/hosts.equiv;
• RhostsRSAAuthentication no/yes – параметр разрешает аутентификацию на основе .rhosts– и RSA-аутентификации;
• RSAAuthenticat ion yes/по – данный параметр используется только для протокола SSН1;
• ServerKeyBits 7 68 – данный параметр определяет длину ключа;
• StrictModes yes/по – параметр разрешает проверять права доступа к файлам с частными паролями при запуске;
• SysiogFaciiity auth – параметр задает тип сообщений, передаваемых на syslog: DAEMON, USER, AUTH, LOCALO, LOCAL1, L0CAL2, LOCAL3, L0CAL4, L0CAL5, LOCAL6, L0CAL7;
• UseLogin no/yes – параметр разрешает использовать login для интерактивных сессий;
• X11DispiayOffset 10 – параметр определяет первый доступный номер дисплея при передаче XII.
Файлы на сервере, используемые при входе SSH
При входе SSH на сервере используются следующие файлы:
• /etc/nologin – при наличии этого файла запрещается вход пользователей, кроме root. Содержимое файла выдается в качестве сообщения о причине;
• /etc/hosts.allow – при компиляции с libwrap используется для разрешения доступа;
• /etc/hosts.deny – при компиляции с libwrap используется для запрещения доступа;
• ~/.rhosts – файл содержит пары "хост—пользователь", разделенные пробелом. Для указанного пользователя с данного хоста разрешается заходить без ввода пароля при использовании RhostsAuthentication и RhostsRSAAuthentication. Также используется семейством r-команд;
• ~/.shosts – аналогично файлу. rhosts, но не используется семейством r-команд;
• /etc/hosts.equiv – список хостов, пользователи с которых могут заходить, не указывая паролей, под теми же самыми именами. За именем хоста можно указывать имя конкретного пользователя. Также используется семейством r-команд;
• /etc/shosts.equiv – аналогично файлу hosts.equiv, но не используется семейством r-команд;
• ~/.ssh/environment – содержит пары вида имя=значение, которые помещаются в окружение при входе.
Файлы ключей сервера
В качестве ключей сервера используются следующие файлы:
• /usr/local/etc/ssh_host_key – приватный ключ хоста;
• /usr/local/etc/ssh_host_rsa_key – приватный ключ хоста, алгоритм шифрования RSA;
• /usr/local/etc/ssh_host_dsa_key – приватный ключ хоста, алгоритм шифрования DSA;
• /usr/local/etc/ssh_host_key.pub – публичный ключ хоста;
• /usr/local/etc/ssh_host_rsa_key.pub – публичный ключ хоста, алгоритм шифрования RSA;
• /usr/local/etc/ssh_host_dsa_key.pub – публичный ключ хоста, алгоритм шифрования DSA.
Файл ssh_config
Файл предназначен для конфигурации SSH-клиента и разделен на секции директивами Host. Секция применяется при работе с хостом, удовлетворяющим шаблону секции:
• Host шаблоны – следующие опции применимы к хостам, подходящим под один из шаблонов; имя хоста берется из командной строки, в шаблонах используются символы * и ?;
• BatchMode no | yes – параметр разрешает не запрашивать пароль/ парольную фразу;
• CheckHostiP yes | no – позволяет дополнительно проверять адрес сервера в known_hosts;
• Cipher 3des | blowfish – этот и следующий параметры определяют алгоритм шифрования данных;
• Ciphers aesl28-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, arcfour, aes!92-cbc, aes256-cbc;
• ClearAllForwardings no | yes – данный параметр позволяет сбросить все перенаправления портов;
• Compression no | yes – параметр разрешает производить сжатие передаваемых данных;
• CompressionLevel уровень-сжатия – параметр определяет уровень компрессии для протокола SSH1;
• ConnectionAttempts число-попыток-соединения – параметр задает ЧИСЛО попыток установления соединения;
• EscapeChar символ | ^символ|none – параметр позволяет определить символ для использования вместо тильды;
• FaiiBackToRsh no | yes – параметр разрешает использовать rsh в том случае, если сервер не имеет SSH-сервера;
• ForwardAgent no | yes – параметр определяет, передавать ли запрос к агенту аутентификации на удаленный хост;
• GatewayPorts no | yes – параметр разрешает удаленным хостам соединяться на перенаправленные локальные порты;
• GiobaiKnownHostsFile имя-файла – параметр разрешает использовать указанный файл вместо /usr/local/etc/ssh_known_hosts;
• HostKeyAigorithms ssh-rsa,ssh-dss – параметр определяет используемые алгоритмы шифрования (SSH2);
• IdentityFile имя-файла – параметр определяет файл, хранящий RSA– или DSA-приватный ключ;
• KeepAllve yes | no – параметр позволяет заметить разрыв связи или аварийное завершение на удаленном конце;
• KerberosAuthentication yes | по – параметр разрешает использовать kerberos-аугентификацию;
• LogLevel info – параметр определяет, какой уровень использовать при создании сообщений в журнал системы. Можно использовать следующие уровни – quiet, fatal, error, info, verbose, debug;
• MACs hmac-md5, hmac-shal, hmac-ripemdl60, hmac-shal-96, hmac-md5-96 – параметр определяет используемые алгоритмы для создания контрольной суммы;
• NumberOfPasswordPrompts 3 – параметр определяет количество попыток ввода пароля пользователя;
• PasswordAuthentication yes/no – параметр разрешает аутентификацию по паролю;
• Port 22 – параметр определяет, к какому порту будет подключаться клиент;
• PreferredAuthentications publickey, password, keyboard-interactive – параметр определяет приоритеты аутентификации (SSH2);
• Protocol список-версий-протокола – параметр задает список версий протокола в порядке предпочтительности;
• ProxyCommand – использование этого параметра позволяет использовать дополнительную команду для соединения с сервером;
• PubkeyAuthentication yes | no – параметр разрешает использовать при аутентификации публичный ключ (SSH2);
• RhostsAuthentication yes | no – параметр разрешает использовать при аутентификации файл. rhosts (SSH1);
• StrictHostKeyChecking ask | no | yes – параметр разрешает не добавлять незнакомые или изменившиеся хосты в know_hosts;
• UsePriviiegedPort yes | no – параметр разрешает использовать привилегированные порты для установления соединения;
• User имя-пользователя – параметр задает имя пользователя;
• UserKnownHostsFile файл-known_hosts – параметр определяет местоположение файла known_hosts;
• UseRsh no | yes – параметр разрешает использовать rsh в том случае, если SSH на хосте отсутствует.
Файлы ключей клиента
В качестве ключей клиента используются следующие файлы:
• ~/.ssh/identity – приватный RSAl-ключ пользователя;
• ~/.ssh/id_dsa – приватный DSA2-ключ пользователя;
• ~/.ssh/id_rsa – приватный RSA2~ключ пользователя;
• ~/.ssh/identity.pub – публичный RSAl-ключ пользователя;
• ~/.ssh/id_dsa.pub – публичный DSA2-ключ пользователя;
• ~/.ssh/id_rsa.pub – публичный RSA2-ключ пользователя.Данный текст является ознакомительным фрагментом.