none
Автоматический учет разрешений на папке RRS feed

  • Общие обсуждения

  •  

    Здравствуйте.

    Подскажите каким образом возможно получить информацию по папке (или шаре) включая все подпапки, а именно какие пользователи и группы имеют разрешения и список этих разрешений для каждой подпапки. Т.е. ввести имя папки и получить полный список всех разрешений по всем подпапкам для пользователей и групп.

     

    10 апреля 2008 г. 10:17

Все ответы

  • Если речь идёт об ntfs-разрешениях, то их можно получить через cacls.exe. Например на диске d есть директория test1,а в ней test2. Тогда

    D:\>cacls d:\test1 /t
    d:\test1 BUILTIN\Администраторы (OI)(CI)F
             NT AUTHORITY\SYSTEM (OI)(CI)F
             СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ (OI)(CI)(IO)F
             BUILTIN\Пользователи (OI)(CI)R
             BUILTIN\Пользователи (CI)(специальный доступ)
                                      FILE_APPEND_DATA
             BUILTIN\Пользователи(CI)(специальный доступ)
                                      FILE_WRITE_DATA


    d:\test1\test2 BUILTIN\Администраторы(OI)(CI)F
                   NT AUTHORITY\SYSTEM(OI)(CI)F
                   СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ(OI)(CI)(IO)F
                   BUILTIN\Пользователи(OI)(CI)R
                   BUILTIN\Пользователи(CI)(специальный доступ)
                                            FILE_APPEND_DATA
                   BUILTIN\Пользователи(CI)(специальный доступ)
                                            FILE_WRITE_DATA


    10 апреля 2008 г. 11:41
  • Да это практически то что нужно.

    А возможно ли как то убрать файлы, оставив только каталоги?

    А то список получается большой.

    10 апреля 2008 г. 13:13
  • Тогда можно поступить иначе - обойти все каталоги в указанной директории и через cacls получить действующие ntfs-разрешения
    Обход каталогов:

    ' browse.vbs
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    set WshShell = WScript.CreateObject("WScript.Shell")
    Set objParentFolder = objFSO.GetFolder("D:\test1") ' задаём директорию верхнего уровня
    Result = ""
    ShowSubfolders objParentFolder

    Sub ShowSubFolders(Folder)
       For Each Subfolder in Folder.SubFolders
        Set objSubFolder = objFSO.GetFolder(Subfolder.Path)
        ShowSubFolders Subfolder
        Result = Result & Subfolder & CHR(10) ' вместо этого следует через WshShell.Run запустить cacls применительно к текущей директории
       Next
    End Sub
    WScript.Echo Result



    10 апреля 2008 г. 14:07
  •  Сергей Спирин написано:

    А возможно ли как то убрать файлы, оставив только каталоги?

    А то список получается большой.



    for /r d:\test1 /d %i in (*) do @cacls "%i"
    10 апреля 2008 г. 14:23
  • Нечто похожее, но на PowerShell:

    Code Snippet

    Get-ChildItem -Path C:\Users\Andrey\ -Recurse | ForEach-Object {
      $_.FullName
      Get-Acl $_ | ForEach-Object {
        $_.Access | ForEach-Object {
          "`t{0}`t{1}`t{2}" -f $_.IdentityReference, $_.FileSystemRights, $_.AccessControlType
        }
      }
    }


    Теперь тоько для каталогов:

    Code Snippet

    Get-ChildItem -Path C:\Users\Andrey\ -Recurse | Where-Object { $_.Attributes -eq 'Directory' } | ForEach-Object {
      $_.FullName
      Get-Acl $_ | ForEach-Object {
        $_.Access | ForEach-Object {
          "`t{0}`t{1}`t{2}" -f $_.IdentityReference, $_.FileSystemRights, $_.AccessControlType
        }
      }
    }



    10 апреля 2008 г. 14:40
  •  

    Всем огромное спасибо.

    То что нужно. Теперь буду сам разбираться. Попробую по разному.

    И еще подскажите как правильно организовать на VBS вывод информации в файл, а не сообщением.

    11 апреля 2008 г. 4:51
  • Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("d:\testfile.txt", 8, True)
    strLine = "test"
    objFile.WriteLine strLine
    11 апреля 2008 г. 5:18
  • А я использую Security Explorer 6.6.0 от ScriptLogic Corporation.  http://www.scriptlogic.com/

    11 апреля 2008 г. 5:53
  •  Сергей Спирин написано:

     

    И еще подскажите как правильно организовать на VBS вывод информации в файл, а не сообщением.



    Сергей, в vbs не разбираюсь, вот как альтернатива

    Code Snippet

    @echo off
    for /r D:\Test1 /d %%i in (*) do (
        for /f "tokens=*" %%i in ('cacls "%%i"') do call:convert "%%i"
    )
    goto:eof
    :convert
    chcp 1251 >nul
    echo %~1 | findstr "\<[A-Z]:\.*" 1>nul && echo ----- >> 1111.txt
    echo %~1 >>1111.txt
    chcp 866 >nul


             
    11 апреля 2008 г. 5:58
  • А вам обязательно скриптами?

    http://technet.microsoft.com/en-us/sysinternals/bb897332.aspx

     

    Для любителей коммандной строки: http://technet.microsoft.com/en-us/sysinternals/bb664922.aspx

    11 апреля 2008 г. 7:21
    Модератор
  • Всем еще раз спасибо.

    проблему решил. Дальше буду для развития пробывать по разному.

    11 апреля 2008 г. 9:48