Windows 10: Utilidades de directorio activo

Para poder usar las utilidades de exploración del directorio activo en windows 7 y windows 10, es necesario activar RSAT ( Remote Server Administration Tools) a través de Programas y características.

rsat_windows_dominio_01

Panel de control > Programas > Programas y características > Activar o desactivar las características de windows.

rsat_windows_dominio_02Habilitamos Remote Server Administration Tools > Feature Administration Tools > AD DS and AD LDS Tools > AD DS Tools

rsat_windows_dominio_03

A través de la consola mmc (mmc.exe) añadimos el complemento de Usuarios y equipos de active directory.

rsat_windows_dominio_04

 

Autenticación de apache con Directorio Activo. LDAP, NTLM

Queremos que una serie de máquinas con apache, usen el siguiente método de autenticación:

  1. Validar usuario en directorio activo
  2. Validar usuario local (si hay problemas con el directorio activo).

Instalamos los módulos de apache para aceptar ldap:

apt-get install -y libapache-authznetldap-perl  libapache-session-ldap-perl libapache2-mod-ldap-userdir

Activamos el módulo de ldap en apache

a2enmod authnz_ldap

Versión 1: Usuario válido en dominio

El excelente tutorial de adam.shand.net , nos propone una primera versión:
<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Para probar la cadena de conexión, se puede usar Apache Directory Studio.

Versión 2: Usuario válido en dominio de un grupo concreto (member of)

Añadimos en el parámetro AuthLDAPURL, la consulta después de sub, para que coja los usuarios de un dominio concreto.

<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap

AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Versión 3: Aceptar también usuarios locales

Cambiamos el comportamiento de la autenticación ldap, para que no sea la única opción, con AuthzLDAPAuthoritative off

Además, aceptamos también la configuración desde nuestro fichero local de usuarios

<Location /aplicacion1>
AuthType Basic
AuthName "Restricted Directory"
AuthBasicProvider ldap
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Para crear el archivo local de contraseñas en apache:

htpasswd -c .htpasswd user

 

Para editar las contraseñas de un usuario concreto:

 

htpasswd .htpasswd user

 

Versión 4: aceptando también ntlm

 

Para rizar el rizo, querríamos que acepte las credenciales de windows de forma directa, sin que el usuario tenga que introducir las credenciales.

Vamos a usar el módulo Apache2::AuthenNTLM

El problema es que no se verifica el grupo de dominio, cualquier usuario que exista en dominio, entra en el apache.

<Location /aplicacion1>
AuthType ntlm, Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local
# Configuración ntlm:
# domain pdc bdc
# pdc: primary domain controller
# bdc: backup domain controller
PerlAddVar ntdomain “name_domain1 name_of_pdc1”
PerlAddVar ntdomain “other_domain pdc_for_domain bdc_for_domain”

PerlSetVar defaultdomain wingr1
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmdebug 1

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Versión 5: ntlm con módulo python

Legrandin  nos propone un módulo python para hacer más sencilla la integración con ntlm version 2.

El problema de este tipo de acceso, es que no permite autenticar sin el dominio. En caso de caida o aislamiento del dominio, no se puede recaer en los usuarios locales de nagios.

Existe opción de especificar grupos de dominios, aunque es experimental.

Instalar módulos que nos faltan:


sudo apt-get update
sudo apt-get install libapache2-mod-python python-crypto git
git clone https://github.com/Legrandin/PyAuthenNTLM2.git
cd PyAuthenNTLM2
sudo python setup.py install -f

La configuración de apache quedaría:

<Location /aplicacion1>
AuthType ntlm
AuthName "Restricted Directory"
require valid-user
# Configuración de autenticación ntlm:
PythonAuthenHandler pyntlm
PythonOption Domain adserver.domain.com
# pdc : Primary Domain Controller
PythonOption PDC 192.1.2.45
# bdc : Backup Domain controller.
PythonOption BDC 192.1.2.46
Require group grupo_dominio1,grupo_dominio2

Versión 6: libapache2-authenntlm-perl

Vamos a probar authenntlm-perl, que, según este tutorial es ridículamente fácil:

apt-get install libapache2-authenntlm-perl

Directorio Activo. DumpSec

Una carencia del directorio activo es listar para un usuario, qué permisos tiene en carpetas del dominio. Esto se debe a la propia organización del dominio:

  • Un usuario pertenece a cero o más grupos.
  • Una carpeta tiene permisos a nivel de usuario y grupo

Las herramientas que vienen con el dominio, están preparadas para consultar en una carpeta qué permisos hay, pero no al revés.

Nuestro objetivo sería conseguir que nos listara qué permisos tiene un usuario en todas las carpetas compartidas de nuestro dominio; es decir, no sólo en NAS, sino en cualquier PC donde alguien haya compartido una carpeta. Lamentablemente, no hemos logrado dar con una solución a este problema. Eso sí, agradeceremos comentarios que nos abran la luz.

La herramienta DumpSec de Somarsoft, sí permite explorar una unidad compartida (una nas) y decirnos qué permisos tiene caa carpeta a nivel de usuarios y grupos.

Además, admite entradas por consola , por lo que, al menos, podremos listar qué carpetas hay, y quien tiene permiso sobre estas carpetas

Ejemplo:

PS C:\> & ‘C:\Program Files (x86)\SystemTools\DUMPSEC.exe’ /computer=\\localhost //rpt=allsharedirs /outfile=./output.txt /saveas=csv

 

Hemos probado otras opciones:

  • ShareEnum: Requiere permisos de administrador de dominio
  • AccessEnum: No conseguimos que listara nada externo a los discos locales
  • xcacls: Lista permisos e incluso los puede modificar, pero no  está soportado en windows 7