サーバー上のシェルへのアクセス、Sambaドメインへのロギング、WiFi、OpenVPN、Mantisなど(特定のサービスへのアクセスが管理されている)など、すべてのITリソースが単一のユーザーとパスワードのペアで利用できるシステムを構成しています。グループメンバーシップまたはユーザーオブジェクトフィールドによる)。ネットワークには個人データがあるため、EUデータ保護条例(またはポーランド語版)に従って、パスワードエージングを実装する必要があります。
問題は、LDAPのSambaアカウントとPOSIXアカウントが異なるパスワードハッシュとエージング情報を使用することです。パスワード自体を同期するのは簡単です(ldap password sync = Yes
in smb.conf
)、パスワードエージングをミックスに追加すると問題が発生します:SambaはshadowLastChangeを更新しません。一緒に obey pam restrictions = Yes
は、Windowsユーザーが古いパスワードを変更できないシステムを作成しますが、それを使用しないと、ホームディレクトリが自動的に作成されません。別の方法は、パスワードの変更にLDAP拡張操作を使用することですが、smbk5pwd
モジュールもそれを設定しません。さらに悪いことに、このフィールドは非推奨と見なされるため、OpenLDAPメンテナはそれを更新/パッチを受け入れません。
だから、私の質問は、最良の解決策は何ですか?それらの長所と短所は何ですか?
LDAP ppolicy
と内部LDAPパスワードエージングを使用しますか?
ppolicy
対応のLDAPで動作できる他の管理ツールはありますか?LDAPのフィールドを更新するパスワード変更スクリプトを一緒にハックします。 (ユーザー自身がパスワードを変更せずにフィールドを更新する可能性を残します)
(作業中です。後で詳細を追加します)
みなさん、朗報です!テスト環境で、多かれ少なかれすべてが機能するようになりました...:
ppolicy
、 not24get
および passwdqc
)に感謝します )smbk5pwd
のおかげで)。注:Sambaとppolicyを使用した品質チェックは明白ではありません。password check script
(pwqcheck -1
from passwdqc
)は、LDAPが実行するのと同じチェックを実行する必要があります。ユーザーは、「パスワードが簡単すぎます。別の方法を試してください」ではなく、アクセスが拒否されました。pam_mkhomedir
を使用して作成されますuid
を挿入するため、NIS(ほとんどの「UNIXy」のもの)またはRFC2307bisスキーマ(ほとんどの「AD用に設計された」アプリケーション)のいずれかを期待するアプリケーションは問題なく動作します。唯一の問題は、アカウントを無効にするにはCLIツールを使用する(またはGOsa postmodifyスクリプトを作成する)必要があることです。そうしないと、PAMとSambaの場合のみ、アカウントがLDAPレベルでロックされません。パスワードの有効期限は引き続き適用されるため、大きな問題にはなりません。
一時的なギャップとして、パスワードの変更時にshadowLastChange
を更新するSambaのスクリプトを作成しました。
#!/bin/sh
# script to update shadowLastChange when samba updates passwords
# it's not needed when using 'passwd', it does update the field,
# even if pam_ldap is using LDAP Extented Operation to change password
LDAP_MODIFY="/usr/bin/ldapmodify"
LDAP_SEARCH="/usr/bin/ldapsearch"
LDAP_USER="uid=shadow-update,ou=Services,dc=example,dc=com"
LDAP_PASSWORD="change-me"
LDAP_Host="localhost"
# get date
SLC=$((`date '+%s'` / 24 / 3600))
# get user login name
user=$1
# find user's DN
dn=$($LDAP_SEARCH -x -h $LDAP_Host -LLL -b dc=example,dc=com "(uid=$user)" dn)
dn=${dn#dn:}
# check if DN is not base64 encoded
if [ "${dn:0:1}" = ":" ]; then
# update password change date
echo "dn:$dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_Host" \
-D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
else
# update password change date
echo "dn: $dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_Host" \
-D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
fi
err=$?
if [ ! $err -eq 0 ]; then
echo "error: can't update shadowLastChange: $err"
echo "`date`: shadow.sh: can't update shadowLastChange: $err"\
>> /var/log/shadow-update.log
exit;
fi
echo OK
Samba構成では、unix password sync
をyes
に設定し、passwd chat
を*OK*
に設定し、passwd program
を上記のスクリプトに"%u"
をパラメーターとして設定する必要があります。
LDAP_USER
で指定されたアカウントは、LDAPで作成し、すべてのSambaユーザーのuid
で読み取る権限と、shadowLastChange
を書き込む権限を付与する必要があります。
EXOPパスワードの変更が発生するたびにshadowlastchange
属性を更新するために、 shadowLastChange
という独自のOpenLDAPオーバーレイを作成しました。 slapd.conf
でアクティブ化されます。
moduleload smbk5pwd
moduleload shadowlastchange
...
database bdb
...
overlay smbk5pwd
overlay shadowlastchange
EXOPを介してパスワードを変更するようにsmb.conf
を構成しました。
ldap passwd sync = Only
次に、アカウントごとに、shadowMax
をパスワードが有効な日数に設定します。 OpenLDAPモジュールが残りを処理します!
GOsa開発者の1人から回答があります。現時点では、GOsaはppolicyオーバーレイをサポートしていません。