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

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


Показаны сообщения с ярлыком ADDS. Показать все сообщения
Показаны сообщения с ярлыком ADDS. Показать все сообщения

среда, 3 октября 2018 г.

bash: Получение читаемой информации о пользователе из ADDS

Понадобилось мне проверить, что случилось с пользователем. Под рукой только домашняя убунта, лезть терминалом на сервер на работе не комильфо.

Но есть настроенный ldapsearch, которым мы и воспользуемся. Изначально фрагмент писался для получения данных о компах, поэтому переменная, которую ищем, называется $comp

NB! В итоговом массиве есть только одна переменная с индексом memberof, хотя пользователь может входить в несколько групп. Список групп я получаю более другими способами, поэтому ситуация в этом скрипте не анализируется. Возможно надо проверять значение индексера, и если он есть memberof, то дописывать значение параметра к переменной с таким индексом. Лично мне это просто не требуется.

#!/bin/bash
# похоже, что без промежуточного файла не обойтись - вывод ldapsearch напрямую не перехватывается
comp=$1
unset ldapData
# ldapData - ассоциативный, а не нумерованный массив!
declare -A ldapData
ldapsearch -o ldif-wrap=no -D ПОЛЬЗОВАТЕЛЬ -x -w "ПАРОЛЬ" "(cn=$comp)">/tmp/ldifDataFile
# список полей с датами, которые надо декодировать
# ведущий и хвостовой пробелы обязательны
datesList=" lastlogon pwdlastset badpasswordtime accountexpires "
while read ldiffPar ldiffData;do
  if [ "${ldiffPar:0:1}" == "#" ] || [ ${#ldiffPar} -eq 0 ]; then continue; else

# приводим ldiffPar к нижнему регистру
    ldiffPar=${ldiffPar,,}

# а для переменной-индекса убираем все двоеточия, сколько бы их там ни было
    indexer=${ldiffPar//:/}

# если два последних символа имени атрибута два двоеточия, значит он кодированный и нуждается в декодировании
    if [ ${ldiffPar: -2} == "::" ]; then
      ldapData[$indexer]="$( echo $ldiffData|base64 -d )"
    else
      ldapData[$indexer]="$ldiffData"
    fi
# если название атрибута в ADDS есть в списке $datesList, то переводим дату из
# формата MS в человекочитаемый
# не очень надежный способ поиска, поэтому ищем "пробел-индексер-пробел", а не просто "индексер"
    if  [[ "$datesList" = *" $indexer "*  ]]
    then
      ldapData[$indexer]=$( date -d @$(( ${ldapData[$indexer]}/10000000-11644473600 )) +%Y-%m-%d\ %H:%M:%S)
    fi
# отдельное внимание состоянию пользователя
    if [ $indexer == "useraccountcontrol" ]
    then
      isActive=$(( ${ldapData[$indexer]} & 2 ))
      if [ $isActive -eq 0 ]; then uacState="АКТИВЕН "; else uacState="не активен ";fi
      ldapData[$indexer]=$uacState${ldapData[$indexer]}
    fi
    echo ldapData[$indexer]=${ldapData[$indexer]}
  fi
done


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

пятница, 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 - можно задавать каждый раз в командной строке или один раз в файле конфигурации.

четверг, 10 ноября 2016 г.

bash: Рекурсивно разворачиваем доменную группу в список пользователей

Есть у меня в домене супер-группа "разрешен доступ в интернет". Почему супер? Потому что в неё включаются преимущественно другие группы, по одной на каждое подразделение, в которые могут быть включены другие группы и т.д. Возникла задача: узнать, сколько всего пользователей прямо или косвенно входят в эту группу.

Синтаксис виндовой dsget и её родственных утилит вызывает у меня стойкое отвращение обилием лишних параметров и общей запутанностью. Но раз уж прокси-сервер у меня работает под убунтой, то почему бы не задействовать мощный язык bash-a и возможности Samba?

Что у нас есть из инструментов? В первую и главную очередь - сильномогучая команда net. Во вторую - очень полезная команда wbinfo. Надо скомпоновать результаты их работы, чтобы на выходе получить список пользователей группы и всех входящих в неё подгрупп.

Далее по тексту подразумевается, что всё выполняется на компьютере с установленной Samba, введённом в домен. Разделитель домена и имени объекта - обратный слэш "\".
Все команды выполняются от имени супер-пользователя.

среда, 3 декабря 2014 г.

MS IE: Автоматическое определение параметров и GPO: часть 2

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

Путем небольшого мозгового штурма в формате "забрасывание оппонента камнями в аське" выяснилось, что "Автоматическое определение параметров" таки существует в виде ключа реестра:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
AutoDetect

Но этого ключа не видно в указанном пути. Почему? Да потому, что это "волатильный" ключ, который удаляется, как только IE обработал его значение.

Если работаем однонаправленно - принудительно задаем значение этого ключа, не интересуясь существующей настройкой, тогда однозначно прав мой коллега: дешевле получится через политики импортировать значение именно для ключа AutoDetect.

Но если возникает необходимость узнать о состоянии "автоматического определения", то сделать это чтением ключа AutoDetect можно только до первого запуска IE текущим пользователем в текущем сеансе, да и то не факт, что до этого момента какая-нибудь программа не дёрнет API IE для своих нужд, что так же приведет к удалению ключа.

В общем, решайте сами: если только на запись, то импортируйте ключ с нужным значением, если на запись и чтение - правьте бит в байте.

MS IE: Автоматическое определение параметров и GPO

Для старых версий Internet Explorer в оснастке групповых политик существовал раздел IE Maintenance. Но в более новых версиях контроллеров и для IE версий 10+ этого раздела нет, а сохранившиеся настройки не работают или работают частично.
Особую головную боль вызывает галочка "Автоматическое определение параметров", которая никак через политики не настраивается:


среда, 20 августа 2014 г.

SAMBA: несколько полезных команд по работе с...

1. добавить пользователя в группу

net rpc group addmem группа пользователь -U админ -S сервер_каталога

ГРУППУ и ПОЛЬЗОВАТЕЛЯ можно указывать без домена, если явно указываешь СЕРВЕР_КАТАЛОГА. Впрочем, я не проверял, можно ли не указывать СЕРВЕР_КАТАЛОГА, но просто указать домен.
АДМИН - пользователь, имеющий права на изменение групп и учетных записей пользователей


Почему rpc, а не ads? Потому что с ads что-то не получалось, а по rpc прошло "со свистом". Разбираться дальше было лень

2. удалить пользователя из группы

аналогично, но заменить addmem на delmem

3. удобный список групп, в которых состоит пользователь

id домен\\пользователь|sed 's/\,/\n/g'|sort -t \\ -k 2


Вывод будет примерно такой:
 
$ getent passwd contoso\\gates_wh
CONTOSO\gates_wh:*:129125:100513:Gates, William Henry, III:/home/CONTOSO/gates_wh:/bin/false
 
$ id contoso\\gates_wh|sed 's/\,/\n/g'|sort -t \\ -k 2
113723(CONTOSO\acl_cnt304421_p-sam4200sizpi)
129126(CONTOSO\acl_cnt304421_p-sam4200sizpi-def)
122960(CONTOSO\acl_cnt30srv012_031rw)
122867(CONTOSO\acl_cnt30srv012_o)
113709(CONTOSO\acl_cnt30srv041_p022f)
123333(CONTOSO\acl_cnt30srv041_p056f)
122903(CONTOSO\acl_cnt30srv042_valid)
122900(CONTOSO\acl_cnt30srv201-l-r)
uid=129125(CONTOSO\gates_wh) gid=100513(CONTOSO\domain users) группы=100513(CONTOSO\domain users)
122893(CONTOSO\rbl_user-gpo9)

То есть, sed-ом заменяем запятые, которые выдает стандартная id, перечисляя список групп, на переводы строки, чтобы группы вывелись в столбик.
Дальше сортируем полученный столбец. Можно было, в принципе, вырезать GID-ы, но лень, поэтому, чтобы сортировать не по GID-ам, а по названиям групп, объявляем символ "\" разделителем полей (это будет "\" между ДОМЕНОМ и ПОЛЬЗОВАТЕЛЕМ), и сортируем не с начала строки, а по второму полю.

вторник, 25 марта 2014 г.

О бедной собачке замолвите слово (kerberos)

(абстракт: после установки кербероса стало невозможно войти в ubuntu кроме как через recovery shell - при попытке обычного логона даже не предлагается ввести пароль, сразу идет возврат ко вводу имени пользователя)

Готовил очередной виртуальный сервер ко вводу в новый домен. Это будет первый самба-сервер в этом домене. В старом особых проблем не возникало, надеюсь, не сильно их будет и в новом. Однако, такие вот неплановые грабли: неожиданно sudo стала давать segfault, а после перезагрузки вообще не удалось залогиниться. Благо, сервер еще не в боевом состоянии, поэтому открыта recovery shell в grub-е.

Установил krb5_user, вроде бы правильно. Но напутал в /etc/krb5.conf - неправильно прописал "области действия" - realm-ы. Из-за чего и огрёб.
Неправильность была в том, что в разделе [domain_realm] забыл после доменов указать их реалмы и бедный керберос просто не знал, откуда я такой красивый нарисовался, после чего посылал меня.

понедельник, 20 января 2014 г.

ADDS: error 0x800704b8 не подключаются диски

Позвонил пользователь: не мапятся сетевые диски, которые раньше прекрасно мапились.
Стандартные виндовые журналы и gpupdate/force вкупе с gpresult/z ничего интересного не дали: есть event ID: 4098, есть код ошибки 0x800704b8, и есть офигенно полезное описание "ошибка расширенного типа".

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

net time /domain:мой_домен /set /yes