LDAP/smbにてLDAP配下のsmbサイト1台でsmb共有を作ってみた.
次に、smbサイトが複数存在する場合を検討してみる.
smbなのでsmbへのアクセスにはユーザ情報が必要. それがないと読み書きでないですから.
ここでは「authselect - sssd」形式でldap-serverに繋げます
LDAP/Clientを参照
[root@ldap-smb02 ~]# dnf -y install openldap-clients sssd-ldap oddjob-mkhomedir
[root@ldap-smb02 ~]# echo "TLS_REQCERT never" >> /etc/openldap/ldap.conf
(接続確認)
[root@ldap-smb02 ~]# ldapsearch -x -H ldaps://ldap-server -b dc=sybyl,dc=local
[root@ldap-smb02 ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = default
[nss]
[domain/default]
id_provider = ldap
ldap_uri = ldaps://ldap-server/
ldap_search_base = dc=sybyl,dc=local
ldap_id_use_start_tls = True
ldap_tls_reqcert = never
[root@ldap-smb02 ~]# chmod 600 /etc/sssd/sssd.conf
[root@ldap-smb02 ~]# authselect select sssd with-mkhomedir --force
[root@ldap-smb02 ~]# systemctl enable --now oddjobd.service
[root@ldap-smb02 ~]# authselect current
Profile ID: sssd
Enabled features:
- with-mkhomedir
[root@ldap-smb02 ~]#
[root@ldap-smb02 ~]# systemctl restart sssd
[root@ldap-smb02 ~]# id saber
uid=3001(saber) gid=2001(xray) groups=2001(xray)
[root@ldap-smb02 ~]#
[root@ldap-smb02 ~]# dnf -y install samba
[root@ldap-smb02 ~]# 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-smb02 ~]#
次に、「cn=Manager,dc=sybyl,dc=local」のパスワードを登録します
[root@ldap-smb02 ~]# smbpasswd -W
Setting stored password for "cn=Manager,dc=sybyl,dc=local" in secrets.tdb
New SMB password:
Retype new SMB password:
[root@ldap-smb02 ~]# systemctl enable smb --now
[root@ldap-smb02 ~]#
smbが起動するとともに登録した「cn=Manager,dc=sybyl,dc=local」を経由してldap-serverに「sambaDomainName=LDAP-SMB02」が追加される
あとfirewall,SELinuxも同じように設定しておく
参照LDAP/smb
っでここでコマンド「pdbedit」らを使ってldap-serverと通信してみると smb.confのlog levelで表示が変更されるの留意
[root@ldap-smb02 ~]# pdbedit -L
sid S-1-5-21-1996916613-3451273948-1131555374-7000 does not belong to our domain
sid S-1-5-21-1996916613-3451273948-1131555374-1001 does not belong to our domain
sid S-1-5-21-1996916613-3451273948-1131555374-500 does not belong to our domain
sid S-1-5-21-1996916613-3451273948-1131555374-501 does not belong to our domain
[root@ldap-smb02 ~]#
「ldap-smb02」ではアカウント情報が引けていない様子. UNIX側はLDAPで繋いでいるので大丈夫. 単にsmbで使用するアカウント情報が正しく引けていない
ちなみに「ldap-smb01」では下記のようになっている
[root@ldap-smb01 ~]# pdbedit -L
foo:3000:foo sybyl
saber:3001:sybyl saber
root:0:root
nobody:65534:Kernel Overflow User
[root@ldap-smb01 ~]#
この違いが生じるのは単に双方のSIDが異なるためです。
[root@ldap-smb02 ~]# net getlocalsid
SID for domain LDAP-SMB02 is: S-1-5-21-1668299948-3883773732-2779791569
[root@ldap-smb02 ~]#
[root@ldap-smb01 ~]# net getlocalsid
SID for domain LDAP-SMB01 is: S-1-5-21-1996916613-3451273948-1131555374
[root@ldap-smb01 ~]#
ldap-smb02」でユーザリストでデータを得るにはこのSIDを意図的に「ldap-smb01」と同じにする必要がある.
同じにするには「net setlocalsid」でも出来そうだが、これは不可です.
っでどうやって修正するかですが、
の2つの方法がある.
「LDAP Admin」なら「ldap-smb02」の「sambaDomainName=LDAP-SMB02」を選択して右ペインの「sambaSID」を選択. 右クリックから「Edit value...」を選択します
次に表示された「Edit value」欄で「ldap-smb01」のSIDを入力して「OK」ボタンを押下します
「ldapvi」なら「ldap-server」にて
[root@ldap-server ~]# dnf install epel-release
[root@ldap-server ~]# dnf install ldapvi
[root@ldap-server ~]# ldapvi -Y EXTERNAL -h ldapi:/// -b dc=sybyl,dc=local
:
23 sambaDomainName=LDAP-SMB02,dc=sybyl,dc=local
sambaDomainName: LDAP-SMB02
sambaSID: S-1-5-21-1668299948-3883773732-2779791569 <--- vi操作でこの部分をldap-smb01のSIDに書き換える
sambaAlgorithmicRidBase: 1000
:
[root@ldap-server ~]#
「ldapvi」による修正は修正権限が必要. rootでもLDAP内access制限に引っかかるとダメ見たい
これで ldap-smb02 でも値が取れる
[root@ldap-smb02 ~]# pdbedit -L
foo:3000:foo sybyl
saber:3001:sybyl saber
root:0:root
nobody:65534:Kernel Overflow User
[root@ldap-smb02 ~]#
最後に再度smbを再起動させておく
[root@ldap-smb02 ~]# systemctl restart smb
windows/macOSから「ldap-smb01」「ldap-smb02」にそれぞれアクセスしてみる.
当然ながら相手方に事前にsshログインして$HOMEを作っておく.
本来1つのsmbサイトで行う「smbldap-usermod」をsambaDomainNameのSID修正を行っていない別のsmbサイトで行うと....
sambaDomainNameの修正を行っていて同一のsmbサイトなら「smbldap-usermod」を行っても問題ないみたい
[root@ldap-smb03 ~]# smbldap-usermod -a illya
Warning: sambaPrimaryGroupSID could not be set beacuse group of user illya is not a mapped Domain group!
To get a list of groups mapped to Domain groups, use "net groupmap list" on a Domain member machine.
[root@ldap-smb03 ~]#
そのユーザのSIDは、修正前のsambaDomainNameのSIDを引き継いでしまうので、その新規のsmbサイトにはアクセスできるけど、
既存のsmbサイトにはアクセスできない事態が生じる.
[root@ldap-smb01 ~]# net getlocalsid
SID for domain LDAP-SMB01 is: S-1-5-21-2892536622-937567002-2422424380
[root@ldap-smb01 ~]# pdbedit -L
foo:3000:foo sybyl
illya:3001: illya
root:0:root
nobody:65534:Kernel Overflow User
saber:3002:sybyl saber
sid S-1-5-21-2724538693-461554053-2808624167-1001 does not belong to our domain
[root@ldap-smb01 ~]#
このような状態で、「sambaDomainName=LDAP-SMB03」のSIDを後から修正しても既に発行されたユーザのSIDは変更されない.
なので、LDAP内で直接そのアカウントのsambaSIDを修正する必要がある