14 янв. 2013 г.

Debian + Windows domain

Годится не только для debian-based дистрибутивов, но, думаю, и для большинства Unix-систем, где есть samba, kerberos и winbind. Задачка несложная, ввести рабочую станцию (или сервер, неважно) в домен Active Directory и получить возможность авторизации доменных пользователей как графически, так и по ssh. Мне для успешной настройки потребовались пакеты samba, winbind, krb5-user, krb5-config, nscd. Необходимые для доменной авторизации пользователей модули PAM (например, pam_winbind) были установлены автоматически как зависимости.
Исходные данные: имеется домен example.org (win2k3), рабочая станция user-test (Debian Sid), Администратор домена admin, пользователь домена user. В качестве системного DNS используются контроллеры домена (директивы nameserver в resolv.conf или dns-nameserver в interfaces).
Необходимые правки конфигов:
smb.conf:
[global]
workgroup = EXAMPLE
netbios name = user-test
server string = test debian pc
security = ADS
preferred master = no
disable spoolss = Yes
show add printer wizard = No
idmap config * : range = 15000-20000
#winbind separator = +
winbind use default domain = Yes
template shell = /bin/bash
use sendfile = Yes
realm = example.org

log file = /var/log/samba/log.full
load printers = no
printing = bsd
printcap name = /dev/null

krb5.conf:
[libdefaults]
        default_realm = EXAMPLE.ORG
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }
        fcc-mit-ticketflags = true
[realms]
        EXAMPLE.ORG = {
                kdc = dc1.example.org
                kdc = dc2.example.org
                admin_server = dc1.example.org
        }
[domain_realm]
        .example.org = EXAMPLE.ORG
        example.org = EXAMPLE.ORG
[login]
        krb4_convert = true
        krb4_get_tickets = false

nsswitch.conf:
#passwd:         compat
passwd:         files winbind
#group:          compat
group:          files winbind
#shadow:         compat
shadow:         files winbind
#hosts:          files dns
hosts:          files dns winbind

pam.d/common-auth:

auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so




pam.d/common-password:

password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so
pam.d/common-account:
account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so
account requisite                       pam_deny.so
account required                        pam_permit.so
pam.d/common-session:

session         required                pam_mkhomedir.so skel=/etc/skel umask=0022
session         sufficient              pam_unix.so
session         sufficient              pam_sufficient.so


После правки коифигов и перезапуска сервисов присоединяемся к домену, предварительно синхронизировав время с контроллером домена (net time set dc1.example.org):

net ads join -Uadmin
admin's password:
Using short domain name -- EXAMPLE 
Joined 'USER-TEST' to realm 'EXAMPLE.COM'
Проверим успешность ввода с помощью wbinfo:

root@user-test:~# wbinfo -t
checking the trust secret for domain EXAMPLE via RPC calls succeeded
Команды wbinfo -u и wbinfo -g должны показать список пользователей и групп Active Directory.