#author("2022-11-12T14:55:18+00:00","default:sysosa","sysosa")
#author("2022-11-12T16:56:15+00:00","default:sysosa","sysosa")
計算機の認証先にLDAPを採用した. っでアカウントのパスワード変更は passwd で行える

ただし、この場合 Posix側の変更であってsamba側にはその変更は届かない. 計算機にsshログインする際のパスワードは変更されたが、
同じLDAPを認証先として構築した smb サーバで要求されるpasswdは変更されない...

ならどうするか?

windowsOSであれば一応変更できる. 結構トリッキーだけど.

求めたいのは一つのコマンドで Posix側もsmb側も一緒にパスワード更新されてほしいツール.

っでLDAPとsambaを連携させるパッケージ「smbldap-tools」(User and group administration tools for Samba/OpenLDAP)を導入してみた

***修正 [#k2a2db4a]
LDAPを一部修正します. 修正箇所は「dn: olcDatabase={2}hdb,cn=config」にて「olcAccess」です.
こちらはLDAP構築時に「ldap/ldapdomain.ldif」にて

#code(nonumber){{
[root@ldap-server ~]# cat ldap/ldapdomain.ldif
 :
 :
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=sybyl,dc=local" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=sybyl,dc=local" write by * read
[root@ldap-server ~]#
}}

と定義されていた.

修正部分のldifを作って対応してみたが、どうもうまくいかない.
なのでldapviで直接修正してみる.

#code(nonumber){{
[root@ldap-server ~]# dnf install epel-release
[root@ldap-server ~]# dnf install ldapvi

[root@ldap-server ~]# ldapvi -Y EXTERNAL -h ldapi:/// -b olcDatabase={2}mdb,cn=config
}}

編集箇所は下記になります
#code(nonumber){{
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=sybyl,dc=local" write by anonymous auth by self write by * none

これを下記にする(一行です)

olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
  by dn="cn=Manager,dc=sybyl,dc=local" write by anonymous auth by self write by * none

}}
修正して保存すると即座に反映されます


***smbldap-passwd インストール [#te50b5c6]

#code(nonumber){{
[root@ldap-smb ~]# yum install epel-release
[root@ldap-smb ~]# yum install smbldap-tools
[root@ldap-smb ~]# curl -O http://repo.iotti.biz/CentOS/8/noarch/smbldap-tools-0.9.11-17.el8.lux.noarch.rpm
[root@ldap-smb ~]# dnf install epel-release -y
[root@ldap-smb ~]# dnf localinstall smbldap-tools-0.9.11-17.el8.lux.noarch.rpm -y
}}

まずは設定. 「smbldap-config」を実行します. 色々問われるが基本リターンでOK. パスワード入力さえできればOK.

#code(nonumber){{
[root@ldap-smb ~]# smbldap-config
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
       smbldap-tools script configuration
       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
 . if your samba controller is up and running.
 . if the domain SID is defined (you can get it with the 'net getlocalsid')

 . you can leave the configuration using the Ctrl-c key combination
 . empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Looking for configuration files...

Samba Configuration File Path [/etc/samba/smb.conf] >

The default directory in which the smbldap configuration files are stored is shown.
If you need to change this, enter the full directory path, then press enter to continue.
Smbldap-tools Configuration Directory Path [/etc/smbldap-tools] >
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Let's start configuring the smbldap-tools scripts ...

. workgroup name: name of the domain Samba acts as a PDC for
  workgroup name [SAMBA] >
. netbios name: netbios name of the samba controller
  netbios name [] >
. logon drive: local path to which the home directory will be connected (for NT Workstations). Ex: 'H:'
  logon drive [] >
. logon home: home directory location (for Win95/98 or NT Workstation).
  (use %U as username) Ex:'\\\%U'
  logon home (press the "." character if you don't want homeDirectory) [\\\%U] >
. logon path: directory where roaming profiles are stored. Ex:'\\\profiles\%U'
  logon path (press the "." character if you don't want roaming profiles) [\\\profiles\%U] >
. home directory prefix (use %U as username) [/home/%U] >
. default users' homeDirectory mode [700] >
. default user netlogon script (use %U as username) [] >
. default password validation time (time in days) [45] >
. ldap suffix [dc=sybyl,dc=local] >
. ldap group suffix [ou=Group] >
. ldap user suffix [ou=People] >
. ldap machine suffix [] >
. Idmap suffix [ou=Idmap] >
. sambaUnixIdPooldn: object where you want to store the next uidNumber
  and gidNumber available for new users and groups
  sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=SAMBA] >
. ldap master server: IP address or DNS name of the master (writable) ldap server
  ldap master server [192.168.0.81] >
. ldap master port [389] >
. ldap master bind dn [cn=Manager,dc=sybyl,dc=local] >
. ldap master bind password [] >
. ldap slave server: IP address or DNS name of the slave ldap server: can also be the master one
  ldap slave server [192.168.0.81] >
. ldap slave port [389] >
. ldap slave bind dn [cn=Manager,dc=sybyl,dc=local] >
. ldap slave bind password [] >
. ldap tls support (1/0) [0] >
. SID for domain SAMBA: SID of the domain (can be obtained with 'net getlocalsid ')
  SID for domain SAMBA [S-1-5-21-4253967948-352593788-3218593100] >
. unix password hash: hash used for unix passwords
  If set to "exop", use LDAPv3 Password Modify (RFC 3062) extended operation.
  unix password hash (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT) [SSHA] >
. default user gidNumber [513] >
. default computer gidNumber [515] >
. default login shell [/bin/bash] >
. default skeleton directory [/etc/skel] >
. default domain name to append to mail address [] >
. treat shadowAccount object or not (1/0) [1] >
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
backup old configuration files:
  /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old
  /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old
writing new configuration file:
  /etc/smbldap-tools/smbldap.conf done.
  /etc/smbldap-tools/smbldap_bind.conf done.

[root@ldap-smb ~]#
}}
これによって作られるファイルは「/etc/smbldap-tools/smbldap.conf」と「/etc/smbldap-tools/smbldap_bind.conf」の2つ. 中身はこんな感じになる
#code(nonumber){{
[root@ldap-smb ~]# grep -v -e '^\s*#' -e '^\s*$' /etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-4253967948-352593788-3218593100"
sambaDomain="SAMBA"
slaveLDAP="192.168.0.81"
slavePort="389"
masterLDAP="192.168.0.81"
masterPort="389"
ldapTLS="0"
verify=""
cafile=""
clientcert=""
clientkey=""
suffix="dc=sybyl,dc=local"
usersdn="ou=People,${suffix}"
computersdn=",${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=SAMBA,${suffix}"
scope="sub"
password_hash="SSHA"
password_crypt_salt_format=""
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
shadowAccount="1"
defaultMaxPasswordAge="45"
userSmbHome="\\\%U"
userProfile="\\\profiles\%U"
userHomeDrive=""
userScript=""
mailDomain=""
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

[root@ldap-smb ~]# grep -v -e '^\s*#' -e '^\s*$' /etc/smbldap-tools/smbldap_bind.conf
slaveDN="cn=Manager,dc=sybyl,dc=local"
slavePw="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"       <-- "cn=Manager,dc=sybyl,dc=local"のパスワード(平文)
masterDN="cn=Manager,dc=sybyl,dc=local"
masterPw="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"      <-- "cn=Manager,dc=sybyl,dc=local"のパスワード(平文)

[root@ldap-smb ~]#
}}

これで準備は完了

***つかってみる [#a7f0ced9]
ここではパスワードを変更して、それがPosixもsmbも同時に変更する事を狙っている
#code(nonumber){{
[foo@ldap-smb ~]$ smbldap-passwd -h
(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
[foo@ldap-smb ~]$

[foo@ldap-smb ~]$ smbldap-passwd
Identity validation...
Enter your UNIX password:                   <-- これまでのパスワード
Changing UNIX and samba passwords for foo
New password:                               <-- これからのパスワード
Retype new password:
[foo@ldap-smb ~]$
}}
これで両方同時にパスワードが変更された.



***smb共有を提供していないサイトでも使いたい [#cb7de8df]


上記は ldap を参照しているclientマシンで、かつそこでsmbをサービス展開しているサイトである.
ではsmbを提供せず、 ldap 参照clientマシンの場合は?

前段の「smbldap-config」の内容から「smbpasswd」コマンドと「slappasswd」コマンドが必要らしい
なので、この2つを含むパッケージをまずは入れてみる
#code(nonumber){{
[root@ldap-client ~]# yum install samba-common-tools
[root@ldap-client ~]# yum install openldap-servers
}}
そして本題の「smbldap-tools」
#code(nonumber){{
[root@ldap-client ~]# yum install epel-release
[root@ldap-client ~]# yum install smbldap-tools
}}

次にsmbldap-toolsの設定で「smbldap-config」を実行すると
#code(nonumber){{
[root@ldap-client ~]# smbldap-config
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
       smbldap-tools script configuration
       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
 . if your samba controller is up and running.
 . if the domain SID is defined (you can get it with the 'net getlocalsid')

 . you can leave the configuration using the Ctrl-c key combination
 . empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Samba needs to be started first !

[root@ldap-client ~]# 
}}
と言われる. smbデーモンの起動が必要なようで、そうなると/etc/samba/smb.confの調整も必要となる.
「/etc/samba/smb.conf」はsmbサービスを提供している所から参照して作る
#code(nonumber){{
[root@ldap-client ~]# cat /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
[root@ldap-client ~]#
}}
smb共有をする必要はないので、[global]設定のみかな. 「ldap admin dn」の定義があるので「cn=Manager,dc=sybyl,dc=local」のパスワードをsecrets.tdbに格納させる

#code(nonumber){{
[root@ldap-client ~]# smbpasswd -W
Setting stored password for "cn=Manager,dc=sybyl,dc=local" in secrets.tdb
New SMB password:
Retype new SMB password:

[root@ldap-client ~]#
}}

その後にsmbデーモンを稼働させ、再度「smbldap-config」を実行する
#code(nonumber){{
[root@ldap-client ~]# systemctl start smb
[root@ldap-client ~]# smbldap-config
}}
「smbldap-config」は特段何も修正せず、リターンキーで応答. ldapのパスワードのみ入力作業となります.

その後、一般ユーザでパスワード変更が可能になる
&color(red){*};「smbldap-config」が完了したらsmbデーモンは停止してもいいみたい. 「systemctl stop smb」


#code(nonumber){{
[foo@ldap-client ~]$ smbldap-passwd
Identity validation...
Enter your UNIX password:
Changing UNIX and samba passwords for foo
New password:
Retype new password:

[foo@ldap-client ~]$
}}
これでLDAPのみ参照のノードでもsshログインパスワードとsmb共有パスワードが変更される.

rootユーザのパスワード変更には使えないけど一般ユーザのpasswd へlinkを張ってもいい感じかな.
#code(nonumber){{
[root@c ~]# vi /etc/modulefiles/smbldap-passwd
#%Module1.0

set-alias passwd /usr/sbin/smbldap-passwd

[root@c ~]#
}}

とするとか.
1

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