diary.sorah.jp

忘備録: Samba 4 AD ドメインコントローラ構築

Windows を再セットアップがてらそういえば LDAP 的な物に触ってみてもいいかもしれないと思って Samba 4 AD DC をセットアップしたので忘備録。ふつうの LDAP とはこれはこれでちょっと違うので難しいところがある。

そしてわりと面倒だった。Puppet manifest に落とすのが割とだるい気がしている。

いれる

$ sudo flaggie net-fs/samba +ldap +addns +ads +acl +aio +dmapi +gnutls +quota
$ sudo emerge -av '=net-fs/samba-4.1.14'
$ sudo flaggie net-dns/bind +filter-aaaa +dlz
$ sudo emerge -av net-dns/bind

BIND 9 を backend にしているのは DNS の listen port を変えたいから。既に :53 では DNS サーバーが稼動している! unbound と bind を共存させる日が来るとはまったく思っていなかった… unbound → bind に統一するのも…なんかだるい…

# /etc/conf.d/samba, daemon_lis` をこうしとかないとドメインコントローラとして起動できない。
daemon_list="samba4"

Provisioning

$ sudo samba-tool domain provision --interactive --use-rfc2307
Realm: <REALM>
 Domain [ad]: <DOMAIN>
 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
More than one IPv4 address found. Using X.X.X.X
Looking up IPv6 addresses
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=XXX
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=XXX
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/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 4 has been generated at /var/lib/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:              XXX
NetBIOS Domain:        XXX
DNS Domain:            XXX
DOMAIN SID:            S-X-X-XX-XXX-XXX

named の設定

BIND named の設定をしておく。IPv6 は今のところ内部で使ってないので listen none。AAAA レコードのフィルタを有効にしているのは samba が AAAA レコードを設定してしまって、global IPv6 アドレスでドメインコントローラへの接続を試みようと Windows がコケていたので。

unbound の方は stub-zone を設定しておいた。

# named.conf
acl "xfer" {
        none;
};

acl "trusted" {
        127.0.0.0/8;
        10.0.0.0/8;
        192.168.0.0/16;
        ::1/128;
};

options {
options {
        directory "/var/bind";
        pid-file "/run/named/named.pid";

        listen-on port XXXXX { X.X.X.X; };
        listen-on-v6 { none; };
        filter-aaaa-on-v4 yes;

        tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
        dnssec-enable yes;
        dnssec-validation auto;

        allow-query {
                trusted;
        };

        allow-query-cache {
                trusted;
        };

        allow-recursion {
                none;
        };

        allow-transfer {
                none;
        };

        allow-update {
                none;
        };
}


zone "." in {
        type hint;
        file "/var/bind/named.cache";
};

zone "localhost" IN {
        type master;
        file "pri/localhost.zone";
        notify no;
};

include "/var/lib/samba/private/named.conf";

#/var/lib/samba/private/named.conf

dlz "AD DNS Zone" {
    # For BIND 9.8.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
    database "dlopen /usr/lib64/samba/bind9/dlz_bind9_10.so";
};

サービスの開始

$ sudo /etc/init.d/named start
$ sudo /etc/init.d/samba start
```


## iptables

```
sudo -A INPUT -s ${NETWORK} -p udp -m udp --dport ${BIND_PORT} -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport ${BIND_PORT} -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p udp -m udp --dport 389 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p udp -m udp --dport 464 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p udp -m udp --dport 137 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p udp -m udp --dport 138 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 636 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 445 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 1024 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 3268 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 3269 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 389 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 135 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 139 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 464 -j ACCEPT
sudo -A INPUT -s ${NETWORK} -p tcp -m tcp --dport 88 -j ACCEPT
```

## テスト

$ dig +short SRV _ldap._tcp.dc._msdcs.${REALM} @127.0.0.1 0 100 389 HOST.REALM.


$ smbclient -L localhost -U% Domain=[SORAH] OS=[Unix] Server=[Samba 4.1.14]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (Samba 4.1.14)
    sysvol          Disk
    netlogon        Disk

Domain=[SORAH] OS=[Unix] Server=[Samba 4.1.14]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------

$ smbclient //localhost/netlogon -UAdministrator -c 'ls' Enter Administrator's password: Domain=[SORAH] OS=[Unix] Server=[Samba 4.1.14] . D 0 Mon Jan 12 18:17:35 2015 .. D 0 Mon Jan 12 18:17:42 2015

            48115 blocks of size 2097152. 14133 blocks available

## ユーザー作成

$ sudo samba-tool user create sorah --random-password --rfc2307-from-nss --gecos=gecos $ sudo samba-tool user setpassword sorah $ sudo samba-tool group addmembers 'Domain Admins' sorah


group addmembers しているけど、なぜか Windows から見た時に反映されていなかったので後で Windows 側で RSAT から再度追加してあげました。

ここまで来たら後は Windows 側でシステムプロパティ開いて workgroup から domain に切り替えるだけ。DNS が引ければ問題なくうまくいくはず。

とりあえずこれでドメイン下に Windows は入ったので、家にある smbd を samba 4 に上げてドメインに突っ込んでみたいなあとかおもっている。

## 参考

- https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
- https://wiki.samba.org/index.php/DNS_Backend_BIND
- https://wiki.samba.org/index.php/Joining_a_Windows_Client_to_a_Domain
- https://wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management
- http://wiki.gentoo.org/wiki/Samba4_Migrating/HOWTO

Published at