В этом руководстве мы покажем, как настроить SUDO через сервер OpenLDAP.
Помимо возможности предоставления прав sudo на локальной системе, sudo можно настроить и через LDAP.
Предоставление SUDO через OpenLDAP избавляет от необходимости наделять пользователей правами sudo через файл sudoers локальной системы.
- Как настроить SUDO через сервер OpenLDAP
- Создание организационной единицы (ou) OpenLDAP SUDOers
- Создание записи Defaults в OpenLDAP OU SUDOers
- Преобразование файла sudoers в LDAP LDIF
- Обновление базы данных OpenLDAP
- Настройка LDAP SUDO NOPASSWD
- Настройка клиента OpenLDAP для предоставления прав SUDO
- Включение автоматического создания домашнего каталога пользователя
- Назначение прав SUDO пользователя на конкретном хосте
Как настроить SUDO через сервер OpenLDAP
Для того чтобы настроить SUDO через сервер OpenLDAP, необходимо загрузить и включить схемы sudo OpenLDAP.
Предполагая, что вы включили поддержку sudo в OpenLDAP, как описано в нашем руководстве выше, перейдем к настройке.
Создание организационной единицы (ou) OpenLDAP SUDOers
Прежде чем настраивать SUDO через OpenLDAP Server, необходимо создать SUDOers ou в структуре каталогов вашей организации.
Замените компоненты и описание домена соответствующим образом.
dn: ou=SUDOers,dc=ldapmaster,dc=itsecforu-demo,dc=com
objectclass: organizationalunit
ou: SUDOers
description: itsecforu-demo LDAP SUDO Entry
Обновите базу данных OpenLDAP с помощью вышеуказанной записи об организационной единице SUDOers.\
Создание записи Defaults в OpenLDAP OU SUDOers
Согласно man-страницам sudoers.ldap, sudo сначала ищет запись cn=defaults в SUDOers OU.
Если она найдена, то многозначный атрибут sudoOption разбирается так же, как и глобальная строка Defaults в файле /etc/sudoers.
Преобразование файла sudoers в LDAP LDIF
Как же создать запись SUDOers по умолчанию со всеми необходимыми атрибутами sudo?
Чтобы упростить задачу, преобразуйте локальный файл sudoers, /etc/sudoers, в формат OpenLDAP и измените его по своему усмотрению.
- В комплект поставки OpenLDAP обычно входит perl-скрипт sudoers2ldif, который используется для преобразования файла sudoers в LDIF-файл OpenLDAP.
- Кроме того, в комплект поставки входит еще один инструмент под названием cvtsudoers, который может помочь вам решить ту же задачу, что и скрипт sudoers2ldif.
Найдем perl-скрипт sudoers
Если вы не можете найти его, то можете взять его из этого репозитория Github.
Проверьте сырую версию и загрузите ее следующим образом;
🖧 В чем разница между curl и Wget? | (itsecforu.ru)
Скрипт выглядит вот так:
Создайте переменную окружения bash, определяющую созданную выше запись организационной единицы SUDOers.
Далее преобразуем файл /etc/sudoers в файл LDAP ldif для создания необходимой записи SUDOers ou defaults.
Также можно использовать команду cvtsudoers для преобразования файла sudoers в формат LDIF.
Каково же содержимое файла sudoers_defaults.ldif?
Как видно, файл sudoers в формате LDAP ldif содержит OU SUDOers, многозначные атрибуты sudoOption, корневого пользователя cn и определенную группу wheel.
Атрибуты Sudo, использованные выше:
sudoOption: Аналогичен опции Defaults в файле /etc/sudoers.
Например, ниже приведены опции /etc/sudoers и способы их использования в LDAP SUDO:
- NOPASSWD: !authenticate
- PASSWD: authenticate
- NOEXEC: noexec
- EXEC: !noexec
- SETENV: setenv
- NOSETENV: !setenv
- LOG_INPUT: log_input
- NOLOG_INPUT: !log_input
- LOG_OUTPUT: log_output
- NOLOG_OUTPUT: !log_output
- sudoUser: определяет имя пользователя, идентификатор пользователя (с префиксом ‘#’), имя или идентификатор группы Unix (с префиксом ‘%’ или ‘%#’ соответственно), netgroup пользователя (с префиксом ‘+’), имя или идентификатор группы не-Unix (с префиксом ‘%:’ или ‘%:#’ соответственно).
- sudoHost: Имя хоста, IP-адрес, IP-сеть или нетгруппа хоста (с префиксом ‘+’) или значение ALL для соответствия любому хосту.
- sudoRunAsUser: имя пользователя или uid (с префиксом ‘#’), от имени которого могут выполняться команды, или группа Unix (с префиксом ‘%’) или нетгруппа пользователей (с префиксом ‘+’), содержащая список пользователей, от имени которых могут выполняться команды. Значение ALL соответствует любому пользователю.
- sudoCommand: Указывает полное имя Unix-команды с необязательными аргументами командной строки. Используйте ALL для соответствия любой команде.
Поэтому перед обновлением базы данных OpenLDAP с конфигурациями SUDOers можно модифицировать приведенный выше файл SUDOers LDAP ldif.
Например, удалите определенного пользователя root и группу wheel и добавьте пользователей, которым вы хотите назначить права SUDO через LDAP на удаленных клиентах.
Также удалите атрибуты sudoOrder.
Выше мы создали запись sudo в SUDOers ou и назначили пользователю janedoe права SUDO на выполнение всех команд от имени любого пользователя на любой системе, что аналогично строке ниже в файле /etc/sudoers.
janedoe ALL=(ALL:ALL) ALL
Обратите внимание, что пользователь должен существовать в базе данных OpenLDAP.
Обновление базы данных OpenLDAP
Далее загрузите конфигурацию SUDOers в базу данных OpenLDAP.
Если необходимо добавить другого пользователя в указанную выше роль;
Чтобы создать другую роль sudo, например, чтобы разрешить пользователям выполнять определенные команды, смотрите ниже.
Имена ролей могут быть любыми описательными.
Например, чтобы разрешить пользователю mibeyam выполнять команду useradd только с помощью sudo, создайте ldif-файл, как показано ниже, и обновите базу данных OpenLDAP.
Настройка LDAP SUDO NOPASSWD
Иногда возникает необходимость разрешить некоторым пользователям выполнять команду SUDO без запроса пароля с помощью ldap-sudo-nopasswd.
Для этого можно использовать опцию NOPASSWD OpenLDAP SUDO, !authenticate с sudoOption атрибутом.
См. пример ниже
dn: cn=koromicha,ou=SUDOers,dc=ldapmaster,dc=itsecforu-demo,dc=com
cn: koromicha
objectclass: top
objectclass: sudoRole
sudocommand: ALL
sudohost: ALL
sudooption: !authenticate
sudorunasuser: ALL
sudouser: koromicha
Этот пользователь будет выполнять все команды SUDO без пароля.
Чтобы получить список SUDOers OU, просто выполните команду;
Настройка клиента OpenLDAP для предоставления прав SUDO
Чтобы протестировать и подтвердить предоставление SUDO с помощью OpenLDAP, настройте клиент для аутентификации через OpenLDAP.
В данной демонстрации мы используем SSSD на системе Ubuntu 18.04 для обеспечения LDAP-аутентификации.
Поэтому сначала войдите в систему ( например Ubuntu) и настройте аутентификацию клиента следующим образом.
Установите SSSD и другие необходимые пакеты.
Создайте файл конфигурации SSSD со следующим содержимым.
Замените значения ldap_default_bind_dn и ldap_default_authtok на свой Bind DN и пароль к нему.
Также замените значения Base DN, LDAP URI, SUDOers search base и ldap filter соответствующим образом.
[sssd]
services = nss, pam, sudo
config_file_version = 2
domains = default
[sudo]
[nss]
[pam]
offline_credentials_expiration = 60
[domain/default]
ldap_id_use_start_tls = True
cache_credentials = True
ldap_search_base = dc=ldapmaster,dc=itsecforu-demo,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
sudo_provider = ldap
ldap_uri = ldaps://ldapmaster.itsecforu-demo.com:636
ldap_default_bind_dn = cn=readonly,ou=system,dc=ldapmaster,dc=itsecforu-demo,dc=com
ldap_default_authtok = P@ssWord
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/cacert.crt
ldap_tls_cacertdir = /etc/ssl/certs
ldap_search_timeout = 50
ldap_network_timeout = 60
ldap_sudo_search_base = ou=SUDOers,dc=ldapmaster,dc=itsecforu-demo,dc=com
ldap_access_order = filter
ldap_access_filter = (objectClass=posixAccount)
Скопируйте сертификат удостоверяющего центра с сервера LDAP.
Сохраните его в указанном выше файле /etc/ssl/certs/ldapcert.crt.
При желании можно использовать другой файл.
Откройте файл /etc/ldap/ldap.conf и задайте расположение файла сертификата УЦ, скопированного с сервера OpenLDAP.
Определите базу поиска LDAP SUDOers.
Установите доступ на чтение/запись к файлу /etc/sssd/ для владельца (root).
Перезапустите службу SSSD
Включение автоматического создания домашнего каталога пользователя
Настройте подключаемый модуль аутентификации (PAM) на автоматическое создание домашнего каталога пользователя при первом входе в систему.
Этого можно добиться, отредактировав конфигурационный файл /etc/pam.d/common-session следующим образом;
Добавьте приведенную ниже строку сразу после строки session optional pam_sss.so.
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
...
# since the modules above will each just jump around
session required pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
session optional pam_sss.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional pam_systemd.so
# end of pam-auth-update config
Сохраните и выйдите из конфигурации.
Также убедитесь, что в файле /etc/nsswitch.conf есть следующая строка;
sudoers: files sss
Назначение прав SUDO пользователя на конкретном хосте
Также можно назначить пользователю права sudo на определенном хосте.
Например, если у меня есть пользователь johndoe в моей базе данных OpenLDAP, и я хочу, чтобы этот пользователь выполнял команды с правами sudo только на хосте john.itsecforu-demo.com, то я создам в сервере OpenLDAP запись, как показано ниже.
dn: cn=john,ou=SUDOers,dc=ldapmaster,dc=itsecforu-demo,dc=com
cn: john
objectclass: top
objectclass: sudoRole
sudocommand: ALL
sudohost: john.itsecforu-demo.com
sudorunasuser: ALL
sudouser: johndoe
Если этот пользователь авторизуется на системе с именем хоста john.itsecforu-demo.com, то он может выполнить любую команду с правами sudo, в противном случае он не сможет иметь права sudo на любой другой системе.
см. также: