はじめに
Sambaはバージョン4でWindows Server 2008 R2相当のActive Directoryドメインコントローラーを構成できるようになったということで試してみようと思います。
前提
以下のような設定で構築する。
項目 | 値 |
---|---|
Kerberoレルム | AD.INAHO.SPACE |
NetBIOSドメイン名 | AD |
サーバーの役割 | ドメインコントローラー |
バックエンドDNS | Samba内蔵DNS |
AD DNSゾーン | ad.inaho.space |
フォワード先DNS | 192.168.100.1 |
インストール
パッケージ samba
とその他必要になるパッケージを導入する。
sudo apt update && sudo apt -y install samba smbclient krb5-user krb5-config winbind libnss-winbind libpam-winbind oddjob-mkhomedir dnsutils
ネットワーク設定
以下のような設定とする。
項目 | 値 |
---|---|
ドメイン | ad.inaho.space |
ホスト名 | samba02-pi |
IPアドレス | 192.168.100.251/24 |
DNS | 192.168.100.1 |
デフォルトゲートウェイ | 192.168.100.1 |
Raspbianではホスト名を raspi-config
を実行して設定し、それ以外の項目は /etc/hosts
と /etc/dhcpcd.conf
を編集して設定する。
127.0.0.1 localhost
192.168.100.251 samba01-pi.ad.inaho.space samba01-pi
interface eth0
static ip_address=192.168.100.251/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1
前処理
/etc/samba/smb.conf
が存在するとエラーとなるのでリネームする。
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.original
プロビジョニング
samba-tool
を用いてドメインのプロビジョニングを行う。--interactive
は対話式でプロビジョニングを行うことを指示する。また --function-level=2008_R2
は機能レベルをWindows Server 2008 R2相当で構築すること、 --use-rfc2307
はRFC2307属性を付与することをそれぞれ指示する。
sudo samba-tool domain provision --interactive --function-level=2008_R2 --use-rfc2307
DNS
プロビジョニングでSamba内蔵DNSをバックエンドで使用するとしたので設定を行う。KerberosやLDAPなどのサービスを探すためにDNSを使用するのでSamba内蔵DNSを使う必要がある。
DNSリゾルバー構成
Samba内蔵DNSを使用するために、使用するDNSのIPアドレスを 192.168.100.1
から 192.168.100.251
に変更し、ドメインネームを ad.inaho.space
とする。
Raspbianでは /etc/dhcpcd.conf
を編集して、 domain_name
の行を追加し domain_name_servers
の行を変更する。
interface eth0
static ip_address=192.168.100.251/24
static routers=192.168.100.1
static domain_name=ad.inaho.space
static domain_name_servers=192.168.100.251
逆引参照ゾーン作成
sudo samba-tool dns zonecreate 192.168.100.251 100.168.192.in-addr.arpa
Kerberos
前処理
/etc/krb5.conf
をプロビジョニングで生成したファイルに置き換える。
sudo mv /etc/krb5.conf /etc/krb5.conf.original
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
設定
/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 = AD.INAHO.SPACE
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes
[realms]
AD.INAHO.SPACE = {
kdc = ad.inaho.space
admin_server = ad.inaho.space
default_domain = ad.inaho.space
}
[domain_realm]
.ad.inaho.space = AD.INAHO.SPACE
ad.inaho.space = AD.INAHO.SPACE
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Samba
プロビジョニングで生成された /etc/samba/smb.conf
の [global]
セクションに下記内容を追記する。
[global]
:
:
idmap_ldb : use rfc2307 = yes
idmap config AD : unix_nss_info = yes
idmap config AD : unix_primary_group = yes
template shell = /bin/bash
template homedir = /home/%U
winbind enum users = yes
winbind enum groups = yes
:
:
ネームサービススイッチ設定
/etc/nsswitch.conf
を編集して、認証に winbind
も使用するように設定する。
passwd:
と group:
の行に winbind
を追記する。
:
:
passwd: files winbind
group: files winbind
:
:
ホームディレクトリー自動作成
ADユーザーでこのホストにログインした場合にホームディレクトリーがなくて警告メッセージが出ることがある。
これを避けるためにPAMの仕組みを利用してログイン時にホームディレクトリー作成処理を行うように設定する。
設定ファイル編集
デフォルトではパーミッションが 755
のため誰でも読めてしまうからホームディレクトリーのパーミッションを変更する。 /etc/oddjobd.conf.d/oddjobd-mkhomedir.conf
を編集して、2行ある helper
の exec
に -u 0077
を追記する。
:
:
<helper exec="/usr/lib/aarch64-linux-gnu/oddjob/mkhomedir -u 0077"
:
:
<helper exec="/usr/lib/aarch64-linux-gnu/oddjob/mkhomedir -u 0077"
:
:
PAM認証設定
PAMの仕組みを通じてホームディレクトリーを自動作成するので /etc/pam.d/common-session
に下記内容を追記する。
:
:
session optional pam_oddjob_mkhomedir.so
起動
ドメインコントローラーでは nmbd
smbd
winbind
といったサービスではなく samba-ad-dc
サービスを使用するように設定する。
sudo systemctl stop nmbd smbd winbind
sudo systemctl mask nmbd smbd winbind
sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc
sudo systemctl start samba-ad-dc
時刻同期
NTP Serverの構築はこちらを参照。
そして、そこに1点追加。下記の内容を /etc/ntpd.conf
に追加する。
:
:
ntpsigndsocket /var/lib/samba/ntp_signd/
:
:
動作確認
DNS
ドメインのTCPベースの _ldap SRV レコード
sudo host -t SRV _ldap._tcp.ad.inaho.space.
ドメインのUDPベースの _kerberos SRV リソースレコード
sudo host -t SRV _kerberos._udp.ad.inaho.space.
ドメインコントローラのAレコード
sudo host -t A samba01-pi.ad.inaho.space.
Kerberos
ドメイン管理者アカウントのKerberosチケットを要求
sudo kinit administrator
キャッシュされているKerberosのチケットの一覧を表示
sudo klist
Samba(ファイルサーバー)
DCによって提供されている全ての共有の一覧を表示
sudo smbclient -L localhost -U%
認証を確認するためにドメイン管理者アカウントを使用して netlogon 共有に接続
sudo smbclient //localhost/netlogon -UAdministrator -c 'ls'
おわりに
やってみたら思った以上に大変だった(笑)
これでおうちでActive Directoryを利用できるようになります。
とりあえずグループポリシーを適用したり・・・ あとは何をしよう(^^;
用途はこれから考えるとします。