Как найти локальных администраторов в домене

В этой статье мы рассмотрим, как получить списки пользователей и групп, которым предоставлены права локальных администраторов на компьютерах и серверах Windows в вашей сети.

Содержание:

  • Просмотр локальных администраторов на локальном компьютере
  • Получить список администраторов на удаленных компьютерах Windows
  • Удалить пользователей из группы локальных администраторов Windows

Просмотр локальных администраторов на локальном компьютере

В Windows вы можете просмотреть, добавить или удалить пользователей в локальной группе Administrators с помощью оснастки управления компьютером (
compmgmt.msc
). Разверните Computer Management -> Local users and Group -> Groups. Выберите группу Administrator.

По умолчанию на компьютере Windows, который добавлен в домен Active Directory, права администратора предоставляются локальным администраторам и доменной группе Domain Admins.

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

Чтобы вывести состав локальной группы Administrators, можно воспользоваться командлетом Get-LocalGroupMember из встроенного модуля Microsoft.PowerShell.LocalAccounts.

Get-LocalGroupMember -Group "Administrators"

Get-LocalGroupMember Administrators

Обратите внимание, что в параметре Principal указан источник данного пользователя/группы. Это может быть Local, домен Active Directory или Azure AD.

Чтобы вывести только локальных пользователей с правами администратора:

Get-LocalGroupMember Administrators | Where-Object { (Get-LocalUser $_.SID -ErrorAction SilentlyContinue).Enabled }

Можно отфильтровать только пользователей из AD:

Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"} | select PrincipalSource,class,name,SID

Если на компьютере установлен модуль Active Directory for Windows PowerShell из пакета RSAT, вы можете получить дополнительную информацию о пользователях или группах AD по их SID.

В данном примере скрипт получит членов всех групп Active Directory, которые входят в состав локальных администраторов (список пользователей в группе AD получаем с помощью команды Get-ADGroupMember). Затем с помощью Get-ADUser мы получим SamAccountName и состояние учетной записи (Enabled = True/False)

$admins=Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"}
Foreach ($admin in $admins)
{
If ($admin.objectclass –eq "User") {get-aduser $admin.sid|select SamAccountName,enabled }
If ($admin.objectclass –eq "Group") {Get-ADGroupMember $admin.sid | foreach { Get-ADUser $_ |Select-Object SamAccountName,enabled }}
}

список пользователей с правами администратора

По аналогии вы можете получить любые другие атрибуты пользователей из Active Directory.

Получить список администраторов на удаленных компьютерах Windows

Рассмотренные выше пример позволяют получить список пользователей с правами администратора на локальном компьютере. Теперь рассмотрим, как удаленно получить состав группы локальных администраторов.

Для запуска команд на удаленных компьютерах должен быть настроен PowerShell Remoting (вы можете включить и настроить WinRM с помощью GPO) и открыт порт файервола TCP 5985 (вы можете открыть порт в Windows Defender Firewall через GPO).

Для выполнения команды на удаленном компьютере используется PowerShell командлет Invoke-Command. Следующая команда получит список администраторов на удаленном компьютере с именем wks-t1122:

Invoke-Command -ComputerName wks-t1122 -ScriptBlock{Get-LocalGroupMember -Name 'Administrators'|select Name,ObjectClass,PrincipalSource|ft}

Теперь рассмотрим, как получить список администраторов сразу с нескольких компьютеров. Для удобства мы сразу исключим группу Domain Admins из результатов:

$results = Invoke-Command wks-t112,srv-rds2 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource}
$results | Select-Object PSComputerName,Name,ObjectClass,PrincipalSource

получить списки локальных админов удаленно с компьютеров в сети

Можно экспортировать получившийся список пользователей и групп в CSV файл с помощью Export-CSV:

$results | Export-CSV "C:PSadmins.CSV" -NoTypeInformation -Encoding UTF8

Вы можете опросить сразу множество компьютеров или серверов из домена. В данном примере я хочу получить список админов на всех Windows Server в AD. Получим список компьютеров с помощью Get-ADComputer:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name

Теперь запросим состав группы администраторов на каждом хосте:
$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource} -ErrorAction SilentlyContinue

Удалить пользователей из группы локальных администраторов Windows

Администраторам предприятия крайне важно следить за составом группы локальных администраторах на рабочих станция Windows и серверах в сети. Нужно минимизировать количество пользователей с правами администраторов.

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

Remove-LocalGroupMember -Group Administrators -Member username

Можно удалить пользователя из группы удаленно:

Invoke-Command -ComputerName wks-t1122 –ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member username}

Но можно использовать более продвинутый сценарий. Допустим, вы сформировали список пользователей с правами администраторов на компьютерах и сохранили его в переменной $results.

$results = Invoke-Command wks-11,wks-22 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource,SID}

Затем выведем список пользователей и компьютеров в виде списка Out-GridView:

$principals_to_remove=$results | Out-GridView -Title "Select principal to remove from local admins" -OutputMode Multiple

Теперь вы должны выбрать в таблице пользователей, которых нужно удалить из группы администраторов (зажмите CTRL, чтобы выделить несколько строк в таблице), и выполнить код:

foreach ($principal in $principals_to_remove)
{
Invoke-Command $principal.PSComputerName -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member $using:principal.name}
}

удалить из локальных админов на серверах и компьютерах windows

Примечание. Конструкция
$using:principal.name
позволяет передать значение локальной переменной с вашего компьютера в удаленную сессию PSRemoting.

В результате, выбранные вами пользователи будут удалены из групп локальных администраторов на удаленных компьютерах Windows.

  • Remove From My Forums

 locked

Локальный администратор

  • Вопрос

  • Добрый день!

    Как можно узнать, кто из пользователей в домене имеет права локального администратора?

    Если можно по шагам.

    Спасибо

Ответы

    • Помечено в качестве ответа

      10 октября 2012 г. 17:59

  • function get-localadministrators {
        param ([string]$computername=$env:computername)
        $computername = $computername.toupper()
        $ADMINS = get-wmiobject -computername $computername -query "select * from win32_groupuser where GroupComponent=""Win32_Group.Domain='$computername',Name='administrators'""" | % {$_.partcomponent}
        foreach ($ADMIN in $ADMINS) {
                    $admin = $admin.replace("\$computernamerootcimv2:Win32_UserAccount.Domain=","") 
                    $admin = $admin.replace("\$computernamerootcimv2:Win32_Group.Domain=","")
                    $admin = $admin.replace('",Name="',"")
                    $admin = $admin.REPLACE("""","")
                    $objOutput = New-Object PSObject -Property @{
                        Machinename = $computername
                        Fullname = ($admin)
                        DomainName  =$admin.split("")[0]
                    }
        $objreport+=@($objoutput)
        }
        return $objreport
    }
    $strCategory = "computer"
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.Filter = ("(objectCategory=$strCategory)")
    $colProplist = "name"
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
    $colResults = $objSearcher.FindAll()
    foreach ($objResult in $colResults)
    {$objComputer =  $objResult.Properties
    "-------"
    get-localadministrators ($objComputer.name)
    }

    как то так, шерстит весь домен

    • Предложено в качестве ответа
      Dmitry Nikitin
      13 сентября 2012 г. 17:13
    • Помечено в качестве ответа
      Rotar Maksim
      10 октября 2012 г. 17:59

понедельник, 17 апреля 2017 г.

Получаем список локальных администраторов в домене

Скрипт выводит в файл информацию о локальных администраторах на компьютерах в домене из предопределённого в скрипте OrganisationUnit в ActiveDirectory.

PowerShell

Взято отсюда: https://www.dmosk.ru/scripts.php?object=group-admins


Автор:

Волшебник




на

17:03






Ярлыки:
скрипты,
powershell

Комментариев нет:

Отправить комментарий

Как узнать имена учетных записей Администраторов домена и не только

Обновлено 20.07.2016

Как узнать имена учетных записей Администраторов домена и не только-01

Как узнать имена учетных записей Администраторов домена и не только-01

Всем привет сегодня хочу рассказать как узнать имена учетных записей Администраторов домена и не только. Для того чтобы все это осуществить достаточно быть пользователем домена. Как это не странно, но в Active Directory имена администраторов не являются конфиденциальной информацией, как показал эксперимент вообще можно вытащить состав любой группы главное правильно указать ее название.

Вообще честно не знаю почему Microsoft дала такую возможность предоставлять информацию обычному пользователю, который может быть не добросовестным хакером. Для того чтобы в английской версии узнать кто состоит в группе администраторов домена то вводим вот такую команду.

Net group “Domain Admins” /domain

Как узнать имена учетных записей Администраторов домена и не только-02

Как узнать имена учетных записей Администраторов домена и не только-02

Чтобы в русской версии узнать кто у вас администратор домена вводим команду

Net group “Администраторы домена” /domain

Вы получите список администраторов домена

Как узнать имена учетных записей Администраторов домена и не только-03

Как узнать имена учетных записей Администраторов домена и не только-03

Теперь давайте посмотрим Администраторов предприятия.

Net group “Администраторы предприятия” /domain

Как узнать имена учетных записей Администраторов домена и не только-04

Как узнать имена учетных записей Администраторов домена и не только-04

Вот так вот просто узнать логины и членов любой группы в Active Directory.

Материал сайта pyatilistnik.org

Июл 20, 2016 20:58

  • Remove From My Forums
  • Question

  • When I use a simple command like :

    >net localgroup Administrators

    It gives me :

    Administrator

    mycorpDomain Admins

    But when I use the tool “get local admins gui” (http://www.cjwdev.com/Software/GetLocalAdminsGUI/Info.html?LMCL=UpSkkc), it show me way more local administrators (like 50+). Moreover, I can see that these administrators come from different
    groups. Some comes from mycorpDomain Admins, but some others come from others groups, why is that ?

    I want to know how the tool retrieve the full list, and how to do this with the command line (or powershell).

Answers

  • net localgroup Administrators
    gives out the details about the members in the local admin groups, but donot tell about there type. 

    I am not sure but the tool that you are using might be checking the object type, and if it finds out that the output is having some group
    it goes on further expanding the same, for example the command
    Get-LocalGroupMember -Name Administrators
    gives me below output:

    In the above output you can see for one of the member the ObjectClass is “Group”, so I will further dig in to expand it’s members(what
    we call recursion in programming terms). 

    As you are not having the admin privileges I am assuming that you are working on a client OS and you might not be able to import the active directory module to expand such group. In this case
    net group might come handy for you. Try below script, it might work for you, you can later on format the output to fit with your use:

    $AdminMembers = @()
    # Fetch out all the members of the local administrators group
    $LocalAdminGroupMembers = Get-LocalGroupMember -Name Administrators
    
    # Add all the user types to our final result
    $AdminMembers += $LocalAdminGroupMembers | Where-Object {$_.ObjectClass -eq "User"} | Select -ExpandProperty Name
    
    # Iterate through the group and fetch users using the net group command and add the same to final result
    $LocalAdminGroupMembers | 
    Where-Object {$_.ObjectClass -eq "Group"} | foreach {
    
        $netGroupResult = net group $(($_.Name -split "\")[-1]) /domain
        $AdminMembers   += $netGroupResult[8..($netGroupResult.length -3)] -split "s+" | Where-Object {$_}
    }
                                    
    
    # Display out the final result
    Write-Output "***********************************************************"
    Write-Output "Following are the members of the local administrators group"
    $LocalAdminGroupMembers
    
    Write-Output "***********************************************************"
    Write-Output "You have a total of $($AdminMembers.Count) admin user account present in the group, following are the details:"
    $AdminMembers
    • Edited by

      Tuesday, November 19, 2019 1:59 PM

    • Proposed as answer by
      Imran_Khan
      Tuesday, November 19, 2019 2:15 PM
    • Marked as answer by
      Jean Blonblon
      Tuesday, November 19, 2019 2:54 PM

  • Well then you need to ask the tool author about how it works. In any case you need some sort of authorization on the remote computer.

    Im not sure what is your point when you say to understand how the groups are tied. From what you posted so far, you have Domain Admins group which has members inside (either user or groups). So why dont you simply check who are the members of domain admins
    group either using ADUC console or powershell command?

    Get-Adgroup "Domain Admins" | get-Adgroupmember

    PS: Domain Admins accounts should have only access to Domain controllers, not to all servers/workstations in the environment. It is not secure to use such privileged account to access such devices.


    Mark as answer if it solves your issue. Leos

    • Marked as answer by
      Jean Blonblon
      Tuesday, November 19, 2019 2:27 PM

Добавить комментарий