- Kerberos
- Подготовка к установке
- Имена и доступность компьютеров
- Синхронизация времени
- Настройка сервера
- Установка пакетов
- Настройка
- Настройка DNS для автоматизации подключения клиентов
- Настройка клиентов
- Установка пакетов
- Настройка
- Настройка аутентификации клиентов через Kerberos
- Цели
- Исходные данные
- Установка сервера
- Будем запускать сервер в изолированном окружении:
- Настройка опций сервера
- Безопасность
- Включение в конфигурацию новой доменной зоны
- Прямая доменная зона
- Обратная зона
- Запуск сервера и проверка работоспособности
- Клиенты
- Работа в ненулевых мандатных режимах
Kerberos
Kerberos — сетевая служба аутентификации, основанная на одноименном протоколе аутентификации,
предлагающем механизм взаимной аутентификации клиента и сервера перед установлением связи между ними с учётом того факта,
что начальный обмен информацией происходит в незащищенной среде, а передаваемые пакеты могут быть перехвачены и модифицированы.
Аутентификация через Kerberos является фактическим стандартом аутентификации доменных пользователей, и применяется в Windows Active Directory, Samba AD DC, FreeI PA, Astra Linux Directory (ALD) .
В Linux-системах существуют две основные реализаций Kerberos — MIT и Heimdal. В ОС Astra Linux (и далее в примерах этой статьи) используется MIT Kerberos (смю также Samba с поддержкой Heimdal Kerberos в Astra Linux Special Edition 1.6).
При описании работы Kerberos применяются некоторые специфические термины:
- Область (realm) — о бласть (области), обслуживаемые сервисом. П римерно соответствует термину «домен»;
- Принципал — учетная запись Kerberos, с соответствующим набором прав. Примерно соответствует термину «пользователь». Но, при этом, пользователь может получать разные наборы прав от Kerberos (разные принципалы).
Подготовка к установке
Все серверы и клиенты, участвующие в работе Kerberos, должны иметь возможность коммуницировать друг с другом, и иметь точные показания системных часов.
Далее в примере используются
В терминологии Kerberos домену соответствует область (realm), которая обозначается заглавными буквами. Для домена astradomain.ru это будет область ASTRADOMAIN.RU
Имена и доступность компьютеров
Сервис Kerberos следует устанавливать в сети, в которой уже настроена служба DNS. Каждому серверу, входящему в область Kerberos, должно быть присвоено Полное Квалифицированное Доменное Имя (Fully Qualified Domain Name, FQDN).
Настроенный DNS-сервис должен обеспечивать прямое и обратное (реверсивное) разрешение FQDN (для отключения реверсивного разрешения можно в файле конфигурации клиента krb5.conf установить переменной rdns значение false)
Проверить настройку прямого и обратного разрешения имён можно командами:
Синхронизация времени
Протокол Kerberos требует соответствия показаний часов всех клиентов и серверов, и при рассинхронизации часов аутентификация становится невозможной.
Простой и стандартный путь обеспечения синхронизации — использование сервиса Network Time Protocol (NTP).
Настройка сервера
Установка пакетов
Пакеты сервиса Kerberos входят в стандартные дистрибутивы Astra Linux, и могут быть установлены с помощью графического менеджера пакетов,
или из командной строки командой
При установке выдаётся предупреждение о том, что пакет не настроен, которое пока можно проигнорировать.
После установки сервис автоматически не запускается, и должен быть настроен для запуска.
Настройка
При установке пакета будет создан файл конфигурации сервиса /etc/krb5kdc/kdc.conf со стандартным содержимым, в котором автоматически будет указано имя области Kerberos, полученное из FQDN сервера, на котором выполняется установка:
[realms]
ASTRADOMAIN.RU = <
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
#supported_enctypes = aes256-cts:normal aes128-cts:normal
default_principal_flags = +preauth
>
Kerberos использует для контроля доступа к администрированию сервиса Списки Управления Доступом (Access Control List, ACL) .
По умолчанию, список располагается в файле /etc/krb5kdc/kadm5.acl.
Для примера, создадим файл /etc/krb5kdc/kadm5.acl, дающий неограниченные права любому принципалу, чьё имя заканчивается на /admin:
И создадим новую область Kerberos командой:
При выполнении команды нужно будет ввести и подтвердить пароль администратора, после чего будут автоматически созданы нужные базы данных.
Далее, для выполнения задач по администрированию сервиса Kerberos нужно создать принципала с правами администратора.
Для этого используем инструмент командной строки kadmin.local, предназначенный для администрирования Kerberos на локальном компьютере.
При использовании инструмента kadmin.local подразумевается, что этот инструмент вызывается с защищенного сервера Kerberos,
поэтому инструмент не требует логинов и паролей, и автоматически получает все полномочия для администрирования сервиса Kerberos.
Инструмент вызывается из командной строки командой
После вызова инструмента можно ввести символ «вопросительный знак», в ответ на это будет выдана подсказка по списку команд.
Добавим нового принципала admin/admin командой addprinc:
После ввода команды будет запрошен пароль для создаваемого принципала.
Выход из инструмента kadmin.local осуществляется командой quit.
После создания принципала admin/admin его можно использовать для администрирования сервера Kerberos с удалённых компьютеров с помощью инструмента командной строки kadmin.
Этот инструмент аналогичен инструменту kadmin.local, однако рассчитан на удалённое подключение, и требует авторизации пользователя через указание принципала и ввод пароля:
Настройка DNS для автоматизации подключения клиентов
Для автоматического получения клиентами адреса сервера Kerberos можно использовать специальные настройки сервера DNS: служебные записи (SRV-записи).
Пример таких записей для службы Kerberos см. в статье про сервер DNS
Настройка клиентов
Установка пакетов
Клиентский пакет Kerberos krb5-user входит в дистрибутивы Astra Linux, но по умолчанию не устанавливается. Пакет может быть установлен с помощью графического менеджера пакетов, или из командной строки командой
При установке пакета krb5-user, кроме самого пакета, автоматически будет установлен пакет krb5-config для настройки клиента
Настройка
Если Kerberos предполагается использовать с контроллером домена Samba AD DC,
для настройки клиентов следует использовать копию конфигурационного файла /var/lib/samba/krb5.conf,
автоматически создаваемого при процедуре назначения Samba
Кроме того, в сети должны быть правильно настроены и работать службы DNS и DHCP.
Настройка клиента Kerberos выполняется командой
- Попросит указать имя домена (в нашем примере — ASTRADOMAIN.RU);
- Задаст вопрос о необходимости указать сервер(ы) Kerberos в файле конфигурации клиента /etc/krb5.conf.
Если ответить «да», то программа попросит ввести имена сервера (серверов) Kerberos
Если DNS уже настроен (см «Настройка DNS для автоматизации подключения клиентов»), можно просто ответить «нет».
После завершения работы программы настройки результат настройки можно проверить получением принципала. Команда kinit должна выполняться без ошибок:
Настройка аутентификации клиентов через Kerberos
Для обеспечения возможности аутентификации пользователей через Kerberos требуется дополнительно установить пакет libpam-krb5:
После установки пакета необходимые модули аутентификации будут автоматически добавлены в стек авторизации PAM.
Цели
Как обычно, если не указано иное, команды выполняются от имени пользователя root .
Исходные данные
Доменная зона | home.net |
Подсеть | 192.168.0/24 |
Имя основного сервера | dc.home.net |
IP-адрес сервера имен | 192.168.0.1 |
Имя первого хоста | arm01.home.net |
IP-адрес первого хоста | 192.168.0.101 |
Имя N-го хоста | armN.home.net |
IP-адрес N-го хоста | 192.168.0.(100+N) |
Установка сервера
Сервер установлен, но установка сделана не безопасным способом. Нужно выполнить несколько дополнительных действий, описанных подробнее в Debian Wiki — Bind.
Будем запускать сервер в изолированном окружении:
mkdir -p /var/bind9/chroot/ mknod /var/bind9/chroot/dev/null c 1 3 mknod /var/bind9/chroot/dev/random c 1 8 chmod 660 /var/bind9/chroot/dev/ mv /etc/bind /var/bind9/chroot/etc ln -s /var/bind9/chroot/etc/bind /etc/bind chown bind:bind /var/bind9/chroot/etc/bind/rndc.key chmod 775 /var/bind9/chroot/var/ chgrp bind /var/bind9/chroot/var/
Теперь нужно изменить расположение PIDFILE. Для этого в файле /etc/init.d/bind9 нужно переопределить переменную PIDFILE .
PIDFILE=/var/bind9/chroot/var/run/named/named.pid
Чтобы сервер понимал, что его запускают в изолированном окружении, нужно изменить параметры его запуска, внеся небольшие коррективы в файл /etc/default/bind9
OPTIONS="-u bind -t /var/bind9/chroot"
Перенастроим логирование rsyslog
echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf
Настройка опций сервера
Безопасность
Основные настройки сервера хранятся в файле /etc/bind/named.conf.options (на самом деле сейчас это всего лишь символическая ссылка, но на суть дела это не влияет). Добавим пару параметров для пущей безопасности в разделе options :
Включение в конфигурацию новой доменной зоны
В файле /etc/bind/named.conf.default-zones добавим указание на файлы прямой и обратной зоны, чтобы сервер мог обслуживать локальную сеть:
. zone "home.net" in < // Локальная сеть type master; file "/etc/bind/db.home.net"; // В этом файле будут адреса прямой зоны >; zone "0.168.192.in-addr.arpa" < // Так описывается обратная зона, т. е. первые три октета // записываются в обратном порядке и добавляется .in-addr.arpa type master; file "/etc/bind/db.0.168.192"; // В этом файле будут адреса обратной зоны >;
Прямая доменная зона
Ниже просто приведу содержимое файла /etc/bind/db.home.net .
$TTL 3h @ IN SOA dc.home.net. administrator.home.net. ( ; Вместо @ будет подставлено автоматически имя зоны из файла /etc/bind/named.conf.default-zones 2017092701 ; Это число нужно менять каждый раз при изменении этого файла ; Очень удобно взять текущее число и добавить ещё пару цифр для указания ревизии 3h ; 1h ; 1w ; 1h ) IN NS dc.home.net. ; Указываем имя основного DNS-сервера, обслуживающего зону ; Наличие пробела или табуляции в начале строки и точки ; после .net обязательно dc IN A 192.168.0.1 ; IP-адрес сервера имен imap IN CNAME dc ; Указываем, что наш DNS-сервер так же отзывается на imap.home.net smtp IN CNAME dc ; и smtp.home.net arm01 IN A 192.168.0.101 arm02 IN A 192.168.0.102 arm03 IN A 192.168.0.103 arm04 IN A 192.168.0.104 arm05 IN A 192.168.0.105 arm06 IN A 192.168.0.106 arm07 IN A 192.168.0.107 arm08 IN A 192.168.0.108 arm09 IN A 192.168.0.109 arm10 IN A 192.168.0.110
Обратная зона
Создадим файл, на который ссылается обратная зона, и заполним его по образцу:
$TTL 3h @ IN SOA dc.home.net. administrator.home.net. ( 2017092701 ; Это число тоже нужно менять 3h ; 1h ; 1w ; 1h ) IN NS dc.home.net. 1 IN PTR dc.home.net. ; Наш сервер 101 IN PTR arm01.home.net. 102 IN PTR arm02.home.net. 103 IN PTR arm03.home.net. 104 IN PTR arm04.home.net. 105 IN PTR arm05.home.net. 106 IN PTR arm06.home.net. 107 IN PTR arm07.home.net. 108 IN PTR arm08.home.net. 109 IN PTR arm09.home.net. 110 IN PTR arm10.home.net.
Запуск сервера и проверка работоспособности
Если всё сделано правильно, точки расставлены и IP-адреса указаны верно, можно попробовать запустить наш сервер:
Если вместо кучи ошибок сервер просто написал, что всё хорошо, можно проверить разрешение имен:
host arm01.home.net host 192.168.0.9
В обоих случаях сервер должен вернуть информацию о том, на что указывает доменное имя или IP-адрес. Если вместо этого он выдает сообщение об ошибке, самое время проверить корректность конфигурационных файлов. Это делается вызовом следующих несложных команд:
named-checkconf /etc/bind/named.conf named-checkzone home.net /etc/bind/db.home.net named-checkzone 192.168.0 /etc/bind/db.0.168.192
Данные утилиты из состава пакета bind9utils укажут на ошибки в конфигурационных файлах.
Клиенты
Существует несколько способов настроить обращение к DNS-серверу на клиентских машинах. По скольку речь идет об операционной системе для социальной группы ‘siloviki’, выбор инструментальных средств невелик — wicd , /etc/network/interfaces и /etc/resolv.conf .
Первый способ отметаем сразу же, поскольку с wicd довольно много проблем. Не буду останавливаться на них подробно, но обычно первое, что приходится делать на свежеустановленной системе — убрать его из автозагрузки:
service wicd stop chkconfig wicd off
Можно указать DNS-сервер в настройках сетевых интерфейсов, однако, в этом случае их нужно прописывать для каждого сетевого интерфейса, а я не люблю повторяться. В связи с этим просто откорректируем файл /etc/resolv.conf на клиентских машинах:
domain home.net search home.net nameserver 192.168.0.1
Работа в ненулевых мандатных режимах
В данном дистрибутиве реализована мандатная модель разграничения доступа, в том числе к сетевым сервисам. Чтобы обеспечить корректную работу демона named в режимах с мандатной меткой, отличной от нулевой, нужно добавить всего одну строчку в файл /etc/parsec/privsock.conf :