Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Разрешения для реестра и файла

Ответить
Настройки темы
VBS/WSH/JS - [решено] Разрешения для реестра и файла

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый Всем День!

Помогите пожалуйста, бьюсь над проблемой уже не первый день, ни интернет ни книги что-то не помогают.
Вопрос: Как получить список пользователей и их прав пользования на ветку реестра и на файл?
Иными словами: Это "разрешения..." для реестра и "свойста-безопастность" для файла.

Заранее ВАМ Благодарен!

Отправлено: 15:13, 22-02-2012

 

Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


Как-нибудь так:
Код: Выделить весь код
SetACL -on HKEY_LOCAL_MACHINE\SYSTEM -ot reg -actn list -lst "f:tab;s:y"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:20, 22-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Эммм..а можно поподробнее? Как это приминить в js файле? Такой функции не известно да и на запись ругань идет.
Если записать даже так: SetACL -on "HKLM\\SYSTEM" -ot reg -actn list -lst "f:tab;s:y"; неверно выходит (

Отправлено: 17:27, 22-02-2012 | #3


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата sergeosn:
... Такой функции не известно »
Это утилита.
Цитата sergeosn:
... ни интернет ни книги что-то не помогают »
Ищите в MSDN материал по ключу GetSecurityDescriptor для WMI-классов StdRegProv (объекты реестра) и Win32_LogicalFileSecuritySetting (объекты файловой системы).
Однако для реестра этот метод доступен, начиная лишь с Vista. В 2000 - 2003 используется метод CheckAccess, но с его помощью можно получить содержимое списка управления доступом только для того пользователя, в контексте безопасности которого запущен сценарий.
Примеры соответствующих сценариев на VBS можете найти здесь: Полезные скрипты, сообщение #21
На JScript портируйте самостоятельно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:31, 24-02-2012 | #4


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


О! спасибо за ссылочку. Да действительно vbs скрипт чтения прав на каталог/файл работает!
А вот на счет реестра вообще не понятно. может он что-то другое проверяет. Но результат выдает какойто обобщенный чтоли...Не такой как для каталога/файла.

Отправлено: 13:10, 24-02-2012 | #5


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата sergeosn:
... результат выдает <...> Не такой как для каталога/файла »
Так и должно быть, поскольку сценарии не идентичны по алгоритму анализа DACL.

Отправлено: 14:11, 24-02-2012 | #6


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


А у Вас случайно нет кодика для второй задачи. про реестр? чтобы видно было по пользователям(группам) права

Отправлено: 17:10, 24-02-2012 | #7


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата sergeosn:
А у Вас случайно нет кодика для второй задачи. про реестр? »
Как-то так (проверял на 2008/7 Pro, но не очень тщательно, особенно то, что касается универсальных масок):
Код: Выделить весь код
Dim strComputer, strKeyPath, lngKey, xResult, strDescription
'--- Коды ключей реестра
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const HKU = &H80000003 'HKEY_USERS
'------

strComputer = "computer"
strKeyPath = "Software"
lngKey = HKLM
If Ping_GUI(strComputer) Then
    xResult = Get_DACLInfo_Reg(strComputer, lngKey, strKeyPath, strDescription)
    If IsNull(xResult) Then
        WScript.Echo "Не поддерживаемая версия ОС."
    ElseIf IsEmpty(xResult) Then
        WScript.Echo "Подключ " & UCase(strKeyPath) & " не найден."
    ElseIf IsNumeric(xResult) Then
        WScript.Echo "Ошибка " & xResult & vbNewLine & strDescription
    ElseIf Len(xResult) = 0 Then
        WScript.Echo "Список управления доступом к подключу " & UCase(strKeyPath) & " пуст."
    Else
        WScript.Echo xResult
    End If
Else
    WScript.Echo "Станция " & UCase(strComputer) & " не отвечает или не существует."
End If
WScript.Quit 0

'======

Function Get_DACLInfo_Reg(strWS, lngKey, strSubKey, strComment)
Dim objWMI, objCollection, objItem, intOSVersion
Dim arrFlagName, arrFlagValue, arrGenericName, arrGenericValue, arrTypes, arrSubKeys
Dim objSD, intRes, strList, strTemp, lngTemp, blnContinue
Const ACCESS_ALLOWED_ACE_TYPE = 0 'Флаг-признак записи типа "РАЗРЕШЕНИЕ"
Const ACCESS_DENIED_ACE_TYPE = 1  'Флаг-признак записи типа "ЗАПРЕТ"
Const INHERITED_ACE = 16 'Флаг-признак того, что текущая запись DACL унаследована от родительского объекта
Const FULL_ACCESS = 983103 'Значение маски полного разрешения или запрета

arrTypes = Array("РАЗРЕШЕНО:", "ЗАПРЕЩЕНО:")
arrFlagName = Array("Запрос значения", "Задание значения", _
                    "Создание подраздела", "Перечисление подразделов", _
                    "Уведомление", "Создание связи", "Удаление", "Запись DAC", _
                    "Смена владельца", "Чтение разрешений")
arrFlagValue = Array(1, 2, 4, 8, 16, 32, 65536, 262144, 524288, 131072)
'--- Наименования и значения универсальных масок
arrGenericName = Array("Полный доступ (универсальная маска)", "Выполнение (универсальная маска)", "Запись (универсальная маска)", "Чтение (универсальная маска)")
arrGenericValue = Array(&H10000000, &H20000000, &H40000000, &H80000000)
'------

'--- Определение версии ОС
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strWS & "\root\cimv2")
If Err.Number = 0 Then
    Set objCollection = objWMI.ExecQuery("SELECT Version FROM Win32_OperatingSystem")
    If Err.Number = 0 Then
        For Each objItem In objCollection
            intOSVersion = CInt(Replace(Left(objItem.Version, 3), ".", ""))
        Next
    Else
        Err.Clear
    End If
    Set objCollection = Nothing
Else
    Err.Clear
End If
'------
If intOSVersion >= 60 Or IsEmpty(intOSVersion) Then
    On Error Resume Next
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strWS & "\root\default:StdRegProv")
    If Err.Number = 0 Then
        If InStr(strSubKey, "\") > 0 Then
            strTemp = Left(strSubKey, InStrRev(strSubKey, "\") - 1)
            objWMI.EnumKey lngKey, strTemp, arrSubKeys
        Else
            objWMI.EnumKey lngKey, vbNullString, arrSubKeys
        End If
        If Err.Number = 0 Then
            If IsArray(arrSubKeys) Then
                If InStr(1, Join(arrSubKeys, vbNewLine), Split(strSubKey, "\")(UBound(Split(strSubKey, "\"))), vbTextCompare) > 0 Then
                    blnContinue = True
                Else
                    Get_DACLInfo_Reg = Empty
                End If
            Else
                Get_DACLInfo_Reg = Empty
            End If
        Else
            strComment = Err.Description
            Get_DACLInfo_Reg = Err.Number
            Err.Clear
        End If
        If blnContinue Then
            intRes = objWMI.GetSecurityDescriptor(lngKey, strSubKey, objSD)
            If Err.Number = 0 Then
                If intRes = 0 Then
                    If Not IsNull(objSD.DACL) Then
                        For Each objItem In objSD.DACL
                            '--- Определение режима наследования записи, области её действия и типа
                            If CBool(objItem.AceFlags And INHERITED_ACE) Then
                                strTemp = " (унаследовано; "
                                lngTemp = objItem.AceFlags - INHERITED_ACE
                            Else
                                strTemp = " (не унаследовано; "
                                lngTemp = objItem.AceFlags
                            End If
                            Select Case lngTemp
                                Case 0: strTemp = strTemp & "действует на: только текущий раздел)"
                                Case 2: strTemp = strTemp & "действует на: текущий раздел и его подразделы)"
                                Case 6, 14: strTemp = strTemp & "действует на: только ближайший подраздел текущего раздела)"
                                Case 10: strTemp = strTemp & "действует на: только подразделы текущего раздела)"
                                Case Else: strTemp = strTemp & "область действия не определена); "
                            End Select
                            strTemp = strTemp & vbNewLine & "---" & vbNewLine & arrTypes(objItem.AceType) & vbNewLine
                            '------
                            '--- Анализ маски доступа текущей записи
                            lngTemp = objItem.AccessMask
                            Select Case Abs(lngTemp)
                                Case FULL_ACCESS: strTemp = strTemp & "Полный доступ" & vbNewLine
                                Case Else
                                    'обобщённый анализ вариантов универсальных масок (биты №№ 28 - 31)
                                    If Abs(lngTemp) > FULL_ACCESS Then
                                        For i = 0 To UBound(arrGenericValue)
                                            If lngTemp And arrGenericValue(i) Then
                                                strTemp = strTemp & arrGenericName(i) & vbNewLine
                                            End If
                                        Next
                                    End If
                                    'детальный анализ не универсальной маски (биты №№ 0 - 20)
                                    For i = 0 To UBound(arrFlagValue)
                                        If lngTemp And arrFlagValue(i) Then
                                            strTemp = strTemp & arrFlagName(i) & vbNewLine
                                        End If
                                    Next
                            End Select
                            '------
                            strList = strList & UCase(objItem.Trustee.Domain & "\" & objItem.Trustee.Name) & strTemp & "===" & vbNewLine
                        Next
                        Set objItem = Nothing
                        Get_DACLInfo_Reg = strList
                    Else
                        Get_DACLInfo_Reg = vbNullString
                    End If
                    Set objSD = Nothing
                Else
                    Get_DACLInfo_Reg = intRes
                    Err.Clear
                End If
            Else
                strComment = Err.Description
                Get_DACLInfo_Reg = Err.Number
                Err.Clear
            End If
        End If
    Else
        strComment = Err.Description
        Get_DACLInfo_Reg = Err.Number
        Err.Clear
    End If
Else
    Get_DACLInfo_Reg = Null
End If
Set objWMI = Nothing
End Function

'======

Function Ping_GUI(strName)
Dim objWMI, objItem

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strName & "'")
For Each objItem In objWMI
    If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then
        Ping_GUI = False
    Else
        Ping_GUI = True
    End If
Next
Set objItem = Nothing
Set objWMI = Nothing
End Function

Последний раз редактировалось DmitriiV, 29-02-2012 в 13:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:19, 28-02-2012 | #8


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ок! Спасибо!!!!!!!!! Попробуем! ))

Отправлено: 09:51, 29-02-2012 | #9


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Эмм..может что-то я спрошу сейчас не так) но ОС на которой идет проверка ХР...и скрипт непропускается)

Отправлено: 14:16, 29-02-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Разрешения для реестра и файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Изменение разрешения на ветку реестра SanyaJoker Скриптовые языки администрирования Windows 12 04-02-2016 22:01
2003/XP/2000 - Ошибка 1926. Не удалось установить разрешения для файла kefi Microsoft Office (Word, Excel, Outlook и т.д.) 5 20-12-2010 18:02
Доступ - [решено] не устанавливаются разрешения для раздела реестра holden Microsoft Windows Vista 4 12-01-2009 22:08
[решено] Как выставить разрешения для пользователей на ветку реестра Sandor Microsoft Windows NT/2000/2003 4 09-11-2006 15:30
разрешения на ветки реестра maxtravilov Автоматическая установка Windows 2000/XP/2003 1 27-10-2005 21:44




 
Переход