#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 ~]# }} とするとか.