Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


пятница, 17 февраля 2017 г.

Ubuntu: ADTool и WMIC

Когда-то обе эти утилиты были в репозиториях убунты, но по какой-то причине их оттуда убрали. А зря.

ADTool

ADTool не имеет никакого отношения к рекламе (advertising), зато имеет конкретное отношение к активному каталогу (Active Directory).
По сути, это оболочка над клиентом OpenLDAP, позволяющая максимально комфортно обращаться к ADDS из-под линукса. Распространяется в исходниках, работает нормально.

https://gp2x.org/adtool/

В комплекте идет довольно короткий но понятный ман: https://gp2x.org/adtool/usage.html. Из-за ограниченных прав в домене, я больше всего использую команды search (поиск объектов по значению атрибута) и list (просмотр содержимого контейнера), которых как раз недостает в самбовской net.

Базовые параметры - имя пользователя, пароль, узел, от которого начинается поиск, имя сервера AD - можно задавать каждый раз в командной строке или один раз в файле конфигурации.



Например:
(примеры ниже - фрагменты реальных скриптов или цепочек команд, которые приходилось сочинять, решая свои задачи)

# найти владельцев компьютеров

for a in 0021 002a 003v 0051 005b; do echo -n CNT30$a\:;adtool attributeget cnt30$a managedby;done|sort

cnt30 - общая часть имени всех компьютеров в домене contoso30 :-) Имена имеют вид cnt30xxxz, где xxx:=[0-9]{3}, а z:=[0-9a-z]
echo - для красоты выводится синтезированное имя компютера - из префикса и значения счетчика цикла
adtool attributeget... - ищем атрибут managedby у объекта с именем cnt30xxxz и выводим его значение.

# То же самое, но не по списку имен,а по содержимому конкретной OU
# сначала выводится имя компа, следующей строкой владелец. Если владелец не задан, второй строки нет

IFS=$(echo -en "\n\b");for a in `adtool list "OU=330,OU=comps,OU=Domain Root Entry,DC=contoso,DC=com"|grep -v "error:"|sort`; do b=$(echo $a|sed -e 's/CN=//;s/,.*$//');echo $b\;;adtool attributeget $b managedby; done|pager

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

Первый adtool в описании цикла выводит список компьютеров, находящихся в OU=330.

По непонятной мне причине, возвращается всегда полное, с путём имя объекта, а вот для поиска надо указывать только его CN, поэтому из каждой возвращенной строки sed-ом вырезаем начальное "CN=" и всё от первой запятой до конца строки, получая только имя компьютера без "обвеса".

Это имя скармливаем второму adtool, который вытаскивает атрибут managedby.

# посмотреть, в каком состоянии учётка, не заблокирована ли она
# писалось просто из интереса, поэтому очень грубо. Желающие могут добавить различные навороты.

adtool attributeget cnt305311 useraccountcontrol|awk '{ printf "%X", $1 ; print ""}'

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

(hex/dec) интересующие меня значения этого атрибута.
комп
1022/4130 - заблокирован
1020/4128 - активен

пользователь
202/514 - заблокирован
200/512 - активен

Список атрибутов различных элементов AD можно посмотреть, например, здесь:
http://www.kouti.com/tables/userattributes.htm

Несколько примеров есть на странице, откуда я и попал на страницу самой утилиты:
http://khmel.org/?p=634

 WMIC

Я взял версию, которая входит в состав OpenVAS - системы проверки на уязвимости. Вся система мне не нужна, а вот один ее компонент нужен и даже очень. Я взял wmi-1.3.14.tar.bz2. Скомпилировал. Получил возможность опрашивать по WMI виндовые компы из-под линукса. Что еще надо?

Для удобства я свел несколько наиболее нужных мне запросов (батарея, монитор и кое-что еще в один скрипт, который лежит в /usr/local/bin рядом с бинарником.

Спросим у компа, есть ли у него батарея/ИБП

wmic -A ~/auth //$1.contoso.com "SELECT * FROM Win32_battery"


-A ~/auth - авторизуемся на жертве данными из файла, остальное понятно.

$ wmicc.sh cnt301202
CLASS: Win32_Battery
Availability|BatteryRechargeTime|BatteryStatus|Caption|Chemistry|ConfigManagerErrorCode|ConfigManagerUserConfig|CreationClassName|Description|DesignCapacity|DesignVoltage|DeviceID|ErrorCleared|ErrorDescription|EstimatedChargeRemaining|EstimatedRunTime|ExpectedBatteryLife|ExpectedLife|FullChargeCapacity|InstallDate|LastErrorCode|MaxRechargeTime|Name|PNPDeviceID|PowerManagementCapabilities|PowerManagementSupported|SmartBatteryVersion|Status|StatusInfo|SystemCreationClassName|SystemName|TimeOnBattery|TimeToFullCharge
2|0|2|Internal Battery|3|0|False|Win32_Battery|Internal Battery|0|12840|3B1439X26738  American Power ConversionBack-UPS XS 650CI FW:892.R3 .I USB FW:R3 |False|(null)|100|43|0|0|0|(null)|0|0|Back-UPS XS 650CI FW:892.R3 .I USB FW:R3 |(null)|(1)|False|(null)|OK|0|Win32_ComputerSystem|CNT301202|0|0


Как видно, возвращается две строки, в первой заголовки, во второй значения. Ну а распарсить такую табличку средствами CLI - плёвое дело. Да и многочисленные параметры самого WMIC позволяют много чего наворотить.

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

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

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