#author("2024-10-01T12:08:30+00:00","default:sysosa","sysosa")
#author("2024-10-01T12:10:28+00:00","default:sysosa","sysosa")
samba-adのアカウント情報を利用してログイン認証できるようにしてみます.

samba-adドメインに参加して krb5.keytab ファイルを得れば SSO(シングルサインオン) とかもできますが、ログイン認証のみ依存するなら
krb5.keytab ファイルは必須ではないです. また samba-adをldapサーバと見做して接続することもできます.

&ref(2024y10m01d_122304613.png,nolink,noborder);

&size(10){参加していたドメインから撤退する [[samba/Linux離脱]]};

***下準備 [#ufe78030]
&color(magenta){chaperone};のsamba-adと連携させるLinuxマシンは下記とします。
|BGCOLOR(YELLOW):ホスト名|BGCOLOR(YELLOW):IPアドレス|BGCOLOR(YELLOW):OS|BGCOLOR(YELLOW):参照DNS|BGCOLOR(YELLOW):参照NTP|
|samba-client|192.168.0.151|RokcyLinux 9.4|ad.chaperone.jp|ad.chaperone.jp|

/etc/hostsファイルは、自身のIPを入れて、FQDNと短縮名 $(hostname -s) を入れる. &size(10){短縮名がないと「net ads join」の際にDNSに登録されない};
#code(nonumber){{
[root@samba-client ~]# echo `hostname -I` `hostname`.chaperone.jp `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 ~]#
}}

次に時計合わせとkerberosの調整を行います
#code(nonumber){{
[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 ~]# 
}}

***ドメインへの参加 [#ib38591b]

ドメイン自体への参加は「net ads join」コマンドで行います.
その後、samba-adからユーザ情報の取得/認証は複数の選択肢(経路)があります. &size(10){設定自体はauthselect/authconfigコマンドで行います};
#code(nonumber){{
 samba-ad
    +--- sssd     --> /etc/sss/sssd.conf を修正 sssd を起動
    |                       +-- id_provider = ad
    |                       +-- id_provider = ldap   <-- samba-adをLDAPサーバと見做す
    |
    +--- 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を採用する

&size(10){ユーザ毎に/homeが/home1とか/home2とかになるならrfc2307. ユーザAはbash、ユーザBがzshとかならrfc2307が必要};
&size(10){ならrfc2307対応にしておけば?ってなるけど、それぞれ設定する必要があるのが面倒なら簡易なwinbind:ridが楽かな};

~



***winbindで参加させてみる(backendをridで) [#i12f9ae3]

まずは「/etc/samba/smb.conf」を修正します. 下記はwinbind経由でbackendを「rid」にしてます
#code(nonumber){{
[root@samba-client ~]# dnf install samba-winbind samba-common samba-common-tools
[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
}}
これで
#code(nonumber){{
[root@samba-client ~]# net ads join osName=rockyLinux osVer=9.4 -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
}}
っでユーザ情報を引いてみる
#code(nonumber){{
[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つはsamba-clientの「/etc/samba/smb.conf」にて「template shell = /bin/bash」「template homedir = /home/%U」で矯正できる.


***winbindで参加させてみる(backendをadで) [#qcd53ec8]
変更の前に前段でのデータキャッシュをクリアさせます
#code(nonumber){{
[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」で修正します
#code(nonumber){{
[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を再起動させます
#code(nonumber){{
[root@samba-client ~]# systemctl restart winbind
}}
っでアカウント情報は
#code(nonumber){{
[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らが反映されました.






***sssdで参加(id_providerはad)なら [#e26f2978]
samba-clientをドメインに参加させる際に「/etc/krb5.keytab」をsamba-adから頂けるようにします. &size(10){krb5.keytabがあればSSOとか使えます};

#code(nonumber){{
[root@samba-client ~]# dnf install sssd-ad samba-common samba-common-tools

[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.4 -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」で確認できます。 &size(10){「krb5-workstation」パッケージが必要};


そしてsssdの設定を施します
sssdの設定ファイル( /etc/sssd/sssd.conf )を作り上げます.   &color(red){*};&size(10){初めから用意されてません};
#code(nonumber){{
[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を有効にします

#code(nonumber){{
[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 ~]#
}}
っで引けるか確認
#code(nonumber){{
[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で参加(id_providerはldap)なら [#r2eb66d1]

こちらの場合、別にchaperone.jp ドメインに入ってなくても DNS が samba-ad 先でもなくても構わない.
#code(nonumber){{
[root@samba-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search sybyl.local
nameserver 192.168.0.3

[root@samba-client ~]# hostname -f
samba-client.sybyl.local

[root@samba-client ~]#
}}
っとdns参照先も所属ドメインも全く異なります。
これで samba-ad を ldap サーバと見立てて認証依頼をさせてみる


#code(nonumber){{
[root@samba-client ~]# dnf install sssd-ldap sssd-tools

[root@samba-client ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = default

[nss]

[domain/default]
id_provider = ldap
ldap_uri = ldaps://192.168.0.131
ldap_search_base = dc=chaperone,dc=jp
ldap_id_use_start_tls = True
ldap_tls_reqcert = never

ldap_default_bind_dn = cn=administrator,cn=Users,dc=chaperone,dc=jp     <-- 別のアカウントでも大丈夫.

ldap_schema = rfc2307bis
ldap_user_home_directory = unixHomeDirectory

[root@samba-client ~]# chmod 600 /etc/sssd/sssd.conf

[root@samba-client ~]# sss_obfuscate -d default     <--この「default」はsssd.confの[domain/default]を意図します
Enter password:                                       <-- cn=administrator,cn=Users,dc=chaperone,dc=jp のパスワードが必要です
Re-enter password:
[root@samba-client ~]# systemctl start sssd
}}

これで完了ですが、ここで引けるユーザには「posixAccount」と言われる objectclass が必要です.
これを持っていないユーザは認証されないです。

「posixAccount」を設けるには...ldapAdminで個別に修正/追加する必要があるみたい...

っで引けるか確認
#code(nonumber){{
[root@samba-client ~]# getent passwd illya
illya:*:1002:2000:Illyasviel von Einzbern:/home/illya:/bin/bash
[root@samba-client ~]#
}}

***(番外)nslcdで接続 [#k76222e3]

こちらはrockylinux9でnslcdがサポート外になったので使えないです...
参照[[samba/LDAP#wed2b142]]


***備考 [#p2e38ca0]

sssdにはキャッシュがあり、キャッシュをクリアにするには
sssd を止めてキャッシュデータベースを削除して、sssdを再起動する
#code(nonumber){{
[root@c105 ~]# systemctl stop sssd
[root@c105 ~]# rm -rf /var/lib/sss/db/*
[root@c105 ~]# systemctl start sssd
}}
な感じで。
あるいは sss_cache なるコマンドで対処する

sssdでは getent は
#code(nonumber){{
(&(objectclass=user)(uid=*)(uidNumber=*)(gidNumber=*))
}}
に適合したユーザが認証対象となる。またグループでは
#code(nonumber){{
(&(objectclass=group)(cn=*)(&(gidNumber=*)(!(gidNumber=0))))
}}
である。
ldapsearch を使えば誰がログインユーザとして拾われるかが分かる。
#code(nonumber){{
[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=*))'
}}
&color(red){*};&size(10){「-w *******」は、administratorのパスワード};



***めも [#q4e2e60e]
「net ads join osName=rockyLinux osVer=9.2 -Uadministrator」の後にsamba-adで登録されたのかの確認は
「samba-tool computer list」
「samba-tool dns query ad chaperone.jp @ A」
で確認できる
&color(white,blue){注意}; samba-internal dnsの正引きには登録されるが、逆引きはゾーンが用意されてても登録されない

***めも [#mf4383a7]
「net ads join osName=rockyLinux osVer=9.2 -Uadministrator」の後に
#code(nonumber){{
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にミスがあるかも.
「&color(red){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」からもエントリーが消える. これが原因?
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS