Как стать автором
Обновить

LDAP для интернет-проекта. Часть 5

Время на прочтение2 мин
Количество просмотров5.9K
Всем привет! Сегодня я завершаю цикл статей о внедрении OpenLDAP (раз, два, три, четыре), и расскажу о хранении sudoers в LDAP.

Поддержка LDAP встроена в самом sudo, так что pam-модули нам тут не помогут. В Debian необходимо установить пакет sudo-ldap:
apt-get install sudo-ldap
Среди прочих, пакет установит файлик с необходимой нам схемой LDAP:
/usr/share/doc/sudo-ldap/schema.OpenLDAP, которую нужно скопировать на оба LDAP-сервера и прописать в файле /etc/ldap/slapd.conf среди прочих инклюдов:
include /etc/ldap/schema/sudo.schema
После этого нам будут доступны объекты класса sudoRole с полями sudoCommand, sudoHost, sudoRunAs, sudoUser и sudoOption.
sudo ищет объекты sudoRole, используя настройки в файле /etc/ldap/ldap.conf:
uri ldap://ldap.habr.ru
sudoers_base ou=servers,dc=habr,dc=ru
sudoers_debug 0

Если поставить debug 2, то после выполнения команды sudo, будет выводится листинг объектов и совпадений, которые sudo обнаружил в LDAP'е.

Но пока что у нас нет ни одного объекта, давайте это сделаем.
У меня уже создан контейнер ou=servers, dc=habr,dc=ru в котором я храню контейнеры-серверы с объектами типа groupOfUniqueNames; они содержат ссылки на пользователей имеющих доступ на сервер, например,
cn=shell-users,ou=dev.habr.ru,ou=servers,dc=habr,dc=ru
Для хранения данных для sudo, я сделал контейнер ou=sudoers,ou=dev.habr.ru,ou=servers,dc=habr,dc=ru в котором у меня хранятся объекты класса sudoRole. Например такие:

dn: cn=%www-data,ou=sudoers,ou=dev.habr.ru,ou=servers,dc=habr,dc=ru
objectClass: sudoRole
objectClass: top
cn: %www-data
sudoCommand: ALL
sudoHost: dev.habr.ru
sudoRunAs: www-data
sudoUser: %www-data


Или такие:
dn: cn=developers,ou=sudoers,ou=dev.habr.ru,ou=servers,dc=habr,dc=ru
objectClass: sudoRole
objectClass: top
cn: developers
sudoCommand: ALL
sudoRunAs: ALL
sudoHost: dev.habr.ru
sudoUser: dev0
sudoUser: dev1
sudoUser: dev2


Для админов у меня отдельный контейнер «groupOfUniqueNames» cn=admins,ou=global,ou=servers,dc=habr,dc=ru
И отдельный sudoers:
dn: cn=admins,ou=sudoers,ou=global,ou=servers,dc=habr,dc=ru
objectClass: sudoRole
objectClass: top
cn: admins
sudoCommand: ALL
sudoRunAs: ALL
sudoHost: ALL
sudoUser: admin0
sudoUser: admin1
sudoUser: admin2


Ещё есть объект с дефолтными установками:
dn: cn=defaults,ou=sudoers,ou=global,ou=servers,dc=habr,dc=ru
objectClass: sudoRole
objectClass: top
cn: defaults
sudoOption: ignore_local_sudoers
sudoOption: env_reset

Теперь можно попробовать выполнить sudo!

Я с радостью отвечу на Ваши вопросы в комментариях, либо в ЛС.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+2
Комментарии3

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн