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

Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 04 окт 2012, 13:19
Raven
Потребовалось мне настроить домен в моей офисной сети. Заводить все это на MS AD мне не позволила "религия", поскольку оно не OSS. Рассмотрев связку samba+dns+OpenLDAP/389-ds пришел к выводу что придется выпить очень много литров пива, прежде чем оно заработает - очень уж привиредливы программы в отношении друг друга. И тут на просторах гугла натолкнулся на мануал к Samba4... От всего что я там узнал начали шевелиться волосы подмышкой - привычный мир ломался на глазах. Исходя из сказаного там на выходе мы получаем полноценный контроллер домена полностью совместимый с AD. Чтож, решено - будем танцевать самбу с RHEL-based дистрибутивом!

Радостный кидаюсь в репозитории... да не тут-то было - готовые бинарные пакеты есть только в репозиториях Ubuntu :-! и Fedora . Чтож, берем SRPM от Fedora, и... 3 дня тратим на сборку правильных пакетов, затем устанавливаем в виртуальной среде чистый RHEL, в который устанавливаем собраные пакеты.

Итак, пакеты установлены, можем начинать. Сначала надо определить параметры самого домена.

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

# samba-tool samba-tool domain provision --realm=dc.office.local --domain=OFFICE --adminpass='my_p4$$w0rd' --server-role=dc --host-ip=192.168.0.10  --dns-backend=BIND9_DLZ
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=dc,DC=office,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=dc,DC=office,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /etc/samba/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              dc
NetBIOS Domain:        OFFICE
DNS Domain:            dc.office.local
DOMAIN SID:            S-1-5-21-3034987641-1669581189-1247057138
A phpLDAPadmin configuration file suitable for administering the Samba 4 LDAP server has been created in /etc/samba/phpldapadmin-config.php.
И получаем готовый домен.

Разберем подробно, что мы ему сказали:
--realm=FQDN имя домена
--domain=имя домена для NetBIOS (aka Workgroup)
--adminpass=пароль админа
--server-role=тут все ясно - роль данного сервера - DC, то есть контроллер домена
-host-ip=привязка к указаному IP (у моего сервера несколько адресов, а самба должна быть только на одном из них)
--dns-backend=тип DNS-сервера. Я использовал интегрированный сервер, поскольку пока не до bind.

Также мне нужно сменить требования к паролям, поскольку самба по дефолту предъявляет очень жесткие требования к длине/сложности пароля, но у меня маленькая сеть, и сервер не имеет доступа во внешний мир, поэтому мне оно ни к чему.

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

# samba-tool domain passwordsettings set --complexity=off --history-length=0 --min-pwd-length=6 --min-pwd-age=15 --max-pwd-age=999
Password complexity deactivated!
Password history length changed!
Minimum password length changed!
Minimum password age changed!
Maximum password age changed!
All changes applied successfully!
Теперь нужно заточить конфиг под наши нужды. Топаем в /etc/samba и правим smb.conf

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

[global]
        workgroup = OFFICE
        realm = dc.office.local
        netbios name = DC
        server role = active directory domain controller
        interfaces = br2 virbr0
        domain master = yes
        socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=8192 SO_SNDBUF=8192
        server services = smb, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, -dns
        unix charset = UTF8

#       debug level = 5

# DNS
        nsupdate command = /usr/bin/nsupdate
        allow dns updates = True

#Printers
        load printers = no
        disable spoolss = Yes
        show add printer wizard = No

[netlogon]
        path = /var/lib/samba/sysvol/dc.domain.tld/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No
В папке /etc/samba samba-tool создает файл krb5.conf. Создаем на его основе конфиг Kerberos - правим файл /etc/krb5.conf

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

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = DC.OFFICE.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
Запускаем демон:

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

# service samba start
Далее нужно инициализироваться в керберосе

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

# kinit administrator@DC.OFFICE.LOCAL
Password for administrator@DC.OFFICE.LOCAL:
Warning: Your password will expire in 998 days on Tue Jun 30 11:56:27 2015
Самба конечно имеет встроеный DNS-сервер, но мне нужно было завести на этой машине еще и резолвер для локалки, и дабы не плодить зоопарк dns-серверов в локалке, решено было использовать bind (должен быть собран БЕЗ опции --disable-isc-spnego).

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

yum install bind
редактируем /etc/named.conf

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

acl "locals" {                      
        192.168.0.0/24;             
        127.0.0.1;                  
        172.16.0.0/12;              
};
options {
        auth-nxdomain yes;
        version none;                                 
        hostname none;                                
        server-id none;                               
        empty-zones-enable no;                        
        listen-on port 53 { 192.168.0.10; 172.16.32.1;};
        directory       "/var/named";                   
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query { any; };                                    
        allow-recursion { "locals"; };                           
        allow-update { key "rndc-key"; 192.168.0.0/24; };        
        recursion yes;                                           
        dnssec-enable no;                                        
        dnssec-validation no;                                    
        dnssec-lookaside auto;                                   

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        tkey-gssapi-keytab "/etc/samba/dns.keytab"; // Подключаем ключ самбы
        managed-keys-directory "/var/named/dynamic";
};                                                  

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;     
        };                            
};                                    

zone "." IN {
        type hint;
        file "named.root";
};                        

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";     
include "/etc/samba/named.conf";  // Подключаем конфиг самбы
include "/etc/rndc.key";           

controls {
        inet 127.0.0.1 allow { localhost; } 
        keys { rndc-key; };                 
};
Добавляем сервисы в автозапуск и стартуем их

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

chkconfig samba on
chkconfig named on
service named start
service samba restart
Качаем на любую машину с Windows инструменты для серверных Windows, позволяющую управлять доменом (ссылки есть в официальном мануале), или ApacheDirectory Studio и подключаемся.

UPD: Ввод Linux-клиентов в домен

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 15 авг 2013, 11:46
batter
Да хоть бы описал с какой репы samba-tools вытянул?

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 18 авг 2013, 23:12
Raven
batter
3 дня убил на сборку правильных пакетов, затем установил на чистую виртуалку RHEL, в него поставил собраные пакеты.
Что не понятного? Если надо могу скинуть (s)rpm. Правда собраные пакетики у меня только под x86_64

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 20 дек 2013, 20:15
vold
srpm можно развесить на Yandex disk с сылкой сюда, а правильный спек было-бы неплохо увидеть.

http://fedoraproject.org/wiki/Features/Samba4

"Thus, when compiled with MIT Kerberos, Samba 4 currently does not provide Active Directory Domain Controller functionality at all, only client side libraries and tools to the extent that does not involve AD DC operations"

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 21 дек 2013, 00:42
Raven
Ну не скажу насколько он правилен, но это был единственный вариант с работоспособным контроллером домена без необходимости миграции на heimdal, неподдерживаемый системой.

Вот, держи линк http://yadi.sk/d/ATKgWKW3EfA65, если я конечно билды не попутал.

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 23 дек 2013, 12:14
vold
Посмотрел Ваш samba.spec.

Mit kerberos в нем отключен. Hапроч. А далее все как учили :)

Успехов!

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 23 дек 2013, 12:44
Raven
Да, если отключить поддержку внешних krb-зависимостей при включенном режиме домен-контроллера самба соберет интегрированную поддержку оных.

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 24 дек 2013, 12:36
vold
Интересно, что отвечает Ваш Samba DC на такую команду:

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

rpm -qR krb5-libs

У меня на fc19 (Fedora) получается так :

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

$ rpm -qR krb5-libs
/sbin/ldconfig
/sbin/ldconfig
config(krb5-libs) = 1.11.3-13.fc19
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.2)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.15)
libc.so.6(GLIBC_2.16)
libc.so.6(GLIBC_2.2)
libc.so.6(GLIBC_2.2.3)
libc.so.6(GLIBC_2.3)
libc.so.6(GLIBC_2.3.4)
libc.so.6(GLIBC_2.4)
libc.so.6(GLIBC_2.7)
libcom_err.so.2
libdl.so.2
libdl.so.2(GLIBC_2.0)
libdl.so.2(GLIBC_2.1)
libgssapi_krb5.so.2
libgssapi_krb5.so.2(gssapi_krb5_2_MIT)
libgssrpc.so.4
libgssrpc.so.4(gssrpc_4_MIT)
libk5crypto.so.3
libk5crypto.so.3(k5crypto_3_MIT)
libkadm5srv_mit.so.8
libkadm5srv_mit.so.8(kadm5srv_mit_8_MIT)
libkdb5.so.7
libkdb5.so.7(kdb5_7_MIT)
libkeyutils.so.1
libkeyutils.so.1(KEYUTILS_0.3)
libkrb5.so.3
libkrb5.so.3(krb5_3_MIT)
libkrb5support.so.0
libkrb5support.so.0(krb5support_0_MIT)
libresolv.so.2
libresolv.so.2(GLIBC_2.2)
libselinux.so.1
libverto.so.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
При таком раскладе собрать Samba AD DC из samba-4.0.6-3.fc19.src.rpm, пока, не удается. Не проходят тесты проверки подлинности при подключении к тестовому домену.

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 25 дек 2013, 09:54
Raven

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

[root@deimos ~]# rpm -qR krb5-libs
/sbin/ldconfig
/sbin/ldconfig
config(krb5-libs) = 1.10.3-10.el6_4.3
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libc.so.6(GLIBC_2.9)(64bit)
libcom_err.so.2()(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgssapi_krb5.so.2()(64bit)
libgssapi_krb5.so.2(gssapi_krb5_2_MIT)(64bit)
libgssrpc.so.4()(64bit)
libgssrpc.so.4(gssrpc_4_MIT)(64bit)
libk5crypto.so.3()(64bit)
libk5crypto.so.3(k5crypto_3_MIT)(64bit)
libkadm5clnt_mit.so.8()(64bit)
libkadm5srv_mit.so.8()(64bit)
libkadm5srv_mit.so.8(kadm5srv_mit_8_MIT)(64bit)
libkdb5.so.6()(64bit)
libkdb5.so.6(kdb5_6_MIT)(64bit)
libkeyutils.so.1()(64bit)
libkeyutils.so.1(KEYUTILS_0.3)(64bit)
libkrb5.so.3()(64bit)
libkrb5.so.3(krb5_3_MIT)(64bit)
libkrb5support.so.0()(64bit)
libkrb5support.so.0(krb5support_0_MIT)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libresolv.so.2()(64bit)
libresolv.so.2(GLIBC_2.2.5)(64bit)
libselinux.so.1()(64bit)
libverto-k5ev.so.0()(64bit)
libverto.so.0()(64bit)
libverto.so.0(verto_0_MIT)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

Re: Этот непростой танец samba - поднимаем контроллер домена

Добавлено: 27 дек 2013, 16:04
vold
Удалось собрать Samba AD DC из samba-4.1.3-1.fc21.src.rpm по Вашей методике.
Ha :

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

$uname -a
Linux test.spb.ru 3.11.10-100.fc18.i686.PAE #1 SMP Mon Dec 2 21:05:51 UTC 2013 i686 i686 i386 GNU/Linux
Исправления в samba.spec :

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

%global with_mitkrb5 0
%global with_dc 1

### %if %{with testsuite}
### # The testsuite only works with a full build right now.
### %global with_mitkrb5 0
### %global with_dc 1
### %endif
*COOL*