Екипът на HackerDom

Унифицирано удостоверяване на потребители на Linux и Windows на Windows сървър в AD с помощта на Kerberos и LDAP през SSL (за сигурност).

Автори: Николай Журавльов и Иля Зеленчук имейли: znick [да! ] hackerdom.ru и ilya [някое кученце] hackerdom.ru

Общата идея е да има едно място за съхраняване на информация за потребителите на Windows и UNIX. Освен това в нашия институт имаме няколко сървъра (изчислителни клъстери), работещи с операционни системи GNU/Linux, на които работят потребителите и би било много удобно за тях да имат една парола за достъп до всички ресурси. Потребителските идентификационни данни ще се съхраняват в домейна на Active Directory.

Извърших всички стъпки на Windows 2003 Server SP1, Fedora Core 4 и CentOS 5. Ако имате различна дистрибуция, всичко е наред, може да има малка разлика в имената на пакетите и местата за съхранение на конфигурационните файлове.

Забележка: когато настройвате UNIX сървър, винаги дръжте една конзола отворена с root привилегии, така че в случай на повреда или други причини да можете да върнете всичко по всяко време.

Забележка 2: Ако имате Windows 2003 Server R2, тогава можете да пропуснете главата "Настройка на Windows Server". За да можете да съхранявате данни за потребителите на UNIX, можете да използвате вградените инструменти на Windows. За да направите това, отидете на "Контролен панел" и там отворете "Добавяне / премахване на компоненти на Windows", след това на "Услуги на Active Directory" и инсталирайте "Идентифициране на управлението за UNIX".

Настройка на Windows сървър

За да могат потребителите на UNIX да се удостоверяват нормално на Windows сървър, е необходимо да се разшири съществуващата AD схема, тъй като стандартната не предоставя записи като uid, gid, home directory, default shell и т.н., което е необходимоза UNIX клиенти. За да разширите съществуваща схема, можете да използвате помощна програма от VAS (Vintela Authentication Services). Той включва набор от програми, които улесняват (според самите разработчици) интегрирането на Windows и UNIX. Но за проста автентификация са достатъчни 3 помощни програми от целия набор - това са SchemaWizard.exe, dsreg32.exe и VAS-3.0.1.31.msi:

  • SchemaWizard - Разширява съществуващата AD схема. За да направите това, трябва да го стартирате на домейн контролер и да инсталирате подмножеството R2 за VAS разширение. Това ще бъде достатъчно за удостоверяване на потребителите на UNIX.
  • dsreg32.exe - Актуализира графичния интерфейс за управление на потребители и групи в AD, така че да е възможно да се правят настройки за UNIX потребители.
  • VAS-3.0.1.31.msi - инсталира програми за конфигуриране на UNIX потребители, както и интерфейс за управление на потребители и групи в AD. Конфигураторът може да бъде намерен в „Старт -> Програми -> Софтуер за търсене -> VAS", той ви позволява да зададете опции за UNIX по подразбиране, като обвивка и домашна директория. Освен това става достъпен раздел за управление на UNIX потребители и групи в AD. За да направите това, отворете свойствата на потребителя или групата и изберете раздела „UNIX акаунт“. За да могат потребителите да се удостоверяват в UNIX, те трябва да бъдат активирани (Разрешаване на Unix акаунт), в противен случай тяхната обвивка ще бъде настроена на /bin/false.

За да завършите настройката на Windows сървър, трябва да добавите AD акаунт, под който UNIX машините могат да се свързват към LDAP и да търсят информация. Например, нека бъде unix_manager. И поради факта, че самият LDAP не е защитен, по-добре е да го направитеизползвайте през SSL. За да направите това, просто инсталирайте "Certificate Center" на домейн контролера. След това порт 636 става достъпен (LDAP през SSL).

Настройка на UNIX машини

За да направите възможно удостоверяването на потребители на UNIX в AD, ще ви трябват 3 пакета - това са pam_krb5, openldap и nss_ldap. И също така е желателно да инсталирате пакета krb5-workstation и openldap-клиентите, те съдържат основните помощни програми (kinit, klist, kpasswd, ldapsearch ...) за работа с Kerberos и ldap.

Конфигурация на Kerberos

Конфигурацията на Kerberos се съхранява във файла: /etc/krb5.conf

[регистриране] по подразбиране = ФАЙЛ:/var/log/krb5libs.log kdc = ФАЙЛ:/var/log/krb5kdc.log admin_server = ФАЙЛ:/var/log/kadmind.log

[libdefaults] default_realm = FQDN.OF.YOUR.DOMAIN.NAME dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes

[domain_realm] .fqdn.of.your.domain.name = FQDN.OF.YOUR.DOMAIN.NAME fqdn.of.your.domain.name = FQDN.OF.YOUR.DOMAIN.NAME

[kdc] профил=/var/kerberos/krb5kdc/kdc.conf

FQDN.OF.YOUR.DOMAIN.NAME трябва да се пише с главни букви!dc.fqdn.of.your.domain.name е името на домейн контролера, който отговаря за удостоверяването.

Използвайте помощната програма kinit и klist, за да проверите дали Kerberos работи. Първият ще ви позволи да се удостоверите в домейна, а с втория можете да видите дали сте получили билет или не. Ако няма билет, тогава паролата, потребителското име са въведени неправилно или /etc/krb5.conf е конфигуриран неправилно или се е случила някаква друга странност. В този случай ви съветвам да използвате снифър и да видите какво се случва в мрежата. Само 2 пакета се използват за удостоверяване.

Openldap и nss_ldap

Когато конфигурирате nss_ldap и openldap, трябва да коригирате 2 конфигурационни файла. Първият е /etc/ldap.conf (наречен libnss_ldap.conf в някои Linux дистрибуции), а вторият е /etc/openldap/ldap.conf. Но преди да започнете да ги конфигурирате, трябва да изтеглите сертификат от "Сертификатен център".

Изтегляне на сертификат от сървъра.

Изтегленият сертификат трябва да бъде записан на UNIX машина. Нека бъде /etc/openldap/cacerts/domain.cer

Конфигуриране на /etc/ldap.conf (известен още като /etc/libnss_ldap.conf)

# Версия на протокола Ldap. ldap_версия 3

# Акаунти за потребителя, под който влизаме (unix_manager.) # unix_manager не е име за влизане, а собствено име, ако някой е забравил :) binddn cn=unix_manager,ou=domain_users,dc=imm,dc=uran,dc=ru

# Парола. bindpw тайна

# Портът, към който установяваме връзката, въпреки че вече е посочен по-горе. порт 636

# Как да търсите. обхват под

# Различни изчаквания. timelimit 10 bind_timelimit 120 idle_timelimit 3600

# Потребителските имена не трябва да се търсят в ldap, те определено са местни. nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon

# Необходимо е! nss_map_attribute rfc2307attribute mapped_attribute nss_map_objectclass rfc2307objectclass mapped_objectclass

# RFC 2307 (AD) съпоставяния nss_map_objectclass posixAccount user nss_map_objectclass shadowAccount user nss_map_attribute uid sAMAccountName nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute shadowLastChange pwdLastSet nss_map_ob jectclass posixGroup group nss_map_attribute uniqueMember member pam_login_attribute sAMAccountName pam_filter object > pam_password реклама

# Ние казваме товаще използваме ssl. ssl start_tls ssl да

# Къде е сертификатът от сървъра (този, който сте изтеглили). tls_cacertfile /etc/openldap/cacerts/domain.cer

# Папка със сертификата. tls_cacertdir /etc/openldap/cacerts

Фактът, че потребителското име и паролата за достъп до AD сървъра са достъпни за всички потребители, е добре. Той няма специални права и не вижда нищо, с изключение на малко количество некритична информация за потребителите.

# Информация за домейн контролера BASE dc=fqdn,dc=of,dc=your, dc=domain, dc=name URI ldaps://dc.fqdn.of.your.domain.name:636 HOST dc.fqdn.of.your.domain.name

# Информация за сертификати. TLS_REQCERT никога TLS_CACERTDIR /etc/openldap/cacerts TLS_CACERT /etc/openldap/cacerts/domain.cer

За да завършите конфигурацията на nss_ldap, променете файла /etc/nsswitch.conf

… passwd: файлове ldap сянка: файлове ldap група: файлове ldap …

Това ви казва първо да погледнете във файловете (/etc/passwd), когато извличате потребителска информация, и ако нищо не бъде намерено, опитайте да получите информация чрез ldap. Ако това не бъде направено, тогава може да възникне забавна ситуация, потребителското име и паролата ще бъдат проверени на сървъра на Active Directory с помощта на Kerberos и променливи на сесията от локални файлове.

Конфигурирайте PAM за SSH сървър.

Първо, в конфигурацията на sshd трябва да разрешите използването на PAM. Във файла /etc/sshd/sshd_config

И сега трябва да кажете на sshd да провери потребителското име и паролата чрез Kerberos. Във файла /etc/pam.d/sshd

#%PAM-1.0достатъчно удостоверяване pam_krb5.so удостоверяване включва системно удостоверяване необходим е акаунт pam_nologin.so акаунт включва системно удостоверяване необходим е акаунтpam_access.so парола включва системно удостоверяванеизисква се сесия pam_mkhomedir.so skel=/etc/skel umask=0077 сесия по избор pam_keyinit.so принудително отменяне сесия включва системно удостоверяване изисква сесия pam_loginuid.so

Добавете в началото: достатъчно удостоверение pam_krb5.so.

Тъй като никой няма да създава потребители в системата, те няма да имат домашна директория по подразбиране. За да може потребителят да създаде домашна директория с необходимите права и файлове при първото влизане, можете да използвате PAM модула pam_mkhomedir.so. Пише го в секцията сесия. Например:

изисква сесия pam_mkhomedir.so skel=/etc/skel umask=0077

Голяма картина

Сега как ще работи всичко заедно:

  • Когато влизате в UNIX машина чрез ssh, потребителят въвежда потребителско име и парола.
  • SSH сървърът приема данни от потребителя и ги изпраща на PAM за обработка. Проверката на потребителското име и паролата ще се извършва от модула Kerberos (pam_krb5.so), неговата конфигурация се намира във файла /etc/krb5.conf.
  • Ако потребителското име или паролата са неправилни, удостоверяването незабавно се проваля и потребителят получава в отговор „Неправилно влизане“. Ако потребителското име и паролата са правилни, следващата стъпка е да влезете в системата.
  • За да влезете потребител в системата, трябва да знаете неговите променливи на сесията, т.е. домашна директория, uid, gid и shell. Системата научава къде се съхраняват тези променливи от файла /etc/nsswitch.conf. В нашия случай пише следното:

Това означава, че първо трябва да потърсите потребителска информация в локалните файлове и ако нищо не бъде намерено, опитайте nss_ldap. Като конфигурационни файлове nss_ldap ще използва/etc/ldap.conf (или /etc/libnss_ldap.conf) и /etc/openldap/ldap.conf.

Заключение

За да проверите дали всичко работи правилно, опитайте ssh и въведете командата id, за да получите UID и GID на потребителя. За да промените паролата на потребител от UNIX машина, използвайте помощната програма kpasswd.

Всичко най-хубаво! Ако имате въпроси или проблеми, моля свържете се с. Сигурен съм, че други системи може да имат малко по-различни настройки и ще се радвам да ги включа като допълнение към статията.