Инструменты пользователя

Инструменты сайта


os:linux:common:avtorizacija_v_windows-domene

Авторизация в Windows-домене

Версии Microsoft Windows 2003 Server R1/R2, Ubuntu 8.04/8.10, Gentoo 2007/2008/2009.

Постановка задачи

  1. Авторизация в Linux с использованием данных, хранящихся в Active Directory домена Windows.
  2. Сохранение одинаковых uid доменных пользователей на всех компьютерах сети.
  3. Запрос билета Kerberos для прозрачного доступа к доменным ресурсам.

Необходимое ПО

Реализация

Релизации возможны две:

  1. С помощью SFU + LDAP + Kerberos.
  2. С помощью Samba(>=3.3) + Kerberos.

Общее необходимое ПО

  • Microsoft Windows 2003 Server с настроенной Active Directory
  • pam: базовый пакет PAM (Pluggable Authentication Module), на текущий момент включён по-умолчанию в большинство дистрибутивов
  • pam_krb5: модуль PAM для выполнения автризации с помощью Kerberos
  • nscd: (необязательно) кэширование аутентификационных данных (идёт в составе glibc)
  • sudo: (необязательно) позволяет пользователям и группам пользователей выполнять комманды от других пользователе

SFU + LDAP + Kerberos

Необходимое ПО

  • Установленный пакет Services for Unix (при написании данной статьи использовалась версия 3.5), или Server for NIS, или Identity Management for Unix. Всё это необходимо для добавления в схему AD дополнительных полей, данные из которых будут использованы для идентификации пользователей.
  • openldap: необходим для выполнения запросов в LDAP
  • nss_ldap: модуль Name Service для выполнения поиска пользователей, групп и т.п. в LDAP

Настройка авторизации

/etc/ldap.conf

Во всех виденных мной дистрибутивах по-умолчанию этот файл идёт уже удобоваримый, остаётся только допилить следующие параметры:

  • Настроить host (или ldap, ldapi, ldaps, …)
  • Настроить base (обычно, ou=Users,dc=domain,dc=tdl)
  • При необходимости настроить binddn (имя пользователя для подключения к AD) и binpw (пароль пользователя для подключения к AD)
  • Раскомментировать (или добавить при её отсутствии) группу параметров Services for UNIX 3.5 mappings:
    nss_map_objectclass posixAccount User
    nss_map_objectclass shadowAccount User
    nss_map_attribute uid msSFU30Name
    nss_map_attribute uidNumber msSFU30UidNumber
    nss_map_attribute gidNumber msSFU30GidNumber
    nss_map_attribute uniqueMember msSFU30PosixMember
    nss_map_attribute userPassword msSFU30Password
    nss_map_attribute homeDirectory msSFU30HomeDirectory
    nss_map_attributes loginShell msSFU30LoginShell
    nss_map_objectclass posixGroup Group
    pam_login_attribute msSFU30Name
    pam_filter objectclass=User
    pam_password ad

N.B. Внимательно сверьте приведённые параметры секции Services for UNIX 3.5 mappings - некоторые параметры в файле конфигурации отсутствуют, запись с homeDirectory должна быть только одна.

/etc/nsswitch.conf

В параметрах passwd, shadow и group добавляем ldap, чтобы запросы несуществующих пользователей производились в AD:

passwd:         compat ldap
shadow:         compat ldap
group:          compat ldap
Промежуточная проверка

На данном этапе команда

$ getent passwd

должна выводить кроме пользователей Unix ещё и пользователей домена, для которых определены Unix-параметры msSFU30xxxxxxx в AD.

/etc/krb5.conf

В простом случае с одним доменом, файл выглядит так:

[appdefaults]
        pam = {
                minimal_uid = 1000
                forwardable = true
        }

[libdefaults]
        # Домен по-умолчанию
        default_realm = DOMAIN.TDL
        forwardable = true
        proxiable = true

[realms]
        DOMAIN.TDL = {
                # Адрес сервера Kerberos, при правильной настройке DNS достаточно указать имя самого домена
                kdc = domain.tdl
                # Адрес сервера администрирования, обычно совпадает с kdc
                admin_server = domain.tdl
        }

[domain_realm]
        .domain.tdl = DOMAIN.TDL
        domain.tdl = DOMAIN.TDL
/etc/pam.d/

Находим в каталоге /etc/pam.d/ файлы, относящиеся ко всем программам системы. В Gentoo это один файл /etc/pam.d/system-auth; в Ubuntu это четыре файла: /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-password, /etc/pam.d/common-session.

В них надо добавить вызов модуля pam_krb5.so.

Gentoo

auth            required        pam_krb5.so try_first_pass
account         required        pam_krb5.so
passwd          required        pam_krb5.so
session         required        pam_mkhomedir.so umask=0077

Последний модуль pam_mkhomedir.so позволяет создавать каталог пользователя при его первом входе в систему, назначая права на него 0700.

В целом должно получиться примерно следующее:

auth		required	pam_env.so
auth		optional	pam_group.so 
auth		sufficient	pam_unix.so try_first_pass likeauth nullok 
auth		required	pam_krb5.so try_first_pass

account		sufficient	pam_unix.so 
account		required	pam_krb5.so
 
password	required	pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3 
password	sufficient	pam_unix.so try_first_pass use_authtok nullok md5 shadow 
password        required        pam_krb5.so try first_pass
password	required	pam_deny.so

session		required	pam_limits.so 
session		required	pam_env.so
session		required	pam_unix.so 
session		required	pam_mkhomedir.so umask=0077

Ubuntu

В моих изысканиях файлы выглядели следующим образом (комментарии убраны):

  • /etc/pam.d/common-auth
    auth    [success=2 default=ignore]      pam_unix.so nullok_secure
    auth    [success=1 default=ignore]      pam_krb5.so use_first_pass
    auth    requisite                       pam_deny.so
    auth    required                        pam_permit.so
  • /etc/pam.d/common-account
    account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
    account [success=1 default=ignore]      pam_krb5.so
    account requisite                       pam_deny.so
    account required                        pam_permit.so
  • /etc/pam.d/common-password
    password        [success=2 default=ignore]      pam_unix.so obscure sha512
    password        [success=1 user_unknown=ignore default=die]     pam_krb5.so try_first_pass
    password        requisite       pam_deny.so
    password        required        pam_permit.so
  • /etc/pam.d/common-session
    session [default=1]     pam_permit.so
    session requisite       pam_deny.so
    session required        pam_permit.so
    session required        pam_unix.so
    session optional        pam_ck_connector.so nox11
    session required        pam_mkhomedir.so umask=0077

Дискуссия

Enter your comment
 
os/linux/common/avtorizacija_v_windows-domene.txt · Последние изменения: 17.02.2011 08:58 (внешнее изменение)

Инструменты страницы