В процессе эксплуатации 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 — надо реализовать еще довольно много, но все основные функции там уже имеются. Впрочем, новые идеи тоже приветствуются.

Комментарии (10)


  1. larrabee
    18.09.2017 13:29

    Для FreeIPA есть несколько морд для сброса паролей пользователями, но все имеют недостатки- либо требуют модифицировать схему, либо сделаны для древних версий IPA и не поддерживаются. Пришлось написать свое (). Позволяет сбрасывать пароль по SMS на мобильник. SMS отправляются через Amazon SES.


  1. larrabee
    18.09.2017 13:37
    +1

    Потерялась ссылка https://github.com/larrabee/freeipa-password-reset


    1. Vrenskiy Автор
      18.09.2017 14:15

      Ни разу проблем с этим не было.


    1. Vrenskiy Автор
      18.09.2017 23:55

      Подробнее посмотрев я понял о чём речь.
      Ну тут как бы решение корпоративное, и «Если вы забыли пароль обратитесь к системному администратору».
      Для этого есть ряд причин. Как минимум чтобы гарантировать соблюдение всех норм мы должны выдать сотруднику телефон сим карту и потребовать от него заключения определённых договорных условий. Пока у человека личный телефон с личной симкартой он может невозбранно их потерять, продать, подарить, пропить или попросту выбросить.
      И воздействовать на человека нет ни каких возможностей.


      1. larrabee
        19.09.2017 01:04

        Не очень страшно, т.к. у нас сервис доступен только в интрасети. Пользователь сам указывает свой номер телефона в профиле и сам может его поменять. Зато такое решение значительно упрощает цепочку, вместо: «подойти к админу, попросить сбросить, админ ставит рандомный пароль и отправляет пользователю, пользователь меняет пароль на удобный» надо просто открыть страничку и самому сменить пароль.


  1. larrabee
    19.09.2017 01:03

    не туда


  1. Sjam
    20.09.2017 02:49

    Не подскажете документацию по методам интеграции asterisk, claws-mail, автомонтировании ресурсов и прочего с freeipa? Гугл всемогущий весьма скуден


    1. Vrenskiy Автор
      21.09.2017 21:53

      Так Вы гуглите asterisk openldap и т.д.
      В основе FreeIPA обычный openldap с кастомной схемой. Вам нужно просто понять структуру. Я Обычно пользуюсь directory.apache.org/studio для уточнения и просмотра схемы. Но есть и unix-way вариант смотреть на сервера конфиги схем.
      Ну а с конкретными вопросами пишите в личку что сможем подскажем


  1. 6yraraJlTep
    21.09.2017 21:45

    Спасибо за статьи про FreeIPA. В процессе тестирования перед развёртыванием сейчас. Прогулялся по целому ряду граблей.
    Вообще, при конфигурировании и работе с FreeIPA необходимо пользоваться хэндбуком.
    После всех приключений я с опаской отношусь к обновлениям. Внезапно, репликация ваших серверов может развалиться, потому что ipa-server обновился.
    А вообще — очень мощный комбайн для управления правами доступа.


    1. Vrenskiy Автор
      21.09.2017 21:50

      Так надо читать чейнжлоги.
      Я с FreeIPA работаю со второй версии, ни разу не ломалась репликация после обновления.
      Ну и на www.freeipa.org информация куда более точная.