smbk5pwd overlay no OpenLDAP 2.4

3

Eu tenho um servidor OpenLDAP e quero configurar o smbk5pwd overlay para fazer o OpenLDAP atualizar os atributos sambaNTPassword e sambaLMPassword automaticamente quando ocorre uma alteração em userPassword . Versões:

slapd           2.4.23-7.3
slapd-smbk5pwd  2.4.23-7.3

module

dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModuleLoad: smbk5pwd
olcModulePath: /usr/lib/ldap

O módulo é carregado sem erros. O seguinte acontece se eu tentar adicionar a sobreposição:

#!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

log do LDAP :

smbk5pwd: unable to find "krb5KDCEntry" objectClass.
olcSmbK5PwdEnable: value #0: <olcSmbK5PwdEnable> handler exited with 1!

Eu incluí os seguintes esquemas:

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

O que estou perdendo? Eu tenho que carregar outro módulo ou esquema?

EDIT - encontrado e incluído krb5-kdc.schema antes de samba.schema

Está aqui para aqueles que também lutam para encontrá-lo:

# $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 foi executado com êxito e eu consegui adicionar a sobreposição, no entanto, se eu alterar userPassword , os outros atributos não serão alterados. Os atributos userPassword contêm hashes SHA1.

    
por Daniel Szalay 07.03.2014 / 11:27

1 resposta

1

Você deve usar a RFC 3062 Modificar a operação estendida da senha. Consulte a README na distribuição de origem (não há página de manual, AFAICT). Você pode fazer isso a partir da linha de comando com ldappasswd do OpenLDAP (que é diferente de slappasswd , que apenas fixa valores de senha de várias maneiras).

userPassword tem crescido a semântica especial ao longo do tempo, nenhuma das quais foi planejada (e que não é estritamente compatível com as especificações). Não é incomum que ele tenha acesso "somente para comparação" (somente autenticação) ou nenhum acesso de leitura e tenha uma transformação dependente de cliente ou servidor (por exemplo, hash de conteúdo do lado do cliente ou do lado do servidor). A modificação de senha é bem definida e aceita apenas senhas de texto sem formatação e pode usar um método de hash definido pelo administrador. Essa extensão fornece uma camada de abstração para senhas (e também permite que o armazenamento de senhas seja desacoplado do diretório completamente). Ele também é necessário para a imposição de complexidade de senha, o que não pode ser feito se os clientes tiverem permissão para gravar pré-hash com valor diretamente em userPassword .

por exemplo. (perl): link

Você pode confirmar o suporte consultando o DSE raiz (dn ""), por exemplo,

$ 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
    
por 10.03.2014 / 10:54