Showing posts with label LDAP. Show all posts
Showing posts with label LDAP. Show all posts

Wednesday, 26 June 2024

Query by ADSI and ADSISearcher.

Hi all.

This post will examine the difference between PowerShell ADSI and ADSISearcher when using PowerShell to query Active Directory. ADSI and ADSISearcher are used to query Active Directory (AD) using Lightweight Directory Access Protocol (LDAP).


WHAT IS LDAP?

LDAP, as the name suggests, is a protocol that provides an interface to query AD directory services.  When we are querying AD we are returning one or more objects with unique identifiers (a Distinguished Name).  And we can do this using two type accelerators called ADSI and ADSISearcher.


WHAT IS A TYPE ACCELERATOR?

A type accelerator is a simple alias to represent a .Net class.  We can return a list of type accelerators like so:

[System.Management.Automation.PSObject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Get

You’ll notice that one of the type accelerators is psobject which references the class System.Management.Automation.PSObject. This means we could simplify our command above by using a type accelerator to get a list of all the type accelerators like so!

[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Get

Wednesday, 19 June 2024

Вложенные группы в Active Directory.

Всем привет.

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

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

Например поиск по объектам пользователей.

Исходя из 

$SamAccName = 'Morozov-МB'

и

$Name = 'Морозов Марк Васильевич'

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

Get-ADPrincipalGroupMembership -Identity $SamAccName

Если же нам понадобится узнать все группы, в которые он входит посредством вложенных групп, мы можем воспользоваться командлетом Get-ADAccountAuthorizationGroup:

Get-ADAccountAuthorizationGroup -Identity $SamAccName | Where-Object objectClass

Thursday, 14 April 2022

NET и Powershell.

Всем привет.

PowerShell может быть мощным инструментом устранения неполадок в сети благодаря своему использования классов  .NET Framework. Для расширения кругозора по связке PowerShell с .NET следует ознакомиться с некоторыми полезными классами .NET, которые можно использовать для, например, решения проблем с сетью и написания других PowerShell-сценариев. В сети есть многo примеров на Powershell потому как создать сканер портов для проверки открытых портов в вашей сети, отправки и получения данных между портами, создавать форматированные пакеты для отправки Direct-запросов (LDAP) к контроллеру домена и обработки ответных пакетов для эмуляции вывода из интерфейса командной строки утилиты portqry.exe.  Используя такие методы и сценарии, вы иметь возможность устранять неполадки приложений в вашей сети, проверяя доступны ли необходимые порты в системе или они заблокированы, либо программным обеспечением на сервере, либо чем-то еще, например аппаратным брандмауэром или список управления доступом (ACL) на коммутаторе.

Ниже я покажу как создать объект прослушивателя TCP, который будет служить открытым портом в вашей системе, чтобы клиенты могли подключаться к вашей системе. Также мы напишем и TCP -передатчик. 

Но прежде чем продолжить следует уяснить для себя некоторую сетевую терминологию .NET:

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

2. EndPoint - это логическое окончание сетевого соединения между клиентом и сервером, который позволяет использование сетевые потоки для связи друг с другом. Конечная точка также предоставляет утилиту чтобы увидеть, активно ли соединение и доступны ли потоки для чтения или для записи, а также для настройки размера буферов для этих потоков.

3. Socket - это экземпляр конечной точки двусторонней связи между двумя приложениями в одной сети путем сопряжения IP-адреса с портом.

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

Friday, 1 April 2022

Диагностика сетевого взаимодействия.


Всем привет. 

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

Вы начинаете с получения полного доменного имени (FQDN), fully qualifed domain name своего хоста и значения IP адреса его DNS сервера, а затем проверяете работает ли этот сервер DNS.

Затем вы применяете сконфигурированный сервер DNS на предмет определения значений имён контроллеров домена в своём домене и убеждаетесь что способны достигать каждого контроллера домена как по порту 389 (LDAP), так и по 445 (для GPO). 

Затем вы проверяете доступность шлюза по умолчанию. В конце, уже опционально, вы тестируете возможность достижения удалённого хоста по порту 80 (http) и по порту 443 (HTTP поверх SSL/ TLS). 

В приницпе весь рецепт диагностики состоит из кода Powershell для версии 7.0.

# Получаем значение имени DNS данного хоста

$DNSDomain = $Env:USERDNSDOMAIN

$FQDN      = "$Env:COMPUTERNAME.$DNSDomain"

# Получаем значение адреса этого DNS сервера

$DNSHT = @{

  InterfaceAlias = "Ethernet"

  AddressFamily  = 'IPv4'

}

$DNSServers = (Get-DnsClientServerAddress @DNSHT).ServerAddresses

$DNSServers

# Убеждаемся в доступности этих DNS серверов

Foreach ($DNSServer in $DNSServers) {

  $TestDNS = Test-NetConnection -Port 53 -ComputerName $DNSServer   

  $Result  = $TestDNS ? "Available" : ' Not reachable'

  "DNS Server [$DNSServer] is $Result"

}

Saturday, 16 May 2020

LDAPS и Zabbix - нужные моменты.

Всем привет.

Не так давно была моя заметка про включение аутентификации LDAPS в Zabbix. На повторную проверку этой операции всплыли некоторые моменты, которые надо выполнить.

Со стороны сервера Zabbix.

Во первых в файл /etc/ldap/ldap.conf надо добавить строку:

TLS_REQCERT never

Во вторых, в файл /etc/hosts дописать DNS на свой контроллер домена dc01.forza.com:

192.168.10.1 dc01.forza.com

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

openssl s_client -showcerts -connect 192.168.10.1:636

Со стороны контроллера домена.

Во первых, фаерволле сервера разрешить входящие соединения по 389 и 636 TCP-портам.

Во вторых с помощью ldp.exe проверить  что сервер слушает по 636-му порту.



Friday, 6 December 2019

Знаете ли вы свой принтер?

Всем привет.

Листая журнал "Системный администратор" я обнаружил неожиданно (для себя), что Игорь Савчук во многом прав относительно таких устройств как принтеры в наших офисах. Ведь действительно, мы все тщательно сканируем свою сеть, патчим наши хосты, устанавливаем антивирусники, а рядом у нас в сети работает принтер с набором современных TCP/IP-сервисов.

Принтера умеют хранить историю печати, отправлять почту, обновляться и управляться с интернет, общаться по WiFi, Ethernet и USB. При этом у них есть внутренний накопитель, который хранит не только необходимый код для работы, но имеет еще много свободного места под рабочий кеш. И который вполне может быть доступен по сети как на запись так и на чтение.

Конечно, стандартов тут нет, у каждого бренда свои секреты, но все разгадки легко ищутся в Интернет.

Вот таким вот образом можно легко найти доступные принтеры HP:
inurl:hp/device/this.LCDispatcher

Точно таким же образом можно легко найти принтеры других фирм, например от Ricoh:
intitle:"web image monitor"
"/web/user/en/websys/webArch/mainFrame.cgi"
inurl:"/en/sts_index.cgi"

С помощью нескольких строк кода (Perl) автор предлагает проверить отзывчивость вашего печатного друга.

Первый пример это печать текста "PRINTER TEST STRING" из командной строки
perl prnmsg.pl ip-adr-принтера "PRINTER TEST STRING"

Где prnmsg.pl:
#!/usr/bin/perl -w
#File name: prnmsg.pl
use IO::Socket;
$iphost = $ARGV[0];
$textprn = $ARGV[1];
my $mysock = new IO::Socket::INET (
 PeerAddr => $iphost,
 PeerPort => '9100',
 Proto => 'tcp', );
die "NETWORK ERROR: Could not create socket!" stuff $mysock;
print $mysock $textprn;
close($mysock);

Friday, 20 September 2019

Запрещаем Simple Bind.

Всем привет.

Есть такая неприятная штука как Simple Bind. Simple Bind с точки зрения безопасности опасен тем, что сервисы, обращаясь к PDC по протоколу LDAP передают учетные данные вместе с паролями в открытом текстовом виде. Такие сервисы необходимо переконфигурировать на использование протокола LDAPS а при невозможности сделать это – принять другие меры по защите трафика и понизить привелегии проблемной учетной записи до минимально необходимых.

Для начала логирования событий Simple Bind нужно поменять значение ключа реестра на PDC.


Изменения применяются сразу, перезагрузка сервера не требуется.

Monday, 11 March 2019

Zabbix and LDAP secure authethincation.

Hi everybody.

As you know Zabbix has authethincation methods via Internal, LDAP and HTTP. And how about Secure LDAP? Yes, sure. It can be true also.

So as you can see on the snapshot you have to type in the "LDAP host" field the value as "ldaps://myDC" and in the "Port" field as 636.


If you have a problem with reset authethincation to Internal by Zabbix frontend you can do it in mysql:

mysql -u root -p
UPDATE 'zabbix'.'config' SET 'authentication_type' = '0' WHERE 'config'.'configid' = 1;

See you later.

Sunday, 17 June 2018

Способы делегирования административных полномoчий в АD.

Всем привет.

Очевидно, что практически в каждой организации ИТ-подразделение включает в себя нескольких администраторов, и различные административные задачи должны быть распределены среди администраторов и администраторов филиалов.

Есть разные способы делегирования административных полномoчий в АD:

1) В OU Группа по меню «Свойства/Управляется/Изменить»  назначается Пользователь который может изменять только членство объектов в этой группе.

2) В OU Группа по меню «Делегирование управления…» назначается Пользователь которому далее назначается задача из предлагаемого списка, например «Создание, удаление и управление уч. записями пользователей».  Это дает ему право править в этой группе любой объект типа «Пользователь» и все его атрибуты.

3) С помощью создания Группы с ограниченным доступом. Создается еще одна группа администраторов которой назначаются ограниченные права на конкретный OU. 

Я много раз читал что таким образом можно предложить и отделу кадров править многие атрибуты пользователей, но никак не мог понять каким именно образом кадровики будут это делать.)

Думаю, с администратором филиала должно быть полегче. Итак, инструменты которыми можно править делегированные администратору филиала объекты AD:
- модуль RSAT Powershell: бесплатен, без GUI, требует знания Powershell, требует инсталляцию
- оснастка MMC «Пользователи и компьютеры AD»: бесплатен, не требует инсталляции.
- оснастка MMC ADSIEdit: бесплатен, не требует инсталляции
- утилита ADExplorer: бесплатен, не требует инсталляции
- утилита Softerra LDAP Administrator: 30 дней бесплатный период, требует инсталляцию.

Однако независимо от задачи делегирования существует видимость объектов в AD. По умолчанию все пользователи домена как члены группы «Прошедшие проверку» могут видеть все объекты в домене в режиме чтения.

Thursday, 17 May 2018

Сохраненные LDAP-запросы.

Всем привет.

Сколько у вас заблокированных аккаунтов в домене? А сколько серверов? А сколько из них выше версии 2003? Вопросы, вопросы. 

А хотите это знать это  в любой момент времени? Конечно хочу! Разумеется можно это получить с помощью Powershell.

Например так:
Get-ADComputer -Filter "OperatingSystem -like '*Server*'" -properties OperatingSystem,OperatingSystemServicePack | Select Name,Op* | format-list

Однако в консоли Active Directory Users and Computers (ADUC) есть такая полезная опция как Сохраненные запросы (Saved Queries) которые позволяют создавать простые и сложные LDAP-запросы по выборке объектов Active Directory. Эти запросы можно сохранять, редактировать и переносить между компьютерами. С помощью сохраненных запросов можно быстро и эффективно решать задачи поиска и выборки объектов в AD по различным критериям. Saved Queries, например, помогут быстро: вывести список всех отключенных учетных записей в домене, выбрать всех пользователей определенной организации с ящиками на заданном сервере Exchange и т.п.

Важное преимущество сохраненных LDAP-запросов - предоставление возможности выполнять групповые операции с объектами из разных OU (контейнеров) Active Directory, например массовая блокировка-разблокировка, перемещение, удаление учетных записей и т.п. Т.е. позволяют «избавиться» от недостатков иерархической структуры OU в Active Directory, собрав все нужные объекты в плоском табличном виде.

Из опыта надо учитывать тип вхождения значения параметра в запрос. Например сервера платформы после версии Windows 2000 слово "Server" пишут в середине. Поэтому надо выбирать условие "совпадает", но далее указывать слово со звездами по бокам, как *Server*.


Версия на печать

Популярное