Страница 1 из 1

Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2009-05-19 11:17:26
infrasty
Статья написана в стиле "пометка что-бы не забыть", многие моменты подразумеваются известными и акцент делается на "подводные камни". В интернете по этому вопросу увы ничего не нашел, так же бьються над аналогичными проблемами ребята из Juniper Networks (не подсоединяет к домену) и IBM ( не получает список пользователей).


Для того, что бы службы на FreeBSD могли получать TGS (Ticket Granting Service - тикет на доступ к службе)
от Active Directory Key Distribution Center необходимо что бы в системе FreeBSD был TGT (Ticket Granting Ticket - тикет на получение тикетов).

В стандартном варианте настройке родного Kerberos (Heimdal 0.x_чего_то_там) на FreeBSD (вплоть до версии 7.1.) используется файл

/etc/krb5.conf [man krb5.conf]

в этом файле указывается REALM (область, за которую отвечает KDC) и серверы, с которых можно спрашивать TGT и TGS.
Первоначальный TGT получается обычно с использованием команды:

Код: Выделить всё

#kinit DomainAdministrator
Enter DomainAdministrator's password: ***********
kinit: NOTICE: ticket renewable lifetime is 1 week
и в файле-кеше ключей (обычно /tmp/krb5cc_0, т.к. все делается из под рута) появляется TGT, используя который
другие службы (pam_krb5, ldap, samba) могут обращаться к службам AD.

Для автоматизации получения ключа используются разные методы. Все они используют cron, для периодического получения/обновления ключа.

1.) Самый простой это

Код: Выделить всё

echo MyPassword | kinit DomainAdministrator
Метод прост, но "светит пароль" администратора, что не является хорошим тоном.

2.) Второй способ описан в статье Microsoft "Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability"
Заключается метод в следующем: создается пользовательский аккаунт, через который будет авторизоваться сервер.
С использованием команды из пакета Windows Resource Kit или Windows Support Tools

Код: Выделить всё

C:>Ktpass.exe -princ HOST/my_bsd_hostname@NT-DNS-REALM-NAME -mapuser user_account_for_bsd -pass account_password_for_bsd -out unixmachine.keytab
создается файл unixmachine.keytab в который пишутся ключи, которые могут быть использованы для авторизации без пароля,
используя команду на FreeBSD

Код: Выделить всё

kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
Файл unixmachine.keytab требует переноса на FreeBSD и манипуляции для впихивания его в /etc/krb5.keytab - системный файл для хранения ключей
по-умолчанию. Подробности в статье [http://technet.microsoft.com/en-us/libr ... 42433.aspx,
Путь TechNet->TechNet Library->Windows->Windows Server->Windows Server 2000->How To... ->Step-by-Step Guide to Kerberos 5]

3.) Наиболее элегантный.

Для получения ключей используется Samba 3.xx, которая чаще всего используется в связке с Active Directory.
Метод также подразумевает получение ключей в /etc/krb5.keytab и авторизацию через

Код: Выделить всё

kinit -k
для получения ключей наобходимо использовать

Код: Выделить всё

net -U DomainAdministrator net ads keytab ADD HOST
эта команда получает ключи в файл (по умолчанию) /etc/krb5.keytab

Код: Выделить всё

Vno  Type              Principal
  5  des-cbc-crc       HOST/my_bsd_hostname@NT-DNS-REALM-NAME
  5  des-cbc-md5       HOST/my_bsd_hostname@NT-DNS-REALM-NAME
  5  arcfour-hmac-md5  HOST/my_bsd_hostname@NT-DNS-REALM-NAME
Требования: Реализация Kerberos на FreeBSD heimdal не использует (пока что) tcp для Kerberos запросов, поэтому пользователь
DomainAdministrator должен быть в одной единственной группе (Domain Admins) и по возможности в самом верхнем OU.
Иначе будут ошибки

Код: Выделить всё

response too big for UDP, use TCP instead
Получив ключи, следует произвести некоторые магические действия с Active Directory.
В моем случае был Microsoft Windows Server 2008 Enterprise SP1, по традиции при его выпуске была допущена ошика
в реализации kerberos из-за чего при использовании

Код: Выделить всё

kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
Microsoft Windows Server 2008 всех версиий возвращает KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN из-за неправильной
интерпретации косой черты ("/") в имени принципала.
Лечится это частным патчем от Microsoft [KB951191], который Microsoft почему то высылает только по запросу
на электронный адрес, да еще в придачу защифрованным паролем. (актуально на 15.05.2009)

Далее для авторизации через kinit к сожалению не используется аттрибут serivcePrincipalName объекта
типа Computer, который создается при подключении Samba к домену и чьи ключи Samba помещает в /etc/krb5.keytab.
Для того, что бы этот аккаунт использовался для авторизации необходимо сделать два вещи

а.) установить аттрибут userPrincipalName в HOST/my_bsd_hostname@NT-DNS-REALM-NAME (по умолчанию он пуст для объекта Computer)
б.) установить отметку "Без предварительной проверки Kerberos". Это легче сказать чем сделать, т.к. диалоговое окно для таких
манипуляций доступно только для объектов типа User. Отметка это лишь бит в целом числе, поэтому...
Я использовал ADSI Edit (входит в поставку Windows Server 2008) для правки аттрибута userAccountControl объекта типа Computer, представляющего
FreeBSD в домене:

Код: Выделить всё

 userAccountControl = 0x411000 (4263936 decimal) [ WORKSTATION_TRUST_ACCOUNT | DONT EXPIRE PASSWD | DONT REQUIRE PREAUTH ]
После установки патча, манипуляций с объектов Computer account, представляющего FreeBSD и прописав в cron

Код: Выделить всё

0       *       *       *       *       /usr/bin/kinit --renew
*       2       *       *       *       /usr/bin/kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
получаем рабочее решение по актуальному постоянному присутствию в Kerberos Realm-e

Код: Выделить всё

# klist -vf
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: HOST/my_bsd_hostname@NT-DNS-REALM-NAME
    Cache version: 4

Server: krbtgt/NT-DNS-REALM-NAME@NT-DNS-REALM-NAME
Ticket etype: arcfour-hmac-md5, kvno 2
Auth time:  May 19 11:10:22 2009
End time:   May 19 21:10:22 2009
Renew till: May 26 11:10:22 2009
Ticket flags: forwardable, renewable, initial

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2009-05-19 12:56:03
Alex Keda
2 zeus
хобы зарегался чтоб править можно было +)

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-27 19:19:27
zeone
Подскажите следующая проблема когда я выполняю следующие действия то ничего не происходит

Код: Выделить всё

[root@tehas /etc]# kinit ponomarenko
ponomarenko@PARTY2.AVEC's Password:
[root@tehas /etc]#
не получает тикет

Конфиг kinit

Код: Выделить всё

[libdefaults]
default_realm = PARTY2.AVEC

[realms]
PARTY2.AVEC = {
kdc = SATURN.PARTY2.AVEC
}

[domain_realms]
.domain.com = PARTY2.AVEC
Конфиг самба

Код: Выделить всё

[global]
        workgroup=PARTY2.AVEC
        server string =Samba
        netbios name=unix
        netbios aliases=freebsd samba
        auth methods=winbind
        security =ADS
        hosts allow =192.168.9., 127.
        log file = /var/log/samba/log.%m
        max log size =0
        log level=0
        syslog=0
        password server = 192.168.9.125
        realm = avec
        encrypt passwords=yes
        socket options=SO_RCVBUF=8192 SO_SNDBUF=8192 TCP_NODELAY IPTOS_LOWDELAY
        client signing=yes
        idmap uid=10000-15000
        idmap gid=10000-15000
        winbind use default domain=yes
        winbind enum users=yes
        winbind enum groups=yes
        display charset = koi8-r
        unix charset = koi8-r
        dos charset = cp866
        #template homedir=/home/IMPEX/users
        #template shell=/bin/csh
        interfaces=em0 lo0
        bind interfaces only=yes
        nt acl support=yes
        map acl inherit=yes
        inherit acls=no
        inherit owner=no
        inherit permissions=no
        acl check permissions=true
        acl map full control=false
        block size=4096
        client ntlmv2 auth=yes
        #minut
        deadtime=10
        dns proxy=no
        follow symlinks=no
        getwd cache=yes
        hide dot files=yes
        hide special files=yes
        keepalive=0
        max connections=20
        wide links=no
        load printers=yes
        printing=cups
        printcap name=cups
        disable spoolss=no
        use client driver=no
cups server=ip:631

        [public]
        path=/server/share
        #read list="@TEST\Domain Users"
        #write list="@TEST\Domain Admins"
        comment="пВЭЙЕ ТЕУХТcЩ"
        create mask=1775
        directory mask=1775
        browseable=yes
        available=yes
        read only=no
        admin users="@TEST\Domain Admins"

        [printers]
        comment="All printers"
        path=/var/spool/samba
        public=yes
        guest ok=yes
        writable=no
        printable=yes
        browseable=yes
        read only=yes

        [print$]
        comment="Printer Drivers"
        path=/usr/local/share/cups/drivers
        browseable=yes
        guest ok=no
        read only=yes
        write list="@TEST\Domain Admins"
        Read list="@TEST\Domain Users"



Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-27 23:45:56
Alex Keda
самба какая

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 9:29:09
snorlov
infrasty писал(а): Иначе будут ошибки

Код: Выделить всё

response too big for UDP, use TCP instead
Была такая ошибка, решил указанием протокола в krb5.conf

Код: Выделить всё

kdc=tcp/<ip контроллера AD>

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 10:13:08
zeone
Alex Keda писал(а):самба какая
Если адресовано мне то 3,4 сейчас попробую все убрать и сделать заново с 3 версией

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 15:31:32
zeone
Ничего не вышло все также не ставит тикет

Код: Выделить всё

[root@tehas /usr/ports/net/samba35]# kinit
ldap_samba@PARTY2.AVEC's Password:
[root@tehas /usr/ports/net/samba35]# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: ldap_samba@PARTY2.AVEC

  Issued           Expires          Principal
Dec 28 14:21:34  Dec 29 00:21:32  krbtgt/PARTY2.AVEC@PARTY2.AVEC
[root@tehas /usr/ports/net/samba35]#
Вот лог самбы при старте (вроди все ок)

Код: Выделить всё

[2010/12/28 14:22:35,  0] smbd/server.c:1119(main)
  smbd version 3.5.6 started.
  Copyright Andrew Tridgell and the Samba Team 1992-2010
[2010/12/28 14:22:35.631923,  2] lib/tallocmsg.c:106(register_msg_pool_usage)
  Registered MSG_REQ_POOL_USAGE
[2010/12/28 14:22:35.632001,  2] lib/dmallocmsg.c:77(register_dmalloc_msgs)
  Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
max_open_files: sysctl_max (7207) below minimum Windows limit (16384)
rlimit_max: rlimit_max (7207) below minimum Windows limit (16384)
[2010/12/28 14:22:35.632924,  2] param/loadparm.c:7859(do_section)
  Processing section "[upload]"
[2010/12/28 14:22:35.636024,  2] lib/interface.c:340(add_interface)
  added interface em0 ip=192.168.9.248 bcast=192.168.9.255 netmask=255.255.255.0
[2010/12/28 14:22:35.636318,  1] smbd/files.c:193(file_init)
  file_init: Information only: requested 16384 open files, 7187 are available.
[2010/12/28 14:22:35.967848,  2] smbd/server.c:721(smbd_parent_loop)
  waiting for connections
А вот лог при попытке парейти с винды по директории \\tehas\ (при этом появляется пустое окно)

Код: Выделить всё

[root@tehas /usr/ports/net/samba35]# cat /var/log/samba/log.pc005
[2010/12/28 14:23:53.619661,  2] lib/access.c:406(check_access)
  Allowed connection from pc005.party2.avec (192.168.9.55)
[2010/12/28 14:23:53.768954,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:53.771432,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:53.771987,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:53.782358,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:53.784428,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:53.785069,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:53.797874,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:53.799690,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:53.800256,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:53.802225,  0] auth/auth_domain.c:289(domain_client_validate)
  domain_client_validate: Domain password server not available.
[2010/12/28 14:23:53.803129,  2] auth/auth.c:314(check_ntlm_password)
  check_ntlm_password:  Authentication for user [ponomarenko] -> [ponomarenko] FAILED with error NT_STATUS_CANT_ACCESS_DOMAIN_INFO
[2010/12/28 14:23:54.516639,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:54.519245,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:54.520088,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:54.531703,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:54.534101,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:54.534644,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:54.544915,  0] rpc_client/cli_pipe.c:3940(get_schannel_session_key_common)
  get_schannel_session_key: could not fetch trust account password for domain 'PARTY2'
[2010/12/28 14:23:54.546793,  0] rpc_client/cli_pipe.c:4163(cli_rpc_pipe_open_schannel)
  cli_rpc_pipe_open_schannel: failed to get schannel session key from server SATURN.PARTY2.AVEC for domain PARTY2.
[2010/12/28 14:23:54.547324,  0] auth/auth_domain.c:188(connect_to_domain_password_server)
  connect_to_domain_password_server: unable to open the domain client session to machine SATURN.PARTY2.AVEC. Error was : NT_STATUS_CANT_ACCESS_DOMAIN_INFO.
[2010/12/28 14:23:54.549385,  0] auth/auth_domain.c:289(domain_client_validate)
  domain_client_validate: Domain password server not available.
[2010/12/28 14:23:54.550363,  2] auth/auth.c:314(check_ntlm_password)
  check_ntlm_password:  Authentication for user [ponomarenko] -> [ponomarenko] FAILED with error NT_STATUS_CANT_ACCESS_DOMAIN_INFO
При добавлении в домен пишет следующее

Код: Выделить всё

[root@tehas /usr/ports/net/samba35]# net ads join -U пользователь с полным доступом
Enter vovk's password:
Using short domain name -- PARTY2
Joined 'FREEBSD_SAMBA' to realm 'party2.avec'
No DNS domain configured for freebsd_samba. Unable to perform DNS Update.
DNS update failed!

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 16:11:41
zeone
Не знаю каким образом но заработало 8)

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 17:19:17
snorlov
zeone писал(а):Не знаю каким образом но заработало 8)
В dns вогнал запись о самбе, вот наверное и влетело... И вообще у тебя в конфиге самбы realm должен быть не avec, а PARTY2.AVEС, ну и т.д.

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-28 18:19:44
zeone
snorlov писал(а):
zeone писал(а):Не знаю каким образом но заработало 8)
В dns вогнал запись о самбе, вот наверное и влетело... И вообще у тебя в конфиге самбы realm должен быть не avec, а PARTY2.AVEС, ну и т.д.
релам стоит такойже как и как ты написал, в принципе возможно вариант с днс и помог, просто до этого он вообще никак не мог залезть в домен. Главное что теперь работает

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-29 13:25:35
zeone
Простите за глупые вопросы. Как сделать чтоб самба чмод меняла, ситуация следующая. Сначала сделал папку потом в конфиге прописал что ее читать может група а писать пользователь. Но проблема как я заметил что самба не меняет параметры чмода для папки и в итоге при смене параметров оно ничего не дает .
Вот конфиг для папки:

Код: Выделить всё

[Install]
        comment = Install
        path = /srv/smb/share
        valid users = @radminusers
        read list = @radminusers
        write list = @radminusers, PARTY2/ponomarenko
        read only = No
при этом чмод

Код: Выделить всё

[root@tehas /srv/smb]# ls -l
total 4
drwxr-xr-x  2 root  wheel  512 Dec 29 12:12 share
drwxrwxrwx  2 root  wheel  512 Dec 29 11:50 upload
[root@tehas /srv/smb]#

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-29 14:23:26
snorlov
А почему вы решили, что параметры valid read write влияют на файловую систему, эти параметры определяют, ваши права по отношению к данному сетевому ресурсу извне, по сети...
Для винды есть понятие Share и Security, первое определяет доступ извне, а второе разрешения NTFS, также и здесь ...

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-29 17:39:18
zeone
Честно говоря я в этом не спец только учусь, я подумал что просто указать кому можно а кому нет смотреть и все но в итоге ничего не вышло, если не трудно можете бросить ман какой то или список команд которые будут применяться для ограничения прав пользователей работающих на винде

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2010-12-29 21:29:00
snorlov
Достаточо сходить на http://www.samba.org

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2011-02-21 15:00:37
Stason
Как то в выходные попросили настроить прокси-сервер на freebsd, ну как обычно начал ставить самбу и че-то она не ставилась и мне это как было в лом ковырять и я подумал, что а нафик нужна самба, когда есть kerberos. И начал думать в эту сторону. Сделал следующее: создал keytab фалы на (KDC) - small business 2008 для freebsd, для разных сервисов HTTP и host, перенес их и добавил в системный keytab (krb5.keytab).
А вот дальше че то не пойму: мне же надо использовать этот системный keytab для ввода в домен и вот когда я делаю kinit -k -t /etc/krb5.keytab HTTP/<freebsd>.domen.local@DOMEN.LOCAL или kinit -k -t /etc/krb5.keytab host/<freebsd>.domen.local@DOMEN.LOCAL, то почему то удается это сделать только для одной службы - либо HTTP либо host. Как же мне быть дальше?

Re: Авторизация FreeBSD heimdal в AD используя ключи

Добавлено: 2011-02-22 12:08:33
Stason
Оказывается одной учётной записи можно поставить в соответствие только один сервис, поэтому если сервисы привязать к разным учеткам то kinit -k -t /etc/krb5.keytab HTTP/<freebsd>.domen.local@DOMEN.LOCAL и kinit -k -t /etc/krb5.keytab host/<freebsd>.domen.local@DOMEN.LOCAL как бы типа срабатывает без ошибок.
Но вот опять вопрос: когда я делаю klist -v, я вижу только 1 сервис. Могут ли они быть одновременно при выводе klist? Или так быть не должно?