LDAPサーバに認証を任せて smb を利用するお話
*sambaでNTドメインを作るお話ではありません

必要な事

留意点としてたとえLDAPを使ったとしてもパスワードは2つ存在する形になります
1つはログインとかに利用される「userPassword」attribute
もう一つはsmb認証のための「sambaNTPassword」attribute

LDAP/smbldap-passwdはこの2つのパスワードの統合について示しています

sambaスキーマを ldap-server に搭載する

smb機能を提供するノードには「dnf install samba」としてるだろうから
そこにある「/usr/share/doc/samba-4.10.16/LDAP/samba.ldif」をLDAPサーバに持ってくる

[root@ldap-smb01 ~]# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)
 
[root@ldap-smb01 ~]# dnf provides */samba.ldif
Last metadata expiration check: 3:16:50 ago on Fri 11 Nov 2022 08:55:23 AM JST.
samba-4.15.5-5.el8.x86_64 : Server and Client software to interoperate with Windows machines
Repo        : baseos
Matched from:
Filename    : /usr/share/doc/samba/LDAP/samba.ldif
 
samba-4.15.5-8.el8_6.x86_64 : Server and Client software to interoperate with Windows machines
Repo        : baseos
Matched from:
Filename    : /usr/share/doc/samba/LDAP/samba.ldif
 
samba-4.15.5-10.el8_6.x86_64 : Server and Client software to interoperate with Windows machines
Repo        : baseos
Matched from:
Filename    : /usr/share/doc/samba/LDAP/samba.ldif
 
 
 
[root@ldap-smb01 ~]# dnf install samba
 
[root@ldap-smb01 ~]# scp /usr/share/doc/samba/LDAP/samba.ldif root@ldap-server:

「ldap-server」にコピーしたsambaスキーマ「samba.ldif」を反映させます

[root@ldap-server ~]# ls -l samba.ldif
-rw-r--r--. 1 root root 14892 Nov 11 12:13 samba.ldif
 
[root@ldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /root/samba.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=samba,cn=schema,cn=config"
 
[root@ldap-server ~]#

確認してみます

[root@ldap-server ~]# ldapsearch -x -LLL -W -D cn=config -b cn=config dn
Enter LDAP Password:
dn: cn=config
 
dn: cn=schema,cn=config
 
dn: cn={0}core,cn=schema,cn=config
 
dn: cn={1}cosine,cn=schema,cn=config
 
dn: cn={2}nis,cn=schema,cn=config
 
dn: cn={3}inetorgperson,cn=schema,cn=config
 
dn: cn={4}samba,cn=schema,cn=config                <-- sambaスキーマ
 
dn: olcDatabase={-1}frontend,cn=config
 
dn: olcDatabase={0}config,cn=config
 
dn: olcDatabase={1}monitor,cn=config
 
dn: olcDatabase={2}hdb,cn=config
 
[root@ldap-server ~]#

smbサイトをldap配下のldapクライアントになる

LDAP/Clientを参照
smbで共有する際にアカウント情報(uid,gid,$HOME)は必要だから.

ここでは「ldap-smb01」にて「authselect - sssd」形式でldap-serverに繋げるようにします

mkhomedrがpamで有効だったとしても、smb経由のアクセスで/home/$HOMEが用意される訳ではないみたい

smbサイトを構築してsambaスキーマのsambaDomainName attributeを登録する

smbサイトを作ります.
そこにsambaパッケージをインストールします
っで設定ファイルを修正します

[root@ldap-smb01 ~]# vi /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user
 
        load printers = no
 
        passdb backend = ldapsam:ldap://192.168.0.81
        ldap suffix = dc=sybyl,dc=local
        ldap user suffix = ou=People
        ldap group suffix = ou=Group
        ldap admin dn = cn=Manager,dc=sybyl,dc=local
        ldap passwd sync = yes
        ldap ssl = off
 
[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes
 
[root@ldap-smb01 ~]#

次に、「cn=Manager,dc=sybyl,dc=local」のパスワードを登録します

[root@ldap-smb01 ~]# smbpasswd -W
Setting stored password for "cn=Manager,dc=sybyl,dc=local" in secrets.tdb
New SMB password:
Retype new SMB password:
 
[root@ldap-smb01 ~]# systemctl enable smb --now

これでsmbデーモンを起動すると自動的に ldap-server と通信して「sambaDomainName=LDAP-SMB01」が登録されます
こんな感じに
2022y11m12d_214658254.png
sambaDomainNameなのでsyblとかsmb.confの「workgroup」値かなと思ったがsmbホスト名が登録されます

firewallとか

smb共有をサービス提供するので、smbの穴を作ります

[root@ldap-smb01 ~]# firewall-cmd --add-service=samba --zone=public --permanent
[root@ldap-smb01 ~]# firewall-cmd --reload

SELinuxとか

SELinuxを有効のままにするなら、「samba_enable_home_dirs」を有効にしておく.

[root@ldap-smb ~]# getsebool samba_enable_home_dirs
samba_enable_home_dirs --> off
 
[root@ldap-smb ~]#
[root@ldap-smb ~]# setsebool -P samba_enable_home_dirs 1
[root@ldap-smb ~]# getsebool samba_enable_home_dirs
samba_enable_home_dirs --> on
 
[root@ldap-smb ~]#

もし、この設定の前にユーザのホームディレクトリがあるなら下記コマンドで書き換えが必要です

[root@ldap-smb ~]# restorecon -R /home

LDAPに登録されているユーザにsambaのattributeを登録

*これが定義されていると、smbサイトの pdbedit -L でユーザ情報が表示される



sambaのattributeを追記する方法としては下記2つの方法がある

smbldap-toolsは便利だけど、使う場所は1つのsmbサイトに留めましょう

LDAP AdminでLDAP内ユーザのsambaスキーマを更新する

LDAP/Browseで示したLDAP Adminを使います.
LDAP/data#f66670f1にてユーザを登録した直後ではこのsmbサイトにアクセスできません.
っでLDAP Adminにて当該ユーザ[foo]を選択して、右クリックから「Properties..」を選びます. ダブルクリックでも可
2022y11m12d_220021496.png
開いた「Properties of foo」にて画面下の「Account properties」から「Samba Acount」を有効にします。
すると「Properties of foo」画面の上部タブに「samba」が追加されます。
2022y11m12d_220003296.png sambaスキーマの追加をLDAP Adminが認識して出しているみたい
「samba」タブをクリックして「Domain」欄のプルダウンからsmbサイトとなる「LDAP-SMB01」を選びます。
そうて「OK」ボタンを押下して、反映させます。
2022y11m12d_220311159.png

これで元の画面に戻りますが、対象ユーザに新たなobjectClassとして「sambaSamAccount」が追加されたり、
「sambaKickoffTime」「sambaAccFlags」「sambaSID」「sambaDomainName」らが追加されます
2022y11m12d_220645783.png
ですが、samba向けのパスワード欄がなく、これではsmb共有に入れません. userPasswordはsshログインとかに使うパスワードです
ここで、再度当該ユーザ[foo]を選択して、右クリックから「Set Password...」を選びます
2021y04m03d_004012965.png

すると下記「Set Password」画面が表示され、「Posix password」「Samba password」のチェックボックスがあるようにどちらか、あるいは両方ともでパスワードの定義が行えます。
2022y11m12d_220820334.png
「OK」ボタンを押下して画面が閉じられると新たなAttribute「sambaNTPassowrd」「sambaPwdLastSet」が定義されます

2022y11m12d_221055340.png

これでユーザfooはsmbサイトにアクセスできるようになります

smbldap-tools

コマンドツールで LDAP内ユーザの sambaスキーマを有効にしてみる.
インストール先は smb が稼働するサイトです

まずはコマンドの準備.

[root@ldap-smb01 ~]# curl -O http://repo.iotti.biz/CentOS/8/noarch/smbldap-tools-0.9.11-17.el8.lux.noarch.rpm
[root@ldap-smb01 ~]# dnf install epel-release
[root@ldap-smb01 ~]# dnf localinstall smbldap-tools-0.9.11-17.el8.lux.noarch.rpm

次にその設定.

[root@ldap-smb01 ~]# smbldap-config
 :
. ldap master bind password [] >      <---- ディレクトリ管理者のパスワード   cn=Manager,dc=sybyl,dc=local
 :
. ldap slave bind password [] >       <---- 同じ
 :
[root@ldap-smb01 ~]#

「/etc/smbldap-tools/smbldap_bind.conf」と「/etc/smbldap-tools/smbldap.conf」が更新される

っで方法ですが、既にLDAPに新規のユーザがいて(ldifで登録とか)、それをLDAP Adminで確認すると下記のようになる.
2022y11m12d_222010889.png
objectClassに注目. アカウントのアイコンが緑色はposix有効なアカウントっぽい. それが青色になるとsambaに解脱したアカウントっぽい

そしてsmbサイト(ldap-smb01)にて「smbldap-usermod」コマンドでLDAP情報を更新させます

[root@ldap-smb01 ~]# smbldap-populate         <--初回のみ. 
 
[root@ldap-smb01 ~]# smbldap-usermod -a saber

この直後のLDAP Adminは下記になります
2022y11m12d_224940967.png
objectClassに「SambaSmbAccount」が追加され、ユーザアイコンの色が変わりました. 他、root,nobodyユーザ追加されます

これで「pdbedit -L」でもリストに連なるアカウントに成れました.

[root@ldap-smb01 ~]# pdbedit -L
foo:3000:foo sybyl
saber:3001:sybyl saber
root:0:root
nobody:65534:Kernel Overflow User
 
[root@ldap-smb01 ~]# pdbedit -L -v saber
Unix username:        saber
NT username:          saber
Account Flags:        [UX         ]
User SID:             S-1-5-21-1996916613-3451273948-1131555374-1001
Primary Group SID:    S-1-5-21-1996916613-3451273948-1131555374-513
Full Name:            sybyl saber
Home Directory:       \\LDAP-SMB01\saber
HomeDir Drive:
Logon Script:
Profile Path:         \\LDAP-SMB01\saber\profile
Domain:               LDAP-SMB01
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Tue, 19 Jan 2038 12:14:07 JST
Kickoff time:         Tue, 19 Jan 2038 12:14:07 JST
Password last set:    0
Password can change:  0
Password must change: 0
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@ldap-smb01 ~]#

samba向けのパスワードは初回はランダムな値が入っているので「smbldap-passwd」でパスワードを定義します
このツール「smbldap-passwd」はUNIXパスワードも同時に更新してくれます.

[root@ldap-smb01 ~]# smbldap-passwd -?
(c) Jerome Tournier - (jtournier@gmail.com)- Licensed under the GPL
Usage: /usr/sbin/smbldap-passwd [hpsuB?] [username]
  -h, -?, --help show this help message
  -p             read password from STDIN without verification (root only)
  -s             update only samba password
  -u             update only UNIX password
  -B             must change Samba password at logon
 
[root@ldap-smb01 ~]# smbldap-usershow saber      <-- なにもフラグを付けないと samba、UNIXパスワードが同時に更新されます

注意
LDAP server側でユーザのパスワード変更操作が「sambaNTPassword」も許可されるようにLDAPの設定を変更する必要があります
参照LDAP/smbldap-passwd#k2a2db4a

そうしないと下記のようにエラーが出ます.

[saber@ldap-smb01 ~]$ smbldap-passwd
Identity validation...
Enter your UNIX password:
Changing UNIX and samba passwords for saber
New password:
Retype new password:
Failed to modify SMB password: Insufficient access at /usr/sbin/smbldap-passwd line 182, <STDIN> line 3.
[saber@ldap-smb01 ~]$

メモ

*smbサイトにユーザをログインさせたくないのなら /etc/ssh/sshd_config で制限する

日々の運用

「smbldap-tools」を入れたのなら、その中にある「smbldap-useradd」とかでUNIXアカウントとsmbアカウントを調整すれば
いいのでしょうが、正直 UNIX アカウントは LDAP に直接登録して、smbが必要な方のみを「smbldap-usermod」で有効化すればいいかなと思っている.

そしてLDAP/smb-multiでも述べるが、「smbldap-usermod」の実行は1つのsmbサイトで行う事.
複数のsmbが立っていてそれぞれで「smbldap-tools」をインストールして「smbldap-usermod」を行うとそのsmbサイトしか入れないとかの問題が起こります

最新の60件
2024-05-21 2024-05-16 2024-04-26 2024-04-19 2024-04-18 2024-04-15 2024-04-11 2024-04-06 2024-04-05 2024-03-30 2024-03-29 2024-03-19 2024-03-17 2024-03-15 2024-03-06 2024-03-05 2024-03-03 2024-02-23 2024-02-22 2024-02-21 2024-02-20 2024-02-19 2024-02-18 2024-02-17 2024-02-13 2024-02-12 2024-02-09 2024-02-04 2024-02-03 2024-01-31 2024-01-30 2024-01-29 2024-01-28 2024-01-22 2024-01-16 2024-01-13 2024-01-09 2024-01-08 2024-01-07 2024-01-03 2023-12-22 2023-12-17

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-11-13 (日) 01:48:02