Настройка аутентификации пользователей – openldap и ubuntu на практике
Где работаем: ldap-client
Перейдём к настройке клиентской рабочей станции. Для начала установим необходимые пакеты:
# apt-get install ldap-utils libnss-ldapd libpam-ldapd
При установке нам будут предложены некоторые настройки . Далее мы всё равно внесём в конфигурацию изменения, но это нужно сделать, чтобы все пакеты нормально установились:
Прежде чем делать запросы к LDAP-серверу, проверим параметры клиента в /etc/ldap/ldap.conf:
BASE dc=example,dc=com
URI ldap://ldap-srv.example.com
TLS_CACERT /etc/ssl/certs/rootca.crt
TLS_REQCERT demand
TLS_CRLFILE /etc/ssl/rootca.crl
TIMELIMIT 15
TIMEOUT 20
Конечно, для того, чтобы всё заработало, сертификат нашего Certificate Authority (rootca.crt) и CRL-файл (rootca.crl) должны быть на месте.
Проверим работоспособность простым запросом. Результат опустим (Вы должны увидеть всё DIT):
$ ldapsearch -xZZLLLWD cn=nssproxy,ou=users,dc=example,dc=com Enter LDAP Password: dn: dc=example,dc=com ...
Поправим конфигурацию нашей локальной службы имён LDAP в файле /etc/nslcd.conf. Измените значение директивы bindpw
на пароль записи cn=nssproxy,ou=users,dc=example,dc=com
, который мы задавали ранее:
uid nslcd
gid nslcd
uri ldap://ldap-srv.example.com
base dc=example,dc=com
binddn cn=nssproxy,ou=users,dc=example,dc=com
bindpw пароль.пользователя.nssproxy
rootpwmoddn cn=admin,dc=example,dc=com
base group ou=groups,dc=example,dc=com
base passwd ou=users,dc=example,dc=com
base shadow ou=users,dc=example,dc=com
bind_timelimit 5
timelimit 10
idle_timelimit 60
ssl start_tls
tls_reqcert allow
tls_cacertfile /etc/ssl/certs/rootca.crt
nss_initgroups_ignoreusers bin,daemon,games,lp,mail,nobody,nslcd,root,sshd,sync,uucp
nss_initgroups_ignoreusers sys,man,news,proxy,www-data,backup,list,irc,gnats,landscape
Краткое описание использованных директив:
Поменяем права доступа к nslcd.conf, потому что теперь в нём хранится информация для аутентификации:
# chmod 600 /etc/nslcd.conf # chown nslcd:nslcd /etc/nslcd.conf
Проверим содержимое /etc/nsswitch.conf:
passwd: compat ldap
group: compat ldap
shadow: compat ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis ldap
Убедимся в том, что демон nslcd запускается при старте системы и перезапустим его:
# update-rc.d nslcd defaults System start/stop links for /etc/init.d/nslcd already exist. # service nslcd restart * Starting LDAP connection daemon nslcd [ OK ]
Убедимся, что в системе ldap-clientНЕТ учётной записи с именем nssproxy. Следующая команда должна выполняться без результата:
$ grep nssproxy /etc/passwd
Убедимся так же, что кэширующий демон службы имён загружается при старте системы и перезапустим его:
# update-rc.d nscd defaults System start/stop links for /etc/init.d/nscd already exist. # service nscd restart * Restarting Name Service Cache Daemon nscd ...done.
Сделаем пару запросов к LDAP-серверу, используя настроенную нами систему:
$ getent passwd test.user test.user:x:1101:1101:Test User:/home/test.user:/bin/bash $ getent group test.group test.group:*:1101:
Для того, чтобы проверить доступность информации о пароле потребуется выполнить getent от имени пользователя root:
# getent shadow test.user test.user:*:15140:0:99999:7:::0
Не беспокойтесь, хэш пароля мы видеть не должны.
Отлично, всё работает! Вышеприведённые результаты команд означают, что система ldap-client может осуществлять поиск по данным пользователей и групп в нашем каталоге OpenLDAP.
Создадим домашний каталог нашего тестового пользователя и установим для него права доступа:
# mkdir /home/test.user # chown test.user:test.group /home/test.user
Запустим в отдельном терминале вывод журнала аутентификации:
# tail -f /var/log/auth.log
В другом терминале выполним:
$ su - test.user
Мы должны получить приглашение командной строки пользователя test.user.
Теперь попробуем зайти на машину ldap-client по сети с использованием ssh под учётной записью test.user.
Демон ssh в конфигурации по-умолчанию должен работать с поддержкой PAM (и, соответственно, поддерживать аутентификацию через LDAP). Но на всякий случай приведём рабочую конфигурацию /etc/ssh/sshd_config:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
LogLevel INFO
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
AddressFamily inet
AllowGroups sysadmin test.group
SyslogFacility AUTHPRIV
PasswordAuthentication yes
AllowTcpForwarding no
ClientAliveInterval 120
ClientAliveCountMax 2
Часть файла до пустой строки — конфигурация по-умолчанию. Далее — добавленное нами. Обратите внимание на строку с директивой AllowGroups
. С помощью неё мы ограничиваем список групп пользователей, которые могут быть аутентифицированы через ssh. За информацией по остальным директивам обратитесь к документации.
Проверим работу с использованием какой-нибудь третьей машины. Например, выполним на нашем DNS-сервере (dns-srv):
$ ssh [email protected] Password: test.user@ldap-client:~$
Вывод последней команды сокращён. Если появляется приглашение командной строки, значит всё в порядке!
Где работаем: ldap-srv
Давайте заглянем в /var/log/slapd.log на нашем сервере. Мы можем обнаружить там следующие строки:
ldap-srv slapd[1304]: <= mdb_equality_candidates: (objectClass) not indexed ldap-srv slapd[1304]: <= mdb_equality_candidates: (uid) not indexed
С помощью следующей команды мы можем убедиться, что в нашем каталоге пока нет никаких индексов:
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com -b olcDatabase={1}mdb,cn=config olcDbIndex Enter LDAP Password: dn: olcDatabase={1}mdb,cn=config
Это значит, что в нашей базе данных надо создать индексы для атрибутов из журнала /var/log/slapd.log. Поэтому создадим ещё один LDIF-файл 5-posixAccount.indexes.ldif и запишем в него:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: default pres,eq
-
add: olcDbIndex
olcDbIndex: uid
-
add: olcDbIndex
olcDbIndex: cn,sn pres,eq,sub
-
add: olcDbIndex
olcDbIndex: objectClass eq
-
add: olcDbIndex
olcDbIndex: memberUid eq
-
add: olcDbIndex
olcDbIndex: uniqueMember eq
-
add: olcDbIndex
olcDbIndex: uidNumber
-
add: olcDbIndex
olcDbIndex: gidNumber eq
Зачем мелочиться? Укажем по-больше индексируемых атрибутов. И загрузим конфигурацию в наш каталог:
$ ldapadd -xZZWD cn=admin,dc=example,dc=com -f posixAccount.indexes.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Проверим результат изменений:
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com -b olcDatabase={1}mdb,cn=config olcDbIndex Enter LDAP Password: dn: olcDatabase={1}mdb,cn=config olcDbIndex: default pres,eq olcDbIndex: uid olcDbIndex: cn,sn pres,eq,sub olcDbIndex: objectClass eq olcDbIndex: memberUid eq olcDbIndex: uniqueMember eq olcDbIndex: uidNumber olcDbIndex: gidNumber eq
Отлично! Теперь в журнале /var/log/slapd.log не должно быть ошибок.
Аутентификация с использованием ldap в linux
В Linux поиск информации о пользовательских аккаунтах осуществляется в абстрактных «базах данных» passwd, groups и shadow, доступ к которым предоставляет так называемый Переключатель Сервисов Имён (Name Service Switch), являющийся интерфейсной прослойкой между пользовательскими приложениями и реальными формами представления данных об обьектах.
Таким образом, NSS позволяет абстрагироваться от конкретного представления данных и берёт на себя взаимодействие с необходимыми службами по понятным им протколам. Собственно авторизацию пользователя в системе обеспечивает служба PAM (Подключаемые Модули Аутентификации), которая в соответствии со своим названием имеет модульную архитектуру, позволяющую максимально гибко проектировать процесс аутентификации, объединяя модули по принципу стэка.
Настройка жесткого диска
Это можно сделать вручную (пункт Manual), однако для большинства случаев подойдет и дефолтный вариант –
Guide – use entire disk and set up LVMLVM (Logical Volume Manager) – подсистема, позволяющая объединить несколько дисков в один, а затем разбить его удобным образом.
Далее инсталлятор предлагает нам выбрать диск и предупреждает, что после подтверждения диск будет отформатирован
Необходимо указать схему разбиения. Я выбираю пункт по-умолчанию All files in one partition
После инсталлятор просит подтверждения применяемого разделения и предупреждает о форматировании диска, выбираем Yes
Инсталлятор предлагает нам указать некоторую информацию о нас
После чего, основываясь на указанные нами данные в предыдущем шаге, генерирует доменное имя. Его можно изменить, тогда нам понадобится ввести полное доменное имя. Рекомендуется выбирать поддомен домена DNS, которым мы управляем. Например, если мы зарегистрировали домен livelinux.org, мы можем использовать ldap.livelinux.org. ldap в данном случае – имя хоста.Выделенная база LDAP определяется автоматически.
На скриншоте представлено конечное имя домена
Начался процесс инициализации
По завершении установки нас приветствует окно настройки домена. На этом этапе нам нужно определить роль домена.
Для этого есть четыре опции:
Для создания нового домена, выбираем первую опцию –
Create a new UCS domain
, далее мы сможем посмотреть процесс создания домена
Первый запуск, подтверждение почты и обновление системы
После установки системы нас ждет инструкция по открытию
Web Management Interface
в браузере
Открываю браузер и пишу в адресной строке 192.168.0.103
где 192.168.0.103 — ip адрес сервера, который мы назначили при установке
Браузер предупреждает меня о небезопасности сайта, после чего я попадаю на главную страницу
Настройка контейнера nginx для авторизации в active directory (ldap)
Мы проверили работу демона аутентфикации nginx-ldap-auth, теперь можно перейти к настройке Nginx. В данной статье, покажу, как настроить авторизацию для docker registry с учетной записью Active Directory. Nginx будем запускать в docker контейнере. Создадйте Dockerfile:
FROM nginx COPY nginx-ldap-auth.conf /etc/nginx/conf.d/nginx-ldap-auth.conf
В директории с Dockerfile создадйте файл конфигурации nginx-ldap-auth.conf. Содержание файла:
Следующий пункт – выбор языка установки
Поддерживаемые языки: английский, французский и немецкий. Выбираем
Russian
. Установка продолжится на английском, но это необходимый шаг, т.к. следующий пункт (
Select your location
) предлагает страны на выбор, основываясь на выбранном нами языке
Установка пароля для root пользователя
Инсталлятор предупреждает нас о том, что пароль должен быть надежным. Он может содержать буквы, цифры и знаки препинания. Минимальная длина – 8 символов. На скриншоте активирован чек-бокс
Show Password in Clear
, отображающий вводимый мною пароль
Пользователь создан. авторизуемся под ним в nextcloud
Nextcloud встречает нас разделом Все файлы, где хранятся предустановленные по умолчанию файлы
Если у Вас есть опыт взаимодействия с облачными хранилищами, то Вы без труда разберетесь в интерфейсе
Мы видим окно, в котором нас предупреждают о том, что компания собирает статистику о наших действиях в магазине
Жмем
Continue
. Рекомендуется поставить галочку напротив пункта
Do not show this message again
, чтобы не наблюдать при каждом входе данное сообщение
Основные настройки ldap
Перейдите в Администрирование » Приложения и активируйте Единый вход. Затем нажмите Настройки и выберите LDAP в списке.
Если вы планируете использовать систему только внутри вашей компании, выберите опцию “Использовать только единый вход”. В результате будет использоваться LDAP форма авторизации без необходимости регистрации в сообществе.
В случае, если нам необходимо удалить файлы
Удаленные файлы перемещаются в корзину, где мы можем восстановить их или окончательно удалить.
Вам предлагается обзор конфигурации
Инсталлятор предлагает сохранить конфигурацию. Если все устраивает –
Continue
Инсталлятор просит подтвердить предстоящие изменения – Yes
Устранение неполадок
Во время тестирования соединения или обработки пользовательских данных при входе в систему, вы можете столкнуться с ошибками соединения, привязки имени пользователя и пр.
После чего начинаем установку
Где мы выбираем следующие пункты
Наш файл загрузился
Следующий этап – подтверждение настроек
После чего начинается процесс применения финальных настроек
Finish! установка univention успешно завершена
Вводим свою почту
Начинаем обновление системы жмем software update
В открывшемся окне install release update
Ищем приложение nextcloud
Приложение установлено
Задаем ему пароль
Выбор местоположения
Поскольку мы выбрали русский язык, в данном списке нам предлагают выбрать
Russian Federation
Непосредственно процесс установки
Инсталлятор предупреждает нас, что страница будет перезагружена после завершения обновления
Выбор раскладки клавиатуры
Из-за предыдущих шагов нам предлагают русскую раскладку, меняем на
American English
Первый пункт – выбор типа установки.
Выбираем самый оптимальный вариант –
Start with default settings
Расширенные настройки ldap
Если у вас определенная конфигурация вашего LDAP сервера, перейдите к Расширенным настройкам, где вы можете управлять следующим:
Создание пользователя и первый запуск nextcloud
Для создания нового пользователя необходимо перейти в категорию
Настройка и запуск сервиса аутентификации nginx-ldap-auth
Для запуска сервиса nginx-ldap-auth будем использовать docker. Для начала нужно клонировать репозиторий с сервисом с github:
На следующем этапе нам предлагают выбрать программные компоненты, которые мы хотим включить в первоначальную установку
На текущем этапе, оставляем все по умолчанию.
После установки нам снова предлагают авторизоваться
Авторизуемся под пользователем
Настройка часового пояса
Мой выбор –
Moscow