Руководство по Ubuntu Server



Pdf просмотр
страница4/16
Дата17.11.2016
Размер1.78 Mb.
Просмотров3743
Скачиваний3
ТипРуководство
1   2   3   4   5   6   7   8   9   ...   16
Глава 6. Удалённое
администрирование
Есть множество способов удалённого администрирования сервера Linux.
В этой главе рассматриваются два наиболее популярные приложения:
OpenSSH и Puppet.

Удалённое администрирование
94
1. Сервер OpenSSH
1.1. Введение
Этот раздел руководства по Ubuntu Server представляет мощную коллекцию инструментов для удалённого управления и обмена данными с сетевыми компьютерами, которая называется OpenSSH. Вы также изучите некоторые конфигурационные настройки, доступные для серверного приложения OpenSSH, и то, как изменять их в вашей системе Ubuntu.
OpenSSH — это свободно распространяемая версия семейства инструментов для удалённого управления компьютерами и передачи файлов с использованием протокола Secure Shell (SSH). Традиционные инструменты, используемые для этих целей, такие как telnet и rcp,
небезопасны и передают пользовательский пароль открытым текстом.
OpenSSH предоставляет серверный демон и клиентские приложения для облегчения операций защиты, зашифрованного удалённого управления и передачи файлов, эффективно заменяя устаревшие инструменты.
Серверная компонента OpenSSH, sshd, постоянно ожидает клиентских соединений от любых клиентских программ. Когда приходит запрос на соединение, sshd устанавливает правильный тип соединения, в зависимости от типа подключаемого клиента. Например, если удалённый компьютер пытается подключиться с помощью клиента ssh, то сервер
OpenSSH после аутентификации запустит сеанс удалённого управления.
Если же удалённый пользователь подключается с помощью scp, серверный демон OpenSSH после аутентификации организует безопасное копирование файлов между сервером и клиентом. OpenSSH может использовать множество методов аутентификации, включая обычный пароль,
использование открытого ключа и сертификаты Kerberos.
1.2. Установка
Установка клиента и сервера OpenSSH проста. Для установки клиента
OpenSSH на вашу систему Ubuntu используйте следующую команду в строке терминала:
sudo apt-get install openssh-client
Для установки сервера OpenSSH и всех необходимых файлов выполните эту команду в строке терминала:

Удалённое администрирование
95
sudo apt-get install openssh-server
Пакет openssh-server также может быть выбран для установки во время инсталляции Server Edition.
1.3. Конфигурация
Вы можете настроить режим работы по умолчанию серверного приложения
OpenSSH, sshd, редактируя файл
/etc/ssh/sshd_config
. Для получения информации о конфигурационных директивах, используемых в этом файле, вы можете просмотреть соответствующее руководство с помощью следующей команды, выполненной в командной строке терминала:
man sshd_config
Существует множество директив в конфигурационном файле sshd,
управляющих такими вещами, как настройки соединений и способы аутентификации. Далее следуют примеры конфигурационных директив,
которые могут быть изменены редактированием файла
/etc/ssh/sshd_config
Перед внесением изменений в файл настроек вы должны сделать копию оригинального файла и защитить её от записи. Благодаря этому, вы всегда сможете посмотреть оригинальные настройки, а в случае необходимости вы сможете вернуться к этим настройкам.
Создайте копию файла
/etc/ssh/sshd_config и защитите её от записи,
введя в терминале следующие команды:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo chmod a-w /etc/ssh/sshd_config.original
Ниже даны примеры конфигурационных директив, которые вы можете изменить:
• Чтобы настроить демона OpenSSH в режим прослушивания TCP порта
2222, вместо стандартного TCP порта 22, измените директиву Port таким образом:
Port 2222
• Чтобы sshd разрешал использовать процедуру идентификации пользователя с помощью данных, основанных на открытом ключе, просто добавьте или измените следующую строку:
PubkeyAuthentication yes
Если строка уже присутствует, убедитесь, что она не закомментирована.

Удалённое администрирование
96
• Чтобы ваш сервер OpenSSH отображал содержимое файла
/etc/issue.net в качестве сообщения перед логином, просто добавьте или измените следующую строку:
Banner /etc/issue.net
В файле
/etc/ssh/sshd_config
После внесения изменений в файл
/etc/ssh/sshd_config
, сохраните его и,
чтобы изменения вступили в силу, перезапустите серверное приложение sshd, выполнив следующую команду в терминале:
sudo /etc/init.d/ssh restart
Существует множество других директив конфигурации sshd для изменения поведения серверного приложения под ваши нужды.
Однако учтите, что если единственный способ доступа к серверу —
это ssh, и вы допустили ошибку конфигурации sshd в файле
/etc/ssh/
sshd_config
, то ваш сервер может оказаться заблокированным, пока его не перезагрузите. В дополнение, если указана неправильная конфигурационная директива, сервер sshd может отказаться загружаться, поэтому будьте очень осторожны, когда редактируете этот файл на удалённом сервере.
1.4. Ключи SSH
Ключи SSH разрешают аутентификацию пользователей между двумя узлами без необходимости ввода пароля. Аутентификация по ключам SSH
использует два ключа: секретный и открытый.
Чтобы сгенерировать ключи, наберите в приглашении терминала:
ssh-keygen -t dsa
Эта команда сгенерирует ключи с помощью метода Digital Signature
Algorithm (DSA). Во время процесса генерации вам будет предложено ввести пароль. Просто нажмите Enter на запрос о создании ключа.
По умолчанию открытый ключ сохраняется в файл
/.ssh/id_dsa.pub
, в то время как секретный — в
/.ssh/id_dsa
. Теперь скопируйте файл id_dsa.pub на удалённый компьютер и добавьте его к
/.ssh/authorized_keys командой:
ssh-copy-id username@remotehost

Удалённое администрирование
97
В конце дважды проверьте права доступа к файлу authorized_keys
. Только аутентифицированный пользователь должен имть права на чтение и запись этого файла. Если права установлены некорректно, измените их:
chmod 600 .ssh/authorized_keys
Теперь у вас есть возможность соединиться по SSH с этим узлом без ввода пароля.
1.5. Ссылки
• Страница SSH на Ubuntu Wiki
1
Сайт OpenSSH
2
Страница Wiki о расширенных настройках OpenSSH
3 1
https://help.ubuntu.com/community/SSH
2
http://www.openssh.org/
3
https://wiki.ubuntu.com/AdvancedOpenSSH

Удалённое администрирование
98
2. Puppet
Puppet — это кроссплатформенный фреймворк, позволяющий системным администраторам выполнять общие задачи администрирования с помощью кода. Код может выполнять различные задачи: от установки новых программ до проверки прав доступа к файлам или обновления пользовательских учётных записей. Puppet превосходна не только в процессе изначальной установки системы, но и на протяжении всего жизненного цикла системы. В большинстве случаев puppet используется в конфигурации клиент/сервер.
Этот раздел посвящён установке и настройке Puppet в конфигурации клиент/сервер. Этот простой пример демонстрирует, как установить Apache с использованием Puppet.
2.1. Установка
Для установки Puppet наберите в терминале сервера:
sudo apt-get install puppetmaster
На клиентском компьютере (или нескольких компьютерах), введите:
sudo apt-get install puppet
2.2. Конфигурация
Прежде чем настраивать puppet, вам, возможно, захочется добавить запись
DNS CNAME для puppet.example.com, где example.com — это ваш домен. По умолчанию клиенты Puppet проверяют DNS на наличие puppet.example.com в качестве имени сервера puppet (Puppet Master). Посетите раздел Глава 8,
Служба доменных имён (DNS) [158] для дополнительных деталей использования DNS.
Если вы не предполагаете использовать DNS, вы можете добавить записи в файл
/etc/hosts на сервере и клиенте. Например, в файл
/etc/hosts сервера
Puppet добавьте:
127.0.0.1 localhost.localdomain localhost puppet
192.168.1.17 meercat02.example.com meercat02
На каждом клиенте Puppet добавьте запись для сервера:
192.168.1.16 meercat.example.com meercat puppet

Удалённое администрирование
99
Замените указанные в приведённом выше примере IP-адреса и доменные имена на реальные адреса и доменные имена вашего сервера и клиента.
Теперь настроим некоторые ресурсы для apache2. Создайте файл
/etc/
puppet/manifests/site.pp
, содержащий следующее:
package {
'apache2':
ensure => installed
}
service {
'apache2':
ensure => true,
enable => true,
require => Package['apache2']
}
Далее создайте файл узла
/etc/puppet/manifests/nodes.pp с:
node 'meercat02.example.com' {
include apache2
}
Замените meercat02.example.com на реальное имя хоста вашего клиента Puppet.
Финальным шагом для этого простого сервера Puppet является перезапуск демона:
sudo /etc/init.d/puppetmaster restart
Теперь на сервере Puppet всё настроено, и пришло время настроить клиента.
Сначала настроим демон агента Puppet для запуска. Отредактируйте
/etc/
default/puppet
, заменив значение START на yes:
START=yes
Далее запустите сервис:
sudo /etc/init.d/puppet start
Возвращаемся на Puppet сервер для подписи клиентского сертификата с помощью команды:

Удалённое администрирование
100
sudo puppetca --sign meercat02.example.com
Проверьте
/var/log/syslog на предмет наличия каких-либо ошибок конфигурации. Если всё прошло успешно, пакет apache2 и его зависимости будут установлены на клиенте Puppet.
Этот пример очень простой и не показывает многие возможности и преимущества Puppet. Для дополнительной информации смотрите
Раздел 2.3, «Ресурсы» [100].
2.3. Ресурсы
• Посетите сайт официальной документации Puppet
4
• Также смотрите Pro Puppet
5
• Ещё один источник дополнительной информации — страница Ubuntu Wiki
Puppet
6 4
http://docs.puppetlabs.com/
5
http://www.apress.com/9781430230571 6
https://help.ubuntu.com/community/Puppet

Удалённое администрирование
101
3. Zentyal
Zentyal — это Linux-сервер для малого бизнеса, который может быть сконфигурирован как шлюз (Gateway), инфраструктурный менеджер
(Infrastructure Manager), защитный сервер (Unified Threat Manager), офисный сервер (Office Server), коммуникационный сервер (Unified Communication
Server) или любое их сочетание. Все сетевые сервисы, управляемые
Zentyal, тесно интегрированы, автоматизируя большинство задач. Это помогает избежать ошибок в сетевых настройках и администрировании,
и, как следствие, сэкономить время. Zentyal имеет открытый исходный код, опубликованный под лицензией GNU General Public License (GPL) и запускается поверх Ubuntu GNU/Linux.
Zentyal содержит серию пакетов (обычно по одному на модуль), которые обеспечивают веб-интерфейс для настройки различных серверов или сервисов. Конфигурация сохраняется в базе данных Redis парами ключ- значение, а настройки, связанные с пользователями, группами и доменами
— в OpenLDAP . Когда вы настраиваете любые из доступных параметров через веб-интерфейс, окончательные файлы настройки переписываются с использованием шаблонов, предоставляемых модулями. Основные преимущества использования Zentyal это: унификация, графический интерфейс пользователя для настройки всех сетевых сервисов и высокая их интеграция между собой «из коробки».
3.1. Установка
Zentyal 2.3 доступен в Ubuntu 12.04 в репозитории Universe. Доступны следующие модули:
• zentyal-core и zentyal-common: ядро интерфейса Zentyal и общие библиотеки окружения. Также включают модули журналирования и событий, которые обеспечивают администратору интерфейс для просмотра журналов и генерации событий из него.
• zentyal-network: управляет настройкой сети. От интерфейсов
(поддерживая статичные IP, DHCP, VLAN, мосты или PPPoE) до множественных шлюзов, когда существует более одного соединения с интернетом, балансировки нагрузки и расширенной маршрутизации,
статической маршрутизации или динамического DNS.
• zentyal-objects и zentyal-services: предоставляют абстрактный уровень сетевой адресации (например, LAN вместо 192.168.1.0/24) и именования портов как сервисов (например, HTTP вместо 80/TCP).

Удалённое администрирование
102
• zentyal-firewall: настройка правил iptables для блокирования запрещённых соединений, сетевой трансляции адресов (NAT) и перенаправления портов.
• zentyal-ntp: устанавливает сервис NTP, чтобы контролировать время на сервере и позволять клиентам в сети синхронизовать свои часы с серверными.
• zentyal-dhcp: настраивает сервер ISC DHCP, поддерживающий диапазоны,
статические выделения и другие расширенные опции, такие как NTP,
WINS, обновления динамического DNS и загрузка через сеть с помощью
PXE.
• zentyal-dns: добавляет DNS-сервер ISC Bind9 на ваш компьютер для кэширования локальных запросов, работая в качестве перенаправляющего DNS-сервера (DNS forwarder) или доверенного сервера (authoritative server) для настроенных доменов. Позволяет настраивать записи A, CNAME, MX, NS, TXT и SRV.
• zentyal-ca: интегрирует управление центром сертификации в Zentyal таким образом, что пользователи могут использовать сертификаты для аутентификации сервисов, подобно OpenVPN.
• zentyal-openvpn: позволяет настроить несколько VPN серверов и клиентов, использующих OpenVPN с настройкой динамической маршрутизации с помощью Quagga.
• zentyal-users: предоставляет интерфейс настройки и управления пользователями и группами в OpenLDAP. Другие сервисы Zentyal авторизуются по LDAP, имея централизованное управления пользователями и группами. Это также позволяет синхронизировать пользователей, пароли и группы из домена Microsoft Active Directory.
• zentyal-squid: настраивает Squid и Dansguardian для ускорения просмотра благодаря возможностям кэширования и фильтрования контента.
• zentyal-samba: позволяет настраивать Samba и интеграцию с существующим LDAP. Из этого же интерфейса вы можете задавать политику паролей, создавать ресурсы общего доступа и устанавливать права доступа.
• zentyal-printers: интегрирует CUPS с Samba и позволяет не только настраивать принтеры, но и предоставлять им права доступа на основе пользователей и групп LDAP.
Для установки Zentyal в терминале на сервере введите следующее (здесь
sudo apt-get install

Удалённое администрирование
103
Zentyal выпускает по одной стабильной версии в год (в сентябре),
в качестве базового дистрибутива для которой используется последний выпуск Ubuntu LTS. Стабильные выпуски всегда имеют чётное значение младшей части версии (например, 2.2, 3.0), а бета- версии — нечётное (2.1, 2.3). Ubuntu 12.04 поставляется с версией пакетов Zentyal 2.3. Если вы хотите обновиться до последней стабильной версии, опубликованной после выпуска Ubuntu 12.04,
используйте Zentyal Team PPA
7
. Обновление до новейшей стабильной версии может предоставить вам исправления незначительных ошибок, которые не будут бэкпортироваться в версию 2.3 для
Precise, а также добавить новые возможности.
Если вам требуется больше информации о том как добавлять пакеты из PPA, смотрите Добавление персонального архива пакетов (PPA)
8
В Zentyal Team PPA
9
вы можете найти следующие модули,
отсутствующие в репозитории Ubuntu Universe:
• zentyal-antivirus: интегрирует антивирус ClamAV с другими модулями, такими как прокси, общего доступа к файлам и почтового фильтра.
• zentyal-asterisk: настраивает Asterisk для обеспечения работы
PBX (Private branch exchange, офисная АТС) на основе LDAP- аутентификации.
• zentyal-bwmonitor: позволяет отслеживать использование пропускной способности вашей локальной сети.
• zentyal-captiveportal: интегрирует captive portal (механизм регистрации доступа в интернет) с защитным сервером (firewall), а также пользователями и группами LDAP.
• zentyal-ebackup: позволяет выполнять резервное копирование по расписанию, используя популярное средство резервного копирования duplicity.
• zentyal-ftp: настраивает FTP-сервер на использование аутентификации по LDAP.
• zentyal-ids: добавляет систему обнаружения сетевых вторжений.
• zentyal-ipsec: позволяет настраивать IPsec туннели с использованием OpenSwan.
• zentyal-jabber: интегрирует XMPP-сервер ejabberd с пользователями и группами LDAP.
7
https://launchpad.net/
zentyal/
8
https://help.ubuntu.com/12.04/ubuntu-help/addremove-ppa.html
9
https://launchpad.net/
zentyal/

Удалённое администрирование
104
• zentyal-thinclients: терминальный сервер (LTSP) для "тонких"
клиентов.
• zentyal-mail: полный почтовый стек, включая Postfix и Dovecot с
LDAP.
• zentyal-mailfilter: настраивает amavisd на работу с почтовым стеком для фильтрации спама и прикрепленных вирусов.
• zentyal-monitor: добавляет collectd для отслеживания производительности сервера и запущенных сервисов.
• zentyal-pptp: настраивает PPTP VPN сервер.
• zentyal-radius: интегрирует FreeRADIUS с пользователями и группами LDAP.
• zentyal-software: простой интерфейс для управления установленными модулями Zentyal и системными обновлениями.
• zentyal-trafficshaping: настраивает правила ограничения трафика для уменьшения полосы пропускания и уменьшения задержек.
• zentyal-usercorner: разрешает пользователям редактировать их собственные атрибуты LDAP, используя веб-браузер.
• zentyal-virt: простой интерфейс для создания и управления виртуальными машинами на базе libvirt.
• zentyal-webmail: позволяет осуществлять доступ к вашей почте,
используя популярный веб-интерфейс Roundcube.
• zentyal-webserver: настраивает интернет сервер Apache для обслуживания различных сайтов на вашей машине.
• zentyal-zarafa: интегрирует средство групповой работы Zarafa с почтовым стеком Zentyal и LDAP.
3.2. Первые шаги
Любой системный пользователь, принадлежащий к группе sudo, имеет возможность войти в веб-интерфейс Zentyal. Если вы используете пользователя, созданного при установке системы, то он входит в группу sudo по умолчанию.
Если вам надо добавить другого пользователя к группе sudo, просто выполните:
sudo adduser username sudo
Для доступа к веб-интерфейсу Zentyal подключитесь к адресу https://
localhost/ (или IP-адресу вашего удалённого сервера). Поскольку Zentyal

Удалённое администрирование
105
создаёт собственный самозаверенный сертификат SSL, вы получите предупреждение системы безопасности в вашем браузере.
Подключившись, вы увидите панель управления (dashboard) с обзором всего вашего сервера. Для настройки любого свойства установленного вами модуля, перейдите к нужной секции в меню слева. Когда вы делаете изменения, в правом верхнем углу появляется красная кнопка
Save changes, которую надо нажать для сохранения всех изменений настроек. Для применения этих изменений на сервере, вначале модуль нужно подключить, что вы можете сделать при выборе Module Status
в меню слева. Каждый раз как вы включаете модуль, будет появляться всплывающее окно подтверждения о выполнении необходимых действий и изменений на вашем сервере и в файлах настроек.
Если вам требуется настроить под себя какой-либо файл конфигурации или выполнить определенные действия (сценарий или команду) по настройке, не доступной из Zentyal, поместите шаблон конфигурационного файла в Zentyal и указатели (hooks) в /
etc/zentyal/hooks/..
3.3. Ссылки
Официальная страница документации Zentyal
10
Смотрите также страницу документации сообщества Zentyal
11
И не забудьте посетить форум
12
сообщества для поддержки, обратной связи, запросов на доработку и пр.
10
http://doc.zentyal.org/
11
http://trac.zentyal.org/wiki/Documentation
12
http://forum.zentyal.org/

106
Глава 7. Сетевая
аутентификация
В этом разделе рассматривается применение LDAP для аутентификации и авторизации.

Сетевая аутентификация
107
1. Сервер OpenLDAP
Lightweight Directory Access Protocol (LDAP) — это протокол запросов и изменений к сервису каталогов на базе X.500, работающий поверх TCP/IP.
Текущая версия LDAP — LDAPv3, как определено в RFC4510
1
, а реализация
LDAP в Ubuntu — это OpenLDAP, текущей версии 2.4.25 (Oneiric) (2.4.28 для
Precise — прим. переводчика).
Итак, этот протокол обеспечивает доступ к каталогам LDAP. Здесь приведены некоторые ключевые понятия и термины:
• Каталог LDAP — это дерево данных в виде записей, иерархичных по своей природе, которое называется деревом каталогов информации (Directory
Information Tree, или DIT).
• Запись состоит из набора атрибутов.
• Атрибут имеет тип (имя/описание) и одно или несколько значений.
• Каждый атрибут должен быть определён как минимум в одном
объектном классе (objectClass).
• Атрибуты и объектные классы определяются в схемах (объектный класс фактически рассматривается как специальный вид атрибута).
• Каждая запись имеет уникальный идентификатор — отличительное
имя (Distinguished Name, или DN). Оно состоит из относительного
отличительного имени (RDN), за которым следует запись родительского
DN.
• DN записи — это не атрибут. Оно не является частью собственно записи.
Термины объект, контейнер, and узел (node) имеют определенный подтекст, но они все по существу обозначают такую вещь, как запись, технически корректный термин.
Например, далее мы имеем одну запись, содержащую 11 атрибутов. Её DN
— это "cn=John Doe,dc=example,dc=com"; её RDN — это "cn=John Doe"; а родительский DN — "dc=example,dc=com".
dn: cn=John Doe,dc=example,dc=com cn: John Doe givenName: John sn: Doe telephoneNumber: +1 888 555 6789
telephoneNumber: +1 888 555 1232
mail: john@example.com manager: cn=Larry Smith,dc=example,dc=com
1
http://tools.ietf.org/html/rfc4510

Сетевая аутентификация
108
objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top
Вышепривёденная запись — это формат LDIF (LDAP Data Interchange Format,
то есть формат обмена данными LDAP). Любая информация, которую вы помещаете в ваш DIT, должна быть в таком формате. Это определено в
RFC2849
2
Хотя данное руководство описывает, как использовать его для централизованной идентификации, LDAP хорош для всего, что затрагивает большое количество запросов к системе, основанной на атрибутах
(имя:значение) и ориентированной преимущественно на чтение. В качестве примеров можно привести адресную книгу, список адресов электронной почты и конфигурацию почтового сервера.
1.1. Установка
Установите демон сервера OpenLDAP и традиционные утилиты управления
LDAP. Они находятся в пакетах slapd и ldap-utils, соответственно.
Установка slapd создаст работающую конфигурацию. В частности, она создаст экземпляр базы данных, которую вы можете использовать для хранения своих данных. Однако суффикс (или базовый DN) этого экземпляра будет определён из доменного имени localhost. Если вы хотите использовать что-то другое, отредактируйте
/etc/hosts и замените доменное имя на подходящее. Например, если вам нужен суффикс
dc=example,dc=com, то ваш файл должен иметь подобную строку:
127.0.1.1 hostname.example.com hostname
Вы можете отменить изменения после установки пакета.
Это руководство будет использовать суффикс базы данных
dc=example,dc=com.
Приступаем к установке:
sudo apt-get install slapd ldap-utils
Начиная с Ubuntu 8.10 slapd проектируется так, чтобы настраиваться самостоятельно, выделяя отдельный DIT для этой цели. Это позволяет
2
http://tools.ietf.org/html/rfc2849

Сетевая аутентификация
109
динамически настраивать slapd без необходимости перезапускать сервис.
Эта конфигурационная база данных состоит из набора текстовых LDIF- файлов, расположенных в
/etc/ldap/slapd.d
. Этот вариант работы известен под разными названиями: метод slapd-config, RTC-метод (от Real Time
Configuration — настройка в реальном времени) или метод cn=config.
Вы всё ещё можете использовать традиционный метод плоского файла
(slapd.conf), но это не рекомендуется; данная функциональность в конечном счете будет убрана.
В настоящее время Ubuntu использует метод slapd-config для настройки slapd, и данное руководство это отражает.
Во время установки вам будет предложено указать учётные данные администратора. Это LDAP-данные для rootDN вашего экземпляра базы данных. По умолчанию DN этого пользователя:
cn=admin,dc=example,dc=com. Также по умолчанию не создается административного пользователя для базы данных slapd-config и вы, следовательно, будете вынуждены использовать внешнюю аутентификацию LDAP для доступа к ней. Мы рассмотрим, как это делается, позднее.
Некоторые классические схемы (cosine, nis, inetorgperson) выпускаются теперь для slapd. Это также включает базовую (core) схему, которая предполагается для любой рабочей схемы.
1.2. Проверка после установки
Процесс установки создаст два DIT. Один для slapd-config и один для ваших данных (dc=example,dc=com). Давайте взглянем:
• Здесь показано, как выглядит дерево (DIT) базы данных slapd-config.
Напомним, что эта база основана на LDIF и находится в
/etc/ldap/slapd.d
:
/etc/ldap/slapd.d/
├── cn=config
│ ├── cn=module{0}.ldif
│ ├── cn=schema
│ │ ├── cn={0}core.ldif
│ │ ├── cn={1}cosine.ldif
│ │ ├── cn={2}nis.ldif
│ │ └── cn={3}inetorgperson.ldif
│ ├── cn=schema.ldif
│ ├── olcBackend={0}hdb.ldif
│ ├── olcDatabase={0}config.ldif
│ ├── olcDatabase={-1}frontend.ldif

Сетевая аутентификация
110
│ └── olcDatabase={1}hdb.ldif
└── cn=config.ldif
Не редактируйте базу slapd-config напрямую. Вносите изменения через протокол LDAP (утилитами).
• Здесь показано, как выглядит дерево slapd-config через LDAP протокол:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config dn: cn=module{0},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: olcBackend={0}hdb,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}hdb,cn=config
Пояснения к записям:
cn=config: глобальные настройки
cn=module{0},cn=config: динамически загружаемый модуль
cn=schema,cn=config: содержит жёстко запрограммированную схему системного уровня
cn={0}core,cn=schema,cn=config: жёстко запрограммированная базовая
(core) схема
cn={1}cosine,cn=schema,cn=config: схема cosine
cn={2}nis,cn=schema,cn=config: схема nis
cn={3}inetorgperson,cn=schema,cn=config: схема inetorgperson
olcBackend={0}hdb,cn=config: тип хранилища 'hdb' заднего плана
olcDatabase={-1}frontend,cn=config: база переднего плана, настройка по умолчанию для других баз данных

Сетевая аутентификация
111
olcDatabase={0}config,cn=config: конфигурационная база slapd
(cn=config)
olcDatabase={1}hdb,cn=config: экземпляр вашей базы данных
(dc=examle,dc=com)
• А здесь показано как выглядит дерево dc=example,dc=com:
ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn
dn: dc=example,dc=com dn: cn=admin,dc=example,dc=com
Пояснения к записям:
dc=example,dc=com: базовый уровень вашего дерева (DIT)
cn=admin,dc=example,dc=com: администратор (rootDN) данного дерева
(заполняется в процессе установки пакета)
1.3. Изменение/заполнение вашей базы данных
Давайте введём некоторые данные в нашу базу. Мы добавим следующее:
• узел (node) с названием People (для хранения пользователей)
• узел с названием Groups (для хранения групп)
• группу с названием miners
• пользователя с именем john
Создайте следующий LDIF файл и назовите его add_content.ldif
:
dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups dn: cn=miners,ou=Groups,dc=example,dc=com objectClass: posixGroup cn: miners gidNumber: 5000
dn: uid=john,ou=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount

Сетевая аутентификация
112
uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 10000
gidNumber: 5000
userPassword: johnldap gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john
Важно, чтобы значения uid и gid в вашем каталоге не совпадали с локальными значениями. Используйте диапазон больших чисел,
начинающийся, например, с 5000. Установка больших значений uid и gid для ldap также позволяет упростить контроль за тем что могут делать локальные пользователи, а что ldap. Подробнее об этом смотрите далее.
Добавляем данные:
ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_content.ldif
Enter LDAP Password: ********
adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Groups,dc=example,dc=com"
adding new entry "cn=miners,ou=Groups,dc=example,dc=com"
adding new entry "uid=john,ou=People,dc=example,dc=com"
Мы можем проверить что информация добавлена правильно с помощью утилиты ldapsearch:
ldapsearch -x -LLL -b dc=example,dc=com 'uid=john' cn gidNumber
dn: uid=john,ou=People,dc=example,dc=com cn: John Doe gidNumber: 5000
Объяснения ключей команды:
-x: "простое" связывание; не будет использоваться метод SASL по умолчанию
-LLL: отключить вывод посторонней информации
uid=john: — «фильтр» для поиска пользователя john

Сетевая аутентификация
113
cn gidNumber: запрос на вывод определенных атрибутов (по умолчанию выводятся все атрибуты)
1.4. Изменение базы данных настройки slapd
Дерево (DIT) slapd-config также может запрашиваться и изменяться. Здесь приведено несколько примеров.
• Используйте ldapmodifyдля добавления индекса (атрибут DbIndex) для вашей {1}hdb,cn=config базы (dc=example,dc=com). Создайте файл с названием uid_index.ldif следующего содержания:
dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: uid eq,pres,sub
Затем выполните команду:
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif
modifying entry "olcDatabase={1}hdb,cn=config"
Вы можете подтвердить изменения следующим способом:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}hdb)' olcDbIndex
dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: uid eq,pres,sub
• Давайте добавим схему. Сначала её нужно преобразовать в формат
LDIF. Вы можете найти не преобразованные схемы в добавление к преобразованным в каталоге
/etc/ldap/schema
• Удаление схемы из базы slapd-config — нетривиальная задача.
Потренируйтесь добавлять схемы на тестовой системе.
• Перед добавлением любой схемы вам следует проверить, какие схемы уже установлены (показан вывод по умолчанию, для состояния "из коробки"):
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=schema,cn=config dn
dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config

Сетевая аутентификация
114
dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config
В следующем примере мы добавим схему CORBA.
1. Создайте конфигурационный файл преобразования schema_convert.conf
,
содержащий следующие строки:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/ldapns.schema include /etc/ldap/schema/pmi.schema
2. Создайте выходной каталог ldif_output
3. Определите индекс схемы:
slapcat -f schema_convert.conf -F ldif_output -n 0 | grep corba,cn=schema
cn={1}corba,cn=schema,cn=config
Когда slapd вводит объекты с тем же родительским DN,
он создает индекс для этого объекта. Индекс обрамляется скобками: {X}.
4. Используйте slapcat для выполнения преобразования:
slapcat -f schema_convert.conf -F ldif_output -n0 -H \ ldap:///cn={1}corba,cn=schema,cn=config -l cn=corba.ldif
Сконвертированная (преобразованная) схема теперь в cn=corba.ldif
5. Редактируйте cn=corba.ldif по достижении следующих атрибутов:
dn: cn=corba,cn=schema,cn=config

Сетевая аутентификация
115
cn: corba
Также удалите следующие строки в конце:
structuralObjectClass: olcSchemaConfig entryUUID: 52109a02-66ab-1030-8be2-bbf166230478
creatorsName: cn=config createTimestamp: 20110829165435Z
entryCSN: 20110829165435.935248Z#000000#000#000000
modifiersName: cn=config modifyTimestamp: 20110829165435Z
Значения ваших атрибутов могут быть другими.
6. Наконец, используйте ldapadd для добавления новой схемы к дереву slapd-config:
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f cn\=corba.ldif
adding new entry "cn=corba,cn=schema,cn=config"
7. Проверьте текущую загруженную схему:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: cn={4}corba,cn=schema,cn=config
Для аутентификации с помощью LDAP внешних приложений и клиентов, они должны быть специфически настроены. Обратитесь к соответствующей документации по поводу деталей.
1.5. Ведение журнала
Ведение журнала активности для slapd обязательно, когда осуществляется решение на базе OpenLDAP, поэтому его требуется включить вручную после установки приложения. Иначе только элементарные сообщения будут

Сетевая аутентификация
116
доступны в журналах. Ведение журналов, как и другие настройки slapd,
подключаются через базу данных slapd-config.
OpenLDAP поставляется с несколькими подсистемами (уровнями)
журналирования, каждая из которых включает подчиненную
(дополнительную). Хороший вариант, который стоит попробовать — это
stats. Страница slapd-config
3
содержит больше информации по иным подсистемам.
Создайте файл logging.ldif со следующим содержимым:
dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: stats
Производим изменения:
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldif
Это породит значительный объем записи в журнал и вы захотите уменьшить уровень детализации когда ваша система станет боевой.
С таким уровнем детализации система журналирования вашего хоста
(rsyslog) может отнимать значительное время процессора, а также пропускать сообщения:
rsyslogd-2177: imuxsock lost 228 messages from pid 2547 due to rate-limiting
Вы можете решить изменить настройки rsyslog. В файл
/etc/rsyslog.conf поместите следующее:
# Disable rate limiting
# (default is 200 messages in 5 seconds; below we make the 5 become 0)
$SystemLogRateLimitInterval 0
А затем перезапустите демон rsyslog:
sudo service rsyslog restart
1.6. Репликация
Сервис LDAP становится всё более и более важным, поскольку большинство сетевых систем начинают зависеть от него. В этом контексте стандартной
3
http://manpages.ubuntu.com/manpages/en/man5/slapd-config.5.html

Сетевая аутентификация
117
практикой является встраивание избыточности (высокой доступности) в
LDAP для защиты от опустошения, которое сделает сервер неработающим.
Это достигается с помощью репликации LDAP.
Репликация доступна через механизм Syncrepl. Он позволят синхронизировать изменения используя модель Потребитель - Поставщик.
Специфический вид репликации, который мы будем реализовывать в этом руководстве, является комбинацией следующих режимов: refreshAndPersist
и delta-syncrepl. Это подразумевает что Потребитель передает измененные записи Поставщику, как только они появляются, но при этом посылаются только актуальные изменения, а не все записи.
1.6.1. Настройка Поставщика
Начнем с настройки Поставщика.
1. Создайте файл LDIF со следующим содержимым и назовите его provider_sync.ldif
:
# Add indexes to the frontend db.
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryCSN eq
- add: olcDbIndex olcDbIndex: entryUUID eq
#Load the syncprov and accesslog modules.
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov
- add: olcModuleLoad olcModuleLoad: accesslog
# Accesslog database definitions dn: olcDatabase={2}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcDbDirectory: /var/lib/ldap/accesslog olcSuffix: cn=accesslog olcRootDN: cn=admin,dc=example,dc=com olcDbIndex: default eq olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
# Accesslog db syncprov.

Сетевая аутентификация
118
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpNoPresent: TRUE
olcSpReloadHint: TRUE
# syncrepl Provider for primary db dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpNoPresent: TRUE
# accesslog overlay definitions for primary db dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config objectClass: olcOverlayConfig objectClass: olcAccessLogConfig olcOverlay: accesslog olcAccessLogDB: cn=accesslog olcAccessLogOps: writes olcAccessLogSuccess: TRUE
# scan the accesslog DB every day, and purge entries older than 7 days olcAccessLogPurge: 07+00:00 01+00:00
Замените rootDN в LDIF файле на соответствующий вашему каталогу.
2. Профиль apparmor для slapd нужно будет отрегулировать для расположения базы accesslog. Отредактируйте
/etc/apparmor.d/local/
usr.sbin.slapd
, добавив следующее:
/var/lib/ldap/accesslog/ r,
/var/lib/ldap/accesslog/** rwk,
Создаём каталог, устанавливаем файл настроек базы данных и перезагружаем профиль apparmor:
sudo -u openldap mkdir /var/lib/ldap/accesslog
sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog
sudo service apparmor reload
3. Добавляем новый контент и, поскольку изменили apparmor,
перезапускаем сервис:
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
sudo service slapd restart
Теперь поставщик настроен.

Сетевая аутентификация
119 1.6.2. Настройка Потребителя
А теперь настроим Потребителя.
1. Установим программное обеспечение как указано в Раздел 1.1,
«Установка» [108]. Убедитесь, что база slapd-config аналогична базе
Поставщика. Особенно проверьте, что одинаковы схемы и суффикс базы.
2. Создайте файл LDIF со следующим содержимым и назовите его consumer_sync.ldif
:
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryUUID eq
- add: olcSyncRepl olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog
- add: olcUpdateRef olcUpdateRef: ldap://ldap01.example.com
Убедитесь, что следующие атрибуты имеют правильные значения:
provider (hostname сервера Поставщика — в этом примере — или IP- адрес)
binddn (DN администратора, которым вы пользуетесь)
credentials (пароль для DN администратора, который вы используете)
searchbase (суффикс базы, которую вы используете)
olcUpdateRef (hostname сервера Поставщика или его IP адрес)
rid (Replica ID, уникальное трёхзначное число, идентифицирующее данную копию. Каждый Потребитель должен иметь минимум один rid)
3. Добавьте новое содержимое:
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif
Вы сделали это! Две базы (суффикс: dc=example,dc=com) будут теперь синхронизированы.

Сетевая аутентификация
120 1.6.3. Тестирование
Как только репликация стартует, вы можете отслеживать ее запустив:
ldapsearch -z1 -LLLQY EXTERNAL -H ldapi:/// -s base contextCSN
dn: dc=example,dc=com contextCSN: 20120201193408.178454Z#000000#000#000000
как на Поставщике, так и на Потребителе. Как только вывод
(
20120201193408.178454Z#000000#000#000000
в примере выше) на обеих машинах совпадет, вы провели репликацию. Каждый раз, как происходят изменения на Поставщике, это значение будет изменяться и должно стать таким же на Поставщике.
Если ваше соединение медленное и/или ваша база LDAP велика, процесс приведения в соответствие contextCSN Потребителя и Поставщика может быть протяженным. Но, вы должны знать, что процесс запускается как только contextCSN Потребителя неизбежно увеличивается.
Если contextCSN Потребителя отсутствует или не совпадает со значением
Поставщика, вы должны остановиться и понять причину проблемы перед тем как продолжить. Попробуйте проверить slapd (syslog — системный журнал) и файлы журналов аутентификации Поставщика, чтобы увидеть удачны ли были запросы аутентификации Потребителя и не возвращались ли ошибки в ответ на запросы данных (они будут видны как множество записей ldapsearch).
Чтобы проверить, что всё работает, просто запросите на Потребителе DN из базы:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b dc=example,dc=com dn
Вы должны увидеть пользователя 'john' и группу 'miners', также как ноды 'People' и 'Groups'.
1.7. Управление доступом
Управление тем, какой тип доступа пользователей (чтение, запись и пр.)
должен быть предоставлен к ресурсам, известно как контроль доступа.
Используемые для этого директивы называются списками контроля
доступа (access control lists, или ACL).
Когда мы устанавливали пакет slapd, различные ACL были установлены автоматически. Мы рассмотрим некоторые важные следствия этих

Сетевая аутентификация
121
умолчаний и, занимаясь этим, мы поймём идею того, как работают ACL и как их настраивать.
Для получения эффективных ACL для запроса LDAP нам надо посмотреть на ACL записи запрашиваемой базы данных также как и на записи специального экземпляра базы данных переднего плана. По умолчанию используются ACL, полученные последним действием, в случае, если они не совпадают с правилами из предыдущего варианта. База данных переднего плана опрашивается во вторую очередь и применяется ACL по первому совпадению среди этих двух источников ACL. Следующие команды покажут соответственно ACL базы hdb ("dc=example,dc=com") и они же из базы переднего плана:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}hdb)' olcAccess
dn: olcDatabase={1}hdb,cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self write by dn="cn=admin,dc=example,dc=com" write by *
read rootDN всегда имеет полный доступ к своей базе данных.
Добавление их к ACL обеспечивает полную конфигурацию, но при этом становится причиной снижения быстродействия slapd.
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={-1}frontend)' olcAccess
dn: olcDatabase={-1}frontend,cn=config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,
cn=external,cn=auth manage by * break olcAccess: {1}to dn.exact="" by * read olcAccess: {2}to dn.base="cn=Subschema" by * read
Самый первый ACL очень важен:
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
Это может быть представлено по-другому для лучшего понимания:
to attrs=userPassword by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write

Сетевая аутентификация
122
by * none to attrs=shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
Этот составной ACL (их два) предписывает следующее:
• Анонимный 'auth' доступ обеспечивается к атрибуту userPassword для осуществления изначального соединения. Возможно потребуется counter- intuitively для 'by anonymous auth' даже когда анонимный доступ к DIT
не требуется. Как только удаленное соединение установлено, требуется аутентификация (см. следующий пункт).
• Должна пройти аутентификация, поскольку все пользователи имеют доступ на чтение (вследствие 'by self write') к атрибуту userPassword.
• Атрибут userPassword не доступен для всех других пользователей за исключением rootDN, который имеет полный доступ.
• Для того чтобы пользователи могли менять собственные пароли,
используя passwd или иные утилиты, атрибут shadowLastChange должен быть доступен как только пользователь авторизовался.
Поиск по этому DIT может быть проведен анонимно из-за 'by * read' в данном ACL:
to *
by self write by dn="cn=admin,dc=example,dc=com" write by * read
Если это нежелательно, то вам потребуется изменить набор ACL. Для принуждения к аутентификации в процессе связывающего (bind) запроса в качестве альтернативы (или в комбинации с измененным ACL) вам надо использовать директиву 'olcRequire: authc'.
Как указывалось ранее, для базы slapd-config не создаётся никаких административных пользователей. Однако существует идентификация
SASL, которая обеспечивает полный доступ к ней. Она подобна суперпользователю для localhost (root/sudo). Вот она:
dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
Следующая команда покажет ACL базы slapd-config:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={0}config)' olcAccess

Сетевая аутентификация
123
dn: olcDatabase={0}config,cn=config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,
cn=external,cn=auth manage by * break
Поскольку это SASL идентификация, нам потребуется механизм SASL, когда запрашивается LDAP утилита, о которой идет речь и мы увидим это много раз в данном руководстве. Это внешний (EXTERNAL) механизм. Смотрите предыдущую команду в качестве примера. Обратите внимание:
1. Вы должны использовать sudo для идентификации как root, чтобы ACL
сработали.
2. Механизм EXTERNAL работает через IPC (доменные сокеты UNIX). Это означает, что вы должны использовать ldapi формат адресации (URI).
Короткий путь для получения всех ACL выглядит следующим образом:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcAccess=*)' olcAccess olcSuffix
Есть ещё много что сказать по контролю доступа. Смотрите страницу руководства по slapd.access
4 1.8. TLS
Когда происходит аутентификация на OpenLDAP сервере, лучше всего это делать, используя зашифрованную сессию. Это может быть достигнуто использованием транспортного уровня шифрования (TLS).
Здесь мы организуем свой собственный Центр сертификации (Certificate
Authority — CA) и затем создадим и подпишем сертификат нашего
LDAP сервера от имени этого CA. Поскольку slapd скомпилирован с использованием библиотеки gnutls, мы будем использовать для выполнения этих задач утилиту certtool.
1. Установите пакеты gnutls-bin и ssl-cert:
sudo apt-get install gnutls-bin ssl-cert
2. Создайте секретный ключ для центра сертификации
sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
3. Создаём временный файл
/etc/ssl/ca.info для определения CA:
cn = Example Company
4
http://manpages.ubuntu.com/manpages/en/man5/slapd.access.5.html

Сетевая аутентификация
124
ca cert_signing_key
4. Создаём самоподписанный сертификат центра:
sudo certtool --generate-self-signed \ --load-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/ca.info \ --outfile /etc/ssl/certs/cacert.pem
5. Создайте секретный ключ для сервера:
sudo certtool --generate-privkey \ --bits 1024 \ --outfile /etc/ssl/private/ldap01_slapd_key.pem
Замените ldap01 в имени файла на имя вашего сервера
(hostname). Имена сертификата и ключа для узла и сервиса,
которые будут их использовать, помогут сохранять ясность понимания.
6. Создайте файл
/etc/ssl/ldap01.info
, содержащий:
organization = Example Company cn = ldap01.example.com tls_www_server encryption_key signing_key expiration_days = 3650
Данный сертификат будет действителен 10 лет. Вы можете выбрать другое значение.
7. Создайте сертификат для сервера:
sudo certtool --generate-certificate \ --load-privkey /etc/ssl/private/ldap01_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem \ --load-ca-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/ldap01.info \ --outfile /etc/ssl/certs/ldap01_slapd_cert.pem
Создайте файл certinfo.ldif со следующим содержимым (подставляйте свои значения, наш пример предполагает использование https://www.cacert.org):
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
- add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem
- add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem
Используйте команду ldapmodify, чтобы сообщить slapd о работе нашего
TLS через базу данных slapd-config:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldif

Сетевая аутентификация
125
Вопреки распространённому мнению, вам не обязательно указывать
ldaps:// в
/etc/default/slapd чтобы использовать шифрование. Вам достаточно указать:
SLAPD_SERVICES="ldap:/// ldapi:///"
LDAP поверх TLS/SSL (ldaps://) осуждается в пользу StartTLS.
Последний опирается на существующую LDAP сессию
(прослушивание TCP порта 389), защищённую TLS/SSL в то время как LDAPS, подобно HTTPS, является другим защищённым-с-самого- начала протоколом, который работает через TCP порт 636.
Сужаем права на владение и доступ:
sudo adduser openldap ssl-cert
sudo chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem
sudo chmod g+r /etc/ssl/private/ldap01_slapd_key.pem
sudo chmod o-r /etc/ssl/private/ldap01_slapd_key.pem
Перезапустите OpenLDAP:
sudo service slapd restart
Проверьте журналы вашего хоста (/var/log/syslog), чтобы убедиться, что сервер запущен правильно.
1.9. Репликация и TLS
Если вы настроили репликацию между серверами, существует общая практика шифровать (StartTLS) трафик репликации для исключения прослушивания. Лучше всего использовать шифрование с аутентификацией, как мы делали выше. В этом разделе мы будем основываться на проделанной работе по TLS-аутентификации.
Здесь предполагается, что вы настроили репликацию между Поставщиком и Провайдером в соответствии с Раздел 1.6, «Репликация» [116] и настроили TLS для аутентификации на Поставщике, следуя инструкциям
Раздел 1.8, «TLS» [123].
Как утверждалось ранее, цель (для нас) репликации — это высокая доступность сервиса LDAP. Поскольку мы имеем TLS для аутентификации на
Поставщике, мы нуждаемся в этом и на Потребителе. Однако в дополнение к этому мы хотим зашифровать трафик репликации. Что остается сделать,
так это создать ключ и сертификат для Потребителя и затем провести соответствующую настройку. Мы создадим ключ и сертификат на

Сетевая аутентификация
126
Поставщике для предотвращения создания другого Центра сертификатов,
а затем перенесем необходимые данные на Потребителя.
1. На Поставщике:
Создаём промежуточный каталог (который будет использоваться для переноса) и затем секретный ключ Потребителя:
mkdir ldap02-ssl
cd ldap02-ssl
sudo certtool --generate-privkey \ --bits 1024 \ --outfile ldap02_slapd_key.pem
Создаём информационный файл ldap02.info для сервера Потребителя;
подставляйте свои соответствующие значения:
organization = Example Company cn = ldap02.example.com tls_www_server encryption_key signing_key expiration_days = 3650
Создаём сертификат Потребителя:
sudo certtool --generate-certificate \ --load-privkey ldap02_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem \ --load-ca-privkey /etc/ssl/private/cakey.pem \ --template ldap02.info \ --outfile ldap02_slapd_cert.pem
Получаем копию сертификата CA:
cp /etc/ssl/certs/cacert.pem .
Всё готово. Теперь переносим каталог ldap02-ssl на сервер Потребителя.
Здесь мы использовали scp (данные изменяем соответственно):
cd ..
scp -r ldap02-ssl user@consumer:
2. На Потребителе:
Настраиваем TLS-аутентификацию:
sudo apt-get install ssl-cert
sudo adduser openldap ssl-cert
sudo cp ldap02_slapd_cert.pem cacert.pem /etc/ssl/certs
sudo cp ldap02_slapd_key.pem /etc/ssl/private
sudo chgrp ssl-cert /etc/ssl/private/ldap02_slapd_key.pem
sudo chmod g+r /etc/ssl/private/ldap02_slapd_key.pem
sudo chmod o-r /etc/ssl/private/ldap02_slapd_key.pem

Сетевая аутентификация
127
Создаём файл
/etc/ssl/certinfo.ldif со следующим содержимым
(исправляйте соответственно):
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
- add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap02_slapd_cert.pem
- add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap02_slapd_key.pem
Настраиваем базу slapd-config:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif
Настраиваем
/etc/default/slapd как на Поставщике (SLAPD_SERVICES).
3. На Потребителе:
Настраиваем TLS для репликации на стороне Потребителя. Изменяем существующий атрибут olcSyncrepl присоединяя некоторые TLS опции.
Делая это, мы увидим в первый раз как изменять значения атрибутов.
Создайте файл consumer_sync_tls.ldif со следующим содержимым:
dn: olcDatabase={1}hdb,cn=config replace: olcSyncRepl olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com"
logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog starttls=critical tls_reqcert=demand
Дополнительные опции определяют, соответственно, что Потребитель должен использовать StartTLS и что CA сертификат требуется для идентификации Поставщика. Также обратите внимание на LDIF
синтаксис для изменения значений атрибута ('replace').
Применяем эти изменения:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f consumer_sync_tls.ldif
И перезапустите slapd:

Сетевая аутентификация
128
sudo service slapd restart
4. На Поставщике:
Проверяем, что TLS сессия устанавливается. В
/var/log/syslog
,
предполагая что вы настроили уровень журналирования 'conns', вы сможете увидеть подобные записи:
slapd[3620]: conn=1047 fd=20 ACCEPT from IP=10.153.107.229:57922 (IP=0.0.0.0:389)
slapd[3620]: conn=1047 op=0 EXT oid=1.3.6.1.4.1.1466.20037
slapd[3620]: conn=1047 op=0 STARTTLS
slapd[3620]: conn=1047 op=0 RESULT oid= err=0 text=
slapd[3620]: conn=1047 fd=20 TLS established tls_ssf=128 ssf=128
slapd[3620]: conn=1047 op=1 BIND dn="cn=admin,dc=example,dc=com" method=128
slapd[3620]: conn=1047 op=1 BIND dn="cn=admin,dc=example,dc=com" mech=SIMPLE ssf=0
slapd[3620]: conn=1047 op=1 RESULT tag=97 err=0 text
1.10. Установление подлинности через LDAP
Поскольку вы имеете работающий LDAP сервер, вам потребуется установить библиотеки на клиенте, которые будут знать, как и когда к нему (серверу) подсоединяться. На Ubuntu это традиционно производится установкой пакета libnss-ldap Этот пакет добавит другие инструменты,
которые будут помогать вам на шаге настройки. Теперь установим этот пакет:
sudo apt-get install libnss-ldap
У вас будут запрошены подробности по вашему LDAP серверу. Если вы сделаете ошибку, вы можете попробовать снова, используя:
sudo dpkg-reconfigure ldap-auth-config
Результат диалога можно увидеть в
/etc/ldap.conf
. Если ваш сервер требует опции, недоступные в меню, редактируйте этот файл самостоятельно.
Теперь настраиваем LDAP профиль для NSS:
sudo auth-client-config -t nss -p lac_ldap
Настраиваем систему на использование LDAP для аутентификации:
sudo pam-auth-update
Из меню, выберите LDAP и любые другие механизмы аутентификации,
которые вам требуются.

Сетевая аутентификация
129
Теперь вы имеете возможность входить в систему, используя учётные записи на основе LDAP.
Клиентам LDAP потребуются ссылки на несколько серверов, если используется репликация. В
/etc/ldap.conf вам надо иметь что-то похожее:
uri ldap://ldap01.example.com ldap://ldap02.example.com
Запросы имеют таймаут и будет попытка обратиться к Потребителю
(ldap02), если Поставщик (ldap01) станет недоступным.
Если вы собираетесь использовать LDAP для хранения пользователей
SAMBA, вам потребуется настроить SAMBA сервер на использование LDAP.
Смотрите Раздел 2, «Samba и LDAP» [135] для подробностей.
Альтернативой пакету libnss-ldap является пакет libnss-ldapd. Однако он добавит в систему пакет nscd, который, возможно, нежелателен.
Просто впоследствии удалите его.
1.11. Управление пользователями и группами
Пакет ldap-utils поставляется с достаточным количеством утилит для управления каталогами, но необходимость использовать длинные строки с опциями делает их применение обременительным. Пакет ldapscripts содержит обёрточные сценарии (wrapper scripts) для этих утилит, которые некоторые находят более удобными в использовании.
Установите пакет:
sudo apt-get install ldapscripts
Затем отредактируйте файл
/etc/ldapscripts/ldapscripts.conf
, чтобы получить что-то наподобие следующего:
SERVER=localhost
BINDDN='cn=admin,dc=example,dc=com'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=example,dc=com'
GSUFFIX='ou=Groups'
USUFFIX='ou=People'
MSUFFIX='ou=Computers'
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000
Затем редактируем файл ldapscripts.passwd для получения нечто похожего на следующее:

Сетевая аутентификация
130
sudo sh -c "echo -n 'secret' > /etc/ldapscripts/ldapscripts.passwd"
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd
Замените «secret» на действующий пароль для пользователя rootDN
вашей базы.
Теперь этот сценарий готов помочь вам в управлении вашим каталогом.
Вот несколько примеров его использования:
• Создание нового пользователя:
sudo ldapadduser george example
Это создаст пользователя с uid george и установит gid example в качестве первичной пользовательской группы.
• Изменение пароля пользователя:
sudo ldapsetpasswd george
Changing password for user uid=george,ou=People,dc=example,dc=com
New Password:
New Password (verify):
• Удаление пользователя:
sudo ldapdeleteuser george
• Добавление группы:
sudo ldapaddgroup qa
• Удаление группы:
sudo ldapdeletegroup qa
• Добавление пользователя в группу:
sudo ldapaddusertogroup george qa
Вы теперь можете увидеть атрибут memberUid для группы qa со значением для george.
• Удаление пользователя из группы:
sudo ldapdeleteuserfromgroup george qa
Атрибут memberUid теперь будет удален из группы qa.

Сетевая аутентификация
131
• Сценарий ldapmodifyuser позволяет добавлять, удалять или заменять пользовательские атрибуты. Сценарий использует тот же синтаксис, что и утилита ldapmodify. Например:
sudo ldapmodifyuser george
# About to modify the following entry :
dn: uid=george,ou=People,dc=example,dc=com objectClass: account objectClass: posixAccount cn: george uid: george uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/george loginShell: /bin/bash gecos: george description: User account userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk=
# Enter your modifications here, end with CTRL-D.
dn: uid=george,ou=People,dc=example,dc=com
replace: gecos
gecos: George Carlin
Поле имени пользователя gecos теперь «George Carlin».
• Приятной особенностью ldapscripts является система шаблонов.
Шаблоны позволяют вам настраивать атрибуты пользователей, групп и компьютерных объектов. Например, чтобы разрешить шаблон
пользователей, отредактируйте
/etc/ldapscripts/ldapscripts.conf
, изменив:
UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
В каталоге
/etc/ldapscripts имеются образцы шаблонов. Скопируйте или переименуйте файл ldapadduser.template.sample в
/etc/ldapscripts/
ldapadduser.template
:
sudo cp /usr/share/doc/ldapscripts/examples/ldapadduser.template.sample \ /etc/ldapscripts/ldapadduser.template
Отредактируйте новый шаблон для добавления желаемых атрибутов.
Следующее создаст новых пользователей с объектным классом inetOrgPerson:
dn: uid=,,
objectClass: inetOrgPerson objectClass: posixAccount cn:
sn:
1   2   3   4   5   6   7   8   9   ...   16


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

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


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