- Вопрос или проблема
- Ответ или решение
- Управление доступом пользователей в FreeBSD с использованием OpenLDAP: полное руководство
- Введение
- Шаг 1: Установка OpenLDAP на сервере
- Шаг 2: Настройка клиентов OpenLDAP на сервере FreeBSD
- Шаг 3: Интеграция двухфакторной аутентификации (2FA)
- Шаг 4: Управление доступом на уровне сервера
- Заключение
Вопрос или проблема
У меня есть большое количество серверов (все на FreeBSD). Мне нужно создать общую систему управления доступом для них (когда новые разработчики присоединяются, я хочу добавить их данные доступа на 1 сервер и больше нигде). Я думаю (подобно LDAP), что должен быть общий сервер, на котором я имею систему управления доступом пользователей (например, LDAP). Когда новый пользователь, который еще не входил на сервер, пытается войти в систему, на этом этапе система, на которую пользователь хочет войти, проверяет в общей системе управления доступом пользователей, а затем выполняет аутентификацию и позволяет пользователю войти.
Необходимые функции:
- Поддержка публичного/приватного ключа для входа (контроль/валидация со стороны общей системы управления доступом пользователей)
- Поддержка двухфакторной аутентификации (Google Authenticator) (контроль/валидация со стороны общей системы управления доступом пользователей)
- Доступ пользователя должен контролироваться на 2 уровне.
- Пользователь не существует в общем сервере → попытка входа должна завершиться неудачей.
- Пользователь существует, но не имеет прав на вход на конкретный сервер → попытка входа на заблокированный сервер должна завершиться неудачей.
- Если я создам новый сервер, не добавляя пользователей вручную, аутентификация пользователей должна работать с общего сервера (даже их создание в каталоге должно быть автоматическим, каким-то образом)
- Если я добавлю нового пользователя на общий сервер, то этот пользователь должен иметь возможность войти на любой из серверов.
Пожалуйста, подскажите, как мне поступить. Я пытаюсь настроить OpenLDAP, но не могу, так как нет подходящего пошагового руководства. Любое другое предложение также приветствуется. Я изложил свои требования и хотел бы видеть их выполненными тем или иным образом.
Я пытался настроить клиент OpenLDAP на FreeBSD с использованием образа OpenLDAP Docker (настроенный на сервере Ubuntu, так как Docker имеет некоторые ограничения для запуска на FreeBSD) в качестве общего сервера, но не нашел руководства по пошаговому процессу. Также я не нашел никакого руководства по добавлению 2FA в OpenLDAP.
Ответ или решение
Управление доступом пользователей в FreeBSD с использованием OpenLDAP: полное руководство
Введение
Для организации централизованного управления пользовательским доступом в рамках множества серверов FreeBSD стоит рассмотреть использование OpenLDAP. Данное решение позволяет добавлять пользователей и управлять их правами доступа с одного центрального сервера, обеспечивая тем самым удобство и простоту администрирования. В этой статье мы рассмотрим основные шаги для реализации OpenLDAP в вашем окружении, а также интеграцию двухфакторной аутентификации (2FA) и использования SSH ключей.
Шаг 1: Установка OpenLDAP на сервере
-
Установка пакетов на FreeBSD
На сервере, который будет использоваться в качестве LDAP-сервера, выполните установку необходимых пакетов:
pkg install openldap-server openldap-client
-
Настройка OpenLDAP
Создайте основной файл конфигурации LDAP:
mkdir -p /usr/local/etc/openldap cp /usr/local/etc/openldap/slapd.conf.sample /usr/local/etc/openldap/slapd.conf
В файле
slapd.conf
настройте базовую DN и другие важные параметры. Например:database bdb suffix "dc=example,dc=com" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}ваш_пароль
-
Запуск сервиса
Далее необходимо запустить LDAP-сервер. Это можно сделать с помощью команды:
service slapd start
-
Создание базы данных пользователей
Подготовьте LDIF файл, который будет содержать данные вашей иерархии пользователей. Например:
dn: dc=example,dc=com objectClass: dcObject dc: example dn: cn=admin,dc=example,dc=com objectClass: organizationalRole cn: admin dn: ou=users,dc=example,dc=com objectClass: organizationalUnit ou: users
Импортируйте его в LDAP:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f путь_к_файлу.ldif
Шаг 2: Настройка клиентов OpenLDAP на сервере FreeBSD
-
Установка клиента
На каждом сервере FreeBSD, который будет использоваться как клиент, установите необходимые пакеты:
pkg install openldap-client
-
Настройка конфигурации клиента
Скопируйте файл конфигурации клиента и настройте его под ваши нужды:
cp /usr/local/etc/openldap/ldap.conf.sample /usr/local/etc/openldap/ldap.conf
В файле
ldap.conf
укажите адрес вашего LDAP-сервера и базу:BASE dc=example,dc=com URI ldap://ip_адрес_серверa
-
Настройка PAM и NSS
Для аутентификации через LDAP потребуется настроить PAM и NSS, добавив соответствующие строки в файлы
/etc/nsswitch.conf
и/etc/pam.d/
.Пример конфигурации
nsswitch.conf
:passwd: files ldap group: files ldap shadow: files ldap
Для PAM добавьте в файл
/etc/pam.d/system
следующее:auth required pam_unix.so auth required pam_ldap.so
Шаг 3: Интеграция двухфакторной аутентификации (2FA)
Для реализации двухфакторной аутентификации можно использовать Google Authenticator. Вам потребуются дополнительные пакеты:
pkg install google-authenticator
-
Настройка PAM для 2FA
В файл
/etc/pam.d/system
добавьте следующее:auth required pam_google_authenticator.so
-
Настройка пользователей
На каждом сервере, где нужны права доступа, каждый пользователь должен инициализировать Google Authenticator:
google-authenticator
Это обеспечит генерацию QR-кода, который пользователь может отсканировать в приложении для 2FA, а также сгенерирует временные ключи.
Шаг 4: Управление доступом на уровне сервера
Для контроля доступа вам нужно реализовать механизм проверки прав пользователя на уровне сервера. Это можно сделать с использованием LDAP атрибутов и правил в конфигурации сервера.
-
Создание атрибутов доступа
Храните информацию о том, какие пользователи имеют доступ к каким серверам в LDAP, добавив соответствующие атрибуты в LDAP записи пользователей.
-
Модернизация процессов аутентификации
В каждом сервере при аутентификации пользователя проверяйте его права доступа к текущему серверу. Если пользователь не имеет доступа, завершайте сессию.
Заключение
Использование OpenLDAP для управления пользователями в сети из нескольких серверов FreeBSD предлагает гибкое и централизованное решение. С помощью 2FA и SSH ключей можно значительно повысить уровень безопасности доступа. Если у вас возникнут трудности на каком-либо этапе, всегда можно обратиться к документации OpenLDAP или специальным форумам, где много профессионалов готовы помочь.
После интеграции всех компонентов вы получите мощную систему управления доступом, которая значительно упростит администрирование и повысит уровень безопасности вашей инфраструктуры.