CentOS7上にSamba4.9でActive Directoryを構築する

Posted by onodai.


やっていきましょう。
基本的には、以下のページのとおりに勧めていく。
Setting up Samba as an Active Directory Domain Controller

前提

  • ドメイン名と、ドメインコントローラのホスト名は以下の通り
    • ドメイン名
      • contoso.local
    • ホスト名
      • dc01
  • 静的IPアドレスが設定されていること
  • バックエンドのDNSサーバはBINDを使用する
    • 既にBINDが動作している場合、contoso.localドメインは名前解決できないようにしておく
  • 機能レベルはWindows 2008 R2

ホスト名の設定

hostnamectl set-hostname dc01

hostsファイルの編集

FQDNと短いホスト名がドメインコントローラのIPアドレスに正しく解決される必要があるためhostsファイルを編集する

vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.7 dc01.contoso.local dc01

Sambaのインストール

  1. epelレポジトリの追加
    yum install epel-release
  2. ビルドに必要なパッケージのインストール
    yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \
       libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \
       perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \
       python2-crypto gnutls-devel libattr-devel keyutils-libs-devel \
       libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
       pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel \
       lmdb-devel jansson-devel gpgme-devel pygpgme libarchive-devel
  3. ソースコードのダウンロードと展開
    cd /usr/local/src
    mkdir samba
    cd samba
    curl -LO https://download.samba.org/pub/samba/stable/samba-4.9.4.tar.gz
    tar -zxfv samba-4.9.4.tar.gz 
    rm samba-4.9.4.tar.gz
  4. インストール
    特にオプションなどは指定せずデフォルト設定でインストールする
    cd samba-4.9.4
    ./configure
    make
    make install

    'install' finished successfullyと表示されたらインストール完了

  5. インストールされたことを確認
    /usr/local/samba/sbin/samba -V
    Version 4.9.4

ADのプロビジョニング

  1. UNIX属性を有効にし対話環境でセットアップ
    /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2

    いろいろ聞かれるので適宜回答する
    DNS backendBIND_DLZを回答する

    Realm [CONTOSO.LOCAL]:  CONTOSO.LOCAL
    Domain [CONTOSO]: CONTOSO
    Server Role (dc, member, standalone) [dc]:  dc
    DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:  BIND9_DLZ
    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
    Unable to determine the DomainSID, can not enforce uniqueness constraint on local domainSIDs
    Adding DomainDN: DC=contoso,DC=local
    Adding configuration container
    Setting up sam.ldb schema
    Setting up sam.ldb configuration data
    Setting up display specifiers
    Modifying display specifiers and extended rights
    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=contoso,DC=local
    Creating DomainDnsZones and ForestDnsZones partitions
    Populating DomainDnsZones and ForestDnsZones partitions
    See /usr/local/samba/bind-dns/named.conf for an example configuration include file for BIND
    and /usr/local/samba/bind-dns/named.txt for further documentation required for secure DNS updates
    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
    Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
    Setting up fake yp server settings
    Once the above files are installed, your Samba AD server will be ready to use
    Server Role:           active directory domain controller
    Hostname:              dc01
    NetBIOS Domain:        CONTOSO
    DNS Domain:            CONTOSO.LOCAL
    DOMAIN SID:            S-1-5-21-2614513918-2685075268-614796884

Kerberos認証の設定

cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

AD DNSのバックエンドを設定

  1. BINDのインストール
    yum install named
  2. BINDのバージョンを確認
    named -v
    BIND 9.9.4-RedHat-9.9.4-73.el7_6 (Extended Support Version)
  3. BINDの設定
    フォワーダなど内部DNSとして必要な設定を行う
  4. /etc/named.confに以下を追加
    include "/usr/local/samba/bind-dns/named.conf";
  5. /usr/local/samba/bind-dns/named.confのファイルを編集し、インストールしたBIND用のモジュールのコメントを外す

    dlz "AD DNS Zone" {
    # For BIND 9.8
    # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so";
    
    # For BIND 9.9
    database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so";
    
    # For BIND 9.10
    # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_10.so";
    
    # For BIND 9.11
    # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_11.so";
    };
  6. /etc/named.confoptionセクションに以下を追加
    tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";
  7. /usr/local/samba/private/dns.keytabの権限を設定する
    chmod 640 /usr/local/samba/private/dns.keytab
    chown root:named /usr/local/samba/private/dns.keytab
  8. /etc/krb5.confがBIND実行ユーザから読み取り可能であることを確認
    ls -al /etc/krb5.conf
    -rw-rw-rw- 1 root root 92  3月  4 23:34 /etc/krb5.conf
  9. DNSを更新するためのnsupdateコマンドが存在することを確認
    which nsupdate
    /bin/nsupdate
  10. BINDの設定を確認する
    以下のコマンドを実行し何も表示されなければOK
    named-checkconf
  11. BINDを起動する
    named-chrootではDNSが自動で更新されないため素のnamedを起動する必要がある
    systemctl start named
  12. DNSの設定
    nmcli connection modify ens160 ipv4.dns 127.0.0.1 ipv4.dns-search contoso.local

Chronyの設定

  1. Chronyのインストール
    yum install chrony
  2. Chronyの設定
    NTPサーバとして必要な設定を行う
  3. ntp_signedディレクトリの権限を変更
    chown root:chrony /usr/local/samba/var/lib/ntp_signd/
    chmod 750 /usr/local/samba/var/lib/ntp_signd/
  4. /etc/chronyd.confに以下を追加・編集
    bindcmdaddress 192.168.10.7
    ntpsigndsocket  /usr/local/samba/var/lib/ntp_signd
  5. Chronyを起動する
    systemctl start chronyd

Sambaの起動

  1. Systemdのユニットファイルを作成
    /etc/systemd/system/samba-ad-dc.service
    [Unit]
    Description=Samba Active Directory Domain Controller
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    ExecStart=/usr/local/samba/sbin/samba -D
    PIDFile=/usr/local/samba/var/run/samba.pid
    ExecReload=/bin/kill -HUP $MAINPID
    [Install]
    WantedBy=multi-user.target
  2. Systemdをリロード
    systemctl daemon-reload
  3. Sambaを起動する
    systemctl start samba-ad-dc.service

テスト

  1. システムボリュームツリーが共有されていることを確認

    smbclient -L localhost -U%

    netlogonsysvolがあればOK

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.9.4)
    Reconnecting with SMB1 for workgroup listing.
    
        Server               Comment
        ---------            -------
    
        Workgroup            Master
        ---------            -------
  2. 認証の確認

    smbclient //localhost/netlogon -UAdministrator -c 'ls'

    プロビジョニング時に指定したパスワードを入力し以下のように表示されればOK

    Enter SAMBA\Administrator's password: 
    .                                   D        0  Mon Mar  4 23:34:42 2019
    ..                                  D        0  Mon Mar  4 23:34:47 2019
    
        43273580 blocks of size 1024. 36718156 blocks available
  3. _ldap._tcp.contoso.localのSRVレコードが解決できることを確認
    host -t SRV _ldap._tcp.contoso.local
    _ldap._tcp.contoso.local has SRV record 0 100 389 dc01.contoso.local.
  4. _kerberos_tcp.contoso.localのSRVレコードが解決できることを確認
    host -t SRV _kerberos._tcp.contoso.local
    _kerberos._tcp.contoso.local has SRV record 0 100 389 dc01.contoso.local.
  5. DCのAレコードが解決できることを確認
    host -t A dc01.contoso.local.
    dc01.contoso.local has address 192.168.10.7
  6. ドメイン管理者アカウントのKerberosチケットを要求
    kinit administrator@CONTOSO.LOCAL
    Password for administrator@CONTOSO.LOCAL: 
  7. Kerberosチケットが発行されたことを確認
    klist administrator@CONTOSO.LOCAL
    Ticket cache: FILE:/tmp/krb5cc_0
    Default principal: administrator@CONTOSO.LOCAL
    Valid starting       Expires              Service principal
    2019-03-04T23:54:08  2019-03-05T09:54:08  krbtgt/CONTOSO.LOCAL@CONTOSO.LOCAL
    renew until 2019-03-05T23:54:05

ドメイン環境下でユーザを管理できるのは非常に便利
気が向いたら、ドメインを管理する方法や、WindowsとLinuxからドメインに参加する方法などを書いていく

comments powered by Disqus