Archivo

Archivo para diciembre, 2012

SCRIPT – saber todos los usuarios que pertenecen a un directorio

martes, 18 de diciembre de 2012 Comments off

Hola a todos,

Esta vez os voy a dejar un Script que he tenido que montar para saber los usuarios que tienen acceso a unos directorios compartidos. Esta petición sería muy complicada, si no fuera, por que uno de los directorios en cuestión es un maldito saco roto con 15 grupos de directorio activo, con herencias cortadas, etc.

El Script que se lanza, genera 1 fichero que indicamos nosotros, en este caso, logACL o el nombre del directorio a extraer la información, y tantos ficheros Grupo_AD/user como permisos tienen.

Para lanzar el Script, tenemos que pasar como parámetro, el directorio a realizar el escaneo, y el fichero en donde indicará todas las ACL del directorio y subdirectorios.

cscript ListACLFolders.vbs DIR_ACL_FIND LogACL.csv

Nos generará un CSV, o fichero plano de texto con los siguientes campos:

  • Día
  • Hora
  • Directorio
  • Grupo o usuario
  • Permisos comunes
  • Permisos especiales
  • Tipo de acceso
  • Herencia
  • Errores

Deberemos de modificar la variable strDirectory dentro del proceso ShowSubACL para indicarle en donde vamos a guardar los grupos de acceso de cada directorio.

El SCRIPT:

On Error Resume Next
Const ForAppending = 8
‘Commom Permissions
Const FOLDER_FULL_CONTROL = 2032127
Const FOLDER_MODIFY = 1245631
Const FOLDER_READ_ONLY = 1179785
Const FOLDER_READ_CONTENT_EXECUTE =  1179817
Const FOLDER_READ_CONTENT_EXECUTE_WRITE =  1180095
Const FOLDER_WRITE = 1179926
Const FOLDER_READ_WRITE = 1180063
‘Special Permissions
Const FOLDER_LIST_DIRECTORY = 1
Const FOLDER_ADD_FILE = 2
Const FOLDER_ADD_SUBDIRECTORY = 4
Const FOLDER_READ_EA = 8
Const FOLDER_WRITE_EA = 16
Const FOLDER_EXECUTE = 32
Const FOLDER_DELETE_CHILD = 64
Const FOLDER_READ_ATTRIBUTES = 128
Const FOLDER_WRITE_ATTRIBUTES = 256
Const FOLDER_DELETE = 65536
Const FOLDER_READ_CONTROL = 131072
Const FOLDER_WRITE_DAC = 262144
Const FOLDER_WRITE_OWNER = 524288
Const FOLDER_SYNCHRONIZE = 1048576
Const FOLDER_INHERITED_ACE = 16
Const SE_DACL_PRESENT = 4
Const ACCESS_ALLOWED_ACE_TYPE = 0
Const ACCESS_DENIED_ACE_TYPE  = 1

strComputer = «.»
strTargetPath = WScript.Arguments.Item(0)
strOutFile = WScript.Arguments.Item(1)
strdrop = «»

Set objFSO = CreateObject(«Scripting.FileSystemObject»)
Set objOutFile = objFSO.OpenTextFile(strOutFile, ForAppending, True)

objOutFile.Writeline «Date;Time;Folder;Group / User Name;Commom Permission’s;Special Permission’s;Access Type;Inheritance;Error’s»

ShowSubACL objFSO.GetFolder(strTargetPath)
ShowSubfolders objFSO.GetFolder(strTargetPath)

objOutFile.Close

Sub ShowSubFolders(Folder)
 On Error Resume Next
    For Each Subfolder in Folder.SubFolders
  ShowSubACL(Subfolder.Path)
  
  ShowSubFolders Subfolder
  If Err.Number = 0 Then
   strErros = «No Error’s»
  ElseIf Err.Number = 451 Then
   strErros = «No Error’s»
   Err.clear
  Else
   strErros = «Cod.: » & Err.Number & » Desc.: » & Err.description
   objOutFile.Writeline Date() & «;» & Time() & «;» & FolderPerm & «;» & «» & «» & «» & «;» & «» & «;» & «» & «;» & «»  & «;» & «» & «;» & strErros
   Err.clear
  End If
    Next
End Sub

Sub ShowSubACL(FolderPerm)
 On Error Resume Next
 strCPerm = «»
 strSPerm = «»
 strTypePerm = «»
 strInherit = «»
 strErros = «»
 Dim WshShell, strDirectory, strFile
 Set WshShell = WScript.CreateObject(«Wscript.Shell»)
 Set objWMIService = GetObject(«winmgmts:»)
 Set objFolderSecuritySettings = objWMIService.Get(«Win32_LogicalFileSecuritySetting='» & FolderPerm & «‘»)
 intRetVal = objFolderSecuritySettings.GetSecurityDescriptor(objSD)
 intControlFlags = objSD.ControlFlags
 strDirectory = «DIRECTORIO_EN_DONDE_GUARDAR_LOS_GRUPOS_CON_USUARIOS»
 Set objFSO = CreateObject(«Scripting.FileSystemObject»)
 If intControlFlags AND SE_DACL_PRESENT Then
  arrACEs = objSD.DACL
  If Err.Number = 0 Then
   strErros = «No Error’s»
  Else
   strErros = «Cod.: » & Err.Number & » Desc.: » & Err.description
   objOutFile.Writeline Date() & «;» & Time() & «;»»» & FolderPerm  & «»»;» & «» & «» & «» & «;» & «» & «;» & «» & «;» & «»  & «;» & «» & «;» & strErros
   Err.clear
  End If
  For Each objACE in arrACEs
   
 
   ‘ACL Type
   If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then strTypePerm = «Allowed»
   If objACE.AceType = ACCESS_DENIED_ACE_TYPE Then strTypePerm = «Denied»
   
   ‘Inherit
   If objAce.AceFlags AND FOLDER_INHERITED_ACE Then
    strInherit = «Yes»
   Else
    strInherit = «No»
   End if
   
   ‘Commom Permissions
   If objACE.AccessMask = FOLDER_FULL_CONTROL Then
    strCPerm = «Full Control»
   ElseIf objACE.AccessMask = FOLDER_MODIFY Then
    strCPerm = «Modify»
   ElseIf objACE.AccessMask = FOLDER_READ_CONTENT_EXECUTE_WRITE Then
    strCPerm = «Read & Execute / List Folder Contents (folders only) + Write»
   ElseIf objACE.AccessMask = FOLDER_READ_CONTENT_EXECUTE Then
    strCPerm = «Read & Execute / List Folder Contents (folders only)»
   ElseIf objACE.AccessMask = FOLDER_READ_WRITE Then
    strCPerm = «Read + Write»
   ElseIf objACE.AccessMask = FOLDER_READ_ONLY Then
    strCPerm = «Read Only»
   ElseIf objACE.AccessMask = FOLDER_WRITE Then
    strCPerm = «Write»
   Else
    strCPerm = «Special»
   End If
   
   ‘Special Permissions
   strSPerm = «»
   If objACE.AccessMask and FOLDER_EXECUTE Then strSPerm = strSPerm & «Traverse Folder/Execute File, »
   If objACE.AccessMask and FOLDER_LIST_DIRECTORY Then strSPerm = strSPerm & «List Folder/Read Data, »
   If objACE.AccessMask and FOLDER_READ_ATTRIBUTES Then strSPerm = strSPerm & «Read Attributes, »
   If objACE.AccessMask and FOLDER_READ_EA Then strSPerm = strSPerm & «Read Extended Attributes, »
   If objACE.AccessMask and FOLDER_ADD_FILE Then strSPerm = strSPerm & «Create Files/Write Data, »
   If objACE.AccessMask and FOLDER_ADD_SUBDIRECTORY Then strSPerm = strSPerm & «Create Folders/Append Data»
   If objACE.AccessMask and FOLDER_WRITE_ATTRIBUTES Then strSPerm = strSPerm & «Write Attributes, »
   If objACE.AccessMask and FOLDER_WRITE_EA Then strSPerm = strSPerm & «Write Extended Attributes, »
   If objACE.AccessMask and FOLDER_DELETE_CHILD Then strSPerm = strSPerm & «Delete Subfolders and Files, »
   If objACE.AccessMask and FOLDER_DELETE Then strSPerm = strSPerm & «Delete, »
   If objACE.AccessMask and FOLDER_READ_CONTROL Then strSPerm = strSPerm & «Read Permissions, »
   If objACE.AccessMask and FOLDER_WRITE_DAC Then strSPerm = strSPerm & «Change Permissions, »
   If objACE.AccessMask and FOLDER_WRITE_OWNER Then strSPerm = strSPerm & «Take Ownership, »
   If objACE.AccessMask and FOLDER_SYNCHRONIZE Then strSPerm = strSPerm & «Synchronize, »
   If trim(strSPerm) <> «» then strSPerm =  left(strSPerm, len(strSPerm)-2)

   If UCase(strdrop) = UCase(«/dropInherit») and objAce.AceFlags AND FOLDER_INHERITED_ACE Then
 
   Else 
    objOutFile.Writeline Date() & «;» & Time() & «;»»» & FolderPerm & «»»;»»» & objACE.Trustee.Domain & «» & objACE.Trustee.Name & «»»;» & strCPerm & «;» & strSPerm & «;» & strTypePerm  & «;» & strInherit & «;» & strErros
 
   
    strFile = strDirectory & «» & objACE.Trustee.Name &».TXT»
    If objFSO.FileExists(strFile) Then
    Else
       desquerygroup = «dsquery group -samid » & chr(34) & objACE.Trustee.Name & chr(34) & » | dsget group -members -expand | dsget user -samid -display> » & strFile
       wshShell.Run  «cmd.exe /C » & desquerygroup
       
    End if
   End if 
  Next
 End If
End Sub

un Saludo!