Ir al contenido

Configurar CIFS

El objetivo de esta configuración es permitir ver OpenKM como una unidad remota usando el protocolo CIFS. A continuación se describen las dos formas de configurarlo:

  • Autenticación usando la base de datos
  • Autenticación usando Active Directory

Este es el caso más simple. Debe configurar estas partes:

  • Servidor OpenKM
  • Configuración de OpenKM
  • Cliente Windows

Si el sistema no puede iniciarse con permisos de root, los puertos mencionados a continuación deben estar por encima de 1024 (los puertos del sistema por defecto son 138, 137, 139 y 445), así que es necesario redirigir los puertos originales a otros nuevos. Para ello, ejecute los siguientes comandos como root o usando sudo:

Ventana de terminal
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 445 -j DNAT --to-destination :1445
iptables -t nat -A PREROUTING -p tcp --dport 139 -j DNAT --to-destination :1139
iptables -t nat -A PREROUTING -p tcp --dport 137:139 -j DNAT --to-destination :1137-1139
iptables -t nat -A PREROUTING -p udp --dport 137:139 -j DNAT --to-destination :1137-1139

Para configurarlo, vaya a Administration > Configuration y cambie las siguientes propiedades:

Campo / Propiedad Tipo Descripción Valor
system.cifs.server Boolean Propiedad para habilitar o deshabilitar CIFS. true
system.cifs.authenticator.class String Clase usada por CIFS para autenticarse contra OpenKM. com.openkm.integration.cifs.authenticator.DatabaseCIFSAuthenticator
Dependiendo de los valores del adaptador de autenticación, debe usarse la clase autenticadora adecuada:
com.openkm.integration.cifs.authenticator.DatabaseCIFSAuthenticator
com.openkm.integration.cifs.authenticator.LdapCIFSAuthenticator
system.cifs.debug Boolean Propiedad usada para habilitar el registro detallado de la funcionalidad CIFS. false
system.cifs.domain.name String Dominio o grupo de trabajo donde está instalado el servidor OpenKM.
system.cifs.hostname String Hostname donde está instalado OpenKM. 0.0.0.0
system.cifs.port.datagram Integer Número de puerto usado por los datagramas. Por defecto 1138
system.cifs.port.name Integer Número de puerto usado por CIFS. Por defecto 1137
system.cifs.port.session Integer Número de puerto usado por la sesión. Por defecto 1139
system.cifs.port.smb Integer Número de puerto usado por SMB. Por defecto 1445
system.cifs.shared.name String Propiedad para indicar el nombre del repositorio Por defecto el nombre es repository

Es necesario modificar una directiva de seguridad local. Para ello, vaya a Panel de control → Herramientas administrativas → Directiva de seguridad local → Directivas locales → Opciones de seguridad:

Después, para conectarse a la máquina remota, vaya a Equipo → Conectar a unidad de red:

  • Unidad: cualquier letra de unidad disponible
  • Carpeta: \\server_ip\repository O \\server_name\repository
  • Conectar usando credenciales diferentes (marque esto si el usuario y contraseña de Windows son distintos de los del usuario de OpenKM).

Después haga clic en el botón Finalizar.

En este caso, se asume que el sistema ya estaba previamente integrado con Active Directory. Será necesario configurar:

  • Active Directory
  • Servidor OpenKM
  • Configuración de OpenKM
  • Cliente Windows

Es necesario crear un usuario que OpenKM, mediante una clave privada, usará para validar las credenciales de la solicitud CIFS entrante. Para ello, siga estos pasos:

  1. Cree un objeto de equipo que será el correspondiente al servidor OpenKM.

  2. Una vez creado, modifique sus propiedades habilitando la propiedad ‘De confianza para delegación’.

    1. De confianza para delegación. Este paso es importante porque, si no se habilita, no será posible negociar entre cliente y servidor.
  3. El servidor debe autenticarse contra Active Directory antes de validar los tickets enviados por el cliente. Esta autenticación se realiza usando un fichero (keytab) que asocia el servicio (servidor de aplicaciones) con un usuario de dominio. Este usuario debe usarse única y exclusivamente para este propósito, porque si se usa este usuario para iniciar sesión en otro equipo, no podrá usarse para iniciar sesión en el servidor de aplicaciones. Una vez creado el usuario, deben modificarse sus propiedades para impedir cambios de contraseña y deshabilitar la caducidad de la cuenta. Finalmente, seleccione la pestaña Cuenta y habilite No requerir autenticación previa de Kerberos en la sección Opciones de cuenta. Para este ejemplo, se crea un usuario llamado servercifs.

  4. Seleccione la pestaña Cuenta y habilite la opción No requerir autenticación previa de Kerberos en la sección Opciones de cuenta.

  5. Genere el fichero keytab. Este fichero es una copia codificada de la clave privada de un usuario en Kerberos. Lo usa la aplicación web como proxy de autenticación para las credenciales enviadas por el usuario. Se ejecuta el siguiente comando:

    ktpass -princ cifs/tomcat.example.com@EXAMPLE.COM -mapuser servercifs@EXAMAPLE.COM -crypto all -kvno 0 \ -ptype KRB5_NT_PRINCIPAL -pass * -out cifs.keytab -kvno 0
  6. Es necesario configurar un Service Principal Name (SPN) con CIFS y un nombre de servidor; por ejemplo: tomcat.example.org, donde se ejecuta el contenedor de servlets Tomcat. Esto se usa con un usuario de dominio y su keytab, que después se usa como credencial del servicio:

    C:\> setspn -A cifs/tomcat.example.org servercifs
    C:\> setspn -A cifs/tomcat.example.org servercifs@EXAMPLE.COM

Servidor OpenKM en configuración con Active Directory

Sección titulada «Servidor OpenKM en configuración con Active Directory»

Deben seguirse los siguientes pasos:

Lo primero es incluir el servidor de aplicaciones en el dominio si no se hizo previamente. Para ello, siga la guía:

http://cerowarnings.blogspot.com.es/2011/11/how-to-linux-en-dominio-windows.html

Algo a tener en cuenta es añadir la siguiente configuración al fichero /etc/hosts debido a problemas conocidos previamente:

Ventana de terminal
# ldap in /etc/hosts
192.168.1.110 example.com
192.168.1.110 Schema.Configuration.example.com
192.168.1.110 Configuration.example.com
192.168.1.110 DomainDnsZones.example.com
192.168.1.110 ForestDnsZones.example.com

Si el sistema no puede iniciarse con permisos de root, los puertos mencionados a continuación deben estar por encima de 1000 (los puertos del sistema por defecto son 138, 137, 139, 445), así que es necesario redirigir los puertos originales a otros nuevos. Para ello, ejecute los siguientes comandos como root o usando sudo:

Ventana de terminal
$ modprobe iptable_nat
$ iptables -F
$ iptables -t nat -F
$ iptables -P INPUT ACCEPT
$ iptables -P FORWARD ACCEPT
$ iptables -P OUTPUT ACCEPT
$ iptables -t nat -A PREROUTING -p tcp --dport 445 -j DNAT --to-destination :1445
$ iptables -t nat -A PREROUTING -p tcp --dport 139 -j DNAT --to-destination :1139
$ iptables -t nat -A PREROUTING -p tcp --dport 137:139 -j DNAT --to-destination :1137-1139
$ iptables -t nat -A PREROUTING -p udp --dport 137:139 -j DNAT --to-destination :1137-1139

Instale el cliente Kerberos:

Ventana de terminal
$ apt-get krb5-user krb5-config

Antes de iniciar la aplicación, Kerberos debe configurarse correctamente para validar los tickets de forma adecuada. En sistemas Linux este fichero se encuentra en “/etc/krb5.conf”.

En este fichero deben especificarse el dominio, el servidor KDC y los algoritmos permitidos. Los algoritmos más importantes son arcfour-hmac-md5 y rc4-hmac, que ofrece Microsoft Active Directory.

Ventana de terminal
[libdefaults]
default_realm = EXAMPLE.COM
#these are mandatory for kerberos.
permitted_enctypes = aes128-cts rc4-hmac
default_tgs_enctypes = aes128-cts rc4-hmac
default_tkt_enctypes = aes128-cts rc4-hmac
[realms]
EXAMPLE.COM = {
kdc = SERVER.example.com
admin_server = SERVER.example.com
default_domain = EXAMPLE.COM
}
[domain_realm]
example.com = EXAMPLE.COM
.example.com = EXAMPLE.COM

Cree un fichero de configuración necesario para habilitar el login de Java, con el siguiente contenido:

Ventana de terminal
JLANServerCIFS{
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
useKeyTab=true
keyTab="/path/to/cifs.keytab"
principal="cifs/tomcat.example.com";
};

Como puede observarse:

  • JLANServerCIFS corresponde a la propiedad system.cifs.ldap.login.entry
  • La propiedad principal corresponde a system.cifs.ldap.principal
  • La propiedad keytab es la ubicación segura donde se ha copiado el fichero .keytab creado previamente, que contiene la clave para acceder a Active Directory.

Habilitar la configuración de login de Java.

Sección titulada «Habilitar la configuración de login de Java.»

Para habilitar el login de Java, es necesario cambiar la configuración del fichero de seguridad de Java, que suele estar en: JRE/lib/security/java.security, y añadir la siguiente línea:

Ventana de terminal
login.config.url.1= file:${java.home}/lib/security/cifs.login.config where cifs.login.config is the file created in the previous section.

Configuración de OpenKM en configuración con Active Directory

Sección titulada «Configuración de OpenKM en configuración con Active Directory»

Para configurarlo: vaya a Administration > Configuration y cambie las siguientes propiedades:

Campo / Propiedad Tipo Descripción Valor
system.cifs.server Boolean Propiedad para activar o desactivar CIFS true
system.cifs.authenticator.class String Clase usada por CIFS para autenticarse contra OpenKM com.openkm.integration.cifs.authenticator.LdapCIFSAuthenticator
Dependiendo de los valores del adaptador de autenticación, debe usarse la clase autenticadora adecuada:
com.openkm.integration.cifs.authenticator.DatabaseCIFSAuthenticator
com.openkm.integration.cifs.authenticator.LdapCIFSAuthenticator
system.cifs.debug Boolean Propiedad usada para habilitar el registro detallado de la funcionalidad CIFS false
system.cifs.domain.name String Dominio o grupo de trabajo donde está instalado el servidor OpenKM EXAMPLE
system.cifs.hostname String Hostname donde está instalado OpenKM 0.0.0.0
system.cifs.ldap.kdc String Nombre del servidor Active Directory server.example.com
system.cifs.ldap.principal String Servicio creado previamente en Active Directory cifs/tomcat.example.com
system.cifs.ldap.password String Contraseña del usuario creado con fines de autenticación En el ejemplo el usuario era servercifs
system.cifs.ldap.realm String Nombre del dominio donde está instalado Active Directory EXAMPLE.COM
system.cifs.ldap.login.entry String Nombre de la configuración Kerberos dentro del fichero de configuraciones JLANServerCIFS
system.cifs.port.datagram Integer Número de puerto usado por los datagramas Por defecto 1138
system.cifs.port.name Integer Número de puerto usado por CIFS Por defecto 1137
system.cifs.port.session Integer Número de puerto usado para las sesiones Por defecto 1139
system.cifs.port.smb Integer Número de puerto usado por SMB Por defecto 1445
system.cifs.shared.name String Propiedad para indicar el nombre del repositorio Por defecto el nombre es repository

Cliente Windows en configuración con Active Directory

Sección titulada «Cliente Windows en configuración con Active Directory»

Es necesario modificar una directiva de seguridad local. Para ello, vaya a Panel de control → Herramientas administrativas → Directiva de seguridad local → Directivas locales → Opciones de seguridad:

Después, para conectarse a la máquina remota, vaya a Equipo → Conectar a unidad de red:

  • Unidad: cualquier letra de unidad disponible
  • Carpeta: \\server_name\repository
  • Conectar usando credenciales diferentes (marque esto si el usuario y contraseña de Windows son distintos de los del usuario de OpenKM).

Después haga clic en el botón Finalizar.