samba-adドメインにLinuxマシンを追加してメンバーサーバを作ります
メンバーサーバとは samba-ad 以外のファイルサーバ、計算機サーバ/クライアント、webサーバらを意図してます
メンバーサーバになるには
1.ドメインに参加(samba-adデータベース[kerberos]への登録とDNSへの登録)
2.name service switch (NSS)の設定
が必要です
参加していたドメインから撤退する samba/Linux離脱
chaperoneドメインに参加させるLinuxマシンの概要は下記とします。
ホスト名 | IPアドレス | OS | 参照DNS | 参照NTP |
samba-client.chaperone.jp | 192.168.0.151 | RokcyLinux | ad.chaperone.jp | ad.chaperone.jp |
/etc/hostsファイルは、自身のIPを入れて、FQDNと短縮名 $(hostname -s) を入れる. 短縮名がないと「net ads join」の際にDNSに登録されない
[root@samba-client ~]# echo `hostname -I` `hostname -A` `hostname -s` >> /etc/hosts
[root@samba-client ~]# echo "192.168.0.131 ad.chaperone.jp ad" >> /etc/hosts
[root@samba-client ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.151 samba-client.chaperone.jp samba-client
192.168.0.131 ad.chaperone.jp ad
[root@samba-client ~]#
ドメインの参加に必要なパッケージをインストールします
[root@samba-client ~]# dnf install samba-common samba-common-tools
次に時計合わせとkerberosの調整を行います
[root@samba-client ~]# echo "pool ad iburst" > /etc/chrony.conf
[root@samba-client ~]# systemctl restart chronyd
[root@samba-client ~]# mv /etc/krb5.conf /etc/krb5.conf.old
[root@samba-client ~]# vi /etc/krb5.conf
[libdefaults]
default_realm = CHAPERONE.JP
dns_lookup_realm = false
dns_lookup_kdc = true
[root@samba-client ~]#
ドメイン自体への参加は「net ads join」コマンドで行うのですが、
その後にsamba-adからユーザ情報の取得/認証は複数の選択肢(経路)があります. 設定自体はauthselect/authconfigコマンドで行います
authselect/authconfig
+--- sssd --> /etc/sss/sssd.conf を修正 sssd を起動
+--- winbind --> /etc/samba/smb.confを修正 winbindd を起動
+-- backend:ad --> rfc2307が使える
+-- backend:rid --> rfc2307なし
samba-adのrfc2307(uid/gid/homedir/loginShellら)を有効活用するならsssd系かwinbidでbackendにadを採用する
rfc2307を利用しない(ホームディレクトリは/homeに集約、loginShellは皆共通)ならwinbindでbackendにridを採用する
ユーザ毎に/homeが/home1とか/home2とかになるならrfc2307. ユーザAはbash、ユーザBがzshとかならrfc2307が必要
ならrfc2307対応にしておけば?ってなるけど、それぞれ設定する必要があるのが面倒なら簡易なwinbind:ridが楽かな
まずは「/etc/samba/smb.conf」を修正します. 下記はwinbind経由でbackendを「rid」にしてます
[root@samba-client ~]# dnf install samba-winbind
[root@samba-client ~]# vi /etc/samba/smb.conf
[global]
workgroup = CHAPERONE
security = ADS
realm = CHAPERONE.JP
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config CHAPERONE : backend = rid
idmap config CHAPERONE : range = 10000-999999
winbind use default domain = true
これで
[root@samba-client ~]# net ads join osName=rockyLinux osVer=9.2 -Uadministrator
[root@samba-client ~]# authselect current
No existing configuration detected.
[root@samba-client ~]#
[root@samba-client ~]# authselect select winbind --force
[root@samba-client ~]# systemctl enable winbind --now
っでユーザ情報を引いてみる
[root@samba-client ~]# id illya
uid=11111(illya) gid=10513(domain users) groups=10513(domain users),11111(illya)
[root@samba-client ~]# getent passwd illya
illya:*:11111:10513::/home/CHAPERONE/illya:/bin/false
[root@samba-client ~]#
samba/ユーザ登録で登録したuid/gidではないことが分かる. 加えてホームディレクトリは「/home/$DOMAIN/<user>」でlogin shellが「/bin/false」となる。
後半2つは「/etc/samba/smb.conf」にて「template shell = /bin/bash」「template homedir = /home/%U」で矯正できる.
変更の前に前段でのデータキャッシュをクリアさせます
[root@samba-client ~]# systemctl stop winbind
[root@samba-client ~]# net cache flush
[root@samba-client ~]# rm -f /var/lib/samba/*.tdb
[root@samba-client ~]# rm -f /var/lib/samba/group_mapping.ldb
っで「/etc/samba/smb.conf」を「backend:ad」で修正します
[root@samba-client ~]# vi /etc/samba/smb.conf
[global]
workgroup = CHAPERONE
security = ADS
realm = CHAPERONE.JP
idmap config * : backend = tdb
idmap config * : range = 30001-30010
idmap config CHAPERONE:backend = ad
idmap config CHAPERONE:schema_mode = rfc2307
idmap config CHAPERONE:range = 1000-30000
idmap config CHAPERONE:unix_nss_info = yes
idmap config CHAPERONE:unix_primary_group = yes
winbind use default domain = true
っでwinbindを再起動させます
[root@samba-client ~]# systemctl stop winbind
っでアカウント情報は
[root@samba-client ~]# id illya
uid=1002(illya) gid=2000(fate) groups=2000(fate)
[root@samba-client ~]# getent passwd illya
illya:*:1002:2000:Illyasviel von Einzbern:/home/illya:/bin/bash
[root@samba-client ~]#
っとsamba-adで指定したuid/gidやらホームディレクトリ、login shellらが反映されました.
samba-clientをドメインに参加させる際に「/etc/krb5.keytab」をsamba-adから頂けるようにします. krb5.keytabがあればSSOとか使えます
[root@samba-client ~]# dnf install sssd-ad
[root@samba-client ~]# cat /etc/samba/smb.conf
[global]
workgroup = CHAPERONE
security = ADS
realm = CHAPERONE.JP
kerberos method = secrets and keytab
[root@samba-client ~]# net ads join osName=rockyLinux osVer=9.2 -Uadministrator
[root@samba-client ~]# ls -l /etc/krb5.keytab
-rw-------. 1 root root 1318 Jun 23 02:03 /etc/krb5.keytab
[root@samba-client ~]#
中身は「klist -ke」で確認できます。 「krb5-workstation」パッケージが必要
そしてsssdの設定を施します
sssdの設定ファイル( /etc/sssd/sssd.conf )を作り上げます. *初めから用意されてません
[root@samba-client ~]# cat << _EOT_ > /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = chaperone.jp
[domain/chaperone.jp]
id_provider = ad
auth_provider = ad
access_provider = ad
dyndns_update = false
enumerate = True
krb5_keytab = /etc/krb5.keytab
ldap_id_mapping = False
ldap_sasl_authid = samba-client$@CHAPERONE.JP
_EOT_
[root@samba-client ~]#
[root@samba-client ~]# chmod 600 /etc/sssd/sssd.conf
っでathselectでsssdを有効にします
[root@samba-client ~]# authselect select sssd --force
[root@samba-client ~]# ps -ef |grep sss
root 10774 1 0 02:37 ? 00:00:00 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files
root 10784 915 0 02:40 pts/0 00:00:00 grep --color=auto sss
[root@samba-client ~]#
っで引けるか確認
[root@samba-client ~]# id illya
uid=1002(illya) gid=2000(fate) groups=2000(fate)
[root@samba-client ~]# getent passwd illya
illya:*:1002:2000:Illyasviel von Einzbern:/home/illya:/bin/bash
[root@samba-client ~]#
sssdにはキャッシュがあり、キャッシュをクリアにするには
sssd を止めてキャッシュデータベースを削除して、sssdを再起動する
[root@c105 ~]# systemctl stop sssd
[root@c105 ~]# rm -rf /var/lib/sss/db/*
[root@c105 ~]# systemctl start sssd
な感じで。
あるいは sss_cache なるコマンドで対処する
sssdでは getent は
(&(objectclass=user)(uid=*)(uidNumber=*)(gidNumber=*))
に適合したユーザが認証対象となる。またグループでは
(&(objectclass=group)(cn=*)(&(gidNumber=*)(!(gidNumber=0))))
である。
ldapsearch を使えば誰がログインユーザとして拾われるかが分かる。
[root@c105 ~]# yum install openldap-clients
[root@c105 ~]# ldapsearch -h c.sybyl.local -D "CN=administrator,CN=Users,DC=SYBYL,dc=local" -w ******* \
-b "dc=sybyl,dc=local" '(&(objectclass=user)(uid=*)(uidNumber=*)(gidNumber=*))'
*「-w *******」は、administratorのパスワード
「net ads join osName=rockyLinux osVer=9.2 -Uadministrator」の後にsamba-adで登録されたのかの確認は
「samba-tool computer list」
「samba-tool dns query ad chaperone.jp @ A」
で確認できる
注意 samba-internal dnsの正引きには登録されるが、逆引きはゾーンが用意されてても登録されない
「net ads join osName=rockyLinux osVer=9.2 -Uadministrator」の後に
DNS Update samba-nfs.chaperone.jp failed: ERROR_DNS_UPDATE_FAILED
DNS update failed: NT_STATUS_UNSUCCESSFUL
とメッセージが表示されることがある。これはsamba-ad(samba-internal dns)に既にエントリーがあるか、samba-client側のFQDNにミスがあるかも.
「failed」と表記されるが、「Active Directory ユーザとコンピュータ」には登録される
FQDNのミスは「/etc/hosts」ファイルに「`hostname -i` `hostname -f` `hostname -s`」とすると回避される
samba-ad側で「samba-tool computer delete xxx」の後に再度クライアント側で「net ads join」操作すると発生します.
解消方法は一度samba-ad側で「samba-tool dns add」で手動でsamba-clientを追加して「samba-tool dns delete」で削除します. その後「net ads join」操作は問題なくなる.
「samba-tool computer delete xxx」とすると「samba-tool dns query ad chaperone.jp @ A」からもエントリーが消える. これが原因?