Kerberos
Керберос был создан с мыслью об аутентификации, но не авторизации. Он говорит "Ты мне можешь
доверять, этот человек тот, за кого себя выдаёт" и ничего более.
Правильным описанием для Керберос является "безопасный, single sign on, доверенная стороння служба
взаимной аутентификации". Он не хранит никакой информации про UID, GID или путь к домашней папке.
Чтобы передать эту информацию хостам, тебе в конечном итоге понадобятся справочные службы:
NIS, LDAP или Samba.
Реализации
MIT Kerberos - первоначальная реализация. Из-за того, что во время своего появления она
попадала под ограничения экспорта технологий криптографии, была придумана альтернатива в виде
шведского Heimdal Kerberos.
Heimdal Kerberos - изначально не было экспортных ограничений. Создана в Швеции и нацелена
на полную совместимость с MIT Kerberos. Используется сервером Samba.
Active Directory - эти контроллеры доменов используют для Windows свою реализацию Керберос 5.
Shishi - GNU реализация Керберос 5.
Пакеты
- krb5-kdc - сервер KDC (ставится на основной и подчинённые KDC)
- krb5-admin-server - сервер администрирования KDC (ставится на основной KDC)
- krb5-kpropd - сервер репликации KDC (ставится на подчинённые KDC)
- krb5-user - клиентские утилиты Керберос (kinit, klist и т.д.)
- krb5-config - содержит шаблон для конфигурационного файла /etc/krb5.conf и доки по нему
- krb5-k5tls
- krb5-doc - локальная копия раздела документации с сайта Керберос.
После установки пакета, документация доступна по ссылке file:///usr/share/doc/krb5-doc/index.html
- libgssrpc4
- libkadm5clnt-mit12
- libkadm5srv-mit12
- libkdb5-10
Установка клиента
sudo apt install krb5-user
Получить тикет
kinit
Посмотреть имеющиеся тикеты
klist
Какому пакету принадлежит файл /usr/bin/klist
$ dpkg -S /usr/bin/klist
krb5-user: /usr/bin/klist
Посмотреть информацию о пакете
$ apt-cache show krb5-user
Package: krb5-user
Source: krb5
Version: 1.18.3-6+deb11u1
Installed-Size: 442
Maintainer: Sam Hartman
Architecture: amd64
Depends: libc6 (>= 2.25), libcom-err2 (>= 1.43.9), libk5crypto3 (>= 1.18.2), libkadm5clnt-mit12 (>= 1.18.2), libkadm5srv-mit12 (>= 1.18.2), libkdb5-10 (>= 1.18.3), libkrb5-3 (= 1.18.3-6+deb11u1), libkrb5support0 (>= 1.17), libss2 (>= 1.01), krb5-config
Suggests: krb5-k5tls
Conflicts: heimdal-clients
Description-en: basic programs to authenticate using MIT Kerberos
Kerberos is a system for authenticating users and services on a network.
Kerberos is a trusted third-party service. That means that there is a
third party (the Kerberos server) that is trusted by all the entities on
the network (users and services, usually called "principals").
.
This is the MIT reference implementation of Kerberos V5.
.
This package contains the basic programs to authenticate to MIT Kerberos,
change passwords, and talk to the admin server (to create and delete
principals, list principals, etc.).
Description-md5: b10599fa748131166d0b1a01617ee6ce
Multi-Arch: foreign
Homepage: http://web.mit.edu/kerberos/
Tag: admin::login, admin::user-management, implemented-in::c,
interface::commandline, network::client, protocol::kerberos,
role::program, security::authentication, use::login
Section: net
Priority: optional
Filename: pool/main/k/krb5/krb5-user_1.18.3-6+deb11u1_amd64.deb
Size: 151304
MD5sum: fe08f17d28e54d8721533a7a9654bbbc
SHA256: 250c3e1592f517a1510d4187c9e68ee58d2b88401359e08629f8265718f7c7c8
Посмотреть состав пакета krb5-user
$ dpkg -L krb5-user
/.
/usr
/usr/bin
/usr/bin/k5srvutil
/usr/bin/kadmin
/usr/bin/kdestroy
/usr/bin/kinit
/usr/bin/klist
/usr/bin/kpasswd
/usr/bin/ksu
/usr/bin/kswitch
/usr/bin/ktutil
/usr/bin/kvno
/usr/share
/usr/share/doc
/usr/share/doc/krb5-user
/usr/share/doc/krb5-user/NEWS.Debian.gz
/usr/share/doc/krb5-user/README.Debian
/usr/share/doc/krb5-user/README.gz
/usr/share/doc/krb5-user/changelog.Debian.gz
/usr/share/doc/krb5-user/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/krb5-user
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/k5srvutil.1.gz
/usr/share/man/man1/kadmin.1.gz
/usr/share/man/man1/kdestroy.1.gz
/usr/share/man/man1/kinit.1.gz
/usr/share/man/man1/klist.1.gz
/usr/share/man/man1/kpasswd.1.gz
/usr/share/man/man1/ksu.1.gz
/usr/share/man/man1/kswitch.1.gz
/usr/share/man/man1/ktutil.1.gz
/usr/share/man/man1/kvno.1.gz
Посмотреть состав пакета krb5-kdc
$ dpkg -L krb5-kdc
/.
/etc
/etc/init.d
/etc/init.d/krb5-kdc
/etc/krb5kdc
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/krb5-kdc.service
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/krb5
/usr/lib/x86_64-linux-gnu/krb5/plugins
/usr/lib/x86_64-linux-gnu/krb5/plugins/kdb
/usr/lib/x86_64-linux-gnu/krb5/plugins/kdb/db2.so
/usr/sbin
/usr/sbin/kdb5_util
/usr/sbin/kproplog
/usr/sbin/krb5kdc
/usr/share
/usr/share/doc
/usr/share/doc/krb5-kdc
/usr/share/doc/krb5-kdc/NEWS.Debian.gz
/usr/share/doc/krb5-kdc/README.Debian
/usr/share/doc/krb5-kdc/README.KDC
/usr/share/doc/krb5-kdc/changelog.Debian.gz
/usr/share/doc/krb5-kdc/copyright
/usr/share/doc/krb5-kdc/examples
/usr/share/krb5-kdc
/usr/share/krb5-kdc/kdc.conf.template
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/krb5-kdc
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/kdc.conf.5.gz
/usr/share/man/man8
/usr/share/man/man8/kdb5_util.8.gz
/usr/share/man/man8/kproplog.8.gz
/usr/share/man/man8/krb5kdc.8.gz
/var
/var/lib
/var/lib/krb5kdc
/usr/share/doc/krb5-kdc/examples/kdc.conf
Посмотреть состав пакета krb5-admin-server
$ dpkg -L krb5-admin-server
/.
/etc
/etc/init.d
/etc/init.d/krb5-admin-server
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/krb5-admin-server.service
/usr
/usr/sbin
/usr/sbin/kadmin.local
/usr/sbin/kadmind
/usr/sbin/kprop
/usr/sbin/krb5_newrealm
/usr/share
/usr/share/doc
/usr/share/doc/krb5-admin-server
/usr/share/doc/krb5-admin-server/changelog.Debian.gz
/usr/share/doc/krb5-admin-server/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/krb5-admin-server
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/kadm5.acl.5.gz
/usr/share/man/man8
/usr/share/man/man8/kadmin.local.8.gz
/usr/share/man/man8/kadmind.8.gz
/usr/share/man/man8/kprop.8.gz
/usr/share/man/man8/krb5_newrealm.8.gz
kadmin.local - утилита для локального управления БД для KDC
kadmind - сервер администрирования KDC
kprop - утилита для распространения БД на подчинённые серверы KDC
Репликация KDC
Для репликации используется утилита kprop из пакета krb5-admin-server и сервер kpropd из пакета
krb5-kpropd. Сервер ставится на подчинённые KDC. Сервер управления KDC находится только на основном KDC.
Создание базы данных для KDC
$ sudo kdb5_util create -s
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'MY.REALM.RU',
master key name 'K/M@MY.REALM.RU'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
Списки контроля доступа ACL
Обычно размещаются в файле /etc/krb5kdc/kadm5.acl
Флаг |
Описание |
a/A |
Разрешить/запретить добавлять политики принципалов |
d/D |
Разрешить/запретить удалять принципалов |
m/M |
Разрешить/запретить изменять принципалов |
c/C |
Разрешить/запретить изменять пароль принципалов |
i/I |
Разрешить/запретить запросы к БД |
l/L |
Разрешить/запретить принципалам просматривать БД |
Список портов
Сервер |
Локальный порт |
Удалённый порт |
Описание |
Все KDC |
TCP 88, UDP 88 |
Выше 1024 |
Сервер тиектов Керберос 5 |
Все KDC |
TCP 749 |
Выше 1024 |
Служба Керберос 5 для смены пароля пользователя |
Все KDC |
UDP 4444 |
Выше 1024 |
Служба для преобразования тикетов из Керберос 5 в Керберос 4 |
Все KDC |
TCP 749 |
Выше 1024 |
Сервер управления Керберос 5 |
Главный/Управляющий KDC |
TCP 464 |
Выше 1024 |
Служба Керберос 5 для смены пароля пользователя (старая версия и AD) |
Создание принципала для службы
# kadmin.local
kadmin.local: add_principal -randkey servicename/hostname@REALM
Далее надо экспортировать ключ в файл keytab
kadmin.local: ktadd -k servicename.keytab servicename/hostname
Скопировать полученный ключ на сервер службы.
scp /tmp/ssh-server.keytab root@ssh-server.foobar.com:/etc/krb5.keytab
Файл keytab должен быть доступен для процесса, который его использует.