🐳 Запуск сервера FreeIPA в контейнерах Docker/Podman |

🐳 Запуск сервера FreeIPA в контейнерах Docker/Podman

Мануал

Добро пожаловать в это руководство, в котором мы расскажем о том, как установить сервер FreeIPA в контейнерах Docker/Podman.

FreeIPA – это проект с открытым исходным кодом, спонсируемый компанией Red Hat.

Он является апстримом для коммерческого Red Hat Identity Manager.

На стороне клиента есть клиентское приложение, используемое для настройки целевых систем.

Существует множество причин, по которым необходимо установить FreeIPA в контейнерах, а не запускать его на собственных системах.

О других методах установки читайте здесь:

FreeIPA – это идеальная система для централизованного управления идентификацией, политикой и аудитом пользователей и сервисов.

Она может предоставлять интегрированные службы управления идентификацией клиентам на платформах Linux, Mac и Windows.

Компоненты сервера FreeIPA

Сервер FreeIPA состоит из следующих проектов:

  • 389 Directory Server – Основное хранилище данных и обеспечивает полную многомастерную инфраструктуру каталогов LDAPv3.
  • MIT Kerberos KDC – Обеспечивает аутентификацию с единым входом.
  • Dogtag Certificate System – предоставляет CA и RA для функций управления сертификатами.
  • ISC Bind DNS сервер – для управления доменными именами.
  • Web UI / ipa Command Line tool – Используется для централизованного управления контролем доступа, делегирования административных задач и других задач сетевого администрирования.
  • NTP-сервер – для синхронизации времени с локальными серверами времени.

Минимальные требования

  • 4 ГБ ОЗУ
  • 4 vCPU

Для быстрой и автоматической установки Docker Dev выполните команды:

wget -qO- https://get.docker.com/ | sudo bash

Чтобы запустить Docker от имени непривилегированного пользователя, подумайте о настройке демона Docker в режиме rootless для вашего пользователя:

dockerd-rootless-setuptool.sh install

Шаг 1. Создание образа сервера FreeIPA

Перед запуском контейнера нам необходимо собрать образ FreeIPA на базе вашей операционной системы.

Установите инструмент git:

### Ubuntu / Debian ###
sudo apt update
sudo apt install git -y

### CentOS / Fedora ###
sudo yum -y install git

Перед этим нам нужно будет клонировать репозиторий FreeIPA с GitHub, который содержит файлы docker для различных операционных систем.

git clone https://github.com/freeipa/freeipa-container.git
cd freeipa-container

Для систем на базе RHEL требуется либо установить контекст SELinux, либо отключить SELinux.

sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
sudo setenforce 0

Соберите образ, как показано ниже, заменив DockerFile на тот, который подходит для вашей ОС.

Эти DockerFilы 🙂  доступны в каталоге, который мы клонировали с GitHub.

# ls -lh
total 308
-rwxr-xr-x. 1 root root   309 Aug 22 09:47 authselect
-rw-r--r--. 1 root root   263 Aug 22 09:47 container-ipa.target
lrwxrwxrwx. 1 root root    20 Aug 22 09:47 Dockerfile -> Dockerfile.fedora-34
-rw-r--r--. 1 root root  5666 Aug 22 09:47 Dockerfile.centos-7
-rw-r--r--. 1 root root  5313 Aug 22 09:47 Dockerfile.centos-8
-rw-r--r--. 1 root root  5367 Aug 22 09:47 Dockerfile.centos-8-stream
-rw-r--r--. 1 root root  5048 Aug 22 09:47 Dockerfile.fedora-23
-rw-r--r--. 1 root root  5115 Aug 22 09:47 Dockerfile.fedora-24
-rw-r--r--. 1 root root  4920 Aug 22 09:47 Dockerfile.fedora-25
-rw-r--r--. 1 root root  4814 Aug 22 09:47 Dockerfile.fedora-26
-rw-r--r--. 1 root root  4899 Aug 22 09:47 Dockerfile.fedora-27
-rw-r--r--. 1 root root  4884 Aug 22 09:47 Dockerfile.fedora-28
-rw-r--r--. 1 root root  4748 Aug 22 09:47 Dockerfile.fedora-29
-rw-r--r--. 1 root root  4735 Aug 22 09:47 Dockerfile.fedora-30
-rw-r--r--. 1 root root  4692 Aug 22 09:47 Dockerfile.fedora-31
-rw-r--r--. 1 root root  4936 Aug 22 09:47 Dockerfile.fedora-32
-rw-r--r--. 1 root root  4886 Aug 22 09:47 Dockerfile.fedora-33
-rw-r--r--. 1 root root  4975 Aug 22 09:47 Dockerfile.fedora-34
-rw-r--r--. 1 root root  4985 Aug 22 09:47 Dockerfile.fedora-rawhide
-rw-r--r--. 1 root root  5619 Aug 22 09:47 Dockerfile.rhel-7
-rw-r--r--. 1 root root  5078 Aug 22 09:47 Dockerfile.rhel-8
-rw-r--r--. 1 root root    60 Aug 22 09:47 exit-status.conf
-rw-r--r--. 1 root root    82 Aug 22 09:47 exit-via-chroot.conf
-rwxr-xr-x. 1 root root    67 Aug 22 09:47 exit-with-status
-rw-r--r--. 1 root root  3936 Aug 22 09:47 freeipa-server-openshift-image.json
-rw-r--r--. 1 root root 14924 Aug 22 09:47 freeipa-server-openshift.json
-rw-r--r--. 1 root root   417 Aug 22 09:47 freeipa-server-openshift-volume.json
-rwxr-xr-x. 1 root root   245 Aug 22 09:47 hostnamectl-wrapper

В моем случае, я буду использовать FreeIPA на CentOS 8 или RHEL 8.

Для Docker:

#Сборка из образа CentOS Stream 8 
sudo docker build -t freeipa-server -f Dockerfile.centos-8-stream .

#Сборка из образа CentOS 8
 sudo docker build -t freeipa-server -f Dockerfile.centos-8 .

#Сборка из образа Fedora
 sudo docker build -t freeipa-server -f Dockerfile.fedora-34 .

Для Podman:

#Сборка из образа CentOS Stream 8 
sudo podman build -t freeipa-server -f Dockerfile.centos-8-stream .

#Сборка из образа CentOS 8
sudo podman build -t freeipa-server -f Dockerfile.centos-8 .

#Сборка из образа Fedora
sudo podman build -t freeipa-server -f Dockerfile.fedora-34 .

Процесс сборки должен занять несколько минут.

После завершения сборки на выводе вы увидите информацию, приведенную ниже:

.....
Step 49/51 : EXPOSE 53/udp 53 80 443 389 636 88 464 88/udp 464/udp 123/udp
 ---> Running in da8d1fe2c58c
Removing intermediate container da8d1fe2c58c
 ---> 876327439584
Step 50/51 : RUN uuidgen > /data-template/build-id
 ---> Running in aa40a4e5f35a
Removing intermediate container aa40a4e5f35a
 ---> ce1ab7ef5832
Step 51/51 : LABEL maintainer="FreeIPA Developers <freeipa-devel@lists.fedorahosted.org>"
 ---> Running in f7962c72763b
Removing intermediate container f7962c72763b
 ---> ea0c2442d175
Successfully built ea0c2442d175
Successfully tagged freeipa-server:latest

Посмотрим список образов Podman/Docker:

#Docker
$ sudo docker images
REPOSITORY                        TAG       IMAGE ID       CREATED          SIZE
freeipa-server                    latest    58f2ab45725a   30 seconds ago   1.09GB
quay.io/centos/centos             stream8   c8cc1af39ec6   5 weeks ago      404MB

Шаг 2. Запуск контейнера с сервером FreeIPA

Следующим шагом будет запуск сервера FreeIPA в контейнерах Podman/Docker.

Сервер FreeIPA запускает systemd для управления службами в одном контейнере.

🐳 Как запустить Docker / Podman контейнеры в качестве службы Systemd

Это означает, что если вы работаете на системе с поддержкой SELinux, вам нужно разрешить systemd работать в контейнерах, установив зачение SELinux, как показано ниже:

sudo setsebool -P container_manage_cgroup 1

Создайте каталог данных для постоянного тома контейнера FreeIPA.

☸️ Побег из контейнера Kubernetes с помощью монтирования HostPath

Затем смонтируем том по пути /data контейнера.

sudo mkdir -p /var/lib/ipa-data

Создайте контейнер FreeIPA с помощью следующей команды.

Для Podman:

sudo podman run --name freeipa-server-container -ti \
    -h ipa.example.com --read-only \
    -v /var/lib/ipa-data:/data:Z localhost/freeipa-server:latest 

Для Docker:

sudo docker run --name freeipa-server-container -ti \
    -h ipa.example.com --read-only \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    -v /var/lib/ipa-data:/data:Z freeipa-server:latest

Замените ipa.example.com на ваш домен FreeIPA.

Если вы столкнулись с ошибкой, подобной приведенной ниже:

IPv6 stack is enabled in the kernel but there is no interface that
has ::1 address assigned. Add ::1 address resolution to 'lo' interface.
You might need to enable IPv6 on the interface 'lo' in sysctl.conf.

Вам нужно будет добавить указанную ниже опцию.

--sysctl net.ipv6.conf.all.disable_ipv6=0

Приведенные выше две команды для Podman и Docker автоматически инициализируют скрипт ipa-server-install FreeIPA.

Затем вам нужно будет ввести информацию из подсказок.

# sudo docker run --name freeipa-server-container -ti \
-h ipa.example.com --read-only  \
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /var/lib/ipa-data:/data:Z freeipa-server 

systemd 239 (239-41.el8_3) running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy)
Detected virtualization container-other.
Detected architecture x86-64.
Set hostname to <ipa.example.com>.
Sun Aug 22 07:02:27 UTC 2021 /usr/sbin/ipa-server-configure-first 

The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.
Version 4.9.2

This includes:
  * Configure a stand-alone CA (dogtag) for certificate management
  * Configure the NTP client (chronyd)
  * Create and configure an instance of Directory Server
  * Create and configure a Kerberos Key Distribution Center (KDC)
  * Configure Apache (httpd)
  * Configure the KDC to enable PKINIT

To accept the default shown in brackets, press the Enter key.

Do you want to configure integrated DNS (BIND)? [no]: <yes/no>

Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form
<hostname>.<domainname>
Example: master.example.com.


Server host name [ipa.example.com]: <Set/Confirm Hostname>

The domain name has been determined based on the host name.

Please confirm the domain name [example.com]: <Confirm domain name>

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [EXAMPLE.COM]:  <Confirm Real name>
Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password: <Enter Password>
Password (confirm): <Confirm Password>

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

IPA admin password: <Enter Password>
Password (confirm):  <Confirm Password>

Do you want to configure chrony with NTP server or pool address? [no]: 

The IPA Master Server will be configured with:
Hostname:       ipa.example.com
IP address(es): 172.17.0.2
Domain name:    example.com
Realm name:     EXAMPLE.COM

The CA will be configured with:
Subject DN:   CN=Certificate Authority,O=EXAMPLE.COM
Subject base: O=EXAMPLE.COM
Chaining:     self-signed

Continue to configure the system with these values? [no]: yes

The following operations may take some minutes to complete.
Please wait until the prompt is returned.

.......

Вышеуказанная подсказка будет содержать следующее:

  • Настройка отдельного CA (dogtag) для управления сертификатами
  • Настройка NTP-клиенат (chronyd)
  • Создание и настройка экземпляра Directory Server
  • Создание и настройка центра распределения ключей Kerberos (KDC)
  • Настройка Apache (httpd)
  • Настройка KDC для включения PKINIT

Полная установка даст следующий результат:

Configuring example.com as NIS domain.
Client configuration complete.
The ipa-client-install command was successful

Please add records in this file to your DNS system: /tmp/ipa.system.records.jafe12ca.db
==============================================================================
Setup complete

Next steps:
	1. You must make sure these network ports are open:
		TCP Ports:
		  * 80, 443: HTTP/HTTPS
		  * 389, 636: LDAP/LDAPS
		  * 88, 464: kerberos
		UDP Ports:
		  * 88, 464: kerberos
		  * 123: ntp

	2. You can now obtain a kerberos ticket using the command: 'kinit admin'
	   This ticket will allow you to use the IPA tools (e.g., ipa user-add)
	   and the web user interface.
	3. Kerberos requires time synchronization between clients
	   and servers for correct operation. You should consider enabling chronyd.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
The ipa-server-install command was successful
FreeIPA server does not run DNS server, skipping update-self-ip-address.
Created symlink /etc/systemd/system/container-ipa.target.wants/ipa-server-update-self-ip-address.service → /usr/lib/systemd/system/ipa-server-update-self-ip-address.service.
Created symlink /etc/systemd/system/container-ipa.target.wants/ipa-server-upgrade.service → /usr/lib/systemd/system/ipa-server-upgrade.service.
Removed /etc/systemd/system/container-ipa.target.wants/ipa-server-configure-first.service.
FreeIPA server configured.

Доступ к FreeIPA

Если вы собираетесь использовать FreeIPA на внешнем уровне, вам придется пробросить необходимые порты на хост с помощью флага -p.

Вы также можете указать переменные окружения во время установки, например, пароль.

docker run -e PASSWORD=Secret@123  -p 53:53/udp -p 53:53 \
    -p 80:80 -p 443:443 -p 389:389 -p 636:636 -p 88:88 -p 464:464 \
-p 88:88/udp -p 464:464/udp -p 123:123/udp ...

Полная команда с открытыми портами будет выглядеть следующим образом:

docker run --name freeipa-server -ti \
	-h ipa.example.com -p 53:53/udp -p 53:53 \
	-p 80:80 -p 443:443 -p 389:389 -p 636:636 -p 88:88 -p 464:464 -p 88:88/udp \
       	-p 464:464/udp -p 123:123/udp --read-only  \
	--sysctl net.ipv6.conf.all.disable_ipv6=0 -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
	-v /var/lib/ipa-data:/data:Z freeipa-server:latest

Следующим шагом будет доступ к FreeIPA через веб-интерфейс.

Перейдите по адресу https://ipa.example.com или IP/Hostname хоста Docker/Podman.

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

После успешного входа в систему вы будете перенаправлены на дашбоард FreeIPA

Шаг 4. Управление пользователями с помощью FreeIPA

Следующий шаг – управление пользователями с помощью FreeIPA.

Пользователей можно добавлять с помощью интерфейса командной строки контейнера Docker/Podman или веб-интерфейса.

В веб-интерфейсе нажмите на кнопку “Add” в разделе “Active users“, чтобы добавить пользователя.

Шаг 5: Подключение клиентов к серверу FreeIPA

Чтобы подключить клиента к экземпляру FreeIPA, нам необходимо установить IPA-клиент в вашей системе.

Добавьте клиента к серверу FreeIPA

sudo ipa-client-install --hostname=centos8.example.com \
 --mkhomedir \
 --server=ipa.example.com \
 --domain example.com \
 --realm EXAMPLE.COM

Проверьте и убедитесь, что добавленный пользователь доступен:

$ id user1
uid=1676000008(user1) gid=1676000008(user1) groups=1676000008(user1),1676000007(wheel-users)

Заключение

В приведенных выше шагах кратко описано, как установить сервер FreeIPA на Docker/Podman.

Не стесняйтесь обращаться, если у вас возникнут проблемы с настройкой этого окружения.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Ивае

    Этот гайд не рабочий.
    Failed to create /init.scope control group: Read-only file system
    Failed to allocate manager object: Read-only file system

    Ответить
  2. User

    Гайд рабочий, но на момент 2021, когда образы FreeIPA содержали systemd, не пытающийся использовать cgroupv2, либо на хосте тогда ещё не было cgroupv2.
    На текущий момент требуется небольшое обходное решение, которое я описал тут:
    https://serverfault.com/a/1135445/124027

    Ответить
    1. cryptoparty автор

      спасибо за инфо

      Ответить