計算機の認証先にLDAPを採用した. っでアカウントのパスワード変更は passwd で行える
ただし、この場合 Posix側の変更であってsamba側にはその変更は届かない. 計算機にsshログインする際のパスワードは変更されたが、
同じLDAPを認証先として構築した smb サーバで要求されるpasswdは変更されない...
ならどうするか?
windowsOSであれば一応変更できる. 結構トリッキーだけど.
求めたいのは一つのコマンドで Posix側もsmb側も一緒にパスワード更新されてほしいツール.
っでLDAPとsambaを連携させるパッケージ「smbldap-tools」(User and group administration tools for Samba/OpenLDAP)を導入してみた
LDAPを一部修正します. 修正箇所は「dn: olcDatabase={2}hdb,cn=config」にて「olcAccess」です.
こちらはLDAP構築時に「ldap/ldapdomain.ldif」にて
[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で直接修正してみる.
[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
編集箇所は下記になります
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
修正して保存すると即座に反映されます
[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.
[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つ. 中身はこんな感じになる
[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 ~]#
これで準備は完了
ここではパスワードを変更して、それがPosixもsmbも同時に変更する事を狙っている
[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 ~]$
これで両方同時にパスワードが変更された.
上記は ldap を参照しているclientマシンで、かつそこでsmbをサービス展開しているサイトである.
ではsmbを提供せず、 ldap 参照clientマシンの場合は?
前段の「smbldap-config」の内容から「smbpasswd」コマンドと「slappasswd」コマンドが必要らしい
なので、この2つを含むパッケージをまずは入れてみる
[root@ldap-client ~]# yum install samba-common-tools
[root@ldap-client ~]# yum install openldap-servers
そして本題の「smbldap-tools」
[root@ldap-client ~]# yum install epel-release
[root@ldap-client ~]# yum install smbldap-tools
次にsmbldap-toolsの設定で「smbldap-config」を実行すると
[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サービスを提供している所から参照して作る
[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に格納させる
[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」を実行する
[root@ldap-client ~]# systemctl start smb
[root@ldap-client ~]# smbldap-config
「smbldap-config」は特段何も修正せず、リターンキーで応答. ldapのパスワードのみ入力作業となります.
その後、一般ユーザでパスワード変更が可能になる
*「smbldap-config」が完了したらsmbデーモンは停止してもいいみたい. 「systemctl stop smb」
[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を張ってもいい感じかな.
[root@c ~]# vi /etc/modulefiles/smbldap-passwd
#%Module1.0
set-alias passwd /usr/sbin/smbldap-passwd
[root@c ~]#
とするとか.