Интеграция AIX и MS Active Directory 2003 с помощью Kerberos


1. Пререквизиты

1) MS Active Directory и Kerberos на MS Windows 2003 Server.

2) AIX 5.3 ML03 и выше. Во избежание проблем биндинга к AD через керберос необходимо установить APAR IY79120.
У меня на 5300-04 и на 5300-05 проблем с биндингом без этого APAR не возникало.
3) MS Services for Unix для поддержки расширений AD для UNIX и синхронизации паролей.
Сейчас есть версия MSSFU 3.5, с ней вроде как проблем быть не должно вообще,
я ставил и на 3.5 и на 2.0 — тонкости опишу.

4) На сервере KDC должны быть установлены Windows Support Tools.

5) Резолв через DNS на AIX должен быть настроен.

6) Допускаем
имя нашего домена — example.com
kerberos realm — EXAMPLE.COM
контроллеры домена — dc01, dc02
имя нашего хоста — aixhost
 
    2. Инсталяция пакетов:
1) Рекомендую сначала найти и скопировать в одно место все необходимые пакеты.
В моем дистрибутиве они разложились так:
krb5.lic        — AIX 5L Expansion Pack Volume #1
krb5.client        — AIX 5L Expansion Pack Volume #1
krb5.toolkit        — AIX 5L Expansion Pack Volume #1
krb5.msg.en_US        — AIX 5L Expansion Pack Volume #1
krb5.doc.en_US        — AIX 5L Expansion Pack Volume #1
ldap.client        — AIX 5L Volume #4
gskta.rte         — AIX 5L Expansion Pack Volume #2
ldap.max_crypto_client     — AIX 5L Expansion Pack Volume #1

2) Инсталим сначала krb5.lic, с одобрением лицензионного соглашения.
Лично я пользовался smit install, но можно и строчкой 🙂
# installp -acgXYpd <SOURCEDIR> krb5.lic
<SOURCEDIR> — место, куда Вы свалили все пакеты

3) Инсталируем все остальные пакеты
# installp -acgXYpd <SOURCEDIR> krb5.client krb5.toolkit krb5.msg.en_US \
krb5.doc.en_US ldap.client gskta.rte ldap.max_crypto_client

    3. Настройка Kerberos
1) Поправим системные пути, чтобы находились бинарники кербероса.
Добавим /usr/krb5/bin:/usr/krb5/sbin:
в переменную PATH в файле /etc/environment перед путями к java.
У меня путь получился такой:
PATH=/usr/local/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/krb5/bin:/usr/krb5/sbin:/usr/java/jre/bin:/usr/java/bin

2) Настроим синхронизацию времени с KDC
# ntpdate dc01.example.com

Добавим строчки в /etc/ntp.conf
server dc01.example.com
server dc02.example.com

заускаем демона ntp
startsrc -s xntpd

проверяем синхронизацию
# ntpq
ntpq> peers
     remote           refid         st t when poll reach   delay   offset    disp
=================================================================================
+dc01.example.com dc01.example.com   6 u  454  512  377     0.61  -15.332   29.01
*dc02.example.com dc02.example.com   5 u  121  512  377     2.64    0.334    5.86
ntpq> q
#

Сделаем так, чтобы xntpd запускался автоматически при загрузке системы,
для этого раскомментируем строку запуска xntpd в файле /etc/rc.tcpip

3) Собственно генерируем конфиги кербероса
# config.krb5 -C -r EXAMPLE.COM -d example.com -c dc01.example.com -s dc01.example.com

realm (-r) обязательно в верхнем регистре!!!

Поправим секцию [libdefaults] в файле /etc/krb5/krb5.conf — уберем не поддерживаемые Windows 2000 и 2003 типы шифрования.
После исправления она должна выглядеть примерно так:

[libdefaults]
    default_realm = EXAMPLE.COM
    default_keytab_name = FILE:/etc/krb5/krb5.keytab
    default_tkt_enctypes = des-cbc-md5 des-cbc-crc
    default_tgs_enctypes = des-cbc-md5 des-cbc-crc

4) Добавим методы аутентикации сразу и для kerberos и для LDAP в /usr/lib/security/methods.cfg

KRB5A:
        program = /usr/lib/security/KRB5A
        options = authonly

LDAP:
        program = /usr/lib/security/LDAP
        program_64 = /usr/lib/security/LDAP64

KRB5ALDAP:
        options = db=LDAP,auth=KRB5A

KRB5Afiles:
       options = db=BUILTIN,auth=KRB5A

5) Создаем принципала для нашего хоста:
В AD создаем пользователя вида host_имяхоста, то есть в нашем случае host_aixhost, устанавливаем ему пароль.

6) С помощью утилиты ktpass из MS Windows Support Tools создаем файл с ключом и переносим его на AIX
C:>ktpass -princ host/aixhost.example.com@EXAMPLE.COM -mapuser host_aixhost -pass superPassw0rd -out host_aixhost.keytab

С помощью утилиты setspn можем посмотреть мапинг логина на принципала
C:>stspn -L host_aixhost

Копируем ключ на AIX
pscp host_aixhost.keytab root@aixhost:/etc/krb5/
Тут я воспользовался pscp из пакета PuTTy

7) Импортируем полученный ключ в таблицу ключей на aixhost
# ktutil
rkt /etc/krb5/host_aixhost.keytab
wkt /etc/krb5/krb5.keytab
q
#

Проверим ключ
# kinit host/aixhost.example.com@EXAMPLE.COM
Password for host/aixhost.example.com@EXAMPLE.COM: ************
#
# klist
Ticket cache:  FILE:/var/krb5/security/creds/krb5cc_0
Default principal:  host/aixhost.example.com@EXAMPLE.COM

Valid starting     Expires            Service principal
04/19/07 10:57:13  04/19/07 20:57:19  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        Renew until 04/20/07 10:57:13
#

8) Удалим импорт-ключ принципала
# rm /etc/krb5/host_aixhost.keytab

    4. Проверка утентикации kerberos
1) Заведем в AD пользователя, например test01 и зададим для него пароль.

2) В AIX создадим пользователя с методом аутентикации через KRB5Afiles
# mkuser registry=KRB5Afiles SYSTEM=KRB5Afiles test01

3) Попробуем логиниться пользователем test01

login as: test01
test01@aixhost’s password:
*******************************************************************************
*                                                                             *
*                                                                             *
*  Welcome to AIX Version 5.3!                                                *
*                                                                             *
*                                                                             *
*  Please see the README file in /usr/lpp/bos for information pertinent to    *
*  this release of the AIX Operating System.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
$ echo $AUTHSTATE
KRB5Afiles
$

Видим что атентикация прошла через KRB5Afiles. Все аттрибуты пользователя и членство
в группах в данном случае хранятся локально в /etc/passwd и /etc/group

    5. Настройка LDAP
1) Документы, которыми я пользовался, рекомендуют не используя mksecldap, а просто
руками прописать конфигурационные файлы, однако mksecldap дает один плюс — он прописывает
в конфиг пароль нашего принципала в зашифрованом DES виде.

Итак, запускаем конфигуратор ldap клиента
#  mksecldap -c -h dc01 -a ‘CN=host_aixhost,OU=Host Accounts,OU=Users,OU=New Vasjuki,DC=example,DC=com’ -p superPassw0rd
где у вас будет расположен аккаунт принципала, я не знаю 🙂

2) Правим /etc/security/ldap/ldap.cfg

searchmode:OS   # OS необходимо, как оказалось, для MSSFU 2.0 по умолчанию стоит ALL
ldapservers:dc01.example.com,dc02.examle.com
binddn:cn=CN=host_aixhost,OU=Host Accounts,OU=Users,OU=New Vasjuki,DC=example,DC=com
bindpwd:{DES}63FABC6A5AB7B4 29ECDEDA02F DB0D38DDD37E25AF46255     # в принципе тут можно вписать пароль и в открытом виде
userattrmappath:/etc/security/ldap/sfu20user.map           # опять же для MSSFU 2.0
groupattrmappath:/etc/security/ldap/sfu20group.map
userbasedn:OU=Users,OU=New Vasjuki,DC=example,DC=com       # тут должно быть ясно — юнит под которым искать
groupbasedn:OU=Groups,OU=New Vasjuki,DC=example,DC=com
userclasses:user
groupclasses:group

Пояснения:

searchmode: по умолчанию ALL и по умолчанию работает отлично с MSSFU 3.*,
однако с 2.0 демон LDAP клиента падал в кору при попытках сделать id на некоторых пользователей AD.
По сути дела, методом тыка было выведено, что нужно в этом случае прописывать OS.

userattrmappath и groupattrmappath мапфайлы, где стыкуются юникс атрибуты с AD атрибутами.
Для MSSFU 3.0 и 3.5 есть шаблоны
/etc/security/ldap/sfu30user.map   
/etc/security/ldap/sfu30group.map 

В AIX 5L TL05 стало возможно прописывать до 10-ти строк userbasedn и groupbasedn, в результате LDAP клиент
по порядку опрашивает все эти DN.
Кроме того появилась возможность вписывать в эти записи фильтры [2].

3) Запускаем демон LDAP клиента
# start-secldapclntd
Starting the secldapclntd daemon.
The secldapclntd daemon started successfully.
#

4) Делаем так, чтобы LDAP клиент запускался при старте системы
# mkitab "ldapclntd:2:once:/usr/sbin/secldapclntd > /dev/console 2>&1"

    6. Проверка работы LDAP+Kerberos

1) Заводим в AD группу и пользователя, например tstgrp02 и test02, проставляем пароль и заполняем поля в закладке
Unix Attributes.

2) Проверяем запросом к LDAP с AIX
# lsldap -a group tst*
# lsldap -a passwd test*

3) Смотрим видит-ли AIX базу пользователй LDAP
# id test02
uid=2365(test02) gid=1001(Domain Users)
# lsuser test02
test02 id=22365 pgrp=Domain Users groups=Domain Users home=/home/test02 shell=/usr/bin/sh gecos=test02 login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=KRB5ALDAP SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=-1 stack=65536 core=2097151 rss=-1 nofiles=2000 fsize_hard=-1 data_hard=-1 rss_hard=-1 roles=
#

4) Чтобы пользователь успешно аутентифицировался, нужно поменять атрибут SYSTEM на KRB5ALDAP
# chuser SYSTEM=KRB5ALDAP test02

Если пользователей AD будет гораздо больше, чем локальных, а локальные будут заводиться редко, можно сделать и иначе:
В файле /etc/security/user
для default прописать
   SYSTEM=KRB5ALDAP
всем локальным пользователям прописать
   SYSTEM=compat

Если существующим не проставить compat — у них будут проблемы при попытке войти 🙂

5) Пытаемся логиниться
login as: test02
test02@aixhost’s password:
*******************************************************************************
*                                                                             *
*                                                                             *
*  Welcome to AIX Version 5.3!                                                *
*                                                                             *
*                                                                             *
*  Please see the README file in /usr/lpp/bos for information pertinent to    *
*  this release of the AIX Operating System.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
$ echo  $AUTHSTATE
KRB5ALDAP
$

Вот собственно и все!

Ссылки на использованную литературу:
1. http://www.redbooks.ibm.com/redbooks/pdfs/sg247165.pdf — IBM RedBook Integrating AIX into Heterogeneous LDAP Environments
2. http://www-128.ibm.com/developerworks/aix/library/au-aixadsupport.html — AIX5 LDAP user management

Оставьте комментарий