none
удаление локальных администраторов RRS feed

  • Вопрос

  • Добрый день !
    Есть такая задача (и есть мнение что задача довольно распространенная и решение ее будет полезно многим): есть домен и есть пользователи в домене, которые на своих компьютерах являются членами группы администраторы (т.е. пользователь домена - локальный админ), и могут творить на своем компьютере все что угодно, нужно "прозрачно" для пользователя "вычистить" на всех компьютерах группу "Администраторы", в ней остается только "Администратор" - ему меняем пароль, остальных переносим в группу "опытные пользователи" . В общих чертах есть понимание как это сделать, интересуют - готовые решения, возможно ктото уже сталкивался с такой задачей, я - не нашел подобного решения. 
       В процессе разработки - найдены были "подводные камни":  скрипт запускаемый с англоязычного сервера - не обнаруживет на компьютерах-клиентах группы с русскими названиями (администраторы, пользователи и т.п), и естественно пользователей в них, находит только группу Helpsupport, тот же скрипт запущенный с русскоязычной ОС - все группы находит и пользователей в них тоже. Это по сути проблемой не является, но интересно было бы узнать, если кто владеет информацией - с чем же это связано, Готовый скрипт - выложу здесь, т.к. считаю эту тему очень актуальной. Заранее всех благодарю.
    26 января 2010 г. 7:18

Ответы

  • > нужно "прозрачно" для пользователя "вычистить" на всех компьютерах группу "Администраторы"

    это делается при помощи политик (см. "Группы с ограниченным доступом" или "restricted groups"), скрипт не нужен


    >остальных переносим в группу "опытные пользователи"

    и это делается при помощи политик (см. "Группы с ограниченным доступом" или "restricted groups") скрипт не нужен. Но смысла в этом нет никакого, т.к. разницы между PowerUsers (PU) и Administrators очень мало, кроме того, зачастую PU могут повысить себя до администраторов (при определенных обстоятельствах)

    >скрипт запускаемый с англоязычного сервера - не обнаруживет на компьютерах-клиентах группы с русскими названиями (администраторы, пользователи и т.п), и естественно пользователей в них, находит только группу Helpsupport, тот же скрипт запущенный с русскоязычной ОС - все группы находит и пользователей в них тоже. Это по сути проблемой не является, но интересно было бы узнать, если кто владеет информацией - с чем же это связано

    Связано с тем, что для идентификации группы нужно использовать не ее имя, а ее well-known SID.

    PS Чуть позже накидаю ссылок по теме.
    • Предложено в качестве ответа s.h.s. _ 26 января 2010 г. 8:24
    • Помечено в качестве ответа alfadmin 27 января 2010 г. 8:12
    26 января 2010 г. 7:43
  • Добрый день,
    даную задачу можно реализовать через групове политики,
    Создайте политику для нужного OU, в политике зайдите computer configuration-windows-settings-security settings-restricted groups
    добавьте групу администраторы внее добавьте domain admins.
    Даная политика оставит в групе администраторы только domain admins.

    • Помечено в качестве ответа alfadmin 27 января 2010 г. 8:12
    26 января 2010 г. 8:14

Все ответы

  • > нужно "прозрачно" для пользователя "вычистить" на всех компьютерах группу "Администраторы"

    это делается при помощи политик (см. "Группы с ограниченным доступом" или "restricted groups"), скрипт не нужен


    >остальных переносим в группу "опытные пользователи"

    и это делается при помощи политик (см. "Группы с ограниченным доступом" или "restricted groups") скрипт не нужен. Но смысла в этом нет никакого, т.к. разницы между PowerUsers (PU) и Administrators очень мало, кроме того, зачастую PU могут повысить себя до администраторов (при определенных обстоятельствах)

    >скрипт запускаемый с англоязычного сервера - не обнаруживет на компьютерах-клиентах группы с русскими названиями (администраторы, пользователи и т.п), и естественно пользователей в них, находит только группу Helpsupport, тот же скрипт запущенный с русскоязычной ОС - все группы находит и пользователей в них тоже. Это по сути проблемой не является, но интересно было бы узнать, если кто владеет информацией - с чем же это связано

    Связано с тем, что для идентификации группы нужно использовать не ее имя, а ее well-known SID.

    PS Чуть позже накидаю ссылок по теме.
    • Предложено в качестве ответа s.h.s. _ 26 января 2010 г. 8:24
    • Помечено в качестве ответа alfadmin 27 января 2010 г. 8:12
    26 января 2010 г. 7:43
  • Добрый день,
    даную задачу можно реализовать через групове политики,
    Создайте политику для нужного OU, в политике зайдите computer configuration-windows-settings-security settings-restricted groups
    добавьте групу администраторы внее добавьте domain admins.
    Даная политика оставит в групе администраторы только domain admins.

    • Помечено в качестве ответа alfadmin 27 января 2010 г. 8:12
    26 января 2010 г. 8:14
  • Добрый день ! как и обещал - размещаю готовый скрипт, который переносит всех пользователей, кроме администратора из группы администраторы в группу опытные пользователи. думаю что скрипт полезен т.к. можно с его помощью избавиться от локальных администраторов, сделав их опытными пользователями, и после этого применить технологию групп с ограниченным доступом, или же не применять - компьютер могут к примеру отправить на другой участок, который не входит в домен, и пользователь сможет на нем работать, не имея администраторских прав, и не имея возможности сильно повредить систему (кстати можно переносить не в опытные пользователи - а в пользователи или, скажем, гости). 
     Рад буду прочитать замечания по поводу скрипта - возможно есть другие, лучшие варианты и т.п., есть идея не делать пароль администратора один на все компьютеры- брать из списка, или брать имя компьютера и както его криптовать, а результат заносить в список - имя компьютера, пароль админа,  список этот где то хранить в защищенном хранилище.  

    Option Explicit

    Dim strNetBIOSDomain, objDomain, objComputer
    Dim strName, GroupNameSource, GroupNameDest, strExept1, strExept2, strPass
    Dim objSourceGroup ,objDestGroup
    DIm objUser
    Dim objShell, objFSO, strTemp, strTempFile 

    strNetBIOSDomain = " имя Вашего домена, например test1.local"
    strExept1 = "Администратор"
    strExept2 = "Domain Admins"
    strPass = "Пароль для всех админов, например Multipass"
    GroupNameSource = "Администраторы"
    GroupNameDest = "Опытные пользователи" ' или "Гости"

    Set objShell = CreateObject("Wscript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' Specify temporary file to save ping results.
    strTemp = objShell.ExpandEnvironmentStrings("%TEMP%")
    strTempFile = strTemp & "\RunResult.tmp"

    ' Bind to the domain.
    On Error Resume Next
    Set objDomain = GetObject("WinNT://" & strNetBIOSDomain)
    If (Err.Number <> 0) Then
        On Error GoTo 0
        Wscript.Echo "Domain " & strNetBIOSDomain & " not found"
        Wscript.Quit(1)
    End If
    'On Error GoTo 0
    objDomain.Filter = Array("computer")
    For Each objComputer In objDomain
        strName = objComputer.name
      If (IsConnectible(strName, 1, 750) = True) Then
       If strName <> "SERVER" Then
         'On Error Resume Next
         Set objSourceGroup = GetObject("WinNT://" & strName & "/" & GroupNameSource & ",group")
          If Err Then
           WScript.Echo "cannot connect to " & strName & GroupNameSource
          End If
         Set objDestGroup = GetObject("WinNT://" & strName & "/" & GroupNameDest & ",group")
          If Err Then
           WScript.Echo "cannot connect to " & strName & GroupNameDest
          End If
             For Each objUser in objSourceGroup.Members
              If objUser.Name <> strExept1 Then
              If objUser.Name <> strExept2 Then
                objDestGroup.Add(objUser.ADsPath)
                 If Err Then
                      WScript.Echo "The group " & strName & ":" & GroupNameDest & " already have " & objUser.Name
                    End If
                objDestGroup.SetInfo
                objSourceGroup.Remove(objUser.ADsPath)
                WScript.Echo strName & " : " & objUser.Name & " Moved"
                 End If 
              Else Call objUser.SetPassword(strPass)
                WScript.Echo strName & " : " & objUser.Name & " Password changed"
              End If
             Next
       End If     
      Else WScript.Echo strName  & "Computer Not Found"
      End If
    Next

    ' Clean up.
    If (objFSO.FileExists(strTempfile) = True) Then
        objFSO.DeleteFile(strTempFile)
    End If
    Set objDomain = Nothing
    Set objComputer = Nothing
    Set objSourceGroup = Nothing
    Set objDestGroup = Nothing
    Set objUser = Nothing
    Set objFSO = Nothing
    Set objShell = Nothing

    Function IsConnectible(ByVal strHost, ByVal intPings, ByVal intTO)
        ' Returns True if strHost can be pinged.
        ' Based on a program by Alex Angelopoulos and Torgeir Bakken.
        Dim objFile, strResults

        If (intPings = "") Then
            intPings = 2
        End If
        If (intTO = "") Then
            intTO = 750
        End If

        Const OpenAsDefault = -2
        Const FailIfNotExist = 0
        Const ForReading = 1

        objShell.Run "%comspec% /c ping -n " & intPings & " -w " & intTO _
            & " " & strHost & ">" & strTempFile, 0, True

        Set objFile = objFSO.OpenTextFile(strTempFile, ForReading, _
            FailIfNotExist, OpenAsDefault)
        strResults = objFile.ReadAll
        objFile.Close

        Select Case InStr(strResults, "TTL=")
            Case 0
                IsConnectible = False
            Case Else
                IsConnectible = True
        End Select
    End Function

    2 февраля 2010 г. 10:04
  • Будьте внимательны !!!  Члены группы  "Опытные пользователи", это по сути  уже администраторы  локальные.

    http://www.xakep.ru/post/31825/default.asp?print=true к примеру , как за 5 минут повысить права.

    Хм, конечно скрипт интересно, но изобретение  велосипеда.....
    Если сообщение было информативным, отметьте его как ответ. И нам приятно и сразу видно ответ на вопрос :-)
    2 февраля 2010 г. 11:59