Kerberos

Безопасность системы #Безопасность

Материал упоминает устаревшие версии и утилиты: init.d (сейчас — systemd). Проверьте актуальность для вашей системы.

Керберос был создан с мыслью об аутентификации, но не авторизации. Он говорит "Ты мне можешь доверять, этот человек тот, за кого себя выдаёт" и ничего более.

Правильным описанием для Керберос является "безопасный, 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 должен быть доступен для процесса, который его использует.

Оценка статьи 0

Комментарии

Пока комментариев нет.