Эта статья описывает метод автоматического извлечения данных о фамилии и имени сотрудников из ActiveDirectory и их вставку в отчёты Lightsquid.
Задача: обеспечить вывод отчётов через Lightsquid по каждому пользователю Active Directory, заходившего в интернет, с указанием его имени и фамилии (забегая вперёд, скажу, что в AD этой информации соответствует поле «выводимое имя», в LDAP-запросах на него ссылается переменная displayName)
Исходные данные:
Решение:
Сначала я опишу механизм передачи данных о ФИО в Lightsquid из ActiveDirectory, затем приведу его реализацию.
Сведения о ФИО представлены в AD в свойствах доменного пользователя, в поле «Выводимое имя». Для получения сведений от AD необходимо взаимодействовать с ним через LDAP-запросы. При этом взаимодействовать можно только от имени авторизованного пользователя домена. Поскольку Lightsquid написан на Perl, для выполнения этих запросов потребуется модуль Net::LDAP. А для автоматического вывода в отчёте сведений из AD необходимо заменить простое получение логина от squid на выполнение LDAP-запроса.
Вначале необходимо создать в AD учётку с максимально ограниченными правами, которая будет использоваться для выполнения LDAP-запросов. Для этого запустите оснастку «Active Directory- пользователи и компьютеры» и создайте нового пользователя. Дайте ему название, выражающее его предназначение. Например, LightSquidAgent. Затем создайте новый объект групповой политики и войдите в его свойства (или в свойства существующего объекта). Далее Конфигурация компьютера->Конфигурация Windows->Параметры безопасности->Локальные политики->Назначение прав пользователя. В параметре «Отказ в доступе к компьютеру из сети» введите LightSquidAgent. В параметре «Отклонить локальный вход» тоже введите LightSquidAgent.
Теперь установим в Perl модуль Net::LDAP. Запускаем bash или аналогичную командную оболочку и выполняем
perl -MCPAN -e shell
. После входа в интерпретатор cpan выполняем
install Net::LDAP
. Далее программа установки выведет вопрос, хотим ли мы позволить ей выполнить авто-конфигурирование. Просто жмём Enter. В конце вы должны увидеть
LDAP module was installed successfully
.
После этого можно править код, генерирующий отчёты. Заходим в папку с установленным LightSquid, переходим в папку ip2name и открываем файл ip2name.squidauth. Он должен выглядеть так:
#contributor: esl
#specialy for squid with turned on user authentication
#simple version
sub StartIp2Name() {
}
sub Ip2Name($$$) {
# $Lhost,$user,$Ltimestamp
my $Lhost=shift;
my $user =shift;
$user =URLDecode($user); #decode user name
return $user if ($user ne "-");
return $Lhost;
}
sub StopIp2Name() {
}
#warning !!!
1;
В шапке файла нужно прописать пространства имён, в которых лежат нужные нам функции:
#contributor: esl
#specialy for squid with turned on user authentication
#simple version
use strict;
use warnings;
use Net::LDAP;
use Encode;
Финал: заменяем определение функции Ip2Name.
Вместо
sub Ip2Name($$$) {
# $Lhost,$user,$Ltimestamp
my $Lhost=shift;
my $user =shift;
$user =URLDecode($user); #decode user name
return $user if ($user ne "-");
return $Lhost;
}
вставляем
sub Ip2Name($$$) {
# $Lhost,$user,$Ltimestamp
my $Lhost=shift;
my $user =shift;
$user =URLDecode($user); #decode user name
return $Lhost if ($user eq "-");
my $server = "ldap://ourserver.domain.com";
my $ldap = Net::LDAP->new( $server ) or die $@;
my $message = $ldap->bind(q(domain\LightSquidAgent), password => "password");
die $message->error() if $message->code();
my $result = $ldap->search(
base => "dc=domain,dc=com",
filter => "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" . $user . "))",
);
my $first_entry_with_displayName = $result->entry(0);
my $pure_displayName = $first_entry_with_displayName->get_value("displayName");
$pure_displayName =~ s/ /_/g;
Encode::from_to($pure_displayName, 'utf-8', 'windows-1251');
$message = $ldap->unbind;
return $pure_displayName;
}
Объективная критика приветствуется
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий