CentOS 8.1 を Minimum インストールして、これの認証を前回構成した Windows Server 2019 に任せる方法を試してみます。狙っているのは Windows 環境と Linux の環境とで、認証をこの Windows Server に任せて、ユーザー管理を一元化している環境・システムを想定します。
認証だけなら SSSD (System Security Services Daemon) を使ってこちらを使うのが現時点でのオススメのやり方のようです。Samba などファイル共有のことを考えないなら、SSSD ということですね。
CentOS 8.1 のインストール
CentOS 8.1 を最小限のインストールでインストールしておきます。このインストール過程でネットワークが使えるようにも設定しておきます。
ホスト名もまたドメインに登録するために、適切な名前をこの時点で設定しておきます。
この時点でネットワーク有効にしておくことも忘れずに。
後はディスクパーティションを確認して、 root パスワードの設定を行い、システムのインストール完了までを見守ります。インストールが完了したら、とりあえず yum update で最新状態へ更新しておきます。
Samba のインストール
Samba (+winbind) をインストールします。これには以下のコマンドを実行します。
[root@centos8 ~]# dnf install samba samba-winbind samba-winbind-clients oddjob-mkhomedir
設定ファイルである smb.conf を編集します。
[root@centos8 ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
[root@centos8 ~]# vi /etc/samba/smb.conf
smb.confにはファイル共有のためのディレクトリ設定を記述しますが、先に認証の設定の方を行います。
ドメインが TECHLABXE.HLOCAL と設定したとして、 smb.conf には以下の記述を行います。
ユーザーが最初にログインしたときにホームディレクトリが作られるようにもしています。
[global]
realm = TECHLABXE.HLOCAL
security = ads
workgroup = TECHLABXE
template shell = /bin/bash
template homedir = /home/%U
winbind enum groups = Yes
winbind enum users = Yes
idmap config TECHLABXE:backend = rid
idmap config TECHLABXE:base_rid = 0
idmap config TECHLABXE:range = 10000-20000
ここで、backend には rid を使っています。 Windows 側の SID を元にして各Linuxでの UID が振られるようにしており、複数のLinux 環境が入ってきても対応可能としています。Samba サーバー間で UID の不一致という事態を防ぐ役割がこのポイントとなります。
ID マッピングのバックエンドには他の指定も可能で、tdb, ad, autorid などが存在します。
続いて Kerberos の設定をするために、 /etc/krb5.conf ファイルを開き編集します。realm のセクションがコメントアウトされているので、有効化し自分の環境に合わせて書き換えます。以下は今回の krb5.conf の例です。
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
spake_preauth_groups = edwards25519
default_realm = TECHLABXE.HLOCAL
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
TECHLABXE.HLOCAL = {
kdc = techlabxe.hlocal
admin_server = ws2k19.techlabxe.hlocal
}
[domain_realm]
.techlabxe.hlocal = TECHLABXE.HLOCAL
techlabxe.hlocal = TECHLABXE.HLOCAL
認証プロバイダの変更
以下のコマンドを実行して、認証プロバイダを変更します。
# authselect select winbind --force
プロファイル "winbind" が設定されました。
以下の nsswitch マップはプロファイルで上書きされます:
- passwd
- group
Make sure that winbind service is configured and enabled. See winbind documentation for more information.
以下のコマンドを実行して、初回ログインの時にディレクトリが作成されるようにしておきます。
# authselect enable-feature with-mkhomedir
# systemctl enable oddjobd.service
# systemctl start oddjobd.service
Active Directory に参加させる
まずは自身のホスト名を正しく引けるように、 /etc/hosts を編集します。(IPアドレスの箇所はCentOSマシンのIPです)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.xxx.yyy centos8 centos8.techlabxe.hlocal
そして DNS 設定を Active Directory のサーバーのほうを向くようにします。ここで、IPアドレスの箇所は Windows Serverのものを指定します。また ens33 はネットワークインタフェース名です。各自の環境で読み替えてください。
# nmcli connection modify ens33 ipv4.dns 192.168.xxx.yyy
ドメインに参加させるために以下のコマンドを実行します。
DNS関連でエラーメッセージが出ていますが、コンピュータのドメイン登録が完了しています。
# net ads join -U Administrator
Enter Administrator's password:
No DNS domain configured for centos8. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
Samba を起動させます。ついでに次回起動設定もしておきます。
# systemctl start smb winbind
# systemctl enable smb winbind
ユーザー認証の確認
Windows 側で ActiveDirectory を使ってユーザーを追加しておきます。そのユーザーを用いて、この CentOS8 の環境にログイン出来るかを確かめてみます。
CentOS8 にこのユーザーでログインしてみます。ログインが成功し、初回ログイン時に自身のホームディレクトリが作成されていれば成功です。
このユーザーで、 id コマンドを実行してみると idmap された uid や “domain user”グループに所属していることなどがわかります。
最後に
CentOS 8 を Windows Server 2019 の Active Directory に追加して、ユーザー認証を任せる手順を説明しました。この後は、この環境で Samba によるファイル共有を設定すれば、Windows / Linux 混在環境下でもユーザー管理は Windowsサーバーに一元化できますし、(Linuxでの)ファイル共有時のユーザー情報が狂う、といった点を回避することができます。
なお、検証環境のためセキュリティに甘い点が多々あるので、実運用の時には各所見直すようにしてこのまま使用しないでください。