none
настройка доступа к с$ RRS feed

  • Вопрос

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

    Подскажите пожалуйста, можно ли сделать следущее:

    В домене win2003 создать пользователя с правами на чтение и просмотр содержимого админских шар (конкретно интересует c$) на клиентских компах. Нужно для службы безопасности, т.е. соответственно они не должны иметь прав на изменение и добавление файлов.

    Заранее спасибо
    5 ноября 2008 г. 5:46

Ответы

  • на каждой машине по новой расшарьте диск C с любым именем и настройте соответствующие права. Встроенные админиские шары (ipc$; c$; d$; etc) не поддерживают изменение пермишенов.

     

    з.ы. и что же служба безопасности собирается смотреть на системных дисках, где никакой информации, кроме системных файлов нету? Или будут просматривать содержимое pagefile.sys?

    5 ноября 2008 г. 8:47
  •  

    человек может в настоящее время не просматривать форум. Плюс, альтернатива никогда не бывает лишней. VBS скрипт можно уже использовать сходу, а вот для работы моего решения нужно устанавливать PowerShell.

     

    2автору

    чтобы вручную не собирать имена компьютеров в текстовик, добавьте к вышеприложенному скрипту кусок кода, который соберёт имена компьютеров в домене и получите вот такой скрипт:

     

    Code Snippet

    function Create-Share {

    $share="Security"

    (gwmi -List -ComputerName "$args" | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).psbase.InvokeMethod("Create",("C:\",$share,0, $null,"Security"))

    $user = "administrator"

    $mask = "Read"

    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()

    $ace = ([WMIClass] "Win32_Ace").CreateInstance()

    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()

    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])

    [byte[]] $SIDArray = ,0 * $SID.BinaryLength

    $SID.GetBinaryForm($SIDArray,0)

    $Trustee.Name = $user

    $Trustee.SID = $SIDArray

    $ace.AccessMask = [System.Security.AccessControl.FileSystemRights]"ReadandExecute, Synchronize"

    $ace.AceType = 0

    $ace.Trustee = $Trustee

    $SD.DACL = $ace

    $share = gwmi win32_share -ComputerName $args -filter "name='$share'"

    $inParams = $share.psbase.GetMethodParameters("SetShareInfo")

    $inParams.Access = $SD

    $share.psbase.invokemethod("setshareinfo", $inParams, $null)}

    # в этой части производится поиск имён компьютеров в домене и перенаправление в функцию

    $filter = "(objectcategory=computer)"

    $ds = New-object System.DirectoryServices.DirectorySearcher([ADSI]"",$filter)

    $computers = $ds.Findall() | %{$_.properties.name}

    foreach ($computer in $computers) {create-share $computer}

     

     

    вот весь этот код запускаете и по идее (во всяком случае у меня в тестовой среде всё прошло как надо) после некоторого времени (операция может занять продолжительное время) на всех компьютерах должна появиться шара Security с нужными правами.
    5 ноября 2008 г. 16:02

Все ответы

  • на каждой машине по новой расшарьте диск C с любым именем и настройте соответствующие права. Встроенные админиские шары (ipc$; c$; d$; etc) не поддерживают изменение пермишенов.

     

    з.ы. и что же служба безопасности собирается смотреть на системных дисках, где никакой информации, кроме системных файлов нету? Или будут просматривать содержимое pagefile.sys?

    5 ноября 2008 г. 8:47
  •  Vadims Podans написано:

    на каждой машине по новой расшарьте диск C с любым именем и настройте соответствующие права. Встроенные админиские шары (ipc$; c$; d$; etc) не поддерживают изменение пермишенов.

     

    Понятно, но тогда возникает еще один вопрос: это можно как-нибудь автоматизировать (скриптик, реестр и т.п.), или придется идти на каждую машину (более 300) и шарить там диск с?

     

    5 ноября 2008 г. 9:55
  • хотите скриптик - будет вам скриптик. Но будет он на Powershell:

    Code Snippet

    function Create-Share {

    $share="Security"

    (gwmi -List -ComputerName "$args" | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).psbase.InvokeMethod("Create",("C:\",$share,0, $null,"Security"))

    $user = "SecurityService"

    $mask = "Read"

    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()

    $ace = ([WMIClass] "Win32_Ace").CreateInstance()

    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()

    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])

    [byte[]] $SIDArray = ,0 * $SID.BinaryLength

    $SID.GetBinaryForm($SIDArray,0)

    $Trustee.Name = $user

    $Trustee.SID = $SIDArray

    $ace.AccessMask = [System.Security.AccessControl.FileSystemRights]"ReadandExecute, Synchronize"

    $ace.AceType = 0

    $ace.Trustee = $Trustee

    $SD.DACL = $ace

    $share = gwmi win32_share -ComputerName $args -filter "name='$share'"

    $inParams = $share.psbase.GetMethodParameters("SetShareInfo")

    $inParams.Access = $SD

    $share.psbase.invokemethod("setshareinfo", $inParams, $null)}

     

     

    Но сперва вы должны будете получить список всех компьютеров в текстовый файл и записать имя каждого компьютера в отдельнюу строчку вида:

    Code Snippet

    comp1

    comp2

    dc1

    dc2

    ...

     

     

    после чего в консоли PowerShell делаете примерно так:

    Code Snippet

    $a = gc c:\computers.txt

    foreach ($b in $a) {create-share $b}

     

     

    ну и последняя ремарка: в данном скрипте устанавливаются Share Permissions для группы SecurityService. Чтобы использовать нужную вам группу (в которой состоят члены службы безопасности) вам нужно напротив переменной $user прописать нужное название группы. Как-то так.

     

    Enjoy!

    5 ноября 2008 г. 14:19
  • Как вариант - скрипт на ADSI-LDAP-WMI

     

    создается security-группа, в нее включаются необходимые компьютеры

     

    начальной процедурой скрипта проверяется членство в группах - далее - вызов необходимой процедуры, содержащей Win32_Share класс с соотв. входящими параметрами, - в качестве имени машины, например.

     

    Фрагмент скрипта можно вставить в common_logon_script.vbs и связать с default_domain policy

    Так же могу поделиться - что удобнее для вас)

     

     

    5 ноября 2008 г. 14:27
  •  MVOralov написано:

    Как вариант - скрипт на ADSI-LDAP-WMI

     

    создается security-группа, в нее включаются необходимые компьютеры

     

    начальной процедурой скрипта проверяется членство в группах - далее - вызов необходимой процедуры, содержащей Win32_Share класс с соотв. входящими параметрами, - в качестве имени машины, например.

     

    Фрагмент скрипта можно вставить в common_logon_script.vbs и связать с default_domain policy

    Так же могу поделиться - что удобнее для вас)

     

     

    а чего же не поделились? Есть готовый рецепт - выкладывайте, а не в стиле ромашки "если надо/не надо".

    5 ноября 2008 г. 14:36
  •  Vadims Podans написано:

    Есть готовый рецепт - выкладывайте, ".

     

     

    Если бы человек заинтересовался - выложил, -в противном случае - зачем мне переопределять Ваше готовое неплохое решение?

     

    5 ноября 2008 г. 15:34
  •  

    человек может в настоящее время не просматривать форум. Плюс, альтернатива никогда не бывает лишней. VBS скрипт можно уже использовать сходу, а вот для работы моего решения нужно устанавливать PowerShell.

     

    2автору

    чтобы вручную не собирать имена компьютеров в текстовик, добавьте к вышеприложенному скрипту кусок кода, который соберёт имена компьютеров в домене и получите вот такой скрипт:

     

    Code Snippet

    function Create-Share {

    $share="Security"

    (gwmi -List -ComputerName "$args" | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).psbase.InvokeMethod("Create",("C:\",$share,0, $null,"Security"))

    $user = "administrator"

    $mask = "Read"

    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()

    $ace = ([WMIClass] "Win32_Ace").CreateInstance()

    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()

    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])

    [byte[]] $SIDArray = ,0 * $SID.BinaryLength

    $SID.GetBinaryForm($SIDArray,0)

    $Trustee.Name = $user

    $Trustee.SID = $SIDArray

    $ace.AccessMask = [System.Security.AccessControl.FileSystemRights]"ReadandExecute, Synchronize"

    $ace.AceType = 0

    $ace.Trustee = $Trustee

    $SD.DACL = $ace

    $share = gwmi win32_share -ComputerName $args -filter "name='$share'"

    $inParams = $share.psbase.GetMethodParameters("SetShareInfo")

    $inParams.Access = $SD

    $share.psbase.invokemethod("setshareinfo", $inParams, $null)}

    # в этой части производится поиск имён компьютеров в домене и перенаправление в функцию

    $filter = "(objectcategory=computer)"

    $ds = New-object System.DirectoryServices.DirectorySearcher([ADSI]"",$filter)

    $computers = $ds.Findall() | %{$_.properties.name}

    foreach ($computer in $computers) {create-share $computer}

     

     

    вот весь этот код запускаете и по идее (во всяком случае у меня в тестовой среде всё прошло как надо) после некоторого времени (операция может занять продолжительное время) на всех компьютерах должна появиться шара Security с нужными правами.
    5 ноября 2008 г. 16:02
  • Спасибо большое за просвещение, буду пробовать

    7 ноября 2008 г. 4:29