Pull to refresh

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

System administration *
Всем привет! Сегодня я завершаю цикл статей о внедрении 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!

Я с радостью отвечу на Ваши вопросы в комментариях, либо в ЛС.
Tags: debianldapsudossh
Hubs: System administration
Total votes 4: ↑3 and ↓1 +2
Comments 3
Comments Comments 3

Popular right now