社内で共有ネットワークディスクを全員で共有する必要があるため、Sambaサービスが必要です。通常はWindowsの共有機能で実現できますが、ライセンス著作権の問題からLinuxを使用してこの問題を解決し、ADドメイン制御アカウントの認証と承認も解決する必要があります。

1 Sambaをコンパイルしてインストールする 依存関係の問題を解決するためのコンパイルとインストールの手順は再び省略されます。コンパイルおよびインストールされたSambaには、以下のパラメータが追加されます。

Terminal window
--prefix=/usr/local/samba \
--with-system-mitkrb5 \
--with-ldap \
--with-syslog \
--with-pam \
--with-systemd \
--with-ads \
--without-ad-dc \
--with-winbind \
--enable-debug

Samba環境変数を追加する

Terminal window
echo "export PATH=/usr/local/samba/bin:/usr/local/samba/sbin:$PATH" > /etc/profile.d/samba.sh
source /etc/profile

1.1 Samba管理スタートアップサービスを構成する

Terminal window
cat /etc/systemd/system/smbd.service
[Unit]
Description=Samba SMB Daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/samba/sbin/smbd -s /usr/local/samba/etc/smb.conf -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
PIDFile=/usr/local/samba/var/run/smbd.pid
#User=samba
#Group=samba
Restart=always
[Install]
WantedBy=multi-user.target
cat /etc/systemd/system/nmbd.service
[Unit]
Description=Samba NetBIOS Name Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/samba/sbin/nmbd -s /usr/local/samba/etc/smb.conf -D
PIDFile=/usr/local/samba/var/run/nmbd.pid
#User=samba
#Group=samba
Restart=always
[Install]
WantedBy=multi-user.target
cat /etc/systemd/system/winbindd.service
[Unit]
Description=Samba Winbind Daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/samba/sbin/winbindd -s /usr/local/samba/etc/smb.conf -D
PIDFile=/usr/local/samba/var/run/winbindd.pid
#User=samba
#Group=samba
Restart=always
[Install]
WantedBy=multi-user.target

当初は、ADドメインコントローラーに参加せずに認証できるように、Samba+LDAP認証の組み合わせを利用しようと考えていました。しかし、何度もテストを繰り返した結果、ADドメインコントローラーのLDAPプロトコル経由ではアカウント認証を完了できませんでした。結局、Samba+ADドメインコントローラー認証を使用するしか選択肢がありませんでした。

2 nsswitch設定のセットアップ /etc/nsswitch.conf設定ファイルを編集する

/etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: files winbind # パスワードをwinbindで処理するように設定する
group: files winbind # グループの設定はwinbindによって処理されます
shadow: files winbind # シャドウをwinbindで処理するように設定する
gshadow: files systemd
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis

3 krb5構成のセットアップ /etc/krb5.conf設定ファイルを編集する

Terminal window
[libdefaults]
default_realm = KOEVN.COM
dns_lookup_realm = true
dns_lookup_kdc = true
rdns = false
ticket_lifetime = 24h
forwardable = true
[domain_realm]
.koevn.com = KOEVN.COM
koevn.com = KOEVN.COM

次に、dig _kerberos._udp.koevn.com SRVコマンドを使用して、解決レコードが正常に返されるかどうかをテストします。

4 Sambaサービスを設定する

Terminal window
[global]
workgroup = KOEVN
realm = KOEVN.com
security = ADS
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind nss info = template
idmap config * : backend = tdb
idmap config * : range = 1000000-1999999
idmap config KOEVN : backend = rid
idmap config KOEVN : range = 10000-999999
template shell = /bin/false
template homedir = /nonexistent
winbind refresh tickets = yes
log file = /data/samba/logs/samba.log
log level = 2
[test]
path = /data/samba/test
comment = テストディレクトリ
browseable = yes
browseable = no
read only = no
guest ok = no
hide unreadable = yes
force group = samba
create mask = 0660
directory mask = 0770
valid users = K95221
delete readonly = no

5 Sambaを起動してアクセスを確認する 5.1 サンバを始める

Terminal window
systemctl start smbd.service && systemctl start nmbd.service && systemctl start winbindd.service

5.2 ADドメインコントローラに参加する 現在のLinuxホストをADドメインコントローラに追加します。まずホスト名を変更することをお勧めします。

Terminal window
net ads join -U ldap@KOEVN.COM

{% note warning %} このアカウントにはドメインを追加する権限が必要ですが、ドメインの追加は常に失敗します。 {% endnote %} 参加に成功すると、‘hostname’ がレルム ‘KOEVN.COM’ に参加しました」というメッセージが表示されます。

アカウントが正しくマッピングされていることを確認する

Terminal window
wbinfo -n K95221 # このコマンドを実行するとSIDの文字列が返されます
wbinfo -S SID # このコマンドを実行するとUIDが返されます。解決できない場合は、共有ディレクトリの認証が直接失敗することを意味します。

libnss_winbindライブラリファイルをシステムディレクトリに追加します

Terminal window
cp /usr/local/samba/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/
cd /lib/x86_64-linux-gnu/
ln -sf libnss_winbind.so.2 libnss_winbind.so

⚠️ 注意 以前、wbinfo -S の SID 値に惑わされてしまいました。認証に AD ドメインコントローラーを使用していたため、Linux ローカルユーザーと AD ドメインコントローラーユーザーの間に 1 対 1 のマッピングを作成する必要がありました。これは不要でした。重要な問題は、SMB 設定ファイルの idmap 設定項目にあります。この項目は、AD ドメインコントローラーアカウント sAMAccountName を UID に自動的にマッピングします。そのため、ユーザーが Samba 共有にファイルをアップロードすると、ファイルの所有者は AD ドメインコントローラーの sAMAccountName 属性のアカウントになります。

上記の検証が成功すると、基本的に共有ディレクトリにアクセスできるようになります。