Руководство FreeBSD
Пред. | Глава 15. Безопасность | След.

# 15.7. KerberosIV

Предоставил Mark Murray. Оригинальный текст предоставил Mark Dapoz.

Kerberos это сетевая дополнительная система/протокол, которая делает возможной аутентификацию пользователей через сервисы на защищенном сервере. Такие сервисы, как удаленный вход, удаленное копирование, защищенное копирование файлов между системами и другие задачи с высоким риском становятся допустимо безопасными и более контролируемыми.

Последующие инструкции могут использоваться в качестве руководства по настройке поставляемого с FreeBSD Kerberos. Тем не менее, вам могут потребоваться страницы справочника полного дистрибутива.

## 15.7.1. Установка KerberosIV

Kerberos это опциональный компонент FreeBSD. Простейший способ установки этой программы это выбор `krb4` или `krb5` из sysinstall во время первой установки FreeBSD. Будет установлен ''eBones'' (KerberosIV) или ''Heimdal'' (Kerberos5) вариант Kerberos. Включение этих реализаций объясняется тем, что они разработаны вне США/Канады и доступны вне этих стран, поскольку на них не влияют ограничения на экспорт криптографического кода из США.

Кроме того, реализация MIT Kerberos доступна из Коллекции Портов в виде пакета `security/krb5`.

## 15.7.2. Создание базы данных

Это необходимо сделать только на сервере Kerberos. Во-первых, убедитесь что не осталось старой базы данных Kerberos. Войдите в каталог `/etc/kerberosIV` и убедитесь, что в нем находятся только эти файлы:

    # cd /etc/kerberosIV
    # ls
    README	        krb.conf        krb.realms

Если присутствуют еще какие-то файлы (такие как `principal.*` или `master_key`), используйте команду `kdb_destroy` для удаления старой базы данных Kerberos, или, если Kerberos не запущен, просто удалите эти файлы.

Затем отредактируйте файлы `krb.conf` и `krb.realms`, введя ваши данные. В этом примере уникальный идентификатор `EXAMPLE.COM`, сервер `grunt.example.com`. Отредактируем или создадим файл `krb.conf`:

    # cat krb.conf
    EXAMPLE.COM
    EXAMPLE.COM grunt.example.com admin server
    CS.BERKELEY.EDU okeeffe.berkeley.edu
    ATHENA.MIT.EDU kerberos.mit.edu
    ATHENA.MIT.EDU kerberos-1.mit.edu
    ATHENA.MIT.EDU kerberos-2.mit.edu
    ATHENA.MIT.EDU kerberos-3.mit.edu
    LCS.MIT.EDU kerberos.lcs.mit.edu
    TELECOM.MIT.EDU bitsy.mit.edu
    ARC.NASA.GOV trident.arc.nasa.gov

В этом примере другие идентификаторы введены для иллюстрации настройки c несколькими хостами. С целью упрощения настройки вы можете не включать их.

Первая строка содержит идентификатор, под которым работает эта система. Остальные строки связывают идентификаторы с именами хостов. Сначала указывается идентификатор, затем хост под этим идентификатором, работающий как ''центр распространения ключей''. Слова `admin server` с последующим именем хоста означают, что этот хост также является сервером администрирования базы данных. За дальнейшей информацией об этих терминах обратитесь к страницам справочника по Kerberos.

Мы добавили `grunt.example.com` к идентификатору `EXAMPLE.COM` и кроме того сопоставили всем хостам в домене `.example.com` идентификатор `EXAMPLE.COM`. Файл `krb.realms` будет выглядеть так:

    # cat krb.realms
    grunt.example.com EXAMPLE.COM
    .example.com EXAMPLE.COM
    .berkeley.edu CS.BERKELEY.EDU
    .MIT.EDU ATHENA.MIT.EDU
    .mit.edu ATHENA.MIT.EDU

Как и в предыдущем примере, другие идентификаторы добавлены только для примера. С целью упрощения настройки вы можете не включать их.

В первой строке определенная система сопоставляется с идентификатором. В остальных строках показано, сопоставить идентификатору остальные системы определенного поддомена.

Теперь мы готовы к созданию базы данных. Потребуется всего лишь запустить сервер Kerberos (или центр распространения ключей). Используйте для этого `kdb_init`:

    # kdb_init
    Realm name [default  ATHENA.MIT.EDU ]: EXAMPLE.COM
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.

    Введите главный ключ Kerberos:

Теперь мы должны сохранить ключ, чтобы сервера на локальных компьютерах могли его взять. Используйте для этого команду `kstash`:

    # kstash

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered. BEWARE!

Этой командой зашифрованный главный пароль сохранен в `/etc/kerberosIV/master_key`.

## 15.7.3. Запуск Kerberos

Для каждой системы, защищаемой Kerberos, в базу данных должны быть добавлены две записи. Это `kpasswd` и `rcmd`. Они добавляются вместе с именем системы.

Эти даемоны, kpasswd и rcmd позволяют другим системам изменять пароли Kerberos и запускать такие команды как rcp(1), rlogin(1), rsh(1).

Теперь добавим эти записи:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: passwd
    Instance: grunt

    <Not found>, Create [y] ? y

    Principal: passwd, Instance: grunt, kdc_key_ver: 1
    New Password:                    <---- enter RANDOM here
    Verifying password

    New Password: <---- enter RANDOM here

    Random password [y] ? y

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name: rcmd
    Instance: grunt

    <Not found>, Create [y] ?

    Principal: rcmd, Instance: grunt, kdc_key_ver: 1
    New Password:		<---- enter RANDOM here
    Verifying password

    New Password:           <---- enter RANDOM here

    Random password [y] ?

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:         <---- null entry here will cause an exit

## 15.7.4. Создание файла настройки сервера

Теперь необходимо создать все записи сервисов, которые были определены для каждого компьютера. Используем для этого команду `ext_srvtab`. Будет создан файл, который должен быть скопирован или перемещен безопасным способом в каталог `/etc/kerberosIV` каждого Kerberos клиента. Этот файл должен присутствовать на каждом сервере и клиенте, он необходим для работы Kerberos.

    # ext_srvtab grunt
    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered. BEWARE!
    Generating 'grunt-new-srvtab'....

Эта команда создаст временный файл, который должен быть переименован в `srvtab`, чтобы серверы смогли обратиться к нему. Используйте команду mv(1) для перемещения его в исходной системе:

    # mv grunt-new-srvtab srvtab

Если файл предназначен для клиентской системы, и сеть не безопасна, скопируйте ``client`-new-srvtab` на съемный носитель и перенесите файл с его помощью. Убедитесь, что переименовали его в `srvtab` в каталоге `/etc/kerberosIV` клиента, и что режим доступа к нему 600:

    # mv grumble-new-srvtab srvtab
    # chmod 600 srvtab

## 15.7.5. Пополнение базы данных

Теперь необходимо добавить в базу данных пользователей. Во-первых, создадим запись для пользователя `jane`. Используйте команду `kdb_edit`:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance:

    <Not found>, Create [y] ? y

    Principal: jane, Instance: , kdc_key_ver: 1
    New Password:                <---- enter a secure password here
    Verifying password

    New Password:                <---- re-enter the password here
    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:		   <---- null entry here will cause an exit

## 15.7.6. Тестирование всей системы

Во-первых, запустите даемоны Kerberos. При правильном редактировании файла `/etc/rc.conf` они запустятся автоматически при перезагрузке. Это необходимо только на сервере Kerberos. Клиенты Kerberos получат все необходимые данные из каталога `/etc/kerberosIV`.

    # kerberos &
    Kerberos server starting
    Sleep forever on error
    Log file is /var/log/kerberos.log
    Current Kerberos master key version is 1.

    Master key entered. BEWARE!

    Current Kerberos master key version is 1
    Local realm: EXAMPLE.COM
    # kadmind -n &
    KADM Server KADM0.0A initializing
    Please do not use 'kill -9' to kill this job, use a
    regular kill instead

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!

Теперь для получения доступа через созданного пользователя `jane` используйте `kinit`:

    % kinit jane
    MIT Project Athena (grunt.example.com)
    Kerberos Initialization for "jane"
    Password:

Попробуйте просмотреть имеющиеся данные с помощью `klist`:

    % klist
    Ticket file:    /tmp/tkt245
    Principal:      jane@EXAMPLE.COM

      Issued           Expires          Principal
    Apr 30 11:23:22  Apr 30 19:23:22  krbtgt.EXAMPLE.COM@EXAMPLE.COM

Теперь попробуйте изменить пароль с помощью passwd(1), чтобы убедиться, что даемон kpasswd может получить информацию из базы данных Kerberos:

    % passwd
    realm EXAMPLE.COM
    Old password for jane:
    New Password for jane:
    Verifying password
    New Password for jane:
    Password changed.

## 15.7.7. Включение `su`

Kerberos позволяет назначить каждому пользователю, который нуждается в привилегиях `root`, свой собственный пароль su(1). Необходимо добавить учётную запись, которой разрешено получать `root` доступ через su(1). Это делается путем связывания учётной записи `root` с пользовательской учётной записью. Создадим в базе данных Kerberos запись `jane.root` с помощью `kdb_edit`:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance: root

    <Not found>, Create [y] ? y

    Principal: jane, Instance: root, kdc_key_ver: 1
    New Password:                    <---- enter a SECURE password here
    Verifying password

    New Password:    	 	 <---- re-enter the password here

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short!
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:		         <---- null entry here will cause an exit

Теперь проверим работоспособность этой записи:

    # kinit jane.root
    MIT Project Athena (grunt.example.com)
    Kerberos Initialization for "jane.root"
    Password:

Необходимо добавить пользователя к `root` файлу `.klogin`:

    # cat /root/.klogin
    jane.root@EXAMPLE.COM

Теперь попробуйте выполнить su(1):

    % su
    Password:

и посмотрите на имеющиеся данные:

    # klist
    Ticket file:	/tmp/tkt_root_245
    Principal:      jane.root@EXAMPLE.COM

      Issued           Expires          Principal
    May  2 20:43:12  May  3 04:43:12  krbtgt.EXAMPLE.COM@EXAMPLE.COM

## 15.7.8. Использование других команд

В примере выше мы создали запись (principal) `jane` с доступом к `root` (instance). Она основана на пользователе с таким же именем, как и идентификатор, что принято Kerberos по умолчанию; `<principal>.<instance>` в форме `<username>.``root` позволяет использовать su(1) для доступа к `root`, если соответствующие записи находятся в файле `.klogin` домашнего каталога `root`:

    # cat /root/.klogin
    jane.root@EXAMPLE.COM

Подобно этому, если в файле `.klogin` из домашнего каталога пользователя есть строки в форме:

    % cat ~/.klogin
    jane@EXAMPLE.COM
    jack@EXAMPLE.COM

это позволит любому с идентификатором `EXAMPLE.COM`, кто аутентифицировался как `jane` или `jack` (с помощью команды `kinit`, см. выше) получить доступ к учётной записи пользователя `jane` или файлам этой системы (`grunt`) через rlogin(1), rsh(1) или rcp(1).

Например, `jane` может входить в другую систему используя Kerberos:

    % kinit
    MIT Project Athena (grunt.example.com)
    Password:
    % rlogin grunt
    Last login: Mon May  1 21:14:47 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
            The Regents of the University of California.   All rights reserved.

    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Или `jack` входит в учётную запись `jane`'s на этом же компьютере (файл `.klogin` `jane` настроен как показано выше, и в Kerberos настроена учётная запись jack):

    % kinit
    % rlogin grunt -l jane
    MIT Project Athena (grunt.example.com)
    Password:
    Last login: Mon May  1 21:16:55 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
            The Regents of the University of California.   All rights reserved.
    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Пред. | Начало | След.
TCP Wrappers | Уровень выше | Kerberos5

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.