Использование сервера удаленной регистрации
🕛 08.07.2009, 11:11
Основное назначение сервера удаленной регистрации состоит в том, чтобы предоставить пользователям возможность запускать произвольные текстовые программы на других компьютерах. В зависимости от конфигурации аппаратных средств и специфики выполняемых программ на компьютере под управлением Linux могут одновременно работать до тысячи удаленных пользователей. Компьютер среднего уровня способен реально обслуживать несколько десятков пользователей, при условии, что программы, которые они запускают, не потребляют слишком много ресурсов.ВНИМАНИЕ Серверы удаленной регистрации более критичны с точки зрения безопасно-f сти по сравнению с другими типами серверов. Предположим, например, что злоумышленник сумел получить пароль, позволяющий пользоваться услугами сервера POP. Если считать, что сервер POP не имеет недостатков в системе защиты, неавторизованный пользователь не сможет причинить существенного вреда компьютеру. Если злоумышленнику удастся зарегистрироваться на сервере удаленного доступа, в его распоряжении окажутся тысячи утилит и приложений. В защите многих программ существуют недостатки, воспользовавшись которыми можно получить доступ к ресурсам компьютера с привилегиями системного администратора. Поэтому необходимо внимательно относиться к настройке сервера удаленного доступа и принимать меры к обеспечению секретности паролей. Если на компьютере не предполагается работа удаленных пользователей, на нем следует запретить выполнение всех серверов регистрации.
Настройка rlogind
Сервер rlogind - одна из нескольких программ, поддерживающих так называемые r-команды. Эти команды были реализованы для обеспечения различных типов удаленного доступа к системе UNIX. При запуске клиента rlogin он старается установить соединение с сервером rlogind или in. rlogind. Одно из преимуществ rlogind состоит в том, что настройка данного сервера осуществляется очень просто. Однако используемый протокол чрезвычайно примитивен, поэтому контролировать обращения к системе посредством rlogind очень трудно.
Запуск rlogind
Сервер rlogind обычно запускается посредством суперсервера. Во многих дистрибутивных пакетах в конфигурационном файле /etc/inetd.conf уже присутствует запись для rlogind, но чаще всего она закомментирована. Для того, чтобы сервер выполнялся на компьютере, вам надо убрать символ комментариев из соответствующей строки и перезапустить суперсервер. Если в системе используется xinetd, в ней обычно создается файл для запуска rlogind, который помещается в каталог/etc/xinetd.d. Файл запуска, как правило, настраивается так, чтобы по умолчанию выполнение сервера было запрещено. Поэтому, чтобы обеспечить работу rlogind, надо специально разрешить его запуск. Необходимые для этого действия описаны в главе 4.
На выполнение rlogind влияют перечисленные ниже опции.
- -п. В обычных условияхг1одл.пс1 периодически проверяет наличие клиента, даже если он длительное время не передает данные. Опция -п отменяет такое поведение сервера.
- -а. Данная опция была введена для поддержки расширенной процедуры аутентификации, но во многих системах она не работает.
- -h. В обычных условиях rlogind не использует файл . rhosts суперпользователя. Опция -h указывает на то, что данный файл должен использоваться.
- -1. Данная опция запрещает использование файла . rhosts для аутентификации пользователей. Исключение составляет суперпользователь, взаимодействие с которым определяет опция -h.
- -L. Эта опция запрещает аутентификацию на основе данных, содержащихся в файлах . rhostSиhosts .equiv.
ВНИМАНИЕ Несмотря на то что опции -h, -1 и -L входят в официальный набор опций | rlogind, в новых версиях Linux они обычно не оказывают влияния на работу сервера. Причина в том, что в новых версиях системы используются модули РАМ; в результате действие указанных опций отменяется.
Средства защиты rlogind
Средства защиты всех утилит, реализующих r-команды, в лучшем случае могут считаться устаревшими. А если подходить к этому вопросу с позиции современных требований, следует признать, что защита в них вовсе отсутствует. В частности, работа сервера rlogind основана на принципе доверия, а это значит, что rlogind полагается на результаты процедуры аутентификации, выполненной на клиентской машине. Существуют способы несколько улучшить защиту rlogind, а использование системы Kerberos позволяет реально обезопасить ресурсы сети.
Рассмотрим принцип работы базовых средств защиты rlogind. Когда клиентская программа предпринимает попытки установить соединение с сервером rlogind, система выполняет для аутентификации пользователя следующие действия.
1. Сервер проверяет порт клиента, выступающего инициатором установления соединения. Обычно клиент-программы rlogin используют номер порта в диапазоне 512-1023. Если номер порта клиента лежит за пределами этого диапазона, rlogind отвергает попытки установить соединение. Такая мера предотвращает использование для взаимодействия подложного клиента rlogin, написанного обычным пользователем, поскольку номера портов ниже 1024 может использовать только root. Однако это не мешает злоумышленнику подключить к сети свой компьютер под управлением Linux и зарегистрироваться на нем как root. Кроме того, в некоторых операционных системах порты с номерами ниже 1024 доступны всем пользователям, поэтому описанная здесь мера защиты не очень эффективна.
2. Сервер удаленной регистрации обращается к серверу DNS, чтобы преобразовать IP-адрес клиента в доменное имя.
3. Если имя, полученное в результате DNS-преобразования, принадлежит тому же домену, что и сервер, или если при запуске rlogind была указана опция -а, сервер ищет IP-адрес по доменному имени. Если полученный в результате адрес не отличается от исходного IP-адреса и если опции -L и -1 не были указаны, rlogind обращается к файлам ~/ . rhosts и /etc/hosts . equivи проверяет, объявлен ли данный клиент как пользующийся доверием. Если проверка дала положительный результат и если удаленный пользователь имеет учетную запись на сервере, rlogind осуществляет регистрацию без дальнейшей проверки.
4. Если IP-адрес, полученный в результате DNS-преобразования, и IP-адрес, указанный в запросе, не совпадают, либо если была задана опция -L или -1, либо если клиент не найден в списке клиентов, пользующихся доверием, программа rlogind запрашивает пользовательское имя и пароль. Если пользователь ввел корректный пароль, rlogind предоставляет доступ в систему. Ели пароль не совпадает с паролем, хранящимся в базе данных, пользовательское имя и пароль запрашиваются снова. Если пользователь не смог зарегистрироваться с нескольких попыток, соединение разрывается.
При выполнении описанной выше процедуры регистрации предполагается, что программа rlogind знает имя пользователя, по инициативе которого устанавливается соединение. Эта информация передается с одного компьютера на другой и скрыта от пользователя. При желании, вызывая клиент-программу rlogin, можно задать имя пользователя с помощью опции -1, например rlogin -1 sjones.
Поскольку rlogind использует принцип доверия и пользователи на узлах, пользующихся доверием, могут самостоятельно изменять данные в файле . rhosts, защиту сервера rlogind можно обойти несколькими способами. Это можно сделать, воспользовавшись недостатками в защите клиента, включив в запрос фальшивый IP-адрес компьютера, пользующегося доверием, удалив клиентскую машину из сети и подключив к ней свой компьютер, либо включив в файл . rhosts нужную запись. Некоторые из указанных способов атаки осуществить достаточно сложно. Например, если администратор постоянно следит за состоянием сети, пользователю вряд ли удастся незаметно подключить к ней свой компьютер но само разнообразие способов делает сервер rlogind чрезвычайно уязвимым для злоумышленника. При всех своих недостатках сервер rlogind имеет одно неоспоримое преимущество: регистрация на сервере может осуществляться без указания пользовательского имени и пароля, поэтому соединение с удаленным узлом устанавливается достаточно быстро.
[rodsmithgnessus rodsmith]$ rlogin speaker Last login: Mon Aug 12 14:48:58 2002 from nessus on 4 [rodsmith@speaker rodsmith]$
Еще одна особенность rlogind состоит в том, что при взаимодействии с этим сервером данные передаются по сети в незашифрованном виде, следовательно, их можно легко перехватить. Поэтому средства rlogind целесообразно применять лишь в небольшой внутренней сети, пользователям которой вы полностью доверяете.
Таким образом, если вам необходимо, чтобы соединение с сервером удаленной регистрации устанавливалось быстро и чтобы для установления соединений можно было использовать сценарий, имеет смысл рассмотреть целесообразность применения rlogind.
При этом следует учитывать, что защита данного сервера крайне несовершенна и ее легко обойти. В отличие от rlogind, Telnet практически во всех случаях требует указывать пароль, а средства SSH обеспечивают гораздо более высокую степень защиты.
Управление доступом к rlogind
Если вы обращаетесь к rlogind с узла, не относящегося к списку узлов, пользующихся доверием, вам придется ввести пользовательское имя и пароль. Однако не исключено, что вы захотите регистрироваться на удаленном узле, не задавая имя и пароль. Для этого вам придется определить компьютер, на котором вы работаете, как узел, пользующийся доверием. Это можно сделать двумя способами.
- Создать запись в файле/etc/hostS. equiv. Данный конфигурационный файл содержит установки для всей системы. Если компьютер указан в данном файле, любой пользователь, работающий на нем, может обращаться к службам, поддерживающим r-команды. Для того чтобы такие обращения поддерживались, необходимо, чтобы на сервере существовала учетная запись для текущего пользователя либо выполнялось отображение пользовательских имен. Если же соответствие имен установить не удалось (например, если пользователь julia хочет зарегистрироваться на удаленном сервере с помощью учетной записи fred), придется вводить пароль.
- Создать запись в файле -/.rhosts. Этот файл хранится в рабочем каталоге пользователя и содержит описания клиентов, которые пользуются доверием у этого пользователя. Если имя удаленного пользователя совпадает с именем пользователя, для которого на сервере существует учетная запись, удаленный пользователь получает доступ к ресурсам сервера. Кроме того, можно принять меры для отображения пользователей (средства отображения будут рассмотрены ниже). Если на сервере используется файл . rhosts, за его поддержку отвечает пользователь, для которого создан этот файл.
ВНИМАНИЕ Тот факт, что файл ~/ . rhosts доступен для пользователя, означает, что вы как | системный администратор делегируете вашим пользователям право настраивать средства защиты системы. Это одна из причин, по которым применять сервер rlogind не рекомендуется. Если же по каким-либо причинам вам приходится запускать на компьютере rlogind, используйте TCP Wrappers либо другие средства ограничения доступа.
Оба описанных выше файла управляют использованием всех r-команд на сервере, в частности rlogin, rep и rsh. Если на компьютере поддерживается система печати BSD LPD (системы печати были рассмотрены в главе 9), эти файлы также осуществляют контроль доступа к принтерам.
В обоих файлах содержатся записи, представленные в одинаковом формате, однако некоторые элементы интерпретируют по-разному. Каждая запись занимает одну строку и описывает узел или группу узлов. Формат записи приведен ниже.
[+1-3[имя_узла] [имя_пользователя]
Символ + или -, указанный перед именем узла, разрешает или запрещает доступ для конкретного клиента. По умолчанию предполагается, что доступ разрешен, поэтому в большинстве случаев символ + указывать не обязательно. Символ - запрещает доступ
клиента. Запрещающую запись имеет смысл использовать в том случае, если ей предшествует запись, которая разрешает доступ к серверу для группы клиентов.
ВНИМАНИЕ Используя символ +, будьте внимательны. Если в строке указан только этот сим-| вол (а имя узла отсутствует), доступ разрешается для всех клиентов. Подобная политика защиты является одним из недостатков r-команд. Если вы по ошибке введете пробел между символом + и именем узла, система будет интерпретировать имя узла как имя пользователя и предоставит возможность обращаться к серверу со всех компьютеров.
Для идентификации узла может использоваться IP-адрес (например, 192.168.34.56)или имя (например, gingko.threeroomco.com). В качестве имени может быть указано полное доменное имя, а если и сервер, и клиентская машина принадлежат одному домену, достаточно указать лишь имя самого компьютера, например gingko. Если перед именем задан символ @, это имя определяет домен NIS (для работы с NIS ваша система должна быть специальным образом сконфигурирована).
Если вы включите в состав записи имя пользователя, то указанному пользователю будет предоставлен доступ к системе. Запись в файле .rhosts, содержащая пользовательское имя, означает, что этот пользователь эквивалентен пользователю, в рабочем каталоге которого находится файл . rhosts. Предположим, например, что в файле . rhosts, находящемся в рабочем каталоге пользователя julia, содержится следующая запись:
172.21.13.14 jbrown
В этом случае пользователь jbrown, который работает на узле с адресом 172.21.13.14, может регистрироваться на сервере под именем julia и получить при этом все полномочия данного пользователя. (Другими словами, работая на клиентском компьютере, jbrown может вызывать команду rlogin, указывая опцию -1 julia.)
Записи в файле /etc/hosts . equiv распространяются на всю систему. Если в этом файле указано имя пользователя, это означает, что он имеет право регистрироваться на сервере с помощью любой учетной записи, за исключением root. Если бы запись, рассмотренная ранее в качестве примера, присутствовала в файле /etc/hosts. equiv, это означало бы, что пользователь jbrown, работающий на компьютере с адресом 172.21.13.14, имеет право регистрироваться не только под именем julia, но и под именем любого другого пользователя, кроме root. Таким образом, указывая имя пользователя в файле /etc/hosts . equiv, вы создаете угрозу безопасности системы. Исключением являются случаи, когда пользовательское имя указывается в запрещающих записях, которые начинаются с символа -.
Доступ к rlogind может ограничиваться не только с помощью записей в файлах ~/.rhosts и /etc/hosts .equivи проверки имени пользователя и пароля. Существуют также другие механизмы, предназначенные для ограничения доступа. Поскольку сервер rlogind запускается с помощью inetd или xinetd, вы можете применять для этой цели TCPWrappers. Блокировать доступ можно также с помощью брандмауэра, указав при его настройке TCP-порт 513 (порт, используемый программой rlogind).