Configuración LDAP de ClearOS
Necesita instalar los módulos Certificate Manager y Directory Server.
- Cree un usuario okmAdmin en ClearOS.
- Cree los grupos ROLE_ADMIN, ROLE_USER en ClearOS y añádales miembros.
Estructura LDAP
Sección titulada «Estructura LDAP»dc=local dc=mydomain ou=Accounts ou=Groups cn=ROLE_ADMIN member=okmAdmin member=user1 member=user2 objectClass=posixGroup cn=ROLE_USER member=user3 member=user4 objectClass=posixGroup cn=ROLE_XXXX objectClass=posixGroup cn=ROLE_YYYY objectClass=posixGroup ... ou=Users uid=okmAdmin memberOf=CN=ROLE_ADMIN,ou=Groups,ou=Accounts,dc=mydomain,dc=local mail=okmAdmin@mail.com cn=OpenKM Administrator objectClass=inetOrgPerson uid=user1 memberOf=CN=ROLE_ADMIN,ou=Groups,ou=Accounts,dc=mydomain,dc=local mail=user1@mail.com cn=User Name 1 objectClass=inetOrgPerson uid=user2 memberOf=CN=ROLE_ADMIN,ou=Groups,ou=Accounts,dc=mydomain,dc=local mail=user2@mail.com cn=User Name 3 objectClass=inetOrgPersonPaso 1 - parámetros de configuración
Sección titulada «Paso 1 - parámetros de configuración»Vaya a Administration > Configuration parameters
| Field / Property | Type | Description |
|---|---|---|
| principal.adapter | String | Este parámetro está obsoleto desde la versión 8.1.12 com.openkm.plugin.principal.LdapPrincipalAdapter |
| principal.database.filter.inactive.users | Boolean | Este parámetro está obsoleto desde la versión 8.1.12 true |
| principal.hide.connection.roles | Boolean | false |
| system.login.lowercase | String | true |
| principal.ldap.server | String | ldaps://ldap.mydomain.local:636 |
| principal.ldap.security.principal | String | cn=Manager,ou=Internal,dc=mydomain,dc=local |
| principal.ldap.security.credentials | String | pass1234 |
| principal.ldap.referral | String | |
| principal.ldap.users.from.roles | Boolean | false |
| principal.ldap.user.attribute | String | uid |
| principal.ldap.user.search.base | List | ou=Users,ou=Accounts,dc=mydomain,dc=local |
| principal.ldap.user.search.filter | String | (objectClass=inetOrgPerson) |
| principal.ldap.username.attribute | String | cn |
| principal.ldap.username.search.base | String | ou=Users,ou=Accounts,dc=mydomain,dc=local |
| principal.ldap.username.search.filter | String | (&(objectclass=inetOrgPerson)(uid={0})) |
| principal.ldap.mail.attribute | String | |
| principal.ldap.mail.search.base | String | dc=company,dc=local |
| principal.ldap.mail.search.filter | String | (&(objectclass=inetOrgPerson)(uid={0})) |
| principal.ldap.role.attribute | String | cn |
| principal.ldap.role.search.base | List | ou=Groups,ou=Accounts,dc=mydomain,dc=local |
| principal.ldap.role.search.filter | String | objectClass=posixGroup |
| principal.ldap.roles.by.user.attribute | String | memberOf |
| principal.ldap.roles.by.user.search.base | String | ou=Users,ou=Accounts,dc=mydomain,dc=local |
| principal.ldap.roles.by.user.search.filter | String | (&(objectClass=person)(uid={0})) |
| principal.ldap.users.by.role.attribute | String | member |
| principal.ldap.users.by.role.search.base | String | ou=Groups,ou=Accounts,dc=mydomain,dc=local |
| principal.ldap.users.by.role.search.filter | String | (&(objectClass=posixGroup)(cn={0})) |
Paso 2 - crear un certificado
Sección titulada «Paso 2 - crear un certificado»Por defecto, ClearOS solo permite LDAPS.
$ openssl req -out ldap.csr -key private/sys-0-key.pem -new$ openssl ca -policy policy_anything -days 3650 -out /etc/pki/CA/certs/ldap.mydomain.local.crt -infiles ldap.csrAñada el certificado CA al nssdb:
$ certutil -A -d /etc/pki/nssdb/ -n "CA certificate" -t "CT,," -a -i /etc/pki/CA/ca-cert.pemEl certificado del servidor LDAP debe guardarse en el nssdb con el nombre Server-Cert.
$ openssl pkcs12 -export -inkey /etc/pki/CA/private/sys-0-key.pem -in /etc/pki/CA/certs/ldap.mydomain.local.crt -out /root/Server-Cert.p12 -nodes -name 'Server-Cert'$ pk12util -i /root/Server-Cert.p12 -d /etc/pki/nssdb/Edite el fichero /etc/openldap/slapd.conf:
$ vim /etc/openldap/slapd.confTLSCACertificatePath /etc/pki/nssdbTLSCertificateFile Server-CertTLSVerifyClient neverPermita que LDAP en ClearOS pueda ser consultado por OpenKM - edite el final de slapd.conf de la siguiente forma:
access to * by self write by peername.ip=127.0.0.1 read ... by peername.ip=<OpenKM's IP address> readCopie el certificado CA público de ClearOS al servidor OpenKM y añádalo al keystore de OpenKM:
$ keytool -import -trustcacerts -keystore /opt/openkm-6.2.3-community/java/jre/lib/security/cacerts -alias myca -file /etc/pki/tls/certs/myca.pemPaso 3 - configurar el login
Sección titulada «Paso 3 - configurar el login»Aplique los cambios en el fichero openkm.properties.
El parámetro “okm.authentication.database” se usa para deshabilitar el login por base de datos.
El parámetro “okm.authentication.ldap” se usa para habilitar el login LDAP.
#Authenticationokm.authentication.database=falseokm.authentication.ldap=true
#LDAPldap.server=ldaps://ldap.mydomain.localldap.manager.distinguished.name=cn=Manager,ou=Internal,dc=mydomain,dc=localldap.manager.password=*secret*ldap.base=dc=mydomain,dc=localldap.role.attribute=cnldap.user.search.filter=uid={0}ldap.role.search.filter=member={0}Otra opción para configurar el login
Sección titulada «Otra opción para configurar el login»En algunos casos, puede interesarle establecer la configuración en el fichero openkm.xml; consulte la sección de documentación Configuring openkm.xml para más información.
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns:beans="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<!-- Security configuration --> <security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="ldapAuthProvider" /> </security:authentication-manager>
<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <beans:constructor-arg value="ldaps://ldap.mydomain.local:636/dc=mydomain,dc=local"/> <beans:property name="userDn" value="cn=Manager,ou=Internal,dc=mydomain,dc=local"/> <beans:property name="password" value="*secret*"/> </beans:bean>
<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="contextSource"/> <beans:property name="userSearch" ref="userSearch"></beans:property> </beans:bean> </beans:constructor-arg> <beans:constructor-arg name="authoritiesPopulator" ref="defaultLdapAuthoritiesPopulator"/> </beans:bean>
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> <beans:constructor-arg index="0" value="ou=Users,ou=Accounts" /> <beans:constructor-arg index="1" value="uid={0}" /> <beans:constructor-arg index="2" ref="contextSource" /> <beans:property name="searchSubtree" value="true" /> </beans:bean>
<beans:bean id="defaultLdapAuthoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> <beans:constructor-arg ref="contextSource"/> <beans:constructor-arg value="ou=groups,ou=Accounts"/> <beans:property name="groupSearchFilter" value="member={0}"/> <beans:property name="groupRoleAttribute" value="cn"/> <beans:property name="searchSubtree" value="true" /> <beans:property name="convertToUpperCase" value="true" /> <beans:property name="rolePrefix" value="" /> </beans:bean>
<beans:bean id="userDetailService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> </beans:bean>
</beans:beans>Para versiones anteriores a la 8.1.12, use la siguiente definición para el userDetailService:
<!--Needed for remember-me services --><beans:bean id="userDetailService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> <beans:constructor-arg ref="userSearch"/> <beans:constructor-arg ref="defaultLdapAuthoritiesPopulator"/></beans:bean>