Назад | Перейти на главную страницу

Интеграция Debian 6.0 с AD

Несмотря на множество вопросов по этому поводу, например Linux в домене Windows AD Я хотел бы знать, как интегрировать Debian 6.0 Squeeze с AD с использованием открытого исходного кода или иным образом бесплатно для инструментов коммерческого использования

РЕДАКТИРОВАТЬ: Допускаются только инструменты, обновления (безопасности) которых доставляются через apt.

Пока мне удалось получить фактического пользователя аутентификация работать через kerberos, например журналы показывают, что проверка имени пользователя / пароля прошла успешно, но пользователь не может войти в систему, см. отрывок из журнала ниже;

РЕДАКТИРОВАТЬ: Журнал обновлен с помощью отладки pam на:

May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: entry (0x0)
May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): (user test.linux) attempting authentication as test.linux@AD.DOMAIN
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): user test.linux authenticated as test.linux@AD.DOMAIN
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: exit (success)
May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:account): could not identify user (from getpwnam(test.linux))
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: entry (0x0)
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): (user test.linux) retrieving principal from cache
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: exit (success)
May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!?
May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!?
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: entry (0x0)
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: exit (failure)
May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0)
May 12 10:06:36 debian-6-master login[10601]: User not known to the underlying authentication module
May 12 10:06:36 debian-6-master login[10601]: PAM 1 more authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost=

Мой ldap.conf выглядит так:

base dc=ad,dc=domain
uri ldap://10.10.10.10
ldap_version 3
binddn test.linux@ad.domain
bindpw password
scope sub
pam_password ad
nss_base_passwd dc=ad,dc=domain?sub
nss_base_shadow dc=ad,dc=domain?sub
nss_base_group dc=ad,dc=domain?sub? &(objectCategory=group)(gidnumber=*)
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
nss_map_attribute gecos cn
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute uniqueMember member
pam_sasl_mech DIGEST-MD5

nsswitch.conf:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns ldap
networks:       files ldap

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis ldap

passwd_compat: files ldap
group_compat: files ldap
shadow_compat: files ldap

все /etc/pam.d созданы как pam-auth-update, выбраны все три метода аутентификации (Kerberos, Unix и LDAP).

Я могу подтвердить с помощью захвата пакетов, что результаты поиска LDAP исправляют информацию о пользователе, как показано ниже в качестве руководства ldapsearch результат:

dn: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA,OU=_Managed Are
 as,DC=ad,DC=domain
objectClass: top
objectClass: person
objectClass: domainanizationalPerson
objectClass: user
cn: Linux, test
sn: Linux
givenName: test
distinguishedName: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA,
 OU=_Managed Areas,DC=ad,DC=domain
instanceType: 4
whenCreated: 20110407131914.0Z
whenChanged: 20110511125854.0Z
displayName: Linux, test
uSNCreated: 4144737
uSNChanged: 4638378
name: Linux, test
objectGUID:: wwZt/MX/K0S36BL4bS2w+g==
userAccountControl: 66048
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 129489044965699903
lastLogoff: 0
lastLogon: 129495915807176914
pwdLastSet: 129466559550934238
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAzXxBZqg31mUH5TsrkisAAA==
accountExpires: 9223372036854775807
logonCount: 35
sAMAccountName: test.linux
sAMAccountType: 805306368
userPrincipalName: test.linux@ad.domain
lockoutTime: 0
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=ad,DC=domain
dSCorePropagationData: 20110407131916.0Z
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 129488989872488561
uid: test.linux
msSFU30Name: test.linux
msSFU30NisDomain: ad
uidNumber: 10002
gidNumber: 10000
unixHomeDirectory: /home/test.linux
loginShell: /bin/sh

# refldap://DomainDnsZones.ad.domain/DC=DomainDnsZones,DC=ad,DC=domain

# refldap://ForestDnsZones.ad.domain/DC=ForestDnsZones,DC=ad,DC=domain

# refldap://ad.domain/CN=Configuration,DC=ad,DC=domain

# pagedresultscookie=
  1. С правильным именем пользователя и паролем я получаю MOTD и сообщение User not known to the underlying authentication module
  2. Я получаю неправильное имя пользователя Login incorrect
  3. С правильным именем пользователя, но неправильным паролем я получаю SASL/DIGEST-MD5 authentication started с последующим Login incorrect

AD работает под управлением сервера Windows 2k8 (r2), все пакеты debian - это то, что вы получаете от apt.

Любые идеи очень приветствуются.

РЕДАКТИРОВАТЬ 2: Как предлагается ниже, я пробовал с sssd с аналогичными результатами, теперь пароль запрашивается дважды, и журнал показывает:

May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost= user=test.linux
May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): received for user test.linux: 10 (User not known to the underlying authentication module)
May 12 14:53:14 debian-6-master login[11389]: pam_krb5(login:auth): user test.linux authenticated as test.linux@AD.DOMAIN
May 12 14:53:14 debian-6-master login[11389]: pam_unix(login:account): could not identify user (from getpwnam(test.linux))
May 12 14:53:15 debian-6-master login[11389]: pam_sss(login:account): Access denied for user test.linux: 10 (User not known to the underlying authentication module)
May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!?
May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!?
May 12 14:53:15 debian-6-master login[11389]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux
May 12 14:53:15 debian-6-master login[11389]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0)
May 12 14:53:15 debian-6-master login[11389]: User not known to the underlying authentication module

РЕДАКТИРОВАТЬ 3:

Если я сбегу sssd на переднем плане с уровнем отладки 5, журнал показывает:

(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts
(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>]
(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail!
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_cmd_authenticate] (4): entering pam_cmd_authenticate
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): command: PAM_AUTHENTICATE
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): domain: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): user: test.linux
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): service: login
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): tty: /dev/tty3
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): ruser: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): rhost: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok type: 1
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok size: 8
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok type: 0
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok size: 0
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): priv: 1
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): cli_pid: 12507
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): pam_reply get called.
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): blen: 8
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>]
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail!

Я бы рекомендовал использовать sssd. Это стандартный пакет в Debian squeeze, который делает жизнь много Полегче. Когда вы устанавливаете sssd, он должен спросить вас, какие методы аутентификации следует использовать. Сделайте там свой выбор, и скрипты nsswitch.conf и pam.d обновятся автоматически. Вам нужно будет иметь под рукой некоторые подробности о вашем домене AD, но тогда вы все равно должны их знать (например, какой DC использовать, какое имя области Kerberos и т. Д.).

Поверьте, я много исследовал это (и некоторые вопросы, заданные в этой связи на этом сайте, принадлежат мне), и sssd - это ответ. Он даже хорошо работает для ноутбуков, поскольку учетные данные кэшируются, и вы можете определить характеристики кеша.

Вот наш файл sssd.conf с несколькими комментариями:

# SSSD configuration generated using /usr/lib/sssd/generate-config
[sssd]
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
services = nss, pam
domains = your.domain

[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
debug_level = 8

[pam]
reconnection_retries = 3
debug_level = 8

[domain/<your.domain>]
; Using enumerate = true leads to high load and slow response
enumerate = false
cache_credentials = true
#entry_cache_timeout = 60

id_provider = ldap
auth_provider = krb5
chpass_provider = krb5
#access_provider = ldap

ldap_uri = ldap://you.domain.controller
ldap_search_base = CN=Users,DC=your,DC=domain
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
ldap_default_bind_dn = cn=LDAPsearch,CN=Users,dc=your,dc=domain
ldap_default_authtok_type = password
ldap_default_authtok = <password for LDAPsearch>
ldap_pwd_policy = none
ldap_user_object_class = user
ldap_group_object_class = group
ldap_user_home_directory = unixHomeDirectory

krb5_kdcip = your.domain.controller
krb5_realm = <kerberos realm name>
krb5_changepw_principle = kadmin/changepw
krb5_auth_timeout = 15

Это основано на использовании служб UNIX в Windows Server 2008 (который теперь является его неотъемлемой частью, раньше был надстройкой в ​​2k3 и ранее).

В отличие от других систем LDAP, AD требуется аутентифицированный сеанс, прежде чем можно будет получить какие-либо данные. Мы создали специального пользователя с именем LDAPsearch, чтобы облегчить это, но, вероятно, это также можно сделать с реальным пользователем домена.

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

Очевидно, вы можете использовать другую базу поиска, а также можете добавлять фильтры, чтобы гарантировать, что пользователи являются членами определенных групп и т. Д. Просто прочтите справочную страницу для sssd.

SSSD может быть ответом, хотя я еще не использовал его, поэтому не знаю. Я использовал winbind от samba3x, и он работал довольно хорошо. Проблема с настройкой kerberos и ldap напрямую, по крайней мере для меня, заключается в том, что вам нужно заполнить UID / GID и домашний каталог для всех ваших существующих пользователей и поддерживать два мира данных в AD / LDAP, которые не казались хорошими использование времени. winbind откроет собственные группы AD, изменит ключ своей машинной учетной записи в kerberos и т. д. Единственным недостатком является то, что он настаивает на 15-символьных или менее именах хостов для поддержки какой-то странной совместимости с netbios, которая, я не уверен, действительно существует или имеет какое-либо значение внутри окон больше, и время от времени демон заклинивает, и его необходимо перезапускать, что требует рабочего доступа к OOB. Комбинируйте с pam_mkhomedir и pam_access, чтобы учетные записи автоматически заполнялись домашними адресами, и вы могли ограничить, кто имеет доступ к каким хостам, если вам нужно. Имейте в виду, что хотя имена пользователей и группы с пробелами работают в удивительном количестве мест, они нарушают работу некоторых инструментов, таких как pam_access access.conf, не работающих с группами с пробелами в них.

В этой ветке был похожий вопрос, и у OP есть вещи, работающие с winbind для поиска имени пользователя и UID, и pam_krb5 для аутентификации по паролю. У меня сейчас несколько серверов сжатия работают таким образом.

Все необходимые части находятся в Debian. Никаких сторонних репозиториев или репозиториев без обновлений безопасности не требуется.

Точно так же популярно, но я использовал Центрифай Экспресс для всех моих Linux-боксов в моей лаборатории в последнее время, и это было здорово. Он поставляется с собственной версией SAMBA, и настроить ее так же просто, как установить RPM (хотя убедитесь, что вы прочитали PDF-файл).

Взгляни на Аналогично Открыть. Гораздо меньше возни необходимо, хотя наличие эмулированного реестра Windows - не совсем то, что я думаю о хорошем времени. Но более свежие версии стали довольно солидными, на них стоит взглянуть.