Samba 설치 · 7 min read · Dec 09, 2025

CentOS 7에서 Samba 4 도메인 컨트롤러 설치

버전 4.0부터 Samba는 Active Directory (AD) 도메인 컨트롤러 (DC)로 실행할 수 있습니다. 이 튜토리얼에서는 Windows 10, CentOS 7 및 CentOS 6 클라이언트와 함께 Samba 4를 도메인 컨트롤러로 구성하는 방법을 보여드리겠습니다.

이 튜토리얼에서는 소스에서 Samba 4를 컴파일할 것입니다. Samba 4의 RPM 기반 설치 및 SELinux 구성을 찾고 계신다면, 여기에서 새로운 Samba 4 튜토리얼을 확인하시기 바랍니다.

저는 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 - 클라이언트 인증 - centos 6

Samba 4 설치

192.168.1.190 Samba4 AD centos 7

기본은 SELinux가 비활성화된 최소 설치의 CentOS 7입니다.


[root@samba4 ~]# 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.sunil.cc samba4
[root@samba4 ~]#

epel repo를 설치합니다.

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

samba4를 컴파일하는 데 필요한 모든 패키지를 설치합니다.

[root@samba4 ~]# 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

이제 samba4 패키지를 다운로드합니다. 이 설정 중 최신 버전인 samba-4.6.0을 사용합니다.

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

이제 samba4를 설치합시다.

  [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 [SUNIL.CC]:
 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 [SUNIL.CC]:
 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:            sunil.cc
DOMAIN SID:            S-1-5-21-2936486394-2075362935-551615353

[root@samba4 etc]#
  

방화벽에서 포트가 열려 있는지 확인하십시오.

[root@samba4 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 주소로 추가되어 있는지 확인하십시오.

정적 IP가 있는 Windows 호스트

도메인에 호스트를 추가합니다.

Windows에서 Samba4를 관리하려면 Microsoft 원격 서버 도구 (RSAT)를 설치해야 합니다.

위키 페이지에는 링크가 있습니다 https://wiki.samba.org/index.php/Installing_RSAT

Windows 10에서 RSAT 도구 설치하기

설치 프로그램을 실행합니다.

재부팅 후 실행을 열고 dsa.msc를 입력합니다.

sunil.cc 도메인을 클릭하고 마우스 오른쪽 버튼을 클릭하여 새로 만들기를 선택합니다 -> 사용자.

테스트 사용자를 생성합니다.

CentOS 7에서 Samba 4로 클라이언트 인증

192.168.1.22 - CentOS 7에서 클라이언트 인증

패키지 설치:

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

samba4와의 연결성을 확인합니다:

   [root@centos7 ~]# realm discover SUNIL.CC
sunil.cc
  type: kerberos
  realm-name: SUNIL.CC
  domain-name: sunil.cc
  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 SUNIL.CC
Password for Administrator:
[root@centos7 ~]#

samba4에서 사용자를 가져올 수 있는지 확인합니다.

[root@centos7 ~]# id SUNIL\testuser
uid=1570001104([email protected]) gid=1570000513(domain [email protected]) groups=1570000513(domain [email protected])
[root@centos7 ~]#

sssd를 구성합니다.

[root@centos7 ~]# cat /etc/sssd/sssd.conf

[sssd]
domains = sunil.cc
config_file_version = 2
services = nss, pam

[domain/sunil.cc]
ad_domain = sunil.cc
krb5_realm = SUNIL.CC
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 [email protected]
uid=1570001105([email protected]) gid=1570000513(domain [email protected]) groups=1570000513(domain [email protected]),1570000512(domain [email protected]),1570000572(denied rodc password replication [email protected])
[root@centos7 ~]#

도메인 이름 없이 사용자를 가져오려면.

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

sssd를 재시작하고 id 명령을 확인합니다.

[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 ~]#

CentOS 6에서 Samba 4로 클라이언트 인증

192.168.1.192 - 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 = SUNIL.CC
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 SUNIL.CC = {
  kdc = samba4.sunil.cc
  admin_server = samba4.sunil.cc
 }

[domain_realm]
 .sunil.cc = SUNIL.CC
 sunil.cc = SUNIL.CC
[root@centos6 db]#
   

adcli 명령을 사용하여 도메인에 가입합니다.

   [root@centos6 db]# adcli info sunil.cc
[domain]
domain-name = sunil.cc
domain-short = SUNIL
domain-forest = sunil.cc
domain-controller = samba4.sunil.cc
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.sunil.cc
[computer]
computer-site = Default-First-Site-Name
[root@centos6 db]#
[root@centos6 db]# adcli join sunil.cc
Password for [email protected]:
[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 = sunil.cc

[domain/sunil.cc]
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]#
   
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.