OpenLDAPサーバーがあり、構成したい smbk5pwd
オーバーレイにより、sambaNTPassword
で変更が発生したときにOpenLDAPがsambaLMPassword
属性とuserPassword
属性を自動的に更新します。バージョン:
slapd 2.4.23-7.3
slapd-smbk5pwd 2.4.23-7.3
モジュール
dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModuleLoad: smbk5pwd
olcModulePath: /usr/lib/ldap
モジュールはエラーなしでロードされます。オーバーレイを追加しようとすると、次のようになります。
#!RESULT ERROR
#!CONNECTION ldap://192.168.10.145:389
#!DATE 2014-03-07T09:55:49.078
#!ERROR [LDAP: error code 80 - <olcSmbK5PwdEnable> handler exited with 1]
dn: olcOverlay=smbk5pwd,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcSmbK5PwdConfig
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: smbk5pwd
olcSmbK5PwdEnable: samba
LDAPログ:
smbk5pwd: unable to find "krb5KDCEntry" objectClass.
olcSmbK5PwdEnable: value #0: <olcSmbK5PwdEnable> handler exited with 1!
次のスキーマを含めました。
cn={0}core.ldif
cn={1}cosine.ldif
cn={2}nis.ldif
cn={3}inetorgperson.ldif
cn={4}mozillaorgperson.ldif
cn={5}evolutionperson.ldif
cn={6}qmailuser.ldif
cn={7}samba.ldif
何が足りないのですか?別のモジュールまたはスキーマをロードする必要がありますか?
EDIT-見つかって含まれていますkrb5-kdc.schema
前 samba.schema
それを見つけるのにも苦労している人のためにここにあります:
# $Id: krb5-kdc.schema,v 1.1 2004-03-22 17:25:05 quanah Exp $
# Definitions for a Kerberos V KDC schema
# OID Base is iso(1) org(3) dod(6) internet(1) private(4) enterprise(1) padl(5322) kdcSchema(10)
#
# Syntaxes are under 1.3.6.1.4.1.5322.10.0
# Attributes types are under 1.3.6.1.4.1.5322.10.1
# Object classes are under 1.3.6.1.4.1.5322.10.2
# Syntax definitions
#krb5KDCFlagsSyntax SYNTAX ::= {
# WITH SYNTAX INTEGER
#-- initial(0), -- require as-req
#-- forwardable(1), -- may issue forwardable
#-- proxiable(2), -- may issue proxiable
#-- renewable(3), -- may issue renewable
#-- postdate(4), -- may issue postdatable
#-- server(5), -- may be server
#-- client(6), -- may be client
#-- invalid(7), -- entry is invalid
#-- require-preauth(8), -- must use preauth
#-- change-pw(9), -- change password service
#-- require-hwauth(10), -- must use hwauth
#-- ok-as-delegate(11), -- as in TicketFlags
#-- user-to-user(12), -- may use user-to-user auth
#-- immutable(13) -- may not be deleted
# ID { 1.3.6.1.4.1.5322.10.0.1 }
#}
#krb5PrincipalNameSyntax SYNTAX ::= {
# WITH SYNTAX OCTET STRING
#-- String representations of distinguished names as per RFC1510
# ID { 1.3.6.1.4.1.5322.10.0.2 }
#}
# Attribute type definitions
attributetype ( 1.3.6.1.4.1.5322.10.1.1
NAME 'krb5PrincipalName'
DESC 'The unparsed Kerberos principal name'
EQUALITY caseExactIA5Match
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.5322.10.1.2
NAME 'krb5KeyVersionNumber'
EQUALITY integerMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.5322.10.1.3
NAME 'krb5MaxLife'
EQUALITY integerMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.5322.10.1.4
NAME 'krb5MaxRenew'
EQUALITY integerMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.5322.10.1.5
NAME 'krb5KDCFlags'
EQUALITY integerMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.5322.10.1.6
NAME 'krb5EncryptionType'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.5322.10.1.7
NAME 'krb5ValidStart'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.5322.10.1.8
NAME 'krb5ValidEnd'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.5322.10.1.9
NAME 'krb5PasswordEnd'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
SINGLE-VALUE )
# this is temporary; keys will eventually
# be child entries or compound attributes.
attributetype ( 1.3.6.1.4.1.5322.10.1.10
NAME 'krb5Key'
DESC 'Encoded ASN1 Key as an octet string'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 )
attributetype ( 1.3.6.1.4.1.5322.10.1.11
NAME 'krb5PrincipalRealm'
DESC 'Distinguished name of krb5Realm entry'
SUP distinguishedName )
attributetype ( 1.3.6.1.4.1.5322.10.1.12
NAME 'krb5RealmName'
EQUALITY octetStringMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} )
# Object class definitions
objectclass ( 1.3.6.1.4.1.5322.10.2.1
NAME 'krb5Principal'
SUP top
AUXILIARY
MUST ( krb5PrincipalName )
MAY ( cn $ krb5PrincipalRealm ) )
objectclass ( 1.3.6.1.4.1.5322.10.2.2
NAME 'krb5KDCEntry'
SUP krb5Principal
AUXILIARY
MUST ( krb5KeyVersionNumber )
MAY ( krb5ValidStart $ krb5ValidEnd $ krb5PasswordEnd $
krb5MaxLife $ krb5MaxRenew $ krb5KDCFlags $
krb5EncryptionType $ krb5Key ) )
objectclass ( 1.3.6.1.4.1.5322.10.2.3
NAME 'krb5Realm'
SUP top
AUXILIARY
MUST ( krb5RealmName ) )
slaptest
は正常に実行され、オーバーレイを追加できましたが、userPassword
を変更しても、他の属性は変更されません。 userPassword
属性にはSHA1ハッシュが含まれています。
あなたは RFC 3062 パスワード変更拡張操作を使用する必要があります。ソースディストリビューションの README
を参照してください(マニュアルページ、AFAICTはありません)。これは、OpenLDAPのldappasswd
(さまざまな方法でパスワード値をハッシュするだけのslappasswd
とは異なります)を使用してコマンドラインから実行できます。
userPassword
は時間の経過とともに特別なセマンティクスを成長させましたが、そのいずれも意図されていませんでした(そして、仕様に厳密に準拠していません)。 「比較のみ」(認証のみ)アクセスがあるか、読み取りアクセスがないこと、およびクライアントまたはサーバーに依存する変換(たとえば、コンテンツのクライアント側またはサーバー側のハッシュ)があることは珍しいことではありません。パスワード変更は明確に定義されており、プレーンテキストのパスワードのみを受け入れ、管理者が定義したハッシュメソッドを使用できます。この拡張機能は、パスワードの抽象化レイヤーを提供します(また、パスワードストレージをディレクトリから完全に分離することもできます)。また、パスワードの複雑さを強制するためにも必要です。これは、クライアントが事前にハッシュされた値をuserPassword
に直接書き込むことを許可されている場合は実行できません。
例えば(Perl): http://search.cpan.org/~gbarr/Perl-ldap/lib/Net/LDAP/Extension/SetPassword.pm
ルートDSE(dn "")を照会することで、サポートを確認できます。
$ ldapsearch -H ldaps://myldap/ [ -D user -w password ] \
-s base -b "" "(objectclass=*)" supportedExtension
[...]
dn:
supportedExtension: 1.3.6.1.4.1.1466.20037 # STARTTLS
supportedExtension: 1.3.6.1.4.1.4203.1.11.1 # password modify
supportedExtension: 1.3.6.1.4.1.4203.1.11.3 # who am i
supportedExtension: 1.3.6.1.1.8 # cancel request