394.2 認証と許可およびWinbind
主題394:Sambaのユーザとグループの管理
394.2 認証と許可およびWinbind
LinuC300の試験範囲である主題390~397まであるうちの「主題394:Sambaのユーザとグループの管理」から「394.2 認証と許可およびWinbind」についてのまとめ
重要度:5
説明:
さまざまな認証方法を理解し、アクセス制御を設定できること。Winbindサービスのインストールと設定を実行できること。主要な知識範囲:
- パスワードデータベースをセットアップする
- パスワード同期を実行する
- 種々の passdbバックエンドに関する知識
- Samba passdbバックエンド間の変換
- SambaとLDAPを統合する
- Winbindを設定する
- PAMおよびNSSの設定重要なファイル、用語、ユーティリティ:
- smb.conf
- smbpasswd、 tdbsam、 ldapsam
- passdb backend
- libnss_winbind
- libpam_winbind
- libpam_smbpass
- wbinfo
- getent
- SIDと外部のSID
- /etc/passwd
- /etc/group
(補足)
Sambaユーザーは事前に作成されています。
(別記事 Appendix (準備その4)ユーザーを作成する 参照)
パスワードデータベースをセットアップする
パスワードデータベースが格納されている場所は$PRIVATE_DIRでsmbd -bコマンドで確認できる。
★ ソースからインストールしたSamba3 ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep -i private
:
PRIVATE_DIR: /usr/local/samba/private
:
[root@rocky9-samba31 ~]#
★パッケージからインストールしたSamba4 ★
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# smbd -b | grep -i private
:
PRIVATE_DIR: /var/lib/samba/private
:
[root@rocky9-samba41 ~]#
また、パスワードデータベースの種類や$PRIVATE_DIR以外の格納場所およびファイル名はsmb.confの[grobal]セクションでpassdb backendパラメータで設定ができる。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -sv | grep passdb
:
passdb backend = tdbsam
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/ <--- $PRIVATE_DIR
:
-rw------- 1 root root 36864 6月 21 00:56 passdb.tdb <--- パスワードデータベース
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -sv | grep passdb
:
passdb backend = tdbsam:/etc/samba/private/passdb.tdb
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /etc/samba/private/passdb.tdb
-rw-r--r-- 1 root root 32768 6月 25 23:31 /etc/samba/private/passdb.tdb
[root@rocky9-samba31 ~]#
パスワード同期を実行する
SambaユーザーとLinuxユーザーを同期させることができる。
smb.confのグローバルセクションに([grobal])に以下の設定を追加する。
unix password sync = No
このパラメータをYesにすることでSambaユーザーのパスワードを変更と同時にLinuxユーザーのパスワードが変更される。
パスワード変更はpasswd programで指定されたコマンドがroot権限で実行される。
※下記(補足)のとおりこのパラメータを使ってパスワードの同期を実現するためにはセキュリティ的に脆弱な状態にする必要があるので検証以外の目的での使用は避けたほうが良さそうです。passwd program =
unix password sync = Yes の場合はこのパラメータにLinuxユーザーのパスワードを変更するプログラムを指定する。
設定例)passwd program = /usr/bin/passwd %upasswd chat = newpassword* %n\nnewpassword* %n\n changed
passwd programパラメータで指定されたプログラムが呼び出されたときにユーザーにパスワード入力を求める文字列を設定する。pam password change = No
このパラメータをYesにすることでSambaユーザーのパスワードを変更と同時にLinuxユーザーのパスワードが変更される。
パスワード変更はPAMモジュールで実行される。
(補足)
RockyLinux9でunix password syncの設定をしても以下のエラーが出て動作確認ができません。
「NISを使っているとこのようなエラーが出る」という情報を見かけるがRockyLinux9のアップストリームにあたるRHEL9からNISが使えなくなっているのでNISは関係なさそうです。
ちなみに、pam password change = Yes だとパスワード変更ができる。
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ smbpasswd
Old SMB password: ******** <--- 古いパスワード
New SMB password: ******** <--- 新しいパスワード
Retype new SMB password: ******** <--- 新しいパスワード再入力
SAMR connection to machine NT_STATUS_ACCESS_DENIED failed. Error was 127.0.0.1, but LANMAN password changes are disabled
[user00@rocky9-samba31 ~]$
エラーの後半部分に”LANMAN password changes are disabled”と出ているので、以下の設定をして無理やりLANMANを有効化すればunix password syncによるパスワード変更が可能になるが、LANMANは脆弱なので検証以外の目的では使わないほうが良さそうです。
[global]
lanman auth = Yes
client lanman auth = Yes
client NTLMv2 auth = No
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ smbpasswd
Old SMB password: ******** <--- 古いパスワード
New SMB password: ******** <--- 新しいパスワード
Retype new SMB password: ******** <--- 新しいパスワード再入力
cli_oem_change_password: Failed to send password change for user user00
machine 127.0.0.1 rejected the password change: Error was : NT_STATUS_OK.
Password changed for user user00
[user00@rocky9-samba31 ~]$
client ntlmv2 auth = Yes | No
- Yes:NTLM、client lanman auth、client plaintext auth が無効になる
- Yes:NTLMv2のみ対応
- No:client lanman auth に従う※既定値※client lanman auth = Yes | No
- Yes:LANMANが使える
- No:client plaintext auth = No になる※既定値※lanman auth = Yes | No
- Yes:LANMANが使える
- No:LANMANが使えない※既定値※(Sabma3)ntlm auth = Yes | No
- Yes:NTLMが使える※既定値※
- No:NTLMが使えない(LANMANかNTMLv2が使える)(Sabma4)ntlm auth = ntlmv1-permitted | ntlmv2-only | mschapv2-and-ntlmv2-only | disabled
- ntlmv1-permitted(Yes):NTLM以上が使える
- ntlmv2-only(no):NTLMv2が使える※既定値※
- mschapv2-and-ntlmv2-only:MSCHAPv2 認証を提供することが確実である場合に限って NTLMv1 認証
- disabled → LANMAN、NTLMが使えない
種々の passdbバックエンドに関する知識
passdbにはユーザーとグループの情報が格納されている。
passdbの種類にはsmbpasswd、tdbsam、ldapsamがあり、[grobal]セクションのpassdb backendパラメータで指定する。既定値はtdbsamである。
passdb backend = smbpasswd
テキスト形式の古いタイプのデータベースpassdb backend = tdbsam
TDB(Trivial Database)形式のデータベース
(別記事 Appendix SambaのTDBファイル 参照)
TDBを操作するにはtdbtool、tdbbackup、tdbrestore、tdbdumpといったツールがある。
(別記事 392.4 Sambaのトラブルシューティング 参照)passdb backend = ldapsam
Sambaの外部にあるLDAP(Lightweight Directory Access Protocol)サーバーを使う。
Samba passdbバックエンド間の変換
passdbの相互変換はpdbeditコマンドで実現できる。
(準備)
passdbを保存するディレクトリ(/root/passdb_backup)を用意しておく。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# mkdir passdb_backup
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -ld passdb_backup/
drwxr-xr-x 2 root root 2 6月 25 21:30 passdb_backup/
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cd passdb_backup/
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pwd
/root/passdb_backup
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# ls -la
合計 2
drwxr-xr-x 2 root root 2 6月 25 22:09 .
dr-xr-x--- 5 root root 17 6月 25 21:30 ..
[root@rocky9-samba31 passdb_backup]#
passdb backendがtdbsamで、TDBファイルが存在し、ユーザーが登録されていることを確認する
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -sv | grep passdb
:
passdb backend = tdbsam
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep -i private
:
PRIVATE_DIR: /usr/local/samba/private
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private
:
-rw------- 1 root root 36864 6月 21 00:56 passdb.tdb
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup -v /usr/local/samba/private/passdb.tdb
/usr/local/samba/private/passdb.tdb : 11 records
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# pdbedit -L
user01:1001:
user00:1000:
user02:1002:
user03:1003:
[root@rocky9-samba31 ~]#
~tdbsam形式 → smbpasswd形式~
pdbedit -i tdbsam:<ファイル名> -e smbpasswd:<ファイル名>
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pdbedit -i tdbsam:/usr/local/samba/private/passdb.tdb -e smbpasswd:/root/passdb_backup/passdb.smbpasswd
startsmbfilepwent_internal: file /root/passdb_backup/passdb.smbpasswd did not exist. File successfully created.
Importing account for user01...ok
Importing account for user00...ok
Importing account for user02...ok
Importing account for user03...ok
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# ls -lF
合計 1
-rw------- 1 root root 424 6月 25 22:12 passdb.smbpasswd
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# cat passdb.smbpasswd
user01:1001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:B2641AEA8EB4C00EDE89CD2B7C78F6FB:[U ]:LCT-648F2872:
user00:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:3F9F8BF549B40C59CACD6F80620FB4D5:[U ]:LCT-6491CC3A:
user02:1002:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:8E2D88571AAA9BB30188A99834E619A2:[U ]:LCT-648F287D:
user03:1003:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:67BBEC696A82DC182CAE409589F896ED:[U ]:LCT-648F29AB:
[root@rocky9-samba31 passdb_backup]#
~smbpasswd形式 → tdbsam形式~
pdbedit -i smbpasswd:<ファイル名> -e tdbsam:<ファイル名>
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pdbedit -i smbpasswd:/root/passdb_backup/passdb.smbpasswd -e tdbsam:/root/passdb_backup/passdb.tdb
Importing account for user01...ok
Importing account for user00...ok
Importing account for user02...ok
Importing account for user03...ok
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# ls -l
合計 3
-rw------- 1 root root 424 6月 25 22:12 passdb.smbpasswd
-rw------- 1 root root 36864 6月 25 22:16 passdb.tdb
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# tdbbackup -v passdb.tdb
passdb.tdb : 11 records
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pdbedit -L -b tdbsam:/root/passdb_backup/passdb.tdb
user01:1001:
user00:1000:
user02:1002:
user03:1003:
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]#
~tdbsam形式 → ldapsam形式~
pdbedit -i tdbsam:<ファイル名> -e ldapsam:<LDAPサーバー>
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pdbedit -i tdbsam:/root/passdb_backup/passdb.tdb -e ldapsam:ldap://192.168.56.21
Importing account for user01...ok
Importing account for user02...ok
Importing account for user03...ok
[root@rocky9-samba31 passdb_backup]#
~smbpasswd形式 → ldapsam形式~
pdbedit -i smbpasswd:<ファイル名> -e ldapsam:<LDAPサーバー>
[root@rocky9-samba31 passdb_backup]#
[root@rocky9-samba31 passdb_backup]# pdbedit -i smbpasswd:/root/passdb_backup/passdb.smbpasswd -e ldapsam:ldap://192.168.56.21
Importing account for user01...ok
Importing account for user02...ok
Importing account for user03...ok
[root@rocky9-samba31 passdb_backup]#
(補足)
pdbedit -i でファイル名の指定を省略するとpassdbファイルが格納されている$PRIVATE_DIRのファイルが読み込まれる。
pdbedit -eでファイル名の指定を省略するとpassdbファイルが格納されている$PRIVATE_DIRに書き出される。
SambaとLDAPを統合する
Sambaのユーザーデータベースをldapsamにすることで、ユーザー認証についてLDAPと統合が可能です。
~LDAP関連の設定~
LDAPと統合するための設定はsmb.confの[grobal]セクションで定義する。
ldap admin dn =
LDAPから情報を取得するためのアカウントを定義する。ldap suffix =
LDAPから情報を取得する際の起点となるDNを指定する。ldap user suffix =
ユーザー情報を取得する際の起点となるDNをldap suffixからの相対パスで指定する。ldap group suffix =
グループアカウント情報を取得する際の起点となるDNをldap suffixからの相対パスで指定する。ldap machine suffix =
コンピューターアカウント情報を取得する際の起点となるDNをldap suffixからの相対パスで指定する。ldap passwd sync(ldap password sync) = no
LDAPではSambaユーザーのパスワードとLinuxユーザーのパスワードは別々に格納されているので、Sambaユーザーのパスワード変更操作でLinuxユーザーのパスワードを同時に変更するかを設定する。
- yes:SambaユーザーとLinuxユーザーを変更する
- No:Sambaユーザーのみ変更する
- Only:Linuxユーザーのみ変更するldap delete dn = No
LDAP上のSambaユーザーが削除された場合、Samba関連の属性(アトリビュート)だけ削除するか、それ以外の属性も同時に削除するかどうかを設定する。
Yesとすると削除されたユーザーのSamba属性もその他の属性も削除される。
~LDAPと統合する方法~
LDAPサーバーを構築する。
LDAPサーバーにSambaのスキーマを登録する。
Sambaサーバーにsmblcap-toolをインストールする。
(別記事 Appendix (準備その5)smbldap-toolsをインストールする 参照)Sambaサーバーでsmbldap-configやsmbldap-populateコマンドを実行し、LDAP統合の準備をする。
Sambaサーバーでpdbeditコマンドを使って既存のSambaユーザーをLDAPサーバーに登録する。
Sambaのpassdb backendをldapsamに変更する。
SambaサーバーのLinuxユーザーの認証設定をLDAPサーバーを参照するように変更する。
RHEL7系だとauthconfig、RHEL8,9系だとauthselectを使う。
ここまで設定ができると、smbldap-tools(smbldap-groupadd、smbldap-useradd、smbldap-passwdなど)でユーザーの追加/削除操作をすると、LDAPサーバーに反映され、Sambaの共有リソースにアクセスが可能になり、なおかつLinuxユーザーを作る手間がなくなる。
=宣伝=
私の書いたKindle本に詳しく書かれているので参考にどうぞ
Winbindを設定する
~Winbindとは~
Windowsドメイン(ActiveDirectoryドメイン)のユーザーデータベースを使ってSambaサーバーにアクセスできるように認証を統合する仕組みのこと 。
~WindowsのActiveDirectoryドメインと構築する~
WinbindはWindowsのActiveDirectoryにあるユーザー情報でログインできるようにする仕組みなので、ActiveDirectoryでドメインを構築しておく必要がある。
(補足)
本記事執筆時点では評価版WindowsServer2022を使用しています。
Samba3のSambaサーバーをドメインに参加させるにはWindowsServer側で "役割と機能の追加" で「SMB 1.0/CIFS ファイル共有サポート」を追加しておく必要がある。
Sambaサーバー側はmax protocolのパラメータを規定値(NT1) とする。SMB2が設定可能だがADドメインに参加できなかった。
~SambaサーバーをActiveDirectoryドメインに参加させる~
smbは一旦停止させ、Sambaサーバーが参照するDNSサーバーをWindowsServerのアドレスに変更してから、net ads joinコマンドでドメインに参加する。
本記事では、WindowsServerのIPアドレスは192.168.56.91としている。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl stop smb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /etc/resolv.conf
nameserver 192.168.56.91
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net ads join -U Administrator
Enter Administrator's password: ********
Using short domain name -- EXAMPLE
Joined 'ROCKY9-SAMBA31' to dns domain 'example.local'
No DNS domain configured for rocky9-samba31. Unable to perform DNS Update.
DNS update failed!
[root@rocky9-samba31 ~]#
Smabaの設定を変更してsmbを起動する。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /usr/local/samba/lib/smb.conf
:
[global]
:
workgroup = EXAMPLE <--- ActiveDirectoryのNetBIOSドメイン名にする
realm = EXAMPLE.LOCAL <--- ActiveDirectoryのドメイン名にする
security = ADS <--- USER から ADS にする
idmap config * : backend = tdb <--- 追加する
idmap config * : range = 10000-19999 <--- 追加する
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl start smb
[root@rocky9-samba31 ~]#
idmapはWindowsシステムでユーザーに割り当てられるSIDと、Linuxシステムでユーザーに割り当てられるUID,GIDをマッピング(対応付け)する機構です。
idmap config * : backend = tdb
( * )でドメイン名を指定できるので、ドメインごとにバックエンドデータベースの種類を変えることができる。
tdb, tdb2, ldap, rid, hash, autorid, ad, adexが指定可能。idmap config * : range = 10000-19999
( * )でドメイン名を指定できるので、ドメインごとにUID/GIDのレンジを変えることができるidmap uid(winbind uid)=
idmap 設定の ユーザーID(uid) の範囲を指定する。
idmap configで設定可能なので廃止予定idmap uid(winbind uid)=
idmap 設定の グループID(gid) の範囲を指定する。
idmap configで設定可能なので廃止予定
~必要なライブラリを準備する~
Samba3のマニュアルを参考にlibnss_winbind.soをとpam_winbind.soを準備します。
libnss_winbind.so:
Samba3のソースに含まれているので、それを/lib64にコピーする。
また、libnss_winbind.so.2へのシンボリックリンクも設定する。
★ Sambaのインストールディレクトリからライブラリを探す ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# find ./samba-3.6.25 -type f -name "libnss_winbind.so"
samba-3.6.25/nsswitch/libnss_winbind.so
[root@rocky9-samba31 ~]#
★ ファイルをコピーする ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cp samba-3.6.25/nsswitch/libnss_winbind.so /lib64/
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /lib64/libnss_winbind.so
lrwxrwxrwx 1 root root 38 7月 2 00:50 /lib64/libnss_winbind.so
[root@rocky9-samba31 ~]#
★ シンボリックリンクを設定する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ln -s /lib64/libnss_winbind.so /lib64/libnss_winbind.so.2
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /lib64/libnss_winbind*
lrwxrwxrwx 1 root root 38 7月 2 00:50 /lib64/libnss_winbind.so
lrwxrwxrwx 1 root root 24 7月 2 00:52 /lib64/libnss_winbind.so.2 -> /lib64/libnss_winbind.so
[root@rocky9-samba31 ~]#
★ ライブラリを読み込む ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ldconfig
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ldconfig -p | grep winbind
libnss_winbind.so.2 (libc6,x86-64) => /lib64/libnss_winbind.so.2
[root@rocky9-samba31 ~]#
pam_winbind.so:
ActiveDirectoryを参照する認証モジュール
Samba3のソースに含まれているので、それを/lib64/securityにコピーする。
★ Sambaのインストールディレクトリからライブラリを探す ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# find ./samba-3.6.25/ -type f -name "pam_winbind.so"
./samba-3.6.25/source3/bin/pam_winbind.so
[root@rocky9-samba31 ~]#
★ ファイルをコピーする ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cp ./samba-3.6.25/source3/bin/pam_winbind.so /lib64/security
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /lib64/security/pam_winbind.so
lrwxrwxrwx 1 root root 44 7月 2 00:21 /lib64/security/pam_winbind.so
[root@rocky9-samba31 ~]#
pam_smbpass.so:
Sambaパスワードファイル(smbpasswd)を参照する認証モジュール。
Samba3のソースに含まれているので、それを/lib64/securityにコピーする。
※Winbind機能を確認するだけであれば必要ないが試験範囲に含まれているので参考までに※
★ Sambaのインストールディレクトリからライブラリを探す ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# find ./samba-3.6.25/ -type f -name "pam_smbpass.so"
/usr/local/samba/lib/security/pam_smbpass.so
[root@rocky9-samba31 ~]#
★ シンボリックリンクを設定する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cp ./samba-3.6.25/source3/bin/pam_smbpass.so /lib64/security
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /lib64/security/pam_smbpass.so
lrwxrwxrwx 1 root root 44 7月 2 00:21 /lib64/security/pam_smbpass.so
[root@rocky9-samba31 ~]#
~/etc/nsswitch.confを編集する~
passwdとgroupにwinbindを追加する。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /etc/nsswitch.conf
:
passwd: sss files winbind <--- winindを追加
:
group: sss files winbind <--- winindを追加
:
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
~winbinddを起動する~
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl start winbind
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl status winbind
● winbind.service - SYSV: Starts and stops the Samba winbind daemon
Loaded: loaded (/etc/rc.d/init.d/winbind; generated)
Drop-In: /run/systemd/system/service.d
mqzzz-lxc-service.conf
Active: active (running) since Sat 2023-07-01 01:11:08 JST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 578 ExecStart=/etc/rc.d/init.d/winbind start (code=exited, status=>
Main PID: 583 (winbindd)
Tasks: 2 (limit: 24308)
Memory: 3.5M
CGroup: /system.slice/winbind.service
tq583 /usr/local/samba/sbin/winbindd -D
mq585 /usr/local/samba/sbin/winbindd -D
7月 01 01:11:08 rocky9-samba31 systemd[1]: Starting SYSV: Starts and stops the>
7月 01 01:11:08 rocky9-samba31 winbind[578]: Starting Winbind services:
7月 01 01:11:08 rocky9-samba31 winbindd[583]: [2023/07/01 01:11:08.302299, 0]>
7月 01 01:11:08 rocky9-samba31 systemd[1]: Started SYSV: Starts and stops the >
7月 01 01:11:08 rocky9-samba31 winbindd[583]: initialize_winbindd_cache: cle>
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl enable winbind
winbind.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable winbind
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl is-enabled winbind
winbind.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install is-enabled winbind
enabled
[root@rocky9-samba31 ~]#
~wbinfoコマンド~
-t, --check-secret
ActiveDirectoryドメインに参加できていることがわかる
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# wbinfo -t
checking the trust secret for domain EXAMPLE via RPC calls succeeded
[root@rocky9-samba31 ~]#
-p, --ping
Winbinddと通信できることがわかる
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# wbinfo -p
Ping to winbindd succeeded
[root@rocky9-samba31 ~]#
-P, --ping-dc
ActiveDirectoryドメインと通信できることがわかる
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# wbinfo -P
checking the NETLOGON for domain[EXAMPLE] dc connection to "WINSV2022-01.example.local" succeeded
[root@rocky9-samba31 ~]#
-u, --domain-users
SambaユーザーとActiveDirectoryユーザーが取得できる
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# wbinfo -u
ROCKY9-SAMBA31\user01 ---┐
ROCKY9-SAMBA31\user00 │ Sambaサーバー上のユーザー
ROCKY9-SAMBA31\user02 │
ROCKY9-SAMBA31\user03 ---┘
EXAMPLE\administrator ---┐
EXAMPLE\guest │
EXAMPLE\krbtgt │
EXAMPLE\winuser00 │ ActiveDirectory上のユーザー
EXAMPLE\winuser01 │
EXAMPLE\winuser02 │
EXAMPLE\winuser03 ---┘
[root@rocky9-samba31 ~]#
-g, --domain-groups
SambaユーザーとActiveDirectoryグループが取得できる
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# wbinfo -g
EXAMPLE\access-denied assistance users
EXAMPLE\domain computers
EXAMPLE\domain controllers
EXAMPLE\schema admins
EXAMPLE\enterprise admins
EXAMPLE\cert publishers
EXAMPLE\domain admins
EXAMPLE\domain users
EXAMPLE\domain guests
EXAMPLE\group policy creator owners
EXAMPLE\ras and ias servers
EXAMPLE\allowed rodc password replication group
EXAMPLE\denied rodc password replication group
EXAMPLE\read-only domain controllers
EXAMPLE\enterprise read-only domain controllers
EXAMPLE\cloneable domain controllers
EXAMPLE\protected users
EXAMPLE\key admins
EXAMPLE\enterprise key admins
EXAMPLE\dnsadmins
EXAMPLE\dnsupdateproxy
EXAMPLE\wingroup00 <--- 検証用に追加したグループ
[root@rocky9-samba41 ~]#
~getentコマンド~
nsswitch.confで設定されたユーザーデータベースから情報を取得することができる。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getent passwd 'EXAMPLE\administrator'
EXAMPLE\administrator:*:10002:10006:Administrator:/home/EXAMPLE/administrator:/bin/false
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getent passwd 'EXAMPLE\winuser00'
EXAMPLE\winuser00:*:10000:10006:Windows user00:/home/EXAMPLE/winuser00:/bin/false
[root@rocky9-samba31 ~]#
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# getent group 'EXAMPLE\wingroup00'
EXAMPLE\wingroup00:x:10001:
[root@rocky9-samba41 ~]#
~idコマンド~
ActiveDirectoryユーザー(ドメイン名\ユーザー名)はLinuxユーザーとして作成していないが、idコマンドで確認できる。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# id 'EXAMPLE\administrator'
uid=10002(EXAMPLE\administrator) gid=10006(EXAMPLE\domain users) groups=10006(EXAMPLE\domain users),10008(EXAMPLE\denied rodc password replication group),10009(EXAMPLE\enterprise admins),10010(EXAMPLE\schema admins),10011(EXAMPLE\group policy creator owners),10012(EXAMPLE\domain admins),10001(BUILTIN\users),10000(BUILTIN\administrators)
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# id 'EXAMPLE\winuser00'
uid=10000(EXAMPLE\winuser00) gid=10006(EXAMPLE\domain users) groups=10006(EXAMPLE\domain users),10007(EXAMPLE\wingroup00),10001(BUILTIN\users)
[root@rocky9-samba31 ~]#
~WindowsクライアントからSambaサーバーにアクセスする~
WindowsクライアントからSambaサーバーのファイル共有にアクセスする。
ユーザー名とパスワードの入力を求められるので、ユーザ名はドメイン名\ユーザー名(例 EXAMPLE\winuser00)とし、パスワードはActiveDirectoryにユーザーを追加したときに設定したパスワードを入力するとファイル共有にアクセスができる。
ただし、Winbindはユーザー情報についてActiveDirectoryのユーザー情報を参照するだけで、Sambaサーバー上にホームディレクトリは作成されない。
後述する/etc/pam.d/sambaでpam_winbind.soのmkhomedirの機能を有効化しsmb.confの[global]セクションでobey pam restrictions = Yesとすることでホームディレクトリが自動で生成されるようになる。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1
合計 5
-rw-r--r-- 1 root root 0 6月 5 22:47 samba31-test01.txt
-rw-r--r-- 1 root root 0 6月 5 22:47 samba31-test02.txt
-rw-r--r-- 1 root root 0 6月 5 22:47 samba31-test03.txt
-rw-r--r-- 1 user00 user00 0 6月 5 23:03 samba41-test02.txt
-rwxr--r-- 1 EXAMPLE\winuser00 EXAMPLE\domain users 0 7月 1 21:08 windows10-example-winuser00.txt
-rw-r--r-- 1 user00 user00 80 6月 11 23:19 windows10-user00.txt
-rw-r--r-- 1 user00 user00 0 6月 12 01:19 windows10-user00a.txt
-rw-r--r-- 1 user01 user01 38 6月 11 23:13 windows10-user01.txt
-rw-r--r-- 1 user02 user02 17 6月 11 23:05 windows10-user02.txt
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbstatus
Samba version 3.6.25
PID Username Group Machine
-------------------------------------------------------------------
190 EXAMPLE\winuser00 EXAMPLE\domain users ********** (192.168.56.1)
Service pid machine Connected at
-------------------------------------------------------
IPC$ 190 ********** Sat Jul 1 19:51:11 2023
share1 190 ********** Sat Jul 1 21:08:14 2023
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
190 10000 DENY_NONE 0x81 RDONLY NONE /var/samba_share/share1 . Sat Jul 1 21:09:42 2023
190 10000 DENY_NONE 0x81 RDONLY NONE /var/samba_share/share1 . Sat Jul 1 21:09:42 2023
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -ld /home/EXAMPLE/winuser00/
drwx------ 2 EXAMPLE\winuser00 EXAMPLE\domain users 2 7月 2 00:28 /home/EXAMPLE/winuser00/
[root@rocky9-samba31 ~]#
PAMおよびNSSの設定
~PAM(Pluggable Authentication Modules)~
アプリケーションごとにどのような認証を用いるかをコントロールする仕組みで、設定ファイルは/etc/pam.d/以下にある。
Sambaの認証をPAMで設定するには/etc/pam.d/sambaというファイル作成しPAMの設定をする必要があるが、RockyLinux9では当該ファイルは存在していないので新規で作成する必要がある。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /etc/pam.d/samba
auth required pam_nologin.so
auth include password-auth
account include password-auth
session include password-auth
password include password-auth
session optional pam_winbind.so mkhomedir <--- ホームディレクトリを自動生成する設定。
[root@rocky9-samba31 ~]#
/etc/pam.d/sambaでincludeしているpassword-authの設定。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /etc/pam.d/password-auth
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so nullok
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_usertype.so issystem
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so local_users_only
password sufficient pam_unix.so sha512 shadow nullok use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
[root@rocky9-samba31 ~]#
pam_xxx.soというライブラリは/lib64/security/配下に格納する。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls /lib64/security/
pam_access.so pam_issue.so pam_pwquality.so pam_time.so
pam_cap.so pam_keyinit.so pam_rhosts.so pam_timestamp.so
pam_chroot.so pam_lastlog.so pam_rootok.so pam_tty_audit.so
pam_console.so pam_limits.so pam_securetty.so pam_umask.so
pam_debug.so pam_listfile.so pam_selinux.so pam_unix.so
pam_deny.so pam_localuser.so pam_selinux_permit.so pam_unix_acct.so
pam_echo.so pam_loginuid.so pam_sepermit.so pam_unix_auth.so
pam_env.so pam_mail.so pam_setquota.so pam_unix_passwd.so
pam_exec.so pam_mkhomedir.so pam_shells.so pam_unix_session.so
pam_faildelay.so pam_motd.so pam_smbpass.so pam_userdb.so
pam_faillock.so pam_namespace.so pam_sss.so pam_usertype.so
pam_filter pam_nologin.so pam_sss_gss.so pam_warn.so
pam_filter.so pam_permit.so pam_stress.so pam_wheel.so
pam_ftp.so pam_postgresok.so pam_succeed_if.so pam_winbind.so
pam_group.so pam_pwhistory.so pam_systemd.so pam_xauth.so
[root@rocky9-samba31 ~]#
(補足)
RHEL7では、PAMの設定ファイルを編集するのではなくauthconfigで設定する
RHEL8,9では、PAMの設定ファイルを編集するのではなくauthselectやsssctlで設定する
第1章 authselect でユーザー認証の設定 Red Hat Enterprise Linux 9 | Red Hat Customer Portal
~NSS(Name Service Switch)~
認証情報の参照先をコントロールする仕組み。
設定ファイルは/etc/nsswitch.confで、前述の「wibindの設定」で/etc/nsswitch.confのpasswdとgroupの行にwinbindを追記している。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /etc/nsswitch.conf
:
passwd: sss files winbind <--- winbindを追記
shadow: files
group: sss files winbind <--- winbindを追記
hosts: files dns myhostname
services: files sss
netgroup: sss
automount: files sss
aliases: files
ethers: files
gshadow: files
# Allow initgroups to default to the setting for group.
# initgroups: files
networks: files dns
protocols: files
publickey: files
rpc: files
[root@rocky9-samba31 ~]#
(補足)
RHEL8,9では、/etc/nsswitch.confを編集するのではなく/etc/authselect/user-nsswitch.confauthselectで設定する
1.3. 既製の authselect プロファイルの変更 Red Hat Enterprise Linux 9 | Red Hat Customer Portal
(補足)SSSD(System Security Services Daemon)
第2章 SSSD とその利点について Red Hat Enterprise Linux 8 | Red Hat Customer Portal
執筆するための検証環境はRockyLinux9ですが、systemctl status smbで状態を確認すると「PAM unable to dlopen(/usr/lib64/security/pam_sss.so): /usr/lib64/security/pam_sss.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません」というエラーが表示される。
これを解消するためにsssdのパッケージをインストールしました。
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# dnf install -y sssd
[root@rocky9-samba31 ~]#
参考文献
この記事が気に入ったらサポートをしてみませんか?