Thank you for reading this post, don't forget to subscribe!
Сервер FreeIPA состоит из следующих проектов:
- 389 Directory Server – Основное хранилище данных и обеспечивает полную многомастерную инфраструктуру каталогов LDAPv3.
- MIT Kerberos KDC – Обеспечивает аутентификацию с единым входом.
- Dogtag Certificate System – предоставляет CA и RA для функций управления сертификатами.
- ISC Bind DNS сервер – для управления доменными именами.
- Web UI / ipa Command Line tool – Используется для централизованного управления контролем доступа, делегирования административных задач и других задач сетевого администрирования.
- NTP-сервер – для синхронизации времени с локальными серверами времени.
НА DEBIAN ставим так:
ставим docker
apt-get install ca-certificates curl gnupg -y
mkdir /etc/apt/keyrings/
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
1 2 3 4 5 |
echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null |
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
systemctl enable docker
systemctl start docker
git clone https://github.com/freeipa/freeipa-container.git
cd freeipa-container/
docker build -t freeipa:latest -f Dockerfile.fedora-39 .
Произошла ошибка. Попробуйте ещё раз позднее. |
тут
/tmp/test/freeipa-container/data - директория в которой хранятся данные
-e PASSWORD=Secret123 - пароль с которым можно будет зайти во freeipa логин будет admin
нужно будет ответить на следующие вопросы:
Do you want to configure integrated DNS (BIND)? [no]: Sun May 5 13:41:51 UTC 2024 /usr/sbin/ipa-server-configure-first yes
Server host name [ipa1.example.test]: enter
Please confirm the domain name [example.test]: enter
Please provide a realm name [EXAMPLE.TEST]: enter
Do you want to configure DNS forwarders? [yes]: enter
Do you want to configure these servers as DNS forwarders? [yes]: enter
Enter an IP address for a DNS forwarder, or press Enter to skip: enter
Do you want to search for missing reverse zones? [yes]: enter
NetBIOS domain name [EXAMPLE]: enter
Do you want to configure chrony with NTP server or pool address? [no]: yes
Enter NTP source server addresses separated by comma, or press Enter to skip: 192.168.1.107
Enter a NTP source pool address, or press Enter to skip: enter
Continue to configure the system with these values? [no]: yes
как установка пройдёт из другой консоли стопарим и запускаем:
docker stop freeipa1
docker start freeipa1
НА CENTOS7 ставим так:
yum -y install epel-release
yum install bind-utils vim -y
yum -y install ipa-server
yum -y install ipa-server-dns bindipa-server bind-dyndb-ldap
cat /etc/hosts
192.168.1.170 ipa-server.test.local
hostnamectl set-hostname ipa-server.test.local
reboot
настраивать будем с поддержкой DNS
ipa-server-install --setup-dns
после этой команды нужно будет ответить на несколько вопросов:
Server host name [ipa-server.test.local]: жмём enter
Please confirm the domain name [test.local]: жмём enter
Please provide a realm name [TEST.LOCAL]: жмём enter
Directory Manager password: пароль минимум 8
Password (confirm): подтверждаем пароль
IPA admin password: пароль минимум 8
Password (confirm): подтверждаем пароль
Do you want to configure DNS forwarders? [yes]: жмём enter
Do you want to configure these servers as DNS forwarders? [yes]: жмём enter
Do you want to search for missing reverse zones? [yes]: жмём enter
Do you want to create reverse zone for IP 192.168.1.170 [yes]: жмём enter
Please specify the reverse zone name [1.168.192.in-addr.arpa.]: жмём enter
Continue to configure the system with these values? [no]: yes печатаем yes и жмём enter
ждём пока всё поставится
заходим по адресу:
https://ipa-server.test.local
вводим логин admin и пароль 8 знаков который задавали при установке. у меня это 123456789
создадим группу для пользователей:
создадим пользователей и добавим их к нашей группе
сразу создадим вторую тестовую группу и второго пользователя
добавим теперь группы узлов.
Добавим узлы
добавляем в репку:
/etc/apt/sources.list
1 2 |
deb http://ftp.de.debian.org/debian bullseye-backports main |
ставим клиента
apt-get update
apt-get install freeipa-client -y
hostnamectl set-hostname server1.test.local
cat /etc/hosts
192.168.1.170 ipa-server.test.local
192.168.1.171 server1.test.local
reboot
ipa-client-install --hostname=`hostname -f` \
--mkhomedir \
--server=ipa-server.test.local \
--domain test.local \
--realm TEST.LOCAL
Proceed with fixed values and no DNS discovery? [no]: yes
Do you want to configure chrony with NTP server or pool address? [no]: жмём enter
Continue to configure the system with these values? [no]: yes
User authorized to enroll computers: admin
Password for admin@TEST.LOCAL: тут вводим пароль от этого пользователя, в моём случае 123456789
Проверяем узлы
добавим узел 1 к 1 группе узлов а узел 2 ко 2ой группе узлов
и второй узел/группа
чтобы это объединить
создадим
Netgroups
заходим и редактируем:
результат такой:
Команды под sudo
создадим ещё SUDO, чтоб была возможность давать рутовые доступы
создаём саму команду:
указываем полный путь до неё
теперь создаём правило
в Sudo Option добавляем параметр "!authenticate
" чтобы не нужно было вводить пароль.
в Who добавляем группу пользователей которой можно будет выполнять эти команды
в Access this host указываем группу серверов на которых можно будет выполнять это sudo
в Run Commands указываем команды которые мы создавали ранее в нашем случае это mkdir
на серверах не забываем поставить sudo
apt-get install sudo -y
проверяем пользовательскую группу test_group
смотрим что за пользователь есть
смотрим netgroup в которой ассоциированы группы пользователей и группы узлов
и смотрим что есть по командам sudo точнее по ролям в которых может быть много команд:
подключимся и проверим работу
на клиенте с которого подключаюсь добавляем в хосты:
cat /etc/hosts
192.168.1.170 ipa-server.test.local
192.168.1.171 server1.test.local
192.168.1.172 server2.test.local
конектимся:
ssh user1@server1.test.local
вводим пароль который сразу истёкший и его нужно поменять:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@user:~# ssh user1@server1.test.local Password: Password expired. Change your password now. Current Password: New password: Retype new password: Linux server1.test.local 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Jun 25 09:10:04 2023 from 192.168.1.175 user1@server1:~$ |
проверяем sudo
1 2 3 4 5 6 7 8 9 10 11 |
user1@server1:~$ mkdir /etc/1234 mkdir: cannot create directory ‘/etc/1234’: Permission denied user1@server1:~$ sudo mkdir /etc/1234 user1@server1:~$ ls -lah /etc/1234 total 8.0K drwxr-xr-x 2 root root 4.0K Jun 25 09:58 . drwxr-xr-x 82 root root 4.0K Jun 25 09:58 .. user1@server1:~$ sudo rm -rf /etc/1234 [sudo] password for user1: Sorry, user user1 is not allowed to execute '/usr/bin/rm -rf /etc/1234' as root on server1.test.local. |
т.е. создать директорию в /etc/ у пользователя нет но через sudo есть
директория создаётся под пользователем root
удалить её я тоже не могу потому что пользователю не разрешена данная команда.
Отказоустойчивость freeipa, dns servers
Установка Freeipa
У меня 2 сервера с параметрами
2 ядра 4 гб оперативки - этого хватает на процесс установки - меньше оперативки я бы не ставил так как может прийти OOMkill после того как вся установка пройдёт можно и понизить ресурсы до 1 ядра и 2гб оперативки
Устанавливаем имя:
[root@ansible ansible]# ssh 192.168.1.100
root@freeipa-1:~# hostnamectl set-hostname freeipa-1.test.local
1.1. Вариант установки на debian:
git clone https://github.com/freeipa/freeipa-container.git
cd freeipa-container/
root@freeipa-1:~/freeipa-container# mkdir -p /opt/freeipa
docker build -t freeipa:latest -f Dockerfile.fedora-39 .
запускаем сервер 1
1 2 3 4 5 6 7 8 9 10 11 |
docker run -it \ --name freeipa1 \ -h freeipa-1.test.local \ -v /opt/freeipa:/data:Z \ --cgroupns=host \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ -e PASSWORD=Secret123 \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ -p 80:80 -p 443:443 -p 389:389 -p 636:636 -p 88:88 -p 464:464 \ freeipa:latest \ --skip-mem-check |
-h freeipa-1.test.local - задаём хостнейм
-v /opt/freeipa:/data - задаём директорию где всё будет храниться
-e PASSWORD=Secret123 - задаём пароль с которым будем подключаться
далее отвечаем на вопросы:
Do you want to configure integrated DNS (BIND)? [no]: yes
Server host name [freeipa-1.test.local]: ENTER
Please confirm the domain name [test.local]: ENTER
Please provide a realm name [TEST.LOCAL]: ENTER
Do you want to configure DNS forwarders? [yes]: yes
Do you want to configure these servers as DNS forwarders? [yes]: ENTER
Enter an IP address for a DNS forwarder, or press Enter to skip: ENTER
Do you want to search for missing reverse zones? [yes]: ENTER
Do you want to create reverse zone for IP 192.168.1.100 [yes]: ENTER
Please specify the reverse zone name [1.168.192.in-addr.arpa.]: ENTER
NetBIOS domain name [TEST]: ENTER
Do you want to configure chrony with NTP server or pool address? [no]: ENTER
Continue to configure the system with these values? [no]: yes
1.2. Вариант установки на centos:
чтоб инсталяция прошла успешно нужно 2 CPU и 4 memory
ssh 192.168.1.100
[root@centos ~]# hostnamectl set-hostname freeipa-1.test.local
[root@centos ~]# cat >> /etc/hosts
192.168.1.100 freeipa-1.test.local
192.168.1.101 freeipa-2.test.local
[root@centos ~]# yum install ipa-server ipa-server-dns -y
[root@centos ~]# ipa-server-install
Do you want to configure integrated DNS (BIND)? [no]: yes
Server host name [freeipa-1.test.local]: ENTER
Please confirm the domain name [test.local]: ENTER
Please provide a realm name [TEST.LOCAL]: ENTER
Directory Manager password: Secret123
Password (confirm): Secret123
IPA admin password: Secret123
Password (confirm): Secret123
Do you want to configure DNS forwarders? [yes]: ENTER
Following DNS servers are configured in /etc/resolv.conf: 8.8.8.8
Do you want to configure these servers as DNS forwarders? [yes]: ENTER
Enter an IP address for a DNS forwarder, or press Enter to skip: ENTER
Do you want to search for missing reverse zones? [yes]: ENTER
Do you want to create reverse zone for IP 192.168.1.100 [yes]: ENTER
Please specify the reverse zone name [1.168.192.in-addr.arpa.]: ENTER
Continue to configure the system with these values? [no]: yes
идём на второй сервер
ssh 192.168.1.101
[root@centos ~]# hostnamectl set-hostname freeipa-2.test.local
[root@centos ~]# cat >> /etc/hosts
192.168.1.100 freeipa-1.test.local
192.168.1.101 freeipa-2.test.local
[root@freeipa-2 ~]# yum install ipa-server ipa-server-dns -y
[root@freeipa-2 ~]# ipa-client-install --mkhomedir --domain=test.local --realm=TEST.LOCAL --server=freeipa-1.test.local
Если в нашей сети всего один FreeIPA, система предупредит, что автообнаружение серверов для аварийного переключения не может работать. Соглашаемся и отвечаем yes:
1 2 |
If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure. Proceed with fixed values and no DNS discovery? [no]: yes |
Система отобразить настройки LDAP в консоли, например:
1 2 3 4 5 |
Client hostname: freeipa-2.test.local Realm: TEST.LOCAL DNS Domain: test.local IPA Server: freeipa-1.test.local BaseDN: dc=test,dc=local |
Если эти настройки верны, отвечаем положительно на запрос Continue to configure the system with these values?
Continue to configure the system with these values? [no]: yes
Система спросит, от какого пользователя производить настройку — вводим admin:
User authorized to enroll computers: admin
… и пароль:
Password for admin@TEST.LOCAL: Secret123
если видим:
1 2 3 4 5 6 |
Configured /etc/ssh/ssh_config Configured /etc/ssh/sshd_config Configuring test.local as NIS domain. Configured /etc/krb5.conf for IPA realm TEST.LOCAL Client configuration complete. The ipa-client-install command was successful |
то всё ок
проверяем:
[root@freeipa-2 ~]# kinit admin
Password for admin@TEST.LOCAL: Secret123
[root@freeipa-2 ~]# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@TEST.LOCAL
Valid starting Expires Service principal
05/18/2024 12:41:44 05/19/2024 12:41:39 krbtgt/TEST.LOCAL@TEST.LOCAL
Удаляем полученный билет:
[root@freeipa-2 ~]# kdestroy
Переходим на первый сервер:
[root@freeipa-1 ~]# kinit admin
Password for admin@TEST.LOCAL:
[root@freeipa-1 ~]# ipa hostgroup-add-member ipaservers --hosts freeipa-2.test.local
1 2 3 4 5 6 |
Host-group: ipaservers Description: IPA server hosts Member hosts: freeipa-1.test.local, freeipa-2.test.local ------------------------- Number of members added 1 ------------------------- |
Настройка репликации
добавляем PTR
[root@freeipa-2 ~]# ipa-replica-install --setup-dns --no-forwarders
проверяем работу добавим запись
dig test123.test.local @freeipa-1.test.local
dig test123.test.local @freeipa-2.test.local
результат ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
[root@freeipa-2 ~]# dig test123.test.local @freeipa-1.test.local ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> test123.test.local @freeipa-1.test.local ;; global options: +cmd ;; Got answer: ;; WARNING: .local is reserved for Multicast DNS ;; You are currently testing what happens when an mDNS query is leaked to DNS ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35738 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;test123.test.local. IN A ;; ANSWER SECTION: test123.test.local. 86400 IN A 192.168.1.50 ;; AUTHORITY SECTION: test.local. 86400 IN NS freeipa-1.test.local. test.local. 86400 IN NS freeipa-2.test.local. ;; ADDITIONAL SECTION: freeipa-1.test.local. 1200 IN A 192.168.1.100 freeipa-2.test.local. 86400 IN A 192.168.1.101 ;; Query time: 0 msec ;; SERVER: 192.168.1.100#53(192.168.1.100) ;; WHEN: Sat May 18 21:47:15 +06 2024 ;; MSG SIZE rcvd: 143 [root@freeipa-2 ~]# dig test123.test.local @freeipa-2.test.local ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> test123.test.local @freeipa-2.test.local ;; global options: +cmd ;; Got answer: ;; WARNING: .local is reserved for Multicast DNS ;; You are currently testing what happens when an mDNS query is leaked to DNS ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31438 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;test123.test.local. IN A ;; ANSWER SECTION: test123.test.local. 86400 IN A 192.168.1.50 ;; AUTHORITY SECTION: test.local. 86400 IN NS freeipa-2.test.local. test.local. 86400 IN NS freeipa-1.test.local. ;; ADDITIONAL SECTION: freeipa-1.test.local. 1200 IN A 192.168.1.100 freeipa-2.test.local. 86400 IN A 192.168.1.101 ;; Query time: 0 msec ;; SERVER: 192.168.1.101#53(192.168.1.101) ;; WHEN: Sat May 18 21:47:24 +06 2024 ;; MSG SIZE rcvd: 143 |
Установка ipa-ca
[root@freeipa-1 ~]# ipa-ca-install
CA is already installed on this host.
[root@freeipa-2 ~]# ipa-ca-install
Directory Manager (existing master) password: Secret123
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[root@freeipa-2 ~]# ipa-ca-install Directory Manager (existing master) password: Run connection check to master Connection check OK Configuring certificate server (pki-tomcatd). Estimated time: 3 minutes [1/28]: creating certificate server db [2/28]: setting up initial replication Starting replication, please wait until this has completed. Update in progress, 4 seconds elapsed Update succeeded [3/28]: creating ACIs for admin [4/28]: creating installation admin user [5/28]: configuring certificate server instance [6/28]: secure AJP connector [7/28]: reindex attributes [8/28]: exporting Dogtag certificate store pin [9/28]: stopping certificate server instance to update CS.cfg [10/28]: backing up CS.cfg [11/28]: disabling nonces [12/28]: set up CRL publishing [13/28]: enable PKIX certificate path discovery and validation [14/28]: destroying installation admin user [15/28]: starting certificate server instance [16/28]: Finalize replication settings [17/28]: setting audit signing renewal to 2 years [18/28]: restarting certificate server [19/28]: authorizing RA to modify profiles [20/28]: authorizing RA to manage lightweight CAs [21/28]: Ensure lightweight CAs container exists [22/28]: configure certificate renewals [23/28]: configure Server-Cert certificate renewal [24/28]: Configure HTTP to proxy connections [25/28]: restarting certificate server [26/28]: updating IPA configuration [27/28]: enabling CA instance [28/28]: configuring certmonger renewal for lightweight CAs Done configuring certificate server (pki-tomcatd). Updating DNS system records |
Проверяем состояние работы контроллеров.
Для этого есть утилита ipa-healthcheck. Ставим ее командой:
[root@freeipa-1 ~]# cat /etc/yum.repos.d/freeipa.repo
[root@freeipa-2 ~]# cat /etc/yum.repos.d/freeipa.repo
1 2 3 4 5 6 7 8 9 10 |
[copr:copr.fedorainfracloud.org:rcritten:ipa-healthcheck] name=Copr repo for ipa-healthcheck owned by rcritten baseurl=https://download.copr.fedorainfracloud.org/results/rcritten/ipa-healthcheck/epel-7-$basearch/ type=rpm-md skip_if_unavailable=True gpgcheck=1 gpgkey=https://download.copr.fedorainfracloud.org/results/rcritten/ipa-healthcheck/pubkey.gpg repo_gpgcheck=0 enabled=1 enabled_metadata=1 |
[root@freeipa-1 ~]# yum install freeipa-healthcheck -y
[root@freeipa-2 ~]# yum install freeipa-healthcheck -y
Для общего анализа вводим:
1 |
ipa-healthcheck --failures-only |
Для проверки репликации:
1 |
ipa-healthcheck --source ipahealthcheck.ds.replication --failures-only |
1 2 3 4 |
[root@freeipa-1 ~]# ipa-healthcheck --failures-only [] [root@freeipa-1 ~]# ipa-healthcheck --source ipahealthcheck.ds.replication --failures-only [] |
а вот на втором сервере есть проблемки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@freeipa-2 ~]# ipa-healthcheck --failures-only [ { "source": "ipahealthcheck.ipa.dna", "kw": { "msg": "No DNA range defined. If no masters define a range then users and groups cannot be created.", "range_start": 0, "next_start": 0, "next_max": 0, "range_max": 0 }, "uuid": "b8558c3a-3545-4588-959a-bc24262cabe2", "duration": "0.532602", "when": "20240518163302Z", "check": "IPADNARangeCheck", "result": "WARNING" } ] |
проверяем:
1 2 3 4 5 |
[root@freeipa-2 ~]# ipa-replica-manage dnarange-show Directory Manager password: freeipa-1.test.local: 1332000000-1332199999 freeipa-2.test.local: No range set |
Причина: данное предупреждение нам говорит о том, что на вторичном сервере не задан диапазон DNA, который определяет начальный и конечный идентификаторы создаваемых объектов (UIDs). Таким образом, вторичный сервер не сможет использоваться для создания новых объектов.
Выполняем команду:
ipa-replica-manage dnarange-show
1 2 3 |
[root@freeipa-2 ~]# ipa-replica-manage dnarange-show freeipa-1.test.local: 1332000000-1332199999 freeipa-2.test.local: No range set |
Посмотреть начальное значение и максимальное для количества идентификатором можно командой:
ipa idrange-find
1 2 3 4 5 6 7 8 9 10 11 |
root@freeipa-2 ~]# ipa idrange-find ---------------- 1 ranges matched ---------------- Range name: TEST.LOCAL_id_range First Posix ID of the range: 1332000000 Number of IDs in the range: 200000 Range type: local domain range ---------------------------- Number of entries returned 1 ---------------------------- |
разбиваем:
1 2 |
[root@freeipa-2 ~]# ipa-replica-manage dnarange-set freeipa-1.test.local 1332000000-1332199999 [root@freeipa-2 ~]# ipa-replica-manage dnarange-set freeipa-2.test.local 1332200000-1332399999 |
проверяем:
1 2 3 |
[root@freeipa-2 ~]# ipa-replica-manage dnarange-show freeipa-1.test.local: 1332000000-1332199999 freeipa-2.test.local: 1332200000-1332399999 |
1 2 |
[root@freeipa-2 ~]# ipa-healthcheck --failures-only [] |
как видим всё ок.
Смена диапазона идентификаторов
Выше мы уже говорили про диапазоны идентификаторов, которые задействуются при создании объектов. По умолчанию, создается диапазон с большими значениями. На практике, могут встретиться приложения, которые не смогут работать с учетными записями, имеющими данные большие значения.
Сменить настройки диапазона нельзя — система выдаст ошибку. Но мы можем создать новый диапазон и использовать его.
Создаем диапазон:
ipa idrange-add "New Range" --base-id=50000 --range-size=20000
* в данном примере мы создаем диапазон с названием New Range, первый идентификатор равен 50000, всего идентификаторов 20000.
Теперь мы можем назначить значения из нового диапазона для наших серверов:
ipa-replica-manage dnarange-set freeipa-1.test.local 50000-59999
ipa-replica-manage dnarange-set freeipa-1.test.local 60000-69999