LightSquid Ubuntu

LightSquid Ubuntu
Итак появилось время и решил поправить авто заполнение информации по пользователям для LightSquid.
Настройка LightSquid. Получаем список пользователей из домена.

Попробовав написать на bash с использованием ldapsearch. Получилось не особо. Оказалось что при переводе через base64 логины обрезаются до определенной длинны. Ниже будет выложен этот скрипт вдруг кому интересен.
В итоге получилось на PHP.
Итак приступим.

Еще раз я не программист. Поэтому идеальности кода не гарантирую. Все появилось методом проб и ошибок.
Из основных моментов стоит отметить что и PHP и LightSquid чувствительны к регистру.
Предполагается что скрипт работает на сервере где уже установлен LightSquid и соответственно стоит PHP

Необходимо доставить php5-ldap

sudo apt-get install php5-ldap

Теперь нам необходимо разобраться куда мы подключаемся. Для этого нам потребуется полное имя контроллера домена Active Directory и некая учетная запись для чтения каталога LDAP

Имя контроллера: dc.nasha.firma
Учетная запись: ldapa
Пароль: LD@P@P@S

Начнем писать скрипт

nano ldap_user_parser.php
#!/usr/bin/php5
<?php
	// Пишем куда подключаемся и сопутствующее
	//==================================================
	$ds = "dc.nasha.firma";
	$bdn = "dc=nasha, dc=firma";
	$connect = ldap_connect("$ds") or die("Не удалось подключиться к LDAP");
	$password = 'LD@P@P@S';
	$username = 'ldapa@nasha.firma';

	// Прописываем параметры подключения и подключаемся
	//==================================================
	ldap_set_option ($connect, LDAP_OPT_SIZELIMIT,5000);
	ldap_set_option ($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
	ldap_set_option ($connect, LDAP_OPT_REFERRALS, 0);
	ldap_bind ($connect, $username, $password);

	// Проверить подключение на выходе 1
	//==================================================
	// echo "Connecting: $map \n";

	// Фильтр по персонам и поиск по фильтру в каталоге
	//==================================================
	$filter = "(objectCategory=person)";
	$read=ldap_search($connect, $bdn, $filter);
	$info = ldap_get_entries($connect, $read);

	// Посмотреть количество записей
	//==================================================
	// echo "Zapisey: ".$info["count"]." \n";

	// Посмотреть всевозможные атрибуты
	//==================================================
	//
	//	$entry = ldap_first_entry($connect, $read);
	//	$attrs = ldap_get_attributes($connect, $entry);
	//
	//	echo $attrs["count"] . " атрибуты, соответствующие этой записи: ";
	//
	//	for ($i=0; $i < $attrs["count"]; $i++) {
	//	    echo "$attrs[$i]"."\n";
	//	}
	//
	//==================================================

	// Вывод содержимого
	//==================================================
	for ($i=0; $i < $info["count"]; $i++) {
		echo strtolower($info[$i]["samaccountname"][0])." ".$info[$i]["name"][0]."\n";
		} 
        
	// Закрываем LDAP 
	//================================================== 
	ldap_close($connect); 
	// echo "Done.\n"; 
?>

При выводе логинов приводим их к строчному регистру strtolower()

Делаем скрипт исполняемым

chmod +x ldap_user_parser.php

Проверяем что он выводит то что нам требуется

./ldap_user_parser.php

Проверяем что LightSquid видит то что нам требуется

./ldap_user_parser.php > /var/www/realname.cfg
cd /var/www/
sudo ./lightparser.pl

Закидываем скрипт к LightSquid чтобы не терять

sudo cp ldap_user_parser.php /var/www/

И прописываем задание для автоматического выполнения

sudo crontab -e

Сам crontab выглядит теперь так

*/5 * * * * /var/www/lightparser.pl
*/10 * * * * /var/www/ldap_user_parser.php > /var/www/realname.cfg

В самом скрипте закомментирован кусок кода. Он выполняет поиск всех атрибутов что можно считать с каталога LDAP. Рекомендую посмотреть что он выдает. В моем случае контроллер домена поднят на Windows Server 2012 и параметры на выходе были такими. Как видно позже в коде я использую name и sAMAccountName. И как видно в коде оно написано маленькими буквами так как все чувствительно к регистру.

cn
description
distinguishedName
instanceType
whenCreated
whenChanged
uSNCreated
memberOf
uSNChanged
name
objectGUID
userAccountControl
badPwdCount
codePage
countryCode
badPasswordTime
lastLogon
pwdLastSet
primaryGroupID
objectSid
adminCount
accountExpires
logonCount
sAMAccountName
sAMAccountType
lockoutTime
servicePrincipalName
objectCategory
isCriticalSystemObject
dSCorePropagationData
lastLogonTimestamp

Привожу пример скрипта bash для ldapsearch. Он рабочий. Но как я писал выше обрезает имена пользователей.

#!/bin/bash
# cd ~/ldap/

ldapsearch -h dc.nasha.firma -p 389 -D 'ldapa@nasha.firma' -w 'LD@P@P@S' "(&(objectclass=user)(objectcategory=Person))" > ldap.txt

cat ldap.txt | grep sAMAccountName | awk '{ print $2}' > logins.txt

touch tempname.txt
echo > tempname.txt

cat logins.txt | while read LOGIN
	do
	REALNAME=`ldapsearch -LLL -h dc.nasha.firma -p 389 -D 'ldapa@nasha.firma' -w 'LD@P@P@S' "(&(objectclass=user)(objectcategory=Person)(sAMAccountName="$LOGIN"))" cn | grep "cn:: " | awk '{ print $2}' | base64 --decode`
	echo "$LOGIN $REALNAME" >> tempname.txt
	done

cat tempname.txt | grep -v "^$" > realname.txt
rm tempname.txt

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *