Набор полезных советов для эффективного использования FreeIPA

в 9:18, , рубрики: Ansible, freeipa, Блог компании Pixonic, Серверное администрирование, системное администрирование

Набор полезных советов для эффективного использования FreeIPA - 1

В процессе эксплуатации FreeIPA часто возникают нетривиальные задачи, которые упираются в не очень хорошо документированные или не полностью реализованные места. Поэтому я решил дополнить свою предыдущую статью некоторыми решениями, которые помогут сэкономить вам немного времени.

Содержание:

  1. FreeIPA агенте в lxc контейнерах
  2. Библиотека для использования API в python
  3. Несколько слов про Ansible модули
  4. FreeIPA агент в debian
  5. Реплика в Амазоне

FreeIPA агент в lxc контейнерах

У нас для dev-окружений в некоторых местах используется такая штука, как Proxmox и lxc-контейнеры в нём. Темплейт для контейнера был взят стандартный centos-7-default версии 20170504, который мы кастомизировали. Но при банальной установке агента он отказался работать. После разбора выяснилось, что в этой сборке нет пакетов с sudo и в контейнерах нет SELinux. Итак, по пунктам, что нужно сделать:

  • yum install sudo
  • устанавливаем и конфигурируем
  • в файле /etc/sssd/sssd.conf, в секцию [domain/$DOMAINNAME] добавляем строку selinux_provider=none
  • рестартим sssd systemctl restart sssd

Если при установке и настройке агента всё было сделано без ошибок, то после рестарта всё начнёт работать.

В случае, если конфиги раскатываются при помощи Ansible, можно использовать переменные:

ansible_virtualization_role == "guest" and ansible_virtualization_type == "lxc"

Библиотека для использования API в Python

В современных версиях FreeIPA появился замечательный API, но вот полноценных библиотек для Python нам найти не удалось. На гитхабе есть репозиторий, но реализованного там нам оказалось мало. Так как решение распространяется под MIT лицензией, мы решили скопировать его и дополнить сами. Наша реализация доступна по этой ссылке.

Она будет еще допиливаться по необходимости, но вы можете забирать ее уже сейчас, доделывать и мёржить изменения. В настоящий момент реализовано только то, что необходимо было нам.

Несколько слов про Ansible модули

Оговорюсь сразу, речь пойдёт про версию Ansible 2.3.1.0, установленную через pip. В целом модули добавления юзеров и групп работают нормально. Но при добавлении sudoroles возникли некоторые проблемы. Первая и самая неприятная — они просто не добавляются. Ошибка выглядит вот так:

get_sudorule_diff() takes exactly 2 arguments (3 given)

Лечится на скорую руку, это довольно элементарно. В файле модуля ipa_sudorule.py нам нужна строка 307. Вот она:

diff = get_sudorule_diff(client, ipa_sudorule, module_sudorule)

Меняем ее на такую:

diff = get_sudorule_diff(ipa_sudorule, module_sudorule)

Добавление начинает работать. Прочитать про это можно тут и тут, но нами еще не проверено.

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

FreeIPA агент в debian

Установка агента в debian like системы почему-то у некоторых людей вызывает ряд проблем. Я хочу изложить наш вариант развертки агентов на debian подобных системах:

1. Добавляем репозиторий
wget -qO - http://apt.numeezy.fr/numeezy.asc | apt-key add -
echo -e 'deb http://apt.numeezy.fr  jessie main' >> /etc/apt/sources.list

2. Устанавливаем пакеты
apt-get update
apt-get install -y freeipa-client

3. Создаём директории
mkdir -p /etc/pki/nssdb
certutil -N -d /etc/pki/nssdb
mkdir -p /var/run/ipa

4. Убираем дефолтный конфиг
mv  /etc/ipa/default.conf ~/

5. Устанавливаем и настраиваем клиент
ipa-client-install

6. Включаем создание директорий 
echo 'session required pam_mkhomedir.so' >> /etc/pam.d/common-session

7. Проверяем, чтобы в /etc/nsswitch.conf был указан sss провайдер
passwd: files sss
group: files sss
shadow: files sss

8. Перезагружаем sssd
systemctl restart sssd

Реплика в Amazon

Как известно, в амазоне внешние адреса не указываются непосредственно на хостах. И установщику это очень сильно не нравится. В целом это актуально не только для амазона, а для всех вариантов, когда внешний адрес не настроен непосредственно на хосте.

Для решения этой проблемы при установке достаточно на время установки добавить на любой интерфейс внешний IP. Как пример, это можно сделать при помощи ip addr add:

ip addr add $ADDR  dev $IFace

После успешной установки и настройки с помощью ip addr del:

ip addr del $ADDR

Также не забудьте указать разные днс имена для внешнего и внутреннего адреса, иначе будет путаница.

В итоге мы получаем, что клиенты в lxc и debian подобных системах вполне реальны и никаких особых проблем не имеют. Все эти решения работают у нас без каких-либо заметных проблем уже довольно длительное время. Управлять полноценно доступами через Ansible не вполне удобно, но можно ускорить и автоматизировать часть рутинной работы. Что касается библиотеки для Python — надо реализовать еще довольно много, но все основные функции там уже имеются. Впрочем, новые идеи тоже приветствуются.

Автор: Владимир

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js