miércoles, 13 de abril de 2016

PS.AD. Active-Directory-Health

Navegando por Internet he encontrado un script muy interesante, su resultado nos puede dar cierta tranquilidad si nos proponemos verlo cada mañana. Este script hace un grupo de pruebas en las que nos da la salud de los servicios más importantes de nuestro Directorio Activo.

Si ejecutamos el script veremos lo siguiente por pantalla:




Recibiremos un email tipo:


Lo mejor es planificar una tarea diaria o semanal que nos envíe de manera automática esta información, algunos de los parámetros que tenemos que tener en cuenta son:




La pega que le veo a este script es que tiene que ejecutarse con un usuario administrador. He intentado hacer lo más seguro posible este usuario con los siguiente consejos: uno sería poner la contraseña de 30 dígitos (números, mayúsculas, símbolos, etc...) de longitud y he añadido alguna cosa más como:



Que nadie pueda cambiar su contraseña.

Que solo pueda hacer logon en mis DCs en unas franjas horarias limitadas, esto lo hago porque también uso este usuario para otras tareas, pero si solo se va a usar para este script lo mejor es poner los hosts donde va a usarse, en otras ocasiones para securizar este tipo de usuarios pongo un host que no existe, por ejemplo "PC_borrar", con lo que la tarea se ejecuta pero evitas que el usuario pueda hacer logon en alguna máquina que no sea la que nos interesa.



Por último he modificado los permisos NTFS del fichero limitándolo a el usuario que he configurado como el único que tenga acceso de escritura y ejecución.

Código:

#############################################################################
#       Author: Vikas Sukhija
#       Reviewer:    
#       Date: 12/25/2014
#       Satus: Ping,Netlogon,NTDS,DNS,DCdiag Test(Replication,sysvol,Services)
#       Update: Added Advertising
#       Description: AD Health Status
#############################################################################
###########################Define Variables##################################

$reportpath = ".\ADReport.htm" 

if((test-path $reportpath) -like $false)
{
new-item $reportpath -type file
}
$smtphost = "11.11.11.11" 
$from = "AD_Health_Status@wbcndc01.local" 
$email1 = "SISTEMAS@midomioes"
$timeout = "60"

###############################HTml Report Content############################
$report = $reportpath

Clear-Content $report 
Add-Content $report "<html>" 
Add-Content $report "<head>" 
Add-Content $report "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" 
Add-Content $report '<title>AD Status Report</title>' 
add-content $report '<STYLE TYPE="text/css">' 
add-content $report  "<!--" 
add-content $report  "td {" 
add-content $report  "font-family: Tahoma;" 
add-content $report  "font-size: 11px;" 
add-content $report  "border-top: 1px solid #999999;" 
add-content $report  "border-right: 1px solid #999999;" 
add-content $report  "border-bottom: 1px solid #999999;" 
add-content $report  "border-left: 1px solid #999999;" 
add-content $report  "padding-top: 0px;" 
add-content $report  "padding-right: 0px;" 
add-content $report  "padding-bottom: 0px;" 
add-content $report  "padding-left: 0px;" 
add-content $report  "}" 
add-content $report  "body {" 
add-content $report  "margin-left: 5px;" 
add-content $report  "margin-top: 5px;" 
add-content $report  "margin-right: 0px;" 
add-content $report  "margin-bottom: 10px;" 
add-content $report  "" 
add-content $report  "table {" 
add-content $report  "border: thin solid #000000;" 
add-content $report  "}" 
add-content $report  "-->" 
add-content $report  "</style>" 
Add-Content $report "</head>" 
Add-Content $report "<body>" 
add-content $report  "<table width='100%'>" 
add-content $report  "<tr bgcolor='Lavender'>" 
add-content $report  "<td colspan='7' height='25' align='center'>" 
add-content $report  "<font face='tahoma' color='#003399' size='4'><strong>MiDominio.Local - Active Directory Health Check</strong></font>" 
add-content $report  "</td>" 
add-content $report  "</tr>" 
add-content $report  "</table>" 

add-content $report  "<table width='100%'>" 
Add-Content $report  "<tr bgcolor='IndianRed'>" 
Add-Content $report  "<td width='5%' align='center'><B>Identity</B></td>" 
Add-Content $report  "<td width='10%' align='center'><B>PingSTatus</B></td>" 
Add-Content $report  "<td width='10%' align='center'><B>NetlogonService</B></td>" 
Add-Content $report  "<td width='10%' align='center'><B>NTDSService</B></td>" 
Add-Content $report  "<td width='10%' align='center'><B>DNSServiceStatus</B></td>" 
Add-Content $report  "<td width='10%' align='center'><B>NetlogonsTest</B></td>"
Add-Content $report  "<td width='10%' align='center'><B>ReplicationTest</B></td>"
Add-Content $report  "<td width='10%' align='center'><B>ServicesTest</B></td>"
Add-Content $report  "<td width='10%' align='center'><B>AdvertisingTest</B></td>"
Add-Content $report  "<td width='10%' align='center'><B>FSMOCheckTest</B></td>"

Add-Content $report "</tr>" 

#####################################Get ALL DC Servers#################################
$getForest = [system.directoryservices.activedirectory.Forest]::GetCurrentForest()

$DCServers = $getForest.domains | ForEach-Object {$_.DomainControllers} | ForEach-Object {$_.Name} 


################Ping Test######

foreach ($DC in $DCServers){
$Identity = $DC
                Add-Content $report "<tr>"
if ( Test-Connection -ComputerName $DC -Count 1 -ErrorAction SilentlyContinue ) {
Write-Host $DC `t $DC `t Ping Success -ForegroundColor Green

Add-Content $report "<td bgcolor= 'GainsBoro' align=center>  <B> $Identity</B></td>" 
                Add-Content $report "<td bgcolor= 'Aquamarine' align=center>  <B>Success</B></td>" 

                ##############Netlogon Service Status################
$serviceStatus = start-job -scriptblock {get-service -ComputerName $($args[0]) -Name "Netlogon" -ErrorAction SilentlyContinue} -ArgumentList $DC
                wait-job $serviceStatus -timeout $timeout
                if($serviceStatus.state -like "Running")
                {
                 Write-Host $DC `t Netlogon Service TimeOut -ForegroundColor Yellow
                 Add-Content $report "<td bgcolor= 'Yellow' align=center><B>NetlogonTimeout</B></td>"
                 stop-job $serviceStatus
                }
                else
                {
                $serviceStatus1 = Receive-job $serviceStatus
                 if ($serviceStatus1.status -eq "Running") {
    Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Green 
            $svcName = $serviceStatus1.name 
            $svcState = $serviceStatus1.status          
            Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>$svcState</B></td>" 
                  }
                 else 
                  { 
         Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Red 
           $svcName = $serviceStatus1.name 
           $svcState = $serviceStatus1.status          
           Add-Content $report "<td bgcolor= 'Red' align=center><B>$svcState</B></td>" 
                  } 
                }
               ######################################################
                ##############NTDS Service Status################
$serviceStatus = start-job -scriptblock {get-service -ComputerName $($args[0]) -Name "NTDS" -ErrorAction SilentlyContinue} -ArgumentList $DC
                wait-job $serviceStatus -timeout $timeout
                if($serviceStatus.state -like "Running")
                {
                 Write-Host $DC `t NTDS Service TimeOut -ForegroundColor Yellow
                 Add-Content $report "<td bgcolor= 'Yellow' align=center><B>NTDSTimeout</B></td>"
                 stop-job $serviceStatus
                }
                else
                {
                $serviceStatus1 = Receive-job $serviceStatus
                 if ($serviceStatus1.status -eq "Running") {
    Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Green 
            $svcName = $serviceStatus1.name 
            $svcState = $serviceStatus1.status          
            Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>$svcState</B></td>" 
                  }
                 else 
                  { 
         Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Red 
           $svcName = $serviceStatus1.name 
           $svcState = $serviceStatus1.status          
           Add-Content $report "<td bgcolor= 'Red' align=center><B>$svcState</B></td>" 
                  } 
                }
               ######################################################
                ##############DNS Service Status################
$serviceStatus = start-job -scriptblock {get-service -ComputerName $($args[0]) -Name "DNS" -ErrorAction SilentlyContinue} -ArgumentList $DC
                wait-job $serviceStatus -timeout $timeout
                if($serviceStatus.state -like "Running")
                {
                 Write-Host $DC `t DNS Server Service TimeOut -ForegroundColor Yellow
                 Add-Content $report "<td bgcolor= 'Yellow' align=center><B>DNSTimeout</B></td>"
                 stop-job $serviceStatus
                }
                else
                {
                $serviceStatus1 = Receive-job $serviceStatus
                 if ($serviceStatus1.status -eq "Running") {
    Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Green 
            $svcName = $serviceStatus1.name 
            $svcState = $serviceStatus1.status          
            Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>$svcState</B></td>" 
                  }
                 else 
                  { 
         Write-Host $DC `t $serviceStatus1.name `t $serviceStatus1.status -ForegroundColor Red 
           $svcName = $serviceStatus1.name 
           $svcState = $serviceStatus1.status          
           Add-Content $report "<td bgcolor= 'Red' align=center><B>$svcState</B></td>" 
                  } 
                }
               ######################################################

               ####################Netlogons status##################
               add-type -AssemblyName microsoft.visualbasic 
               $cmp = "microsoft.visualbasic.strings" -as [type]
               $sysvol = start-job -scriptblock {dcdiag /test:netlogons /s:$($args[0])} -ArgumentList $DC
               wait-job $sysvol -timeout $timeout
               if($sysvol.state -like "Running")
               {
               Write-Host $DC `t Netlogons Test TimeOut -ForegroundColor Yellow
               Add-Content $report "<td bgcolor= 'Yellow' align=center><B>NetlogonsTimeout</B></td>"
               stop-job $sysvol
               }
               else
               {
               $sysvol1 = Receive-job $sysvol
               if($cmp::instr($sysvol1, "passed test NetLogons"))
                  {
                  Write-Host $DC `t Netlogons Test passed -ForegroundColor Green
                  Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>NetlogonsPassed</B></td>"
                  }
               else
                  {
                  Write-Host $DC `t Netlogons Test Failed -ForegroundColor Red
                  Add-Content $report "<td bgcolor= 'Red' align=center><B>NetlogonsFail</B></td>"
                  }
                }
               ########################################################
               ####################Replications status##################
               add-type -AssemblyName microsoft.visualbasic 
               $cmp = "microsoft.visualbasic.strings" -as [type]
               $sysvol = start-job -scriptblock {dcdiag /test:Replications /s:$($args[0])} -ArgumentList $DC
               wait-job $sysvol -timeout $timeout
               if($sysvol.state -like "Running")
               {
               Write-Host $DC `t Replications Test TimeOut -ForegroundColor Yellow
               Add-Content $report "<td bgcolor= 'Yellow' align=center><B>ReplicationsTimeout</B></td>"
               stop-job $sysvol
               }
               else
               {
               $sysvol1 = Receive-job $sysvol
               if($cmp::instr($sysvol1, "passed test Replications"))
                  {
                  Write-Host $DC `t Replications Test passed -ForegroundColor Green
                  Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>ReplicationsPassed</B></td>"
                  }
               else
                  {
                  Write-Host $DC `t Replications Test Failed -ForegroundColor Red
                  Add-Content $report "<td bgcolor= 'Red' align=center><B>ReplicationsFail</B></td>"
                  }
                }
               ########################################################
      ####################Services status##################
               add-type -AssemblyName microsoft.visualbasic 
               $cmp = "microsoft.visualbasic.strings" -as [type]
               $sysvol = start-job -scriptblock {dcdiag /test:Services /s:$($args[0])} -ArgumentList $DC
               wait-job $sysvol -timeout $timeout
               if($sysvol.state -like "Running")
               {
               Write-Host $DC `t Services Test TimeOut -ForegroundColor Yellow
               Add-Content $report "<td bgcolor= 'Yellow' align=center><B>ServicesTimeout</B></td>"
               stop-job $sysvol
               }
               else
               {
               $sysvol1 = Receive-job $sysvol
               if($cmp::instr($sysvol1, "passed test Services"))
                  {
                  Write-Host $DC `t Services Test passed -ForegroundColor Green
                  Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>ServicesPassed</B></td>"
                  }
               else
                  {
                  Write-Host $DC `t Services Test Failed -ForegroundColor Red
                  Add-Content $report "<td bgcolor= 'Red' align=center><B>ServicesFail</B></td>"
                  }
                }
               ########################################################
      ####################Advertising status##################
               add-type -AssemblyName microsoft.visualbasic 
               $cmp = "microsoft.visualbasic.strings" -as [type]
               $sysvol = start-job -scriptblock {dcdiag /test:Advertising /s:$($args[0])} -ArgumentList $DC
               wait-job $sysvol -timeout $timeout
               if($sysvol.state -like "Running")
               {
               Write-Host $DC `t Advertising Test TimeOut -ForegroundColor Yellow
               Add-Content $report "<td bgcolor= 'Yellow' align=center><B>AdvertisingTimeout</B></td>"
               stop-job $sysvol
               }
               else
               {
               $sysvol1 = Receive-job $sysvol
               if($cmp::instr($sysvol1, "passed test Advertising"))
                  {
                  Write-Host $DC `t Advertising Test passed -ForegroundColor Green
                  Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>AdvertisingPassed</B></td>"
                  }
               else
                  {
                  Write-Host $DC `t Advertising Test Failed -ForegroundColor Red
                  Add-Content $report "<td bgcolor= 'Red' align=center><B>AdvertisingFail</B></td>"
                  }
                }
               ########################################################
      ####################FSMOCheck status##################
               add-type -AssemblyName microsoft.visualbasic 
               $cmp = "microsoft.visualbasic.strings" -as [type]
               $sysvol = start-job -scriptblock {dcdiag /test:FSMOCheck /s:$($args[0])} -ArgumentList $DC
               wait-job $sysvol -timeout $timeout
               if($sysvol.state -like "Running")
               {
               Write-Host $DC `t FSMOCheck Test TimeOut -ForegroundColor Yellow
               Add-Content $report "<td bgcolor= 'Yellow' align=center><B>FSMOCheckTimeout</B></td>"
               stop-job $sysvol
               }
               else
               {
               $sysvol1 = Receive-job $sysvol
               if($cmp::instr($sysvol1, "passed test FsmoCheck"))
                  {
                  Write-Host $DC `t FSMOCheck Test passed -ForegroundColor Green
                  Add-Content $report "<td bgcolor= 'Aquamarine' align=center><B>FSMOCheckPassed</B></td>"
                  }
               else
                  {
                  Write-Host $DC `t FSMOCheck Test Failed -ForegroundColor Red
                  Add-Content $report "<td bgcolor= 'Red' align=center><B>FSMOCheckFail</B></td>"
                  }
                }
               ########################################################
                

else
              {
Write-Host $DC `t $DC `t Ping Fail -ForegroundColor Red
Add-Content $report "<td bgcolor= 'GainsBoro' align=center>  <B> $Identity</B></td>" 
                Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>" 
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>" 
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>" 
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>" 
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>"
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>"
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>"
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>"
Add-Content $report "<td bgcolor= 'Red' align=center>  <B>Ping Fail</B></td>"
}         
       


Add-Content $report "</tr>"
############################################Close HTMl Tables###########################


Add-content $report  "</table>" 
Add-Content $report "</body>" 
Add-Content $report "</html>" 


########################################################################################
#############################################Send Email#################################


$subject = "MiDominio.Local. Active Directory Health Monitor" 
$body = Get-Content ".\ADreport.htm" 
$smtp= New-Object System.Net.Mail.SmtpClient $smtphost 
$msg = New-Object System.Net.Mail.MailMessage 
$msg.To.Add($email1)
$msg.from = $from
$msg.subject = $subject
$msg.body = $body 
$msg.isBodyhtml = $true 
$smtp.send($msg) 

########################################################################################

########################################################################################

Guardarlo con extension .PS1
      
Los campos a modificar son fáciles de localizar, como nuestro servidor smtp, email de destino y algún título del report.
  
Descargado de: https://gallery.technet.microsoft.com/scriptcenter/Active-Directory-Health-709336cd


martes, 12 de abril de 2016

GPO. Distribuir certificados en PCs


Cada día salen más casos para hacer uso de esta configuración de GPO's, ya sea para confiar en nuestro Proxy, por la necesidad de algún cliente para un grupo específico de PCs, para que cuando nos conectemos una web de nuestra LAN, etc... 


Empezamos....  vamos a uno de nuestros controladores y ejecutamos la herramienta de GPO's (gpmc.msc)

Vamos a la siguiente rama



Le damos a añadir cerfificado


 Lo importamos



Nos deberá quedar algo parecido a:


Ahora toca asociarlo a la OU/s que estemos interesados en aplicarlo.


REF: https://technet.microsoft.com/en-us/library/cc731253(v=ws.10).aspx

Gon Abril 2016

martes, 8 de marzo de 2016

NAGIOS. WMI. Permisos en hosts para verificar servicios Windows sin usuario administrador



En este post explicaré como poder mirar el estatus de un servicio Windows desde Nagios, sin que el usuario que lo consulte tenga permisos de administrador. Todos mis hosts windows los monitorizo por WMI.

Nota: Antes de probar este procedimiento lee muy atento todo el artículo.
 
Primero empezaremos por una solución rápida. Solucionar problemas del tipo



Ejecutamos como administrador: %windir%\system32\wbem\wmiadap.exe /f
 
 "Este comando analiza todas las bibliotecas de rendimiento del sistema y actualiza las clases de contador de rendimiento. Para obtener más detalles, consulte la Documentación de instrumentación de administración de Windows ."

Seguidamente ejecutaremos el comando: lodctr /R


Si con lo anterior no se soluciona pasamos a la parte más manual y delicada

Para que esto funcione previamente hay que configurar una cuenta en el hosts de la manera que Nagios indica: http://gonsystem.blogspot.com.es/2016/02/monitorizacion-nagios-y-wmi-anadir.html

Hay que tener privilegios administrativos para que se ejecuten los siguientes commandos:

La información que nos va a dar los comandos siguientes puede ser diferente en cada servidor.

[0] Nos conectamos al servidor y abrimos un CMD con privilegios de administrador.

[1] Buscamos la cadena de SID de nuestro usuario “nagiosuser”

 wmic useraccount where name='nagiosuser' get sid


S-1-5-21-3406756-423087055-1055211938-23112

[2] consultamos la cadena actual de permisos “scmanager”

Sc sdshow scmanager


D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

[3 ] La documentación que encuentro en Internet pone que añadamos el comando siguiente sustituyendo <SID> por el número SID que hemos obtenido en el paso 1. 

sc sdset SCMANAGER D:(A;;CCLCRPRC;;;<SID>)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)  ->recomendada

Como es un tema delicado y estamos tocando servidores he probado una pequeña variación, se trata de mantener toda la cadena que hemos obtenido en el punto 2 y añadir los permisos de mi usuario, en lugar de sustituir algo que ya exista.

Me he encontrado casos en los que no tiene acceso nuestro usuario para ver el estado de TODOS los servicios que queremos monitorizar, con lo que he añadido un permiso más, se trata de "LO"

sc sdset SCMANAGER D:(A;;CCLCRPRCLO;;;<SID>)

Que nos concede lo siguiente:

LO – SERVICE_INTERROGATE – ask the service its current status

Con lo que haría:

El comando: sc sdset SCMANAGER

Mi cadena optenida paso 1 -> (A;;CCLCRPRCLO;;;S-1-5-21-3406756-423087055-1055211938-23112)

Cojo la configuración recomendada y le añado mi SID

La cadena del hosts optenida paso 2 -> D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

El resultado:
sc sdset SCMANAGER D:(A;;CCLCRPRCLO;;;S-1-5-21-3406756-423087055-1055211938-23112)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)


Importante que no se añada ni un espacio en blanco que no sean las cadenas que hemos obtenido.

Si al final sale un problema, una posible solución es http://woshub.com/granting-remote-access-on-scmanager-to-non-admin-users/


Ahora comprobamos nuestro Nagios, en este caso miraremos el "spooler" que es el servicio de imprEsión de Windows, con los permisos dados podríamos mirar cualquiera






Si hay problemas y queremos dejar como estaba el servidor bastaría con insertar el resultado original del "Sc sdshow scmanager"

Para entender un poco lo que hemos hecho....

Lo que hemos hecho es dar derechos al usuario usernagios para acceder de forma remota a scmanger.

El comando SC solo funciona para el control a distancia de servicios. Todos los permisos que se pueden dar son los siguientes:

  F : Full Control
  R : Generic Read
  W : Generic Write
  X : Generic eXecute
  L : Read controL
  Q : Query Service Configuration
  S : Query Service Status
  E : Enumerate Dependent Services
  C : Service Change Configuration
  T : Start Service
  O : Stop Service
  P : Pause/Continue Service
  I : Interrogate Service
  U : Service User-Defined Control Commands


La primera letra representa Permitir (A) lo contrario de Denegar que se representa por una (D). Cada par de letras representa un permiso específico:

CC – SERVICE_QUERY_CONFIG – ask the SCM for the service’s current configuration
LC – SERVICE_QUERY_STATUS – ask the SCM for the service’s current status
SW – SERVICE_ENUMERATE_DEPENDENTS – list dependent services
LO – SERVICE_INTERROGATE – ask the service its current status
CR – SERVICE_USER_DEFINED_CONTROL – send a service control defined by the service’s authors
RC – READ_CONTROL – read the security descriptor on this service.

Permisos adicionales:

RP – SERVICE_START – start the service
WP – SERVICE_STOP – stop the service
DT – SERVICE_PAUSE_CONTINUE – pause / continue the service

Las dos últimas letras definen la entidad de seguridad asignado a estos permisos:

AU – Authenticated Users

Posibles alias:

“AO” Account operators
“RU” Alias to allow previous Windows 2000
“AN” Anonymous logon
“AU” Authenticated users
“BA” Built-in administrators
“BG” Built-in guests
“BO” Backup operators
“BU” Built-in users
“CA” Certificate server administrators
“CG” Creator group
“CO” Creator owner
“DA” Domain administrators
“DC” Domain computers
“DD” Domain controllers
“DG” Domain guests
“DU” Domain users
“EA” Enterprise administrators
“ED” Enterprise domain controllers
“WD” Everyone
“PA” Group Policy administrators
“IU” Interactively logged-on user
“LA” Local administrator
“LG” Local guest
“LS” Local service account
“SY” Local system
“NU” Network logon user
“NO” Network configuration operators
“NS” Network service account
“PO” Printer operators
“PS” Personal self
“PU” Power users
“RS” RAS servers group
“RD” Terminal server users
“RE” Replicator
“RC” Restricted code
“SA” Schema administrators
“SO” Server operators
“SU” Service logon user 

Miramos este ejemplo:

(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)

A – Allow
CC – SERVICE_QUERY_CONFIG – ask the SCM for the service’s current configuration
DC – Delete All Child Objects
LC – SERVICE_QUERY_STATUS – ask the SCM for the service’s current status
SW – SERVICE_ENUMERATE_DEPENDENTS – list dependent services
RP – Read all properites
WP – SERVICE_STOP – stop the service
DT – SERVICE_PAUSE_CONTINUE – pause / continue the service
LO – SERVICE_INTERROGATE – ask the service its current status
CR – SERVICE_USER_DEFINED_CONTROL – send a service control defined by the service’s authors
SD – Delete
RC – READ_CONTROL – read the security descriptor on this service.
WD – Modify permissions
WO – Modify owner
BA- Built-in administrators

Más info https://msdn.microsoft.com/en-us/library/aa374928(v=vs.85).aspx?tduid=(23d870496ae9d9381d9b898ca39fabf9)(256380)(2459594)(TnL5HPStwNw-g23csJa_kmQHrAWHkza0GA)() Para ver los permisos de un servicio en concreto lo podemos hacer:







MUY IMPORTANTE: Haz pruebas antes de poner en producción este procedimiento, si puede ser ten copias de seguridad,  snapshots, reinicia las veces que haga falta, comprueba los eventos, mira los servios etc ... un espacio mal puesto deja inestable e inaccesible el servidor. Yo he hecho más de 100 servidores sin problemas (IIS, SQL, FS, DNS, DC, etc...) pero hay que estar muy atentos durante estas actuaciones.

Si no tienes muy claro lo que vas hacer NO lo hagas, la responsabilidad de los servidores es tuya. Antes de hacer algo tan delicado contrasta con otras webs o consúltalo con un experto.

Es importante vuestra opinión, no hay mucha documentación de este tema, así que si lo probáis sería bueno que lo comentéis.

Artículo relaconado: http://gonsystem.blogspot.com.es/2016/02/monitorizacion-nagios-y-wmi-anadir.html


Check at Windows 2012 R2
by GoN | Published: May, 2016 | Last Updated: Abril  26, 2022