Administracion del servicio de directorio en Windows con PowerShell

1 Gestión de usuarios de Active Directory con PowerShell

1.1 Creación de cuentas de usuario

El cmdlet New-ADUser crea un usuario en el directorio activo.

Ejemplo:

1
New-ADUser -Name "Maria Garcia" -Path "CN=Users,DC=Empresa,DC=Local" -SamAccountName "mariag" -UserPrincipalName "mariag@empresa.local" -AccountPassword (ConvertTo-SecureString "aso2023." -AsPlainText -Force) -GivenName "Maria" -Surname "Garcia" -ChangePasswordAtLogon $true -Enabled $true

Explicación detallada:

  • New-ADUser: Este cmdlet se utiliza para crear un nuevo usuario en Active Directory.

  • -Name "Maria Garcia": Especifica el nombre de visualización del usuario.

  • -Path "CN=Users,DC=EMPRESA,DC=LOCAL": Especifica la ubicación (unidad organizativa) donde se creará el nuevo usuario.

  • -SamAccountName "mariag": Especifica el nombre de usuario (sAMAccountName) para el usuario. Asegúrate de que sea único dentro de la ruta especificada.

  • -UserPrincipalName "mariag@EMPRESA.LOCAL": Especifica el Nombre Principal de Usuario (UPN) para el usuario. El UPN también debe ser único.

  • -AccountPassword (ConvertTo-SecureString "aso2023." -AsPlainText -Force): Establece la contraseña inicial para el usuario. En este ejemplo, la contraseña es “aso2023.”

  • -GivenName "Maria": Especifica el primer nombre del usuario.

  • -Surname "Garcia": Especifica el apellido del usuario.

  • -ChangePasswordAtLogon $true: Obliga al usuario a cambiar su contraseña en el próximo inicio de sesión. Esta es una buena práctica de seguridad para la configuración inicial de la contraseña.

  • -Enabled $true: Habilita la cuenta de usuario. Si deseas crear la cuenta pero dejarla deshabilitada inicialmente, puedes establecer esto en $false.

1.2 Eliminación de usuarios

El cmdlet Remove-ADUser elimina un usuario del directorio activo.

Ejemplo:

1
Remove-ADUser -Identity "mariag"
1
Remove-ADUser -Identity "CN=Maria Garcia,CN=Users,DC=Empresa,DC=Local" 

1.3 Deshabilitar una cuenta de usuario

El cmdlet Disable-ADAccount deshabilita una cuenta de usuario del directorio activo

Ejemplo:

1
Disable-ADAccount -Identity "mariag" 
1
Disable-ADAccount -Identity "CN=Maria Garcia,CN=Users,DC=Empresa,DC=Local" 

1.4 Modificación de cuentas de usuario

Podemos modificar alguna propiedad de la cuenta de usuario a través del cmdlet Set-ADUser

1
Set-ADUser -Identity "mariag" -EmailAddress "mariag@empresa.local"

1.5 Consultar usuarios

El cmdlet Get-ADUser nos pemite consulltar las cuentas de usuario.

Para visualizar ejemplos de cómo utilizar el comando:

1
Get-Help Get-ADUser - Examples

Aquí tienes algunos ejemplos de cómo puedes utilizarlo:

  1. Obtener información de un usuario específico por su nombre de usuario:

    1
    
    Get-ADUser -Identity mariag
    

    Este comando obtiene información sobre el usuario con el nombre de usuario “mariag”.

  2. Obtener una lista de todos los usuarios en un dominio específico:

    1
    
    Get-ADUser -Filter * -SearchBase "OU=Usuarios,DC=empresa,DC=local"
    

    Este comando recupera una lista de todos los usuarios dentro de la Unidad Organizativa (OU) “Usuarios” en el dominio “MiDominio.com”.

  3. Obtener usuarios con un atributo específico:

    1
    
    Get-ADUser -Filter {EmailAddress -like "*@miempresa.com"}
    

    Este comando busca y muestra todos los usuarios cuya dirección de correo electrónico contiene “@miempresa.com”.

  4. Obtener usuarios que pertenecen a un grupo específico:

    1
    
    Get-ADGroupMember -Identity "GroupName" | Where-Object { $_.objectClass -eq 'user' }
    

    Este comando obtiene una lista de usuarios que son miembros del grupo especificado (“GroupName”).

  5. Obtener una lista de todos los usuarios activos:

    1
    
    Get-ADUser -Filter {Enabled -eq $true}
    

Este comando recupera una lista de todos los usuarios que están habilitados en Active Directory, es decir, cuentas de usuario activas.

2. Gestión de grupos

2.1 Creación de grupos

El comando New-ADGroup crea un nuevo grupo en el dominio especificado

Ejemplo:

1
New-ADGroup -Name "Profesores" -GroupCategory Security -GroupScope Global -Path "CN=Users,DC=EMPRESA,DC=LOCAL"

2.2 Eliminación de grupos

El cmdlet Remove-ADGroup elimina un grupo del dominio.

1
Remove-ADGroup -Identity "CN=Profesores,CN=Users,DC=EMPRESA,DC=LOCAL" -Confirm:$false

2.3 Modificación de grupos

El cmdlet Set-ADGroup modifica las propiedades de un grupo del dominio.

1
Set-ADGroup -Identity Profesores -GroupScope Universal

2.4 Consultar grupos

El cmdlet Get-ADGroup muestra todas las propiedades de un grupo del dominio.

1
Get-ADGroup -Identity Profesores

2.5 Añadir usuarios a un grupo del dominio

El cmdlet Add-ADGroupMember añade usuarios al grupo especificado

Ejemplo:

1
Add-ADGroupMember -Identity "Profesores" -Members mariag,pepe

2.6 Quitar usuarios de un grupo del dominio

El cmdlet Remove-ADGroupMember quita usuarios del grupo especificado

Ejemplo:

1
Remove-ADGroupMember -Identity "Profesores" -Members mariag

3.7 Consultar miembros de un grupo

El cmdlet Get-ADGroupMember nos permite consultar

3. Gestión de unidades organizativas de Active Directory con PowerShell

3.1 Creación de unidades organizativas

El cmdlet New-ADOrganizationalUnit crea una unidad organizativa.

Ejemplo:

1
New-ADOrganizationalUnit -Name "Empresa" -Path "DC=EMPRESA,DC=LOCAL" -Description "Unidad Empresa"
1
New-ADOrganizationalUnit -Name "Finanzas" -Path "OU=EMPRESA,DC=EMPRESA,DC=LOCAL" -Description "Unidad de finanzas"

3.2 Eliminación de unidades organizativas

El cmdlet Remove_ADOrganizationalUnit elimina una unidad organizativa.

1
Remove-ADOrganizationalUnit -Identity  "OU=INFORMATICA,DC=IESELCAMINAS,DC=LOCAL" -Recursive -Confirm:$False

Explicación detallada:

  • Remove-ADOrganizationalUnit: Este es el cmdlet (comando de PowerShell) utilizado para eliminar una Unidad Organizativa de Active Directory.

  • -Identity "OU=INFORMATICA,DC=IESELCAMINAS,DC=LOCAL": Esta parte especifica la identidad de la OU que deseas eliminar. En este caso, es “OU=INFORMATICA,DC=IESELCAMINAS,DC=LOCAL”.
  • -Recursive: Este interruptor indica que deseas eliminar la OU y todos sus objetos secundarios (sub-OUs, usuarios, grupos, etc.) de forma recursiva.
  • -Confirm:$False: Esto se utiliza para desactivar la solicitud de confirmación. Cuando se establece en $False, significa que no se te pedirá confirmación antes de que se elimine la OU. Ten precaución al usar esta opción, ya que puede provocar eliminaciones accidentales.

4. Recursos compartidos

Los cmdlets para trabajar con recursos compartidos se encuentran dentro del módulo SmbShare

A los recursos compartidos se les puede asociar los distintos tipos de permisos:

  • Control Total (FullAccess) : Todas las operaciones y cambio de permisos.
  • Cambiar (ChangeAccess): Permite crear, modificar y borrar carpetas y archivos.
  • Lectura (ReadAccess): Sólo permite la lectura y ejecución de archivos.

4.1 Mostrar información de recurso compartido

El cmdlet Get-SmbShare (gsmbs) devuelve los recursos compartidos del sistema.

1
Get-SmbShare

Para mostrar los datos de un recurso compartido especificado:

1
2
3
4
# Muestra información del recurso compartido datos
Get-SmbShare -Name datos
# Muestra información del recurso compartido datos en formato lista (Format-List, alias fl)
Get-SmbShare -Name datos | fl

4.2 Crear recurso compartido

El cmdlet New-SmbShare (nsmbs) crea un recurso compartido.

1
2
3
4
# creación de un recurso compartido sin especificar
New-SmbShare -Path C:\datos -Name datos
#Creación del recurso compartido datos, de forma que al usuario profesor le damos todos los permisos y al usuario alumno, solo lectura
New-SmbShare -Path C:\datos -Name datos -FullAccess profesor -ReadAccess alumno

4.3 Eliminar recurso compartido

El cmdlet Remove-SmbShare (rsmbs) elimina un recurso compartido. La propiedad -Force evita el mensaje de confirmación de eliminación.

1
Remove-SmbShare -Name datos -Force

4.4 Administrar permisos de un recurso compartido

Los cmdlets Grant-SmbShareAccess y Revoke-SmbShareAccess son cmdlets de PowerShell que se utilizan para administrar los permisos de acceso a carpetas compartidas (shares) en un entorno de red SMB (Server Message Block).

El cmdlet Grant-SmbShareAccess(grsmba) permite otorgar permisos de acceso a una carpeta compartida.

El cmdlet Revoke-SmbShareAccess se utiliza para revocar o quitar los permisos de acceso a una carpeta compartida.

Ejemplo 1: Añadir el permiso de control total al usuario profesor sobre el recurso datos.

1
Grant-SmbShareAccess -Name datos -AccountName profesor -AccessRight Full -Force 

Ejemplo 2 : Quitar los permisos que tiene el usuario alumno sobre el recurso datos.

1
Revoke-SmbShareAccess -Name datos -AccountName alumno -Force

5. Permisos NTFS

Los permisos NTFS (permisos básicos) se componen de cinco niveles de autorización:

  • Control total: un usuario que tenga este nivel de permisos puede modificar, añadir, desplazar o suprimir carpetas y archivos. También puede cambiar el permiso de acceso.

  • Modificación: el usuario puede visualizar y modificar los archivos, así como sus propiedades. También puede añadir y suprimir archivos.

  • Lectura y ejecución: el usuario puede visualizar el contenido de los archivos y lanzar archivos ejecutables y scripts.

  • Lectura: el usuario puede visualizar el contenido de los archivos.

  • Escritura: el usuario puede escribir en un archivo y añadir nuevos archivos en la carpeta.

Los permisos NTFS se pueden heredar (provienen de la carpeta padre) o pueden ser explícitos (configurados individualmente). De esta manera en cada ACE (Access Control Entry) configurada en el ACL (Access Control List) se puede definir si el permiso debe ser de tipo “Permitir” o “Denegar”.

Debemos tener muy claro estos dos términos:

  • ACL: lista de permisos completa del objeto.
  • ACE: permiso concreto dentro de la lista de permisos.

La gestión de los permisos NTFS con PowerShell puede hacerse con dos cmdlets:

  • Get-Acl: permite recuperar los permisos configurados en un recurso (carpetas y archivos).
  • Set-Acl: permite modificar los permisos de un recurso.

Consultar los permisos de un recurso en PowerShell

  • El cmdlet Get-Acl permite obtener los permisos declarados en un recurso, como una carpeta, un archivo o una clave de registro. El cmdlet se puede usar simplemente con el parámetro -Path:
Parámetro Descripción
-Path Indica el camino de acceso al recurso.
1
Get-Acl -Path .\prueba | Format-List

En lugar de Format-List, podemos utilizar el alias fl

1
Get-Acl -Path .\prueba | fl

Ejemplo 1: Obtener los permisos del fichero prueba.txt y visualizar en formato tabla.

1
2
$acl = Get-Acl .\prueba.txt
$acl.Access | Format-Table

img

Ejemplo 2: Obtener los permisos del directorio permisos y visualizar en formato tabla

1
2
$acl = Get-Acl .\permisos
$acl.Access | Format-Table

img

Como puede observarse, es la misma información que podemos recopilar en la GUI:

img

Definir los permisos de un recurso en PowerShell

  • El cmdlet Set-Acl permite definir los permisos en un recurso. Para usar este cmdlet y poder definir estos permisos, hay que utilizar los descriptores de seguridad usando Get-Acl, y aplicarlos después en el recurso deseado.

    Parámetro Descripción
    -AclObject Especifica los descriptores de seguridad que se van a aplicar
    -Path Indica el camino de acceso al recurso.

Ejemplo 1: Aplicar permisos NTFS en la carpeta prueba

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ruta = "C:\prueba\"

 New-Item -Path $ruta -ItemType Directory

 $acl= Get-Acl -Path $ruta 

#Crear regla de acceso

<# System.Security.AccessControl.FileSystemAccessRule: Representa una abstracción de una entrada de control de acceso (ACE) que define una regla de acceso para un archivo o directorio #>

$permisoadd = @('Todos', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')

$ace= New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permisoadd

$acl.SetAccessRule($ace)

#Añadir permisos a la carpeta

$acl | Set-Acl -Path $ruta

Deshabilitar o habilitar la herencia de permisos

SetAccessRuleProtection es un método que se utiliza en PowerShell para gestionar la herencia de reglas de acceso en objetos del sistema de archivos. Este método toma dos variables como argumentos:

  1. $isProtected: Este es el primer argumento que espera el método. Indica si deseas habilitar o deshabilitar la herencia de reglas de acceso para el objeto.
    • Si el valor es $true, significa que se deshabilitará la herencia, lo que significa que el objeto dejará de heredar las reglas de acceso de su contenedor padre.
    • Si el valor es $false, se habilitará la herencia, lo que significa que el objeto heredará las reglas de acceso de su contenedor padre.
  2. $PreserveInheritance: Este es el segundo argumento que espera el método. Indica si deseas preservar o eliminar las reglas de acceso heredadas al deshabilitar la herencia.
    • Si $PreserveInheritance es $true, se preservarán las reglas de acceso heredadas, lo que significa que se mantendrán en el objeto incluso después de deshabilitar la herencia. Esto permite que el objeto tenga sus propias reglas de acceso además de las heredadas.
    • Si $PreserveInheritance es $false, se eliminarán las reglas de acceso heredadas al deshabilitar la herencia. Esto significa que el objeto solo tendrá las reglas de acceso que se definan directamente en él.

En resumen, SetAccessRuleProtection te permite controlar si un objeto hereda reglas de acceso y qué hacer con las reglas de acceso heredadas cuando se deshabilita la herencia.

Esquema

Comando Explicación detallada
$acl.setAccessRuleProtection ($true,$true) Deshabilita la herencia y conserva las reglas heredadas
$acl.setAccessRuleProtection ($true,$false) Deshabilita la herencia y elimina todas las reglas heredadas
$acl.setAccessRuleProtection ($false, X ) Habilitar la herencia

Ejemplo1: Deshabilitar la herencia de la carpeta prueba utilizando la ruta física C:\prueba

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Paso 1: Obtener las reglas de acceso actuales
$Path = "C:\prueba"
$Acl = Get-Acl -Path $Path

# Mostrar las reglas de acceso antes de hacer cambios
Write-Host "Reglas de acceso antes de los cambios:"
$Acl.Access | Format-Table

# Paso 2: Deshabilitar la herencia y preservar las reglas de acceso
$Acl.SetAccessRuleProtection($true, $true)

# Aplicar los cambios
Set-Acl -Path $Path -AclObject $Acl

# Mostrar las reglas de acceso después de deshabilitar la herencia
Write-Host "Reglas de acceso después de deshabilitar la herencia:"
Get-Acl -Path $Path | Select-Object -ExpandProperty Access | Format-Table

Si observamos los permisos en modo gráfico, podemos ver como hemos deshabilitado la herencia.

image-20231018114457068

Ejemplo2: Habilitar la herencia de la carpeta prueba

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Paso 1: Obtener las reglas de acceso actuales
$Path = "C:\prueba"
$Acl = Get-Acl -Path $Path

# Mostrar las reglas de acceso antes de hacer cambios
Write-Host "Reglas de acceso antes de los cambios:"
$Acl.Access | Format-Table

# Paso 2: Habilitar la herencia 
$Acl.SetAccessRuleProtection($false, $true)

# Aplicar los cambios
Set-Acl -Path $Path -AclObject $Acl

# Mostrar las reglas de acceso después de shabilitar la herencia
Write-Host "Reglas de acceso después de h 

Herencia en objetos secundarios

  • La herencia (Inheritance) es a qué tipo de objetos secundarios se aplica la ACE

    • ContainerInherit = Los objetos contenedores secundarios se heredan de la ACE
    • None = Los objetos secundarios no se heredan de la ACE.
    • ObjectInherit = Los objetos hoja secundarios se heredan de la ACE.

Propagación

  • La propagación (propagation) controla a qué generación de objetos secundarios está restringida la ACE.

    • Ninguno = ACE se aplica a todos.
    • InheritOnly = ACE se aplica solo a hijos y nietos, no a la carpeta de destino.
    • NoPropagateInherit = Carpeta de destino y carpeta de destino hijos, no nietos

Ejemplo1: Asignar permisos de control total a todos los usuarios

image-20231017112106087

Anexo I. Referencia a los elementos del Active Directory

Para referenciar a los objetos del Active Directory utilizamos su Distinguised Name (DN) . El DN permite identificar un objeto de manera única dentro de la jerarquía del Active Directory. Se forma a partir de un atributo=valor, separado por comas. A continuación se muestran los diferentes tipos de atributos que existen:

Objeto Atributo
Usuario CN [Common Name]
Grupo CN [Common Name]
Equipo CN [Common Name]
Unidad Organizativa OU [Organizational Unit ]
Dominio DC [Domain Component]

Ejemplo 1: DN de una unidad organizativa

1
2
Distinguised Name: OU=VENTAS, OU=EMPRESA, DC=IESELCAMINAS,DC=LOCAL

Ejemplo 2: DN de un usuario que está ubicado dentro de la unidad organizativa ventas.

1
Distinguised Name: CN=usuario1,OU=VENTAS, OU=EMPRESA, DC=IESELCAMINAS,DC=LOCAL

Licencia de Creative Commons
Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional.