sambaでActive Directoryドメインコントローラー

興味はあったのですが触れる機会もなかったので・・とりあえずメモとして記載中・・・

## 参考リンク

このページは基本的に以下の素晴らしいサイトに倣って操作しつつ、メモを追記。
https://centossrv.com/activedirectory-samba.shtml
https://centossrv.com/activedirectory-winbind.shtml
http://d.hatena.ne.jp/rti7743/20110426/1303840756

随時、公式のマニュアルも参照しました。以下辺り特に。
https://wiki.samba.org/index.php/Package_Dependencies_Required_to_Build_Samba#Red_Hat_Enterprise_Linux_7_.2F_CentOS_7_.2F_Scientific_Linux_7
https://wiki.samba.org/index.php/BuildsystemUseAndWhy

## 環境情報

OS: CentOS 7.6.1810
samba: samba-4.9.5 ソースコンパイル版
（4.10.0がリリース済みでしたが、公式マニュアルが4.9系になっていたので、とりあえず多くの人柱様に支えられている4.9.5でやってみました。）
※パッケージ版はAD DCに対応していない旨が公式に記載されていますのでソースコンパイル必須です。
https://wiki.samba.org/index.php/Distribution-specific_Package_Installation#Version_7

IP: 10.0.12.21/24
GW: 10.0.12.1
ホスト名: cent01

ドメイン名:ADTEST
レルム:ADTEST.LC

※libvirtが入っているとDNS周りの自動設定で不具合が発生して修正も面倒なので入れないことをお薦めします。

※入れてしまっている場合はnetworkの自動起動をオフにしておくことをお薦めします。

```shell:command
# virsh net-autostart default --disable
```

その他、53ポートを使用しているプロセスがいる場合は停止しておきましょう。確認コマンドは以下。

```shell:command
# lsof -i:53
```

## firewalld設定

とりあえずOFF

```shell:command
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl status firewalld
```

## SELinux設定

とりあえずOFF

```shell:command
# vi /etc/selinux/config
```

「SELINUX=disabled」として、OS再起動。

## /etc/hosts設定

以下名前解決設定が入っていることを確認。

IP: 10.0.12.21/24
ホスト名: cent01

127.0.0.1もcent01に名前解決するように入れました。

## /etc/hostname設定

cent01が設定されていることを確認

```shell:command
# uname -n
```

## sambaに必要なパッケージインストール

以下公式を参考に入れました。
https://wiki.samba.org/index.php/Package_Dependencies_Required_to_Build_Samba#Red_Hat_Enterprise_Linux_7_.2F_CentOS_7_.2F_Scientific_Linux_7

また、以下を入れるためにはepelパッケージが必要でした。
（公式にはRedHatの場合は必要だけどCentOSの場合は必要ないとか書いてありましたが、私が実施した時点では必要でした。）



```shell:command
# yum install epel-release

# 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
```

## samba 4.9.5インストール

```shell:command
# wget https://download.samba.org/pub/samba/stable/samba-4.9.5.tar.gz
# tar xzvf samba-4.9.5.tar.gz
# cd samba-4.9.5/
# ./configure
# make
# make install

```

## ドメイン作成

以下を参考にコマンドヘルプ見つつ
https://centossrv.com/activedirectory-samba.shtml

```shell:command
# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
```

```:出力/入力
Realm [LOCALDOMAIN]:  ADTEST.LC
Domain [ADTEST]:
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) [8.8.8.8]:
Administrator password:
Retype password:

---省略---

ready to use
Server Role:           active directory domain controller
Hostname:              cent01
NetBIOS Domain:        ADTEST
DNS Domain:            adtest.lc
DOMAIN SID:            S-1-5-21-1599284420-4154522608-2847289813
```
## OSのDNS設定変更

nmtuiで変更しました。

```shell:command
# cat /etc/resolv.conf
# nmtui
# systemctl restart network
# cat /etc/resolv.conf
```

```:出力
# Generated by NetworkManager
nameserver 127.0.0.1
```

### krb5.confの配備

```shell:command
# cp -p /etc/krb5.conf /etc/krb5.conf_01
# cp /usr/local/samba/private/krb5.conf /etc/
```

## systemdによる自動起動設定

以下に従って設定。
https://wiki.samba.org/index.php/Managing_the_Samba_AD_DC_Service_Using_Systemd

```shell:command
# vi /etc/systemd/system/samba-ad-dc.service
```
```:入力内容は公式のcopy&pasteでOK
[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

```

```shell:command
# systemctl daemon-reload

# systemctl status samba-ad-dc.service
# systemctl start samba-ad-dc.service
# systemctl enable samba-ad-dc
# systemctl status samba-ad-dc.service
```

## samba DNSの確認

```shell:command
# /usr/local/samba/bin/samba-tool dns query 127.0.0.1 ADTEST.LC ADTEST.LC all -U Administrator
```

```:出力
Password for [ADTEST\Administrator]:
  Name=, Records=3, Children=0
    SOA: serial=1, refresh=900, retry=600, expire=86400, minttl=3600, ns=cent01.adtest.lc., email=hostmaster.adtest.lc. (flags=600000f0, serial=110, ttl=3600)
    NS: cent01.adtest.lc. (flags=600000f0, serial=110, ttl=900)
    A: 10.0.12.21 (flags=600000f0, serial=110, ttl=900)
  Name=_msdcs, Records=0, Children=0
  Name=_sites, Records=0, Children=1
  Name=_tcp, Records=0, Children=4
  Name=_udp, Records=0, Children=2
  Name=cent01, Records=1, Children=0
    A: 10.0.12.21 (flags=f0, serial=110, ttl=900)
  Name=DomainDnsZones, Records=0, Children=2
  Name=ForestDnsZones, Records=0, Children=2
```

## ADのユーザメンテナンス操作

Windowsのクライアントソフト使用して実施するのが楽です。
以下を参照してドメイン参加してツールをインストールしました。
https://centossrv.com/activedirectory-samba.shtml

## Linuxユーザの制限設定

以下ページが分かりやすかったです。
http://d.hatena.ne.jp/rti7743/20110426/1303840756

特定ユーザのみをlinuxログイン可能としたい場合に、上記サイトでは1ファイルの変更しか実施していませんが、私の環境では以下2ファイルの変更が必要なようでした。

- /etc/pam.d/system-auth-ac
- /etc/pam.d/password-auth-ac

「auth        sufficient    pam_winbind.so use_first_pass」
を
「auth        sufficient    pam_winbind.so use_first_pass require_membership_of=[グループ名]」

に変更しました。

## wheelを使いたいけど諦める。

Linuxユーザとして使用する場合ですが・・・
ローカルグループのwheelはドメインユーザに付与できないので、なんか方法ないかと思っていたのですが諦めた。

wheelグループのローカルユーザ作ってそこを踏み台にすることに。
以下1,2,3の手順でrootにスイッチユーザ。

1. ドメインユーザsuadminグループ所属のuser01でログイン。

2. sudo で ローカルユーザwheelグループ所属のadminにログイン。adminユーザにはパスワード設定しないことで、パスワードログイン禁止とする。

3. rootにログイン

以下設定概要

```shell:adminユーザをwheelグループに追加
# gpasswd -a admin wheel
```

```:/etc/pam.d/su　変更内容
(変更前)
#auth            required        pam_wheel.so use_uid
(コメント解除)
auth            required        pam_wheel.so use_uid
```

```:/etc/sudoers.d/suadmin　追加
%suadmin  ALL=(ALL)   /usr/bin/su - admin
```