Como podéis leer en el post anterior, además de utilizar la herramienta ADSI Edit también existe la posibilidad de generar objetos de tipo PSO mediante la importación de ficheros LDF. Este segundo modo es bastante más sencillo de implementar (no requiere tanto uso de ratón), pero es algo complejo de entender debido a ciertos parámetros que veremos a continuación.
Para situarnos, os recuerdo que en nuestro ejemplo contabamos con la siguiente estructura lógica de Directorio Activo:
En el anterior post generamos un objeto PSO para «Standard Users». En este caso generaremos vía LDF un objeto PSO adicional para cualquier cuenta ubicada dentro del contenedor «Service Accounts».
Se puede generar un fichero LDF con un contenido similar al siguiente:
dn: CN=Service Accounts PSO,CN=Password Settings Container,CN=System,DC=externalforest,DC=net
changetype: add
objectClass: msDS-PasswordSettings
msDS-MaximumPasswordAge: -9223372036854775808
msDS-MinimumPasswordAge: -864000000000
msDS-MinimumPasswordLength: 15
msDS-PasswordHistoryLength: 24
msDS-PasswordComplexityEnabled: TRUE
msDS-PasswordReversibleEncryptionEnabled: FALSE
msDS-LockoutObservationWindow: -36000000000
msDS-LockoutDuration: -864000000000
msDS-LockoutThreshold: 5
msDS-PasswordSettingsPrecedence: 100
msDS-PSOAppliesTO: CN=Service Accounts Group,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net
Notad el extraño formato de los parámetros msDS-MinimumPasswordAge, msDS-MaximumPasswordAge, msDS-LockoutObservationWindow y msDS-LockoutDuration. Como podéis ver en el post anterior, debía imputarse algo tipo dias:horas:minutos:segundos, pero… ¿Que significan los números negativos?
Los números negativos significan que Directorio Activo almacena dichos valores en formato I8, o lo que es lo mismo, en múltiplos de -100 nanosegundos. Por tanto, las entidades de tiempo más comunes serán las siguientes:
- 1 segundo = -1 * (10^7) = -10000000
- 1 minuto = -60 * (10^7) = -600000000
- 1 hora = -60 * 60 * (10^7) = -36000000000
- 1 día = -24 * 60 * 60 * (10^7) = -864000000000
Por tanto basta con multiplicar los valores anteriores por el número de días, horas, minutos o segundos que consideréis necesario.
En el caso anterior los parámetros que nos ocupan son:
- msDS-LockoutObservationWindow: -36000000000 (1 hora , es decir, 0:01:00:00
- msDS-LockoutDuration: -864000000000 (1 día, es decir, 1:00:00:00)
- msDS-MinimumPasswordAge: -864000000000 (1 día, es decir, 1:00:00:00)
- msDS-MaximumPasswordAge: 9223372036854775808 = Nunca (never)
Observad que en msDS-PSOAppliesTo por claridad he especificado de nuevo el DN del grupo al que se aplica el PSO.
Una vez generado el fichero de texto bastará con importarlo mediante el siguiente comando:
- Ldifde -i -f <Fichero.ldf>
De este modo se genera un segundo objeto PSO aplicado al grupo que debe contener las Cuentas de Servicio (Service Accounts) ubicadas dentro de la unidad organizativa correspondiente. De nuevo, si se precisa adecuar la pertenencia al grupo con las cuentas existentes dentro de la OU, bastará con ejecutar las siguientes líneas:
- dsmod group «CN=Service Accounts Group,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net» -chmbr «CN=Service Account 10,OU=SQL,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net»
- dsmod group «CN=Service Accounts Group,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net» -rmmbr «CN=Service Account 10,OU=SQL,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net»
- dsquery user «OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net» | dsmod group «CN=Service Accounts Group,OU=Service Accounts,OU=Password Settings Demo,DC=externalforest,DC=net» -addmbr
Recordad que las dos primeras sentencias sustituyen la membresía del grupo por un usuario concreto (Service Account 10 en este caso) y eliminan al usuario sustituido del grupo, para posteriormente agregar única y exclusivamente los usuarios ubicados dentro de dicha OU.
Por tanto, entre los dos últimos post habremos generado dos objetos PSO, uno manual mediante ADSI Edit aplicado a «Standard Users», y otro más automático mediante un fichero LDF y aplicado a «Service Accounts», tal como muestra la siguiente imagen:
Un saludo,
Alberto Robledo.