Аппаратные средства и архитектура



Скачать 10.18 Mb.
Pdf просмотр
страница41/68
Дата22.11.2016
Размер10.18 Mb.
Просмотров7305
Скачиваний0
1   ...   37   38   39   40   41   42   43   44   ...   68
Тема
экзамена
LPI 301
Руководство
developerWorks
Краткое описание руководства
Тема 301
Подготовка к экзамену
LPI 301:
понятия, архитектура и модель
Узнайте о понятиях и архитектуре LDAP, о том, как проектировать и внедрять каталог
LDAP, а также о схемах.
Тема 302
Подготовка к экзамену
LPI 301:
установка и разработка
Узнайте, как устанавливать, настраивать и использовать программное обеспечение
OpenLDAP.

Тема 303
Подготовка к экзамену
LPI 301:
конфигурирование
Узнайте более подробно о том, как настраивать программное обеспечение
OpenLDAP.
Тема 304
Подготовка к экзамену
LPI 301:
использование
(Это руководство) Узнайте, как выполнять поиск по дереву каталога LDAP и использовать утилиты OpenLDAP. См. подробные цели
Тема305
Подготовка к экзамену
LPI 301:
интеграция и миграция
Появится в ближайшее время.
Тема 306
Подготовка к экзамену
LPI 301:
планирование пропускной способности
Появится в ближайшее время.
Чтобы сдать экзамен 301 (и получить сертификацию третьего уровня), вам следует:

обладать несколькими годами опыта установки и поддержки Linux на большом числе компьютеров, используемых в различных целях

обладать опытом интеграции с различными технологиями и операционными системами

обладать профессиональным опытом или пройти профессиональную подготовку специалиста Linux корпоративного уровня (включая опыт, полученный при работе в другой роли)

знать администрирование Linux на углубленном и высоком уровне, включая установку, управление, обеспечение безопасности, решение возникающих проблем и техническое обслуживание

уметь использовать инструменты с открытым исходным кодом для проведения измерений, необходимых для планирования пропускной способности и решения проблем с ресурсами

иметь профессиональный опыт применения LDAP для интеграции с сервисами
UNIX® и Microsoft® Windows®, в том числе Samba, Pluggable Authentication Modules
(PAM), электронной почтой и Active Directory

уметь планировать, проектировать, разрабатывать, строить и реализовывать полную среду с использованием Samba и LDAP, а также проводить измерения для планирования производительности и оценки безопасности служб

уметь создавать сценарии на Bash или Perl или знать как минимум один язык системного программирования (например, C).
Для дальнейшей подготовки к сертификации уровня 3 ознакомьтесь с серией руководств для подготовки к экзамену 301 Института LPI
, а также со всей серией руководств developerWorks для подготовки к экзаменам LPI
(EN).
Институт Linux Professional Institute не дает рекомендаций по каким-либо конкретным материалам и методикам для подготовки к экзаменам, разработанным сторонними лицами.
Об этом руководстве
Добро пожаловать в четвертое из шести руководств
, призванных помочь вам подготовиться к сдаче экзамена LPI 301, - "Использование". Из этого руководства вы узнаете о том, как выполнять поиск по дереву каталога LDAP, использовать утилиты командной строки для поиска и администрирования, а также о том, как настраивать сторонние приложения на
использование вашего дерева LDAP в качестве службы "белых страниц" (Whitepages).
Это руководство организовано в соответствии с целями LPI по этой теме. Условно говоря, чем выше вес цели, тем больше вопросов по этой теме будет на экзамене.
Цели
В таблице 2 подробно перечислены цели этого руководства.
Таблица 2. Использование: цели экзамена, описанные в этом руководстве
Цель экзамена LPI
Вес
цели
Краткое описание цели
304.1
Поиск по каталогу
2
Используйте расширенные возможности поиска по каталогу LDAP
304.2
Утилиты командной строки LDAP
4
Используйте различные утилиты командной строки для поиска, модификации и администрирования сервера
LDAP
304.3
Служба "белых страниц"
1
Используйте ваш сервер LDAP в качестве службы "белых страниц" для таких приложений, как Microsoft
Outlook®
Необходимые условия
Чтобы извлечь максимум пользы из этого руководства, вы должны обладать глубокими знаниями Linux и иметь работающую Linux-систему, на которой вы сможете практиковаться в выполнении рассматриваемых задач.
Если ваши базовые знания Linux немного устарели, вы можете сначала ознакомиться с руководствами для экзаменов LPIC-1 и LPIC-2
Различные версии программ могут выводить данные в различных форматах, поэтому результаты, полученные вами, могут отличаться от листингов и рисунков, приведенных в этом руководстве.
Требования к системе
Чтобы выполнить примеры, приведенные в этом руководстве, вам потребуется рабочая станция под управлением Linux с пакетом OpenLDAP и поддержкой PAM. Большинство современных дистрибутивов удовлетворяют этим требованиям.
Подготовка к экзамену LPI 301: Тема 304.
Использование
Senior Level Linux Professional (LPIC-3)
Шон Уолберг
, старший сетевой инженер, P.Eng
Описание: В этом руководстве Шон Уолберг поможет вам подготовиться к экзамену института Linux Professional Institute на квалификацию профессионала Linux высокого уровня (LPIC-3). В этом руководстве, четвертом из серии из шести руководств
, Шон расскажет о том, как следует выполнять поиск по дереву каталога LDAP и использовать утилиты командной строки. Также вы узнаете о том, как необходимо настраивать Microsoft
Outlook для выполнения запросов к вашему серверу LDAP.

Поиск по каталогу
В этом разделе описывается материал по теме 304.1 экзамена на профессионала Linux высокого уровня (LPIC-3) 301. Эта тема обладает весом 2.
Из этого раздела вы узнаете, как:

Использовать инструменты поиска OpenLDAP на базовом уровне

Использовать расширенные инструменты поиска OpenLDAP

Оптимизировать поисковые запросы LDAP

Использовать фильтры поиска и их синтаксис
Данные дерева каталога полезны только тогда, когда вы можете выполнять поиск нужных вам записей. LDAP содержит ряд мощных инструментов, позволяющих вам извлекать информацию из каталога.
Основы поиска
Для выполнения поиска по дереву каталога вам необходима следующая информация:
1. Учетные данные на сервере, содержащем каталог
2. Отличительное имя (Distinguished Name, DN) в дереве каталога, на основе которого вы будете выполнять поиск
3. Область поиска
4. Фильтр поиска
Из предыдущих руководств этой серии вы уже знаете об учетных данных для сервера. Вы можете выполнять анонимную привязку к каталогу, не используя учетные данные, либо использовать в качестве учетных данных отличительное имя и пароль для определенной записи. Если сервер сможет опознать учетные данные и признает их действительными, он позволит вам выполнять поиск.
Отличительное имя (DN), на основе которого вы выполняете поиск, называется
отличительным именем базового объекта (Base DN). Результатом поиска будет являться либо само отличительное имя базового объекта, либо его дочерние элементы. Если DN базового объекта – это ou=people,dc=ertw,dc=com, то результатом поиска может быть cn=Sean Walberg,ou=people,dc=ertw,dc=com, но не cn=Users,ou=Groups,dc=ertw,dc=com, поскольку последний элемент выходит за рамки DN базового объекта, по которому вы выполняете поиск.
Область поиска указывает, по каким элементам отличительного имени базового объекта будет выполняться поиск. Например, вы можете ограничить область поиска из соображений производительности или потому, что нужную вам информацию содержат только определенные дочерние элементы базового объекта. Область поиска по умолчанию, или
subordinate (обычно указывается сокращенно как sub), включает в себя имя базового объекта и все его дочерние объекты. Вы можете выполнять поиск только имени базового объекта в области base и всех его дочерних объектов. Вы можете выполнять поиск только имени базового объекта в области base, например, в тех случаях, когда вы хотите проверить существование элемента. Область поиска one указывает, что поиск выполняется только в пределах списка дочерних объектов первого уровня, и исключает из поиска все дочерние объекты последующих уровней, а также сам базовый объект. На рисунке 1 изображено дерево и его элементы, которые будут включены в три различные области поиска.

Рисунок 1. Три различные области поиска
Самым мощным (и сложным) инструментом поиска является фильтр поиска. Учетные данные, отличительное имя базового объекта и область поиска ограничивают набор записей, по которому будет выполняться поиск, а фильтр поиска является запросом, проверяющим каждую запись и возвращающим только те из них, которые удовлетворяют заданным критериям.
Простые фильтры поиска
Фильтры поиска заключаются в круглые скобки, внутри которых содержится одна пара атрибут=значение. Простым фильтром поиска является
(objectClass=inetOrgPerson), выполняющий поиск любых записей класса inetOrgPerson. Сам атрибут не является чувствительным к регистру, а значение может быть чувствительным или нечувствительным к регистру в зависимости от того, как атрибут определен в схеме. Вспомните материал руководства
Подготовка к экзамену LPI 301: понятия, архитектура и модель
, в котором говорилось о том, что схема определяет атрибуты и их свойства. Одним из свойств атрибута является чувствительность к регистру при сравнении.
Поиск подстроки выполняется с использованием символа звездочки (*). Чтобы найти все записи, начинающиеся с
Sean, выполните поиск подстроки (Sean*). Символ звездочки может располагаться в любом месте строки; например, результатом поиска подстроки
(*
Walberg) будут являться все записи, оканчивающиеся на Walberg, а результатом поиска
S*Wa*berg – все записи, начинающиеся на S, оканчивающиеся на berg и содержащие символы
Wa где-либо в середине. Вы можете использовать этот фильтр, например, для поиска имени автора, которое вы не можете назвать точно (Sean или Shawn, Walberg или Wahlberg).
Самая общая форма использования оператора звездочки, атрибут=*, проверяет существование указанного атрибута. Например, чтобы найти все записи, содержащие адреса электронной почты, вы можете использовать фильтр
(mail=*).
Операции AND, OR и NOT
Вы можете выполнять логические операции AND ("И") и OR ("ИЛИ") с помощью операторов "&" и "|" соответственно. В строках поиска LDAP операторы помещаются перед условиями, таким образом, вы можете встретить фильтры, подобные следующим.
Листинг 1. Пример фильтров поиска с использованием AND и OR
(|(objectClass=inetOrgPerson)(objectClass=posixAccount))
(&(objectClass=*)(cn=Sean*)(ou=Engineering))
(&(|(objectClass=inetOrgPerson)
(objectClass=posixAccount))(cn=Sean*))
Первая строка поиска в листинге 1 выполняет поиск любых записей класса inetOrgPerson или posixAccount. Обратите внимание на то, что каждое условие
поиска заключено в круглые скобки, и что оператор OR (|) вместе с этими двумя условиями также заключен в еще одну пару скобок.
Вторая строка поиска похожа на первую, но начинается с оператора AND, а не OR. Здесь должны выполняться три различных условия, которые следуют за символом амперсанда, и каждое из которых заключено в отдельную пару скобок. Первому условию, objectClass=*, удовлетворяют все записи, класс объекта (objectClass) которых определен
(при этом сам класс может быть любым). Поиск записей любого класса часто используется в тех случаях, когда вы хотите выбрать все записи, но при этом должны использовать фильтр поиска. Второму условию удовлетворяют все записи, начинающиеся с
Sean.
В третьей строке поиска совместно используются операторы AND и OR. Эта строка ищет любые записи класса inetOrgPerson или posixAccount, обычное имя (CN) которых начинается с
Sean.
Для логической операции NOT ("НЕ") используется знак восклицания (!), подобно операциям AND и OR. Логическая операция NOT имеет только один аргумент, поэтому за знаком восклицания может следовать только один набор скобок. В листинге 2 показаны примеры правильного и неправильного использования логической операции NOT.
Листинг 2. Как нужно и как не нужно использовать логическую операцию NOT
(!cn=Sean) # неправильно, ! применяется к условию внутри ()
(!(cn=Sean)) # правильно
(!(cn=Sean)(ou=Engineering)) # неправильно, операция может быть выполнена только для одного условия
(!((&cn=Sean*)(ou=Engineering))) # правильно, операция NOT выполняется для условия AND
В четвертом примере листинга 2 операция NOT применяется к условию AND. Таким образом, это правило возвращает только те записи, которые не удовлетворяют обоим условиям в структуре AND. Будьте аккуратны, когда вы выполняете инверсию для составных условий, поскольку результаты не всегда очевидны. В последнем примере листинга 2 будут возвращены записи с атрибутом ou, равным Engineering, если их обычное имя не начинается с
Sean. Чтобы запись была исключена из результатов поиска, должны выполняться оба условия.
Диапазоны поиска
Часто возникает необходимость выполнить поиск диапазона значений. Для поиска атрибутов в LDAP существуют операторы <= и >=. Обратите внимание на то, что знак равенства (=) входит в состав операторов, поскольку операторов < и > не существует – вы должны также проверять условие равенства.
Не все целочисленные атрибуты можно проверить с помощью операторов диапазонов. Если вы сомневаетесь, проверьте схему, чтобы убедиться в том, что для атрибута реализован тип сортировки через ключевое слово
ORDERING. Вспомните материал руководства
Подготовка к экзамену LPI 301: понятия, архитектура и модель
, в котором говорилось о том, что атрибут определяется в схеме, и что частью этого определения является способ сортировки атрибута сервером.
Поиск созвучий
Каталог LDAP часто используется для хранения имен, которые могут произноситься одинаково, несмотря на различное написание. Можно, например, спутать имена "Sean",
"Shawn" и "Shaun". В LDAP существует оператор "
=", возвращающий результаты, которые произносятся так же, как и строка поиска. Например,
(cn
=Shaun) возвращает результаты,
обычное имя (CN) которых содержит слово, произносящееся так же, как "Shaun". Так, результатом поиска по подстроке
(cn=
Shaun) будет являться элемент cn=Shawn
Walberg.В то же время реализация OpenLDAP не совершенна; этот же запрос не возвратит результатов для подстроки с именем "Sean".
Поиск отличительного имени
До сих пор все рассмотренные примеры были нацелены на поиск атрибутов, но не на поиск отличительного имени (DN), которое идентифицирует запись. Хотя крайний левый компонент отличительного имени, относительное отличительное имя (Relative DN, RDN), появляется в качестве атрибута и, следовательно, может быть объектом поиска, фильтры поиска, рассмотренные до сих пор, не выполняют поиск в оставшейся части отличительного имени.
Поиск отличительного имени выполняется при помощи специального фильтра запроса, требующего точного совпадения и имеющего следующий формат: атрибут:dn:=значение, где атрибут – это компонент отличительного имени, которое вы хотите найти, а значение – строка поиска (использование подстановочных символов не разрешено). Например, запрос
(ou:dn:=People) возвратит все записи, содержащие подстроку ou=People в отличительном имени, включая сам контейнерный объект.
Изменение правила matchingRule
По умолчанию большинство строк, таких как обычное имя, нечувствительно к регистру. Если вы хотите изменить это правило, вы можете использовать форму, подобную форме поиска отличительного имени. Например, запросу
(ou:caseexactmatch:=people) будут соответствовать все организационные подразделения (OU), содержащие строку "people", но не "People". Ниже перечислены некоторые наиболее часто используемые правила сравнения:

caseIgnoreMatch выполняет сравнение строк, игнорируя регистр символов. Также игнорируются начальные и завершающие символы пробела.

caseExactMatch выполняет сравнение строк с учетом регистра символов, который должен в точности совпадать в исходной и искомой строках.

octetStringMatch похож на поиск строки, но знаки пробела не удаляются, то есть выполняется точное побайтовое сравнение.

telephoneNumberMatch выполняет поиск телефонного номера, который имеет свой собственный тип данных в LDAP.
Также вы можете изменить правило сравнения для поиска DN, комбинируя поиск DN с поиском на основе правил сравнения. Например,
(ou:dn:caseexactmatch:=people) выполняет поиск имени DN, содержащего точную строку "people".
Поиск отличительного имени и поиск на основе правил сравнения также называются
расширенным поиском. В обоих случаях необходимо указывать точные значения строк без использования подстановочных символов.
Использование
ldapsearch
Утилита командной строки ldapsearch предназначена для поиска по дереву каталога. Она позволяет выполнять привязку к каталогу различными способами, выполнять один или несколько поисков и получать данные в LDIF-формате.
По умолчанию ldapsearch работает следующим образом:

Пытается выполнить аутентификацию на сервере с использованием SASL (Simple
Authentication and Security Layer)

Подключается к серверу по адресу ldap://localhost:389

Использует в качестве фильтра поиска конструкцию
(objectClass=*)


Считывает базу поиска из файла /etc/openldap/ldap.conf

Выполняет поиск по базе поиска и всем ее дочерним областям

Возвращает все пользовательские атрибуты, игнорируя рабочие (для внутреннего использования) атрибуты

Использует для вывода результатов расширенный LDIF-формат (LDAP Data
Interchange Format)

Выводит результаты поиска без сортировки
Аутентификация на сервере
Если вы не используете SASL, вам необходимо выполнить простую аутентификацию, используя параметр
-x. Параметр -x выполняет анонимную привязку, при которой не используется отличительное имя или пароль. При остальных параметрах по умолчанию ldapsearch -x выведет полное дерево каталога, начиная с базы поиска, указанной в файле /etc/openldap/ldap.conf. В листинге 3 показан пример использования простого анонимного поиска.
Листинг 3. Простой анонимный поиск
$ ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# people, ertw.com dn: ou=people,dc=ertw,dc=com ou: people description: All people in organization objectClass: organizationalUnit
... дальнейшее содержимое не показано ...
В листинге показаны заголовок и первая запись, возвращенная в результате выполнения простого анонимного поиска. Первые семь строк формируют заголовок и в соответствии с принятыми в LDIF правилами закомментированы путем добавления в начало строки символа решетки (#). Первые три строки определяют весь последующий текст в качестве данных в расширенном LDIF-формате, возвращенных с использованием LDAP версии 3. Следующая строка показывает, что отличительное имя базового объекта не было указано, и что используется поиск в подразделах дерева (subtree search). Последние две текстовые строки задают фильтр поиска, запрашивающий любые данные, а также указывают на то, что были запрошены все атрибуты.
Если вы хотите выводить результаты, не содержащие комментариев, вы можете использовать параметр
-LLL.
После заголовка перечисляются все записи. Каждая запись начинается с заголовка, описывающего ее, а затем идет список всех атрибутов, начиная с DN. Атрибуты не сортируются
Если для подключения вам необходимо указать имя пользователя и пароль, используйте для этого параметры
-D и -w соответственно. Например, команда ldapsearch -x D cn=root,dc=ertw,dc=com -w мой_пароль выполнит простую аутентификацию с
использованием отличительного имени пароля пользователя root. Если вы хотите, чтобы при вводе пароль не отображался на экране, используйте для этого параметр
-W вместо -w пароль.
Вы также можете подключиться к другому серверу, передав унифицированный идентификатор ресурса (Uniform Resource Identifier, URI) удаленного сервера LDAP с помощью параметра
-H, например, ldapsearch -x -H ldap://192.168.1.1/ - чтобы подключиться к LDAP-серверу по адресу
192.168.1.1.
Выполнение запросов
Для выполнения запроса укажите в командной строке фильтр поиска. Вероятнее всего, вам придется заключить фильтр в кавычки, чтобы специальные символы в строке поиска не были восприняты системой как управляющие символы командной оболочки. В листинге 4 приведен пример простого поиска обычного имени.
Листинг 4. Простой поиск из командной строки
$ ldapsearch -LLL -x '(cn=Fred Smith)'
dn: cn=Fred Smith,ou=people,dc=ertw,dc=com objectClass: inetOrgPerson sn: Smith cn: Fred Smith mail: fred@example.com
Поиск в листинге 4 был выполнен с параметром
-LLL для пропуска комментариев и параметром
-x для использования простой аутентификации. Последний параметр – это строка поиска, которая ищет запись пользователя Fred Smith. Обратите внимание, что запрос заключен в круглые скобки, а также в одиночные кавычки. Эти кавычки необходимы, чтобы скобки не были восприняты системой как обращение к подоболочке, а подстрока "Smith" не была интерпретирована как отдельный аргумент (поскольку строка запроса содержит знак пробела).
В листинге 4 были возвращены все атрибуты записи Fred Smith. Если же вам нужны всего один или два атрибута, то поиск значений всех атрибутов записи будет пустой тратой ресурсов как клиента, так и сервера. Чтобы выполнить поиск только нужных вам атрибутов, добавьте их имена в конец командной строки ldapsearch. В листинге 5 показано, как будет выглядеть предыдущий запрос в случае, если вы просто хотите узнать адрес электронной почты пользователя Fred Smith.
Листинг 5. Запрос адреса электронной почты пользователя Fred Smith
$ ldapsearch -LLL -x '(cn=Fred Smith)' mail dn: cn=Fred Smith,ou=people,dc=ertw,dc=com mail: fred@example.com
В листинге 4 в конец командной строки добавлен атрибут mail, в результате чего было найдено отличительное имя и его запрошенные атрибуты.
Чтобы определить базу поиска, ldapsearch ищет в файле /etc/openldap/ldap.conf строку, начинающуюся с
BASE, и в случае, если такая строка не обнаружена, использует параметр сервера defaultsearchbase. База поиска – это точка дерева каталога, с которой начинается поиск. Поиск будет выполняться только в дочерних элементах базы поиска

(включая ее саму). Чтобы указать другую базу поиска, используйте параметр
-b, например, ldapsearch -x -b ou=groups,dc=ertw,dc=com – для поиска в контейнере groups дерева ertw.com.
Управление выводом результатов
LDAP может хранить двоичные данные, например, изображения. Стандартным способом хранения изображений в дереве каталога является использование атрибута jpegPhoto.
Если вы получаете значение атрибута из командной строки, оно возвращается вам в кодировке base64. Для сохранения любых двоичных атрибутов во временном файле используется параметр
-t. В листинге 6 показано, как использовать этот параметр.
Листинг 6. Сохранение двоичных атрибутов в файловой системе
$ ldapsearch -LLL -x 'cn=joe*' jpegphoto | head dn: cn=Joe Blow,ou=people,dc=ertw,dc=com jpegPhoto:: /9j/4AAQSkZJRgABAQEASABIAAD/
/gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQw
... далее следуют еще более 1300 строк ...
$ ldapsearch -LLL -t -x '(cn=joe*)' jpegphoto dn: cn=Joe Blow,ou=people,dc=ertw,dc=com jpegPhoto:< file:///tmp/ldapsearch-jpegPhoto-VaIjkE
$ file /tmp/ldapsearch-jpegPhoto-VaIjkE
/tmp/ldapsearch-jpegPhoto-VaIjkE:
JPEG image data, JFIF standard 1.01, comment: \
"Created with The GIMP\377"
В листинге 6 показаны два запроса, выполняющих поиск всех людей с именем, начинающимся на "Joe", и возвращающих только атрибут jpegPhoto. В первом запросе параметр
-t не используется, поэтому значение атрибута jpegPhoto выводится в консоль в формате base64. При использовании командной строки такой запрос бесполезен, поэтому во втором запросе указан параметр
-t. На этот раз значение атрибута jpegPhoto является
URI-ссылкой на файл (вы можете изменить директорию с помощью параметра
-T). Наконец, полученный файл проверяется, и он действительно является бинарной версией изображения, которое теперь можно просмотреть.
По умолчанию ldapsearch выводит результаты в том порядке, в котором они были получены от сервера. Вы можете выполнить сортировку с помощью параметра
-S, указав имя атрибута, значения которого вы хотите отсортировать. Чтобы выполнить сортировку по нескольким атрибутам, разделяйте их имена запятыми (,).
Утилиты командной строки LDAP
В этом разделе описывается материал по теме 304.2 экзамена на профессионала Linux высокого уровня (LPIC-3) 301. Эта тема обладает весом 4.
Из этого раздела вы узнаете, как:

Использовать утилиты ldap* для доступа и изменения каталога

Использовать утилиты slap* для доступа и изменения каталога
В OpenLDAP имеется несколько утилит для управления каталогом и администрирования сервера. Вы уже знакомы с утилитой ldapsearch, которая была рассмотрена в предыдущем
разделе
. Команды, начинающиеся с ldap, предназначены для пользователей дерева каталога, а команды, начинающиеся с slap – для администраторов.
Утилиты управления каталогом
Команды, которые будут рассмотрены в этом разделе, предназначены для управления деревом каталога; выполняется либо изменение, либо чтение данных. Утилита ldapsearch также попадает в эту категорию. Чтобы использовать эти команды, необходимо пройти аутентификацию на сервере.
ldapadd и ldapmodify
Эти две команды используются для добавления и изменения элементов каталога. Вспомните материал руководства
Подготовка к экзамену LPI 301: понятия, архитектура и модель
, в котором говорилось о том, что для добавления, изменения и удаления данных из дерева каталога может использоваться LDIF-формат. В листинге 7 показан пример использования
LDIF для добавления записи.
Листинг 7. Использование LDIF-формата для добавления записи в дерево каталога
dn: cn=Sean Walberg,ou=people,dc=ertw,dc=com objectclass: inetOrgPerson cn: Sean Walberg cn: Sean A. Walberg sn: Walberg homephone: 555-111-2222
Листинг 7 начинается с описания отличительного имени записи. Эта запись будет располагаться в контейнере ou=people,dc=ertw,dc=com и иметь относительное отличительное имя cn=Sean Walberg; оно получается путем разделения отличительного имени (DN) на части после первой пары атрибут/значение. Классом объекта (
objectclass) записи будет являться inetOrgPerson – этот класс является наиболее общим типом для описания любого сотрудника организации. Далее следуют два варианта обычного имени, фамилия и, наконец, номер домашнего телефона.
В листинге 7 показан пример добавления записи, в отличие от изменения или удаления.
Вспомните, что в LDIF-файлах может быть указано ключевое слово changetype, говорящее о том, что нужно делать с данными.
Команда ldapadd используется для обработки LDIF-файла. Если содержимое листинга 7 сохранить в файле под именем "sean.ldif", команда ldapadd -x -D cn=root,dc=ertw,dc=com -w mypass -f sean.ldif будет являться одним из способов добавления новой записи в дерево каталога. Часть команды
-x -D cn=root,dc=ertw,dc=com -w mypass должна быть вам знакома из предыдущего материала об утилите ldapsearch – она является способом аутентификации на сервере каталога с использованием простой аутентификации и всемогущей учетной записи root.
Параметры аутентификации на сервере каталога одинаковы для всех команд ldap , рассматриваемых в этом разделе, поэтому вы будете часто встречать эти параметры.
Команда ldapadd реализована в виде символьной ссылки к ldapmodify, и когда происходит вызов ldapadd, эта команда интерпретируется как ldapmodify -a. Параметр
-a указывает команде ldapmodify использовать в качестве значения changetype параметр add, предназначенный для добавления новых записей в дерево каталога. При вызове команды ldapmodify предполагается, что значением changetype по умолчанию является операция изменения (modify).

Команда ldapadd (а также ldapmodify) является эффективным способом загрузки очень большого количества данных на сервер без необходимости его остановки. LDIF-файлы могут содержать множество операций, и часто оказывается проще сгенерировать LDIF-файл из каких-либо источников данных, которые вы пытаетесь импортировать, чем написать собственный код для их разбора и добавления непосредственно через LDAP.
ldapdelete
Команда ldapdelete, как и подразумевает ее имя, удаляет запись из дерева каталога. Все записи идентифицируются в каталоге по их уникальным отличительным именам; следовательно, ldapdelete удаляет записи на основе их DN, не используя никаких других запросов.
Кроме рассмотренных выше параметров аутентификации, ldapdelete может принимать список отличительных имен для удаления, как из командной строки, так и из файла. Для удаления записей из командной строки просто укажите в строке имена DN, например, ldapdelete -x -D cn=root,dc=ertw,dc=com -w mypass "cn=Sean
Walberg,ou=people,dc=ertw,dc=com". Если вам необходимо удалить много записей, вы можете поместить их отличительные имена в файл (по одному имени на каждую строку) и указать ldapdelete на этот файл с помощью параметра -f имя_файла.
Заметьте, что вы также можете удалять записи с помощью LDIF и команд ldapadd/ldapmodify. Команда ldapdelete является наиболее подходящей для большинства случаев, но это не единственный способ удаления записей.
ldapmodrdn
Команда ldapmodrdn изменяет относительное отличительное имя объекта, то есть первую пару атрибут/значение в имени DN. Эта команда переименовывает запись в текущей ветви дерева каталога. В отличие от значения moddn LDIF-параметра changetype, эта команда может только переименовывать запись, но не может перемещать ее в другое место дерева каталога.
Использовать эту команду достаточно просто: укажите учетные данные для аутентификации, отличительное имя (DN) записи и новое относительное отличительное имя (RDN). В листинге 8 показана процедура переименования учетной записи "Joe Blow" в "Joseph Blow".
Листинг 8. Переименование записи
$ ldapmodrdn -x -D cn=root,dc=ertw,dc=com -w dirtysecret \
'cn=Joe Blow,ou=people,dc=ertw,dc=com' 'cn=Joseph Blow'
$ ldapsearch -LLL -x '(cn=Joseph Blow)' dn: cn=Joseph Blow,ou=people,dc=ertw,dc=com objectClass: inetOrgPerson sn: Blow cn: Joe Blow cn: Joseph Blow
Обратите внимание на то, что старое имя RDN все еще является атрибутом записи: cn: Joe
Blow. Если вы хотите удалить старое имя RDN, добавьте в командной строке параметр -r.
Добавление этого параметра имеет тот же эффект, что и добавление deleteoldrdn: 1 в ваш LDIF-код (как ни странно, это является поведением по умолчанию для LDIF, но не для ldapmodrdn).
ldapcompare
Команда ldapcompare позволяет вам сравнивать предопределенные значения со
значениями, хранящимися где-нибудь в дереве LDAP. В следующем примере показано, как это работает.
Листинг 9. Использование ldapcompare
$ ldapcompare -x "cn=Sean Walberg,ou=people,dc=ertw,dc=com" userPassword:мой_пароль
TRUE
$ ldapcompare -x "cn=Sean Walberg,ou=people,dc=ertw,dc=com" userPassword:неверный_пароль
FALSE
В листинге 9 выполняется команда ldapcompare. Вслед за параметрами аутентификации указываются два параметра, которые представляют собой имя DN для сравнения, а также атрибут и значение, с которыми оно будет сравниваться. В обоих примерах, приведенных в листинге, именем DN для сравнения является "cn=Sean Walberg", а атрибутом, с которым выполняется сравнение – userPassword. Когда указан правильный пароль, ldapcompare выводит строку
TRUE и возвращает код 6. Если указанное значение не совпадает с тем, что содержится в записи, то выводится строка
FALSE и возвращается код 5. Параметр -z предотвращает любой вывод на экран, при этом предполагается, что результаты сравнения будут оценены по возвращаемому коду.
Хотя в примерах листинга 9 проверялся пароль, можно использовать любой атрибут, включая objectClass. Если атрибут имеет несколько значений, например, указано несколько обычных имен (CN) или классов objectClass, то результат сравнения будет успешным, если произойдет совпадение хотя бы с одним из них.
ldapwhoami
Команда ldapwhoami позволяет вам выполнить проверку аутентификации на LDAP-сервере и определять, под каким именем DN вы выполнили аутентификацию. Просто вызовите команду ldapwhoami с обычными параметрами аутентификации, как показано в листинге
10.
Листинг 10. Демонстрация работы
ldapwhoami
$ ldapwhoami -x anonymous
Result: Success (0)
$ ldapwhoami -x -D "cn=Sean Walberg,
ou=people,dc=ertw,dc=com" -w мой_пароль dn:cn=Sean Walberg,ou=people,dc=ertw,dc=com
Result: Success (0)
$ ldapwhoami -x -D "cn=Sean
Walberg,ou=people,dc=ertw,dc=com" -w неверный_пароль ldap_bind: Invalid credentials (49)
В первом примере листинга 10 показана привязка без использования имени пользователя или пароля. Команда
Ldapwhoami возвращает строку anonymous, показывающую, что была выполнена анонимная привязка, а также строку состояния, показывающую, что аутентификация прошла успешно. Во втором примере показана привязка с использованием отличительного имени пользователя. На этот раз возвращенное имя DN совпадает с именем, указанным при аутентификации. Наконец, в третьем примере при попытке аутентификации были указаны неверные учетные данные. Возвращенный результат указывает на возникшую проблему.

Ldapwhoami может оказаться полезной для диагностики конфигурации сервера, а также для ручной проверки паролей. Списки доступа могут помешать выполнению команды ldapsearch, так что использование вместо этого команды ldapwhoami может помочь вам определить, заключается ли проблема в учетных данных или в списках доступа.
Утилиты администрирования
Команды, начинающиеся с slap, предназначены для администраторов и оперируют непосредственно файлами базы данных вместо того, чтобы работать через протокол LDAP.
Таким образом, для работы с этими командами вам, как правило, необходимо будет использовать учетную запись пользователя root, а в некоторых случаях будет необходимо также останавливать сервер.
slapacl
slapacl – это утилита, которая позволяет администратору проверять списки доступа и устанавливать взаимосвязи между именами DN для привязки, записями и атрибутами.
Например, с помощью slapacl можно выяснить уровень доступа какого-либо отдельного пользователя к атрибутам другого пользователя. Эта команда должна выполняться из-под учетной записи root, поскольку она напрямую обращается к базе данных и файлам конфигурации, не используя LDAP.
Использование утилиты slapacl лучше всего показать на примерах. В листинге 11 администратор выполняет проверку с целью выяснить, какой доступ имеет пользователь к своему собственному паролю до и после внедрения списков доступа (ACL), призванных ограничить доступ к наиболее конфиденциальным данным.
Листинг 11. Использование
slapacl для проверки эффекта от внедрения ACL
# slapacl -D "cn=Sean Walberg,ou=people,dc=ertw,dc=com" \
-b "cn=Sean Walberg,ou=People,dc=ertw,dc=com" userPassword authcDN: "cn=sean walberg,ou=people,dc=ertw,dc=com"
userPassword: read(=rscxd)
... изменение slapd.conf ...
# slapacl -D "cn=Sean Walberg,ou=people,dc=ertw,dc=com" \
-b "cn=Sean Walberg,ou=People,dc=ertw,dc=com" userPassword authcDN: "cn=sean walberg,ou=people,dc=ertw,dc=com"
userPassword: =wx
# slapacl -D "cn=Joseph Blow,ou=people,dc=ertw,dc=com" \
-b "cn=Sean Walberg,ou=People,dc=ertw,dc=com" userPassword authcDN: "cn=joseph blow,ou=people,dc=ertw,dc=com"
userPassword: =0
Каждый раз команде slapacl должны передаваться два обязательных набора данных.
Первая часть – это имя DN для привязки, которое является именем DN пользователя, чьи права доступа проверяются. Вторая часть – это имя DN записи, с которой будет выполняться сравнение. Имя для привязки указывается с помощью параметра
-D, а целевое имя записи – с помощью параметра
-b. При желании вы можете ограничить проверку одним атрибутом, включив его в конец строки (как, например, атрибут userPassword в листинге 11). Если вы не указываете атрибут, вы получите результаты для каждого атрибута записи.
В первом примере листинга 11 администратор проверяет элемент cn=Sean Walberg с целью выяснить, какой доступ имеет этот пользователь к своему собственному паролю.

Результат – доступ на чтение. Вспомните материал руководства
Подготовка к экзамену LPI
301: конфигурирование
, в котором говорилось о том, что пользователям должно быть разрешено изменять и использовать свой атрибут userPassword для аутентификации, но не просматривать его. После изменения списков контроля доступа (ACL) проверка выполняется снова, и теперь пользователь имеет разрешение только на запись и на выполнение аутентификации. Наконец, в третьем примере выполняется проверка с целью выяснить, какой доступ имеет пользователь Joseph Blow к паролю пользователя Sean Walberg.
Результат – нет доступа.
Утилита slapacl является эффективным способом проверки изменений списков доступа и устранения сопутствующих проблем. Эта утилита чрезвычайно эффективна, поскольку она считывает данные непосредственно из базы данных и из файла slapd.conf; таким образом, все изменения, сделанные в файле slapd.conf, отражаются в выводе slapacl, и перезагрузка демона slapd не требуется.
slapcat
Утилита slapcat выгружает содержимое каталога LDAP в виде LDIF в устройство стандартного вывода или файл (если вы используете параметр
-l имя_файла). При желании вы можете использовать параметр
-s, чтобы указать начальное имя DN, или параметр
-a, чтобы задать фильтр запроса.
Утилита slapcat работает непосредственно с базой данных и не может быть запущена, пока сервер работает. Поддерживаются только базы данных типа bdb.
slapadd
Утилита slapadd является инструментом импорта большого объема данных и работает непосредственно с серверными СУБД. Это означает, что для использования этой утилиты демон slapd должен быть остановлен. Этот инструмент разработан для использования с результатами вывода утилиты slapcat. slapadd не выполняет подробной проверки входных данных, поэтому возможно, что результатом ее работы будут разрозненные ветви дерева каталога. Это может случиться в том случае, если какие-либо контейнерные объекты не будут импортированы.
Входными данными утилиты slapadd является LDIF-файл, например, сгенерированный командой slapcat. В справочном man-руководстве slapadd(8C) вместо этой утилиты предлагается использовать ldapadd, поскольку в этом варианте предусмотрена проверка данных. Также в man-руководстве упоминается, что нет гарантий того, что вывод slapcat будет упорядочен в соответствии с требованиями совместимости ldapadd (контейнерные объекты могут следовать за дочерними, следовательно, проверка может закончиться с ошибками). Использование в slapcat фильтров также может привести к потере важных данных. Таким образом, следует использовать утилиту slapadd только с LDIF-файлами, сгенерированными командой slapcat, и использовать ldapadd для любых других
LDIF-форматов.
После того как вы остановите ваш LDAP-сервер, вы можете просто запустить команду slapadd и направить ее вывод на устройство стандартного ввода с помощью pipe-канала.
Если вы хотите считывать данные из файла, используйте параметр
-l. Как и в случае с утилитой slapcat, поддерживаются только базы данных типа bdb.
slappasswd
Утилита slappasswd используется для создания хэшированных паролей, которые будут храниться в каталоге или в файле slapd.conf. Наиболее распространенный случай применения утилиты – создание хэшированных паролей административных учетных записей rootDN, хранящихся в файле slapd.conf; в этом случае, даже имея доступ к файлу конфигурации, невозможно узнать пароль администратора. Если вы не укажете никаких параметров в
командной строке, slappasswd предложит вам ввести пароль для хэширования, как показано в листинге 12.
Листинг 12. Использование
slappasswd для хэширования пароля
$ slappasswd
New password:
Re-enter new password:
{SSHA}G8Ly2+t/HMHJ3OWWE7LN+GRmZJAweXoE
После этого вы можете скопировать получившийся результат в строку rootpw файла slapd.conf. slapd распознает формат пароля и поймет, что {SSHA} указывает на то, что последующие данные представляют собой хэш SHA1. Человек, прочитавший файл slapd.conf, не сможет узнать пароль учетной записи root.
Хэши, сгенерированные утилитой slappasswd, могут быть также использованы и в
LDIF-файлах; утилиты ldapadd и ldapmodify позволяют хранить защищенные хэши ваших паролей вместо того, чтобы хранить пароли в открытом виде или в кодировке base64.
slapindex
Вы, возможно, помните об утилите slapindex из материала руководства
Подготовка к экзамену LPI 301: конфигурирование
. После создания или изменения индекса при помощи ключевого слова index в файле slapd.conf необходимо перестроить индексы, иначе slapd возвратит неправильные результаты. Чтобы перестроить индексы, остановите slapd и запустите slapindex. В зависимости от размера вашей базы данных это может занять некоторое время или, как говорится в man-руководстве, "Эта команда предоставляет пользователю прекрасную возможность найти и выпить свой любимый напиток".
slaptest
Утилита slapdtest просто выполняет проверку вашего файла slapd.conf на ошибки. Это полезная утилита, поскольку если вы будете перезапускать slapd, а файл конфигурации окажется некорректным, вы не сможете запустить сервер, пока не исправите все ошибки. slapdtest позволяет вам выполнить проверку на отсутствие ошибок в вашем конфигурационном файле прежде, чем вы начнете перезапускать сервер.
Для использования slaptest достаточно просто набрать slaptest в командной строке.
Если файл slapd.conf не содержит ошибок, вы увидите сообщение config file testing succeeded. В противном случае вы получите ошибку с описанием возникшей проблемы.
slaptest также проверяет существование различных файлов и директорий, необходимых для работы. Тем не менее, во время проверки автор смог найти несколько ошибок в конфигурационных файлах, которые не обнаружила утилита slaptest и которые при этом могли бы привести к ошибкам в работе slapd.
Служба "белых страниц"
В этом разделе описывается материал по теме 304.3 экзамена на профессионала Linux высокого уровня (LPIC-3) 301. Эта тема обладает весом 1.
Из этого раздела вы узнаете, как:

планировать службу "белых страниц"

настраивать службу "белых страниц"


настраивать клиентские компьютеры на получение данных от службы "белых страниц".
Служба "белых страниц" позволяет клиентам электронной почты получать контактную информацию из базы данных LDAP. Используя такие основные атрибуты, как, например, атрибуты класса inetOrgPerson objectClass, вы можете обеспечить наилучшую совместимость с почтовыми клиентами. Например, как Microsoft Outlook, так и Evolution используют атрибут mail для хранения электронного почтового адреса пользователя, а атрибуты givenName, displayName, cn и sn – для хранения имени пользователя в различных формах.
Настройка клиентов электронной почты на использование каталога LDAP
Теоретически, любой почтовый клиент, поддерживающий LDAP, может использовать ваше дерево каталога. Для настройки почтового клиента вам потребуется следующая информация:

Адрес или имя хоста сервера LDAP

Учетные данные для привязки, если вы не выполняете анонимную привязку

Отличительное имя базового объекта (Base DN), с которого необходимо начинать поиск

Фильтр поиска, например, (mail=*), чтобы выбирать только учетные записи, содержащие адрес электронной почты (необязательно)
После того как вы укажете эту информацию в настройках почтового клиента, у вас должна появиться возможность выполнять поиск контактов.
Настройка Microsoft Outlook на использование каталога LDAP
Для настройки Microsoft Outlook (проверено в Outlook 2003) выберите пункт меню Tools >
Email Accounts. Вы увидите диалоговое окно, изображенное на рисунке 2.
Рисунок 2. Выбор типа учетной записи для добавления
Выберите добавление нового каталога и нажмите кнопку Next. Вы увидите диалоговое окно, изображенное на рисунке 3.

Рисунок 3. Выбор типа каталога для добавления
Выберите добавление нового каталога LDAP и нажмите кнопку Next. Вы увидите диалоговое окно, изображенное на рисунке 4.
Рисунок 4. Ввод детальной информации о сервере LDAP
Введите соответствующие данные о вашем сервере LDAP в диалоговом окне, показанном на рисунке 4. В показанном примере для привязки к дереву каталога используются учетные
данные пользователя. Вы можете использовать анонимный доступ, если конфигурация вашего сервера позволяет сделать это.
После ввода основной информации нажмите кнопку More Settings, и вам будет предложено ввести дополнительную информацию, как показано на рисунке 5.
Рисунок 5. Ввод дополнительной информации о конфигурации сервера LDAP
На рисунке 5 показаны дополнительные параметры, наиболее важным из которых является база поиска (Search base). После указания базы поиска нажмите кнопку OK, чтобы возвратиться в главное окно Outlook.
Теперь вы можете использовать базу данных LDAP всякий раз, когда вам предлагается выполнить поиск пользователей, указав имя сервера в поле "Show Names From".
Заключение
Из этого руководства вы узнали, как выполнять поиск по вашему каталогу и использовать утилиты командной строки. Также вы узнали, как настраивать почтовые клиенты на использование дерева каталога для хранения контактной информации.
Для выполнения поиска по дереву каталога LDAP необходимо построить фильтр запроса.
Различные операторы, использующиеся для построения поисковых запросов, перечислены в таблице 3.
Таблица 3. Операторы поиска в LDAP
Оператор
Описание
Пример запроса
=
Проверка равенства
(cn=Walberg)
*
Проверка существования атрибута
(cn=*)
Поиск подстроки
(sn=Walb*)
&
Логическое "И"
(&(condition1)(condition2))
|
Логическое "ИЛИ"
(|(condition1)(condition2))
!
Логическое "НЕ"
(!(mail=*))
=
Возвращение созвучных результатов (cn
=Shawn)

<= и >=
Поиск в диапазоне
(pagesPerMinute >= 20)
Некоторые утилиты предназначены для повседневного использования каталога, например, ldapsearch – для поиска, а ldapadd и ldapmodify – для добавления и изменения данных. Утилиты, имена которых начинаются с ldap, работают через LDAP-протокол и требуют использования учетных записей для подключения к серверу. Утилиты, имена которых начинаются с slap, предназначены для администраторов и работают непосредственно с базой данных.
Это руководство, а также три предыдущих руководства из серии 301
, содержат информацию о том, как управлять и работать с сервером LDAP. В следующем руководстве этой серии будут рассмотрены различные приложения, включая серверы электронной почты, а также то, как использовать LDAP в качестве источника данных.
Ресурсы
Научиться

Оригинал руководства "
LPI exam 301 prep, Topic 304: Usage
" (EN).

Изучите предыдущее руководство в серии 301 - "
Подготовка к экзамену LPI 301, Тема
303: конфигурирование " (developerWorks, март 2008) или все руководства в серии 301
(EN).

Чтобы познакомиться с основами Linux и подготовиться к сертификации в качестве системного администратора, ознакомьтесь со всей серией руководств для подготовки к экзаменам LPI

В программе LPIC
(EN) вы можете найти перечни заданий, примеры вопросов и подробные цели для трех уровней сертификации системных администраторов Linux института Linux Professional Institute.

В спецификации
RFC 4515 – Строковое представление фильтров поиска LDAP
(EN) вы можете найти дополнительную информацию о фильтрах поиска.

Прочитайте статьи "
MS Outlook: What LDAP Attributes Are Recognised?
" (EN) и "
MS
Outlook: How Do LDAP Attributes Map to Address Book Fields?
" (EN), чтобы увидеть результаты разбора структуры параметров атрибутов, которые использует клиент
Microsoft Outlook.

Очень советую онлайновую книгу
LDAP для больших ученых
(EN), несмотря на то, что работа над ней ещё не закончена.

Узнайте больше о правилах сравнения
(EN).

В разделе Linux сайта developerWorks можно найти дополнительные ресурсы для разработчиков Linux, а также самые популярные среди наших читателей статьи и руководства

Посмотрите все советы по Linux и руководства Linux
(EN) на сайте developerWorks.

Следите на последними новостями на портале
Web-трансляций и технических мероприятий developerWorks
(EN).
Получить продукты и технологии

Утилита
Firewall Builder упрощает задачу создания правил iptables, предоставляя в ваше распоряжение графический интерфейс и набор инструментов для развертывания обновлений на ваших брандмауэрах.


Загрузите
OpenLDAP

phpLDAPadmin
- инструмент администрирования LDAP на базе Web. Если вам больше нравится графический интерфейс, вам стоит посмотреть на
Luma
(EN).

Используйте в своем следующем проекте разработки для Linux ознакомительные версии программного обеспечения IBM
, которые можно скачать непосредственно с developerWorks (EN).

Подготовка к экзамену LPI 301: Тема 305.
Интеграция и миграция
Профессионал Linux высокого уровня (LPIC-3)
Шон Уолберг
, старший сетевой инженер, P.Eng
Описание: В этом руководстве Шон Уолберг поможет вам подготовиться к экзамену института Linux® Professional Institute на квалификацию профессионала Linux высокого уровня (LPIC-3). В этом руководстве, пятом из серии из шести руководств
, Шон расскажет об интеграции LDAP с вашими системными учетными данными и приложениями. Также он подробно расскажет о процедуре интеграции вашего сервера в среду Microsoft® Active
Directory.
Больше статей из этой серии
Дата: 22.01.2009
Уровень сложности: средний
Предисловие
Узнайте, чему могут научить вас эти руководства, и как получить от них больше пользы.
Об этой серии руководств
Институт
Linux Professional Institute
(LPI) сертифицирует системных администраторов
Linux® по трём уровням: младший уровень (также называемый "уровень сертификации 1"),
углубленный уровень (также называемый "уровень сертификации 2") и высший уровень (также называемый "уровень сертификации 3"). Чтобы получить сертификацию на уровне 1, нужно сдать экзамены 101 и 102. Чтобы получить сертификацию на уровне 2, нужно сдать экзамены
201 и 202.Чтобы получить сертификацию на уровне 3, у вас должна быть действующая сертификация на углубленном уровне и сдан экзамен 301 ("основной"). Кроме того, на высоком уровне от вас может потребоваться сдача дополнительных экзаменов.
Сайт developerWorks предлагает руководства, которые помогут вам подготовиться к пяти экзаменам для младшего, углубленного и высокого уровня. В каждом экзамене охватывается несколько тем, и для каждой темы на developerWorks есть соответствующий учебник для самостоятельного изучения. В таблице 1 перечислены шесть тем и соответствующие им руководства developerWorks для экзамена LPI 301.
Таблица 1. Экзамен LPI 301: руководства и темы



Поделитесь с Вашими друзьями:
1   ...   37   38   39   40   41   42   43   44   ...   68


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал