Самба 4: Установка контроллера домена на CentOS 7

Начиная с версии 4.0, Самба может работать как контроллер домена (ДК) Active Directory (AD). В этой статье показано, как настроить Samba 4 в качестве контроллера домена с Windows 10 в CentOS 7 и CentOS 6.

Понадобится 3 операционные системы, первая сервер CentOS 7, вторая Windows 10 клиент для удаленного управления, и CentOS 7 (CentOS 6).

Статья является более углублённым материалом по сравнению с опубликованной ранее методикой.

192.168.1.190 Samba4 AD centos7 Пульт дистанционного управления 192.168.1.191 win 10 192.168.1.22 - клиент Аутентификация - CentOS 7 192.168.1.192 - Аутентификация клиента Samba 4 на CentOS 6

Установка Samba 4

192.168.1.190 Samba4 AD centos7

Основой является система CentOS 7 с минимальной установкой и отключенным selinux.

# sestatus
SELinux status: disabled
[root@samba4 ~]# 

Сделайте запись в /etc/hosts-файле.

 [root@samba4 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.190   samba4.my.domain samba4
[root@samba4 ~]# 

Установите epel repo.

 [root@~]# yum install epel-release -y 

Установите все пакеты, необходимые для компиляции базы Samba 4.

 [root@~]# yum install perl gcc libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server libaio-devel setroubleshoot-plugins\
policycoreutils-python libsemanage-python setools-libs-python setools-libs popt-devel libpcap-devel sqlite-devel libidn-devel libxml2-devel libacl-devel libsepol-devel libattr-devel keyutils-libs-devel\
cyrus-sasl-devel cups-devel bind-utils libxslt docbook-style-xsl openldap-devel pam-devel bzip2 vim wget -y 

Теперь скачайте пакет Samba 4 . Я использую samba-4.6.0, которая является последней версией на момент загрузки.

 [root@samba4 ~]#  wget https://download.samba.org/pub/samba/stable/samba-4.6.0.tar.gz 

Теперь установите Samba 4.

[root@samba4 ~]# tar -zxvf samba-4.6.0.tar.gz
  [root@samba4 ~]# cd samba-4.6.0
  [root@samba4 samba-4.6.0]# ./configure --enable-debug --enable-selftest --with-ads --with-systemd --with-winbind
  [root@samba4 samba-4.6.0]# make && make install 

Установка займет около 10 минут в зависимости от скорости системы.

Теперь мы начнем подготавливать домен.

[root@samba4 samba]# samba-tool domain provision --use-rfc2307 --interactive
Realm [my.domain]:
 Domain [SUNIL]:
 Server Role (dc, member, standalone) [dc]: dc
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 DNS forwarder IP address (write 'none' to disable forwarding) [4.2.2.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
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=sunil,DC=cc
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying 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
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2820
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line 176, in _run
    return self.run(*args, **kwargs)
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 471, in run
    nosync=ldap_backend_nosync, ldap_dryrun_mode=ldap_dryrun_mode)
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 2175, in provision
    skip_sysvolacl=skip_sysvolacl)
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1787, in provision_fill
    next_rid=next_rid, dc_rid=dc_rid)
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1447, in fill_samdb
    "KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/common.py", line 55, in setup_add_ldif
    ldb.add_ldif(data, controls)
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/__init__.py", line 225, in add_ldif
    self.add(msg, controls)
[root@samba4 samba]# 

Во время подготовки домена могут возникнуть ошибки.

Чтобы исправить их, пожалуйста, закомментируйте строку ниже ,в файле /etc/krb5.conf.

 --------
  #includedir /etc/krb5.conf.d/
  --------

Повторите запуск домена инициализации, теперь домен будет создан без ошибок.

 [root@samba4 etc]# samba-tool domain provision --use-rfc2307 --interactive
Realm [my.domain]:
 Domain [SUNIL]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 DNS forwarder IP address (write 'none' to disable forwarding) [4.2.2.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
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=sunil,DC=cc
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying 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=sunil,DC=cc
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 AD has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              samba4
NetBIOS Domain:        SUNIL
DNS Domain:            my.domain
DOMAIN SID:            S-1-5-21-2936486394-2075362935-551615353
[root@samba4 etc]#

Убедитесь, что порты в брандмауэре открыты.

 [etc]#firewall-cmd --add-port=53/tcp --permanent;firewall-cmd --add-port=53/udp --permanent;firewall-cmd --add-port=88/tcp --permanent;firewall-cmd --add-port=88/udp --permanent; \
firewall-cmd --add-port=135/tcp --permanent;firewall-cmd --add-port=137-138/udp --permanent;firewall-cmd --add-port=139/tcp --permanent; \
firewall-cmd --add-port=389/tcp --permanent;firewall-cmd --add-port=389/udp --permanent;firewall-cmd --add-port=445/tcp --permanent; \
firewall-cmd --add-port=464/tcp --permanent;firewall-cmd --add-port=464/udp --permanent;firewall-cmd --add-port=636/tcp --permanent; \
firewall-cmd --add-port=1024-5000/tcp --permanent;firewall-cmd --add-port=3268-3269/tcp --permanent
[root@samba4 ~]# firewall-cmd --reload 

Создайте сценарий автозапуска службы во время перезагрузки.

 [root@samba4 ~]# cat /etc/systemd/system/samba.service
[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target
[root@samba4 ~]#
[root@samba4 ~]# systemctl enable samba
Created symlink from /etc/systemd/system/multi-user.target.wants/samba.service to /etc/systemd/system/samba.service.
[root@samba4 ~]# systemctl start samba 

Добавление узла Windows к домену

Пульт дистанционного управления 192.168.1.191 win 10

Убедитесь, что хост добавлен статическим IP-адресом..

Добавление хоста к домену.

Для управления samba4 с помощью Windows, мы должны иметь установленные инструменты Microsoft Remote Server (RSAT)..

Установка инструментов RSAT в Windows 10

Запустите установщик.

После перезагрузки перейдите к введению dsa.msc

Выберите домен my.domain и щелкните правой кнопкой мыши новый -> Пользователи.

Создание тестового пользователя.

Аутентификация клиента Samba 4 на CentOS 7

192.168.1.22 - клиент Аутентификация - CentOS 7

Установка пакетов:

[root]# yum -y install realmd sssd oddjob oddjob-mkhomedir adcli samba-common 

Проверьте соединение с Samba 4:

[root@centos7 ~]# realm discover my.domain
my.domain
  type: kerberos
  realm-name: my.domain
  domain-name: my.domain
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common-tools
  login-formats: %U
  login-policy: allow-realm-logins
[root@centos7 ~]# 

Присоединение к домену.

[root@centos7 ~]#  realm join my.domain
Password for Administrator:
[root@centos7 ~]# 

Проверьте, способны ли мы получить пользователя от samba4..

[root@centos7 ~]# id SUNIL\\testuser
uid=1570001104(Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.) gid=1570000513(domain Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.) groups=1570000513(domain Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.)
[root@centos7 ~]# 

Настройка sssd.

[root@centos7 ~]# cat /etc/sssd/sssd.conf
[sssd]
domains = my.domain
config_file_version = 2
services = nss, pam
[domain/my.domain]
ad_domain = my.domain
krb5_realm = my.domain
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad
[root@centos7 ~]# 

Перезагрузка sssd.

[root@centos7 ~]# systemctl restart sssd
[root@centos7 ~]# systemctl enable sssd 

Проверка пользователя.

[root@centos7 ~]# id Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
uid=1570001105(Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.) gid=1570000513(domain Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.) groups=1570000513(domain Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.),1570000512(domain Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.),1570000572(denied rodc password replication Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.)
[root@centos7 ~]# 

Получите пользователя без имени домена.

[root@centos7 ~]# vim /etc/sssd/sssd.conf
-----------
------------
use_fully_qualified_names = False
-----------
----------- 

<pПерезапустите SSSD и проверить идентификатор команды..

 [root@centos7 ~]# systemctl restart sssd
[root@centos7 ~]# id sambauser
uid=1570001105(sambauser) gid=1570000513(domain users) groups=1570000513(domain users),1570000512(domain admins),1570000572(denied rodc password replication group)
[root@centos7 ~]#

Аутентификация клиента с Samba 4 на CentOS 6

192.168.1.192 - Аутентификация клиента Samba 4 на CentOS 6.

Установка пакетов.

[root@centos6 db]#  yum install pam pam_ldap pam_krb5 sssd sssd-ldap sssd-common authconfig oddjob oddjob-mkhomedir openldap openldap-clients krb5-workstation adcli -y 

Измените файл конфигурации Kerberos..

 [root@centos6 db]# cat /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 = my.domain
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
 my.domain = {
  kdc = samba4.my.domain
  admin_server = samba4.my.domain }
[domain_realm]
 .my.domain = my.domain
 my.domain = my.domain
[root@centos6 db]#

Мы будем использовать adcli команду, для того,чтобы присоединиться к домену..

[root@centos6 db]# adcli info my.domain
[domain]
domain-name = my.domain
domain-short = SUNIL
domain-forest = my.domain
domain-controller = samba4.my.domain
domain-controller-site = Default-First-Site-Name
domain-controller-flags = pdc gc ldap ds kdc timeserv closest writable good-timeserv full-secret
domain-controller-usable = yes
domain-controllers = samba4.my.domain
[computer]
computer-site = Default-First-Site-Name
[root@centos6 db]#
[root@centos6 db]# adcli join my.domain
Password for Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:
[root@centos6 db]#

Убедитесь, что билет kerberos создан.

[root@centos6 db]# klist -ke 

Настройка аутентификации.

 [root@centos6 db]# authconfig --enablesssd --enablesssdauth --enablemkhomedir --update

Изменение конфигурации SSSD , проверка подлинности..

 [root@centos6 db]# cat /etc/sssd/sssd.conf
[sssd]
services = nss, pam, ssh, autofs
config_file_version = 2
domains = my.domain
[domain/my.domain]
id_provider = ad
# Uncomment if service discovery is not working
# ad_server = server.win.example.com
default_shell = /bin/bash
fallback_homedir = /home/%u
[root@centos6 db]#

Перезапустите службу sssd.

 [root@centos6 db]# chkconfig sssd on
[root@centos6 db]# service sssd restart
Stopping sssd:                                             [  OK  ]
Starting sssd:                                             [  OK  ]
[root@centos6 db]# 

Проверка пользователя.

[root@centos6 db]# id sambauser
uid=1570001105(sambauser) gid=1570000513(domain users) groups=1570000513(domain users),1570000512(domain admins),1570000572(denied rodc password replication group)
[root@centos6 db]#

4 комментарии

  • Леви Кирилл

    написал Леви Кирилл

    Среда, 06 Декабрь 2017 09:50

    какие порты должны быть открыты? только вот эти четыре:
    137 UDP netbios-ns nmbd служба имен NetBIOS
    138 UDP netbios-dgm nmbd служба датаграмм NetBIOS
    139 TCP netbios-ssn smbd NetBIOS over TCP (служба сеансов)
    445 TCP microsoft-ds smbd NetBIOS over TCP (служба сеансов)
    _______________________________________________________________________________________________
    Большое спасибо за статью!!!

  • Владимир Драч

    написал Владимир Драч

    Среда, 06 Декабрь 2017 13:20

    Кирилл, спасибо за отзыв!
    Я открывал вот такой набор портов: 88, 137, 138, 139, 389, 445, 464, 636, 1024-5000, 3268-3269. Попробуйте поэкспериментировать, может, хватит и меньшего количества?
    Для аскетичных конфигураций хватало пяти: 137, 138, 139, 389, 445.

  • Леви Кирилл

    написал Леви Кирилл

    Вторник, 19 Декабрь 2017 15:41

    возник еще один вопрос:
    есть ли функция, которая выкидывает пользователя через некоторое время? то есть я вошел с windows машины под некоторым пользователем, и пока компьютер не будет выключен, я постоянно буду заходить под одним и тем же пользователем без запроса данных. А я хочу, чтобы через некоторое время windows машина снова запросила данные (имя и пароль) для доступа к папкам
    ___________________________________________________________________________________________
    заранее спасибо за ответ!!!

  • Владимир Драч

    написал Владимир Драч

    Вторник, 19 Декабрь 2017 18:19

    В конфигурационном файле Samba надо поискать параметр "timeout". Он будет встречаться часто, надо внимательно читать описание. На вскидку не могу сказать точно, но возможно в Вашем случае это deadtime.
    То есть deadtime = 30 должен отстреливать пользователя через полчаса.

Оставить комментарий

Ваше мнение очень важно для нас! Обязательно выскажите Ваши мысли, пожелания и критику! Не стесняйтесь задавать вопросы. Скорее всего, ответ появится уже через 2-3 дня. Спасибо заранее.

Другие материалы в этой категории:

Go to top