Documento: Autenticação do OTRS 3.3.3 (Sistemas de chamados Free) em AD
Objetivo: Autenticação com AD Windows Server 2008 e 2012
Organização: Conectividade / compatibilidade / comunicação
Autor: Eduardo Popovici
*******************************************************************************
SORTEIO DO LIVRO
Falando sobre Hardware
NÃO PRECISA COMPRAR NADA, É SÓ PARTICIPAR
Amigos, vou sortear meu ultimo livro pelo sorteie.me no Facebook. Quem quiser participar ai esta o link da promoção. Pode acessar a área de promoções da página da HTBRAZ no Facebook ou clicar no link abaixo.
Sorteio:
https://www.facebook.com/htbraz?sk=app_154246121296652&app_data=%7B%22id%22%3A369625%7D
O sorteio será no final deste ano... obrigado a todos e sucesso.
Lembre-se de seguir as regras para validar o sorteio do livro.
*******************************************************************************
Depois de instalar e configurar o OTRS, crie um atalho nas maquinas de seus usuários para que seja possível abrir o Customer Portal de modo fácil. Veja como fazer clicando aqui.
*******************************************************************************
Baixe o MySql 5.5.34 aqui
*******************************************************************************
Instale o servidor de chat. Tutorial aqui
*******************************************************************************
OTRS é um sistema de chamados Free (open), e cheio de recursos porém como todo bom sistema open, é preciso carinho e muita dedicação para a configuração dos módulos e detalhes disponíveis. Pode ser uma verdadeira batalha aos navegantes de primeira viagem deixar o sistema com uma performance no mínimo aceitável, mas vamos deixar esse assunto para outro post. Nesta postagem vou mostrar como configurar a autenticação com o AD através de LDAP.
É importante lembrar que você deve ter a porta UDP 389 aberta no Firewall (porta do LDAP).
É importante lembrar que você deve ter a porta UDP 389 aberta no Firewall (porta do LDAP).
Utilizado
- Sistema operácional Windows 7, 8, 2008 e 2012 (sim fiz teste e instalação em todos eles e funcionou perfeitamente)
- Banco de dados: MySql
- AD: Windows Server 2012
- Quantidade de objetos no AD: 800
- Nível funcional da floresta: Windows Server 2008
- Hardware: Servidor HP DL320e
- Servidor de e-mail´s Exchange 2007
Vantagens:
- Todo o catálogo de usuários do AD pode ser utilizada
- Vida mais próxima do single-sing-on (login único)
- ADs muito grandes com muitos usuários deixam o sistema incrivelmente lento e pode ser necessário uma customização bem dispendiosa.
- Se o usuário da pessoa for bloqueado na rede, não será possível efetuar a abertura de chamados pela configuração padrão.
Importante (portais):
- Server/otrs/customer.pl --> Este é o portal do usuário para a abertura de chamados
- Server/otrs/index.pl --> Este é o portal de administração e da equipe de suporte
Mão na massa:
Bom vamos colocar a mão na massa. Acesse o caminho C:\otrs\OTRS\Kernel e faça uma cópia do arquivo Config.pm. Coloque como Config.pmOld pois pode ser necessário em algum momento retornar a configuração (principalmente se deletar alguma linha do script e não souber desfazer).
Use o bloco de notas para isso editar o arquivo Config.pm e digite o script abaixo. Lembrando que o sinal de # é utilizado para comentário. Deixei bem esmiuçado abaixo, e recomendo que mantenha algo parecido, pois quem fizer a manutenção do sistema precisa saber do que se trata a configuração.
############## Inicio do Script de configuração Config.pm ##############
# --
# Kernel/Config.pm - Config file for OTRS kernel
# Copyright (C) 2001-2013 OTRS AG, http://otrs.org/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
# Note:
#
# -->> Most OTRS configuration should be done via the OTRS web interface
# and the SysConfig. Only for some configuration, such as database
# credentials and customer data source changes, you should edit this
# file. For changes do customer data sources you can copy the definitions
# from Kernel/Config/Defaults.pm and paste them in this file.
# Config.pm will not be overwritten when updating OTRS.
# --
package Kernel::Config;
use strict;
use warnings;
use utf8;
sub Load {
my $Self = shift;
# ---------------------------------------------------- #
# database settings #
# ---------------------------------------------------- #
# Coloque aqui o servidor ou endereço do servidor de base de dados
$Self->{'DatabaseHost'} = 'MySqlServer';
# Coloque aqui o nome da base de dados
$Self->{'Database'} = "DataBase";
# Coloque aqui o usuário da base de dados
$Self->{'DatabaseUser'} = "UserDatabase";
# Coloque aqui a senha da base de dados. You also can use bin/otrs.CryptPassword.pl
# for crypted passwords
$Self->{'DatabasePw'} = 'senha do banco de dados';
# The database DSN for MySQL ==> more: "perldoc DBD::mysql"
$Self->{'DatabaseDSN'} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost}";
# The database DSN for PostgreSQL ==> more: "perldoc DBD::Pg"
# if you want to use a local socket connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";
# if you want to use a TCP/IP connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};host=$Self->{DatabaseHost};";
# if you have PostgresSQL 8.1 or earlier, activate the legacy driver with this line:
# $Self->{DatabasePostgresqlBefore82} = 1;
# The database DSN for Microsoft SQL Server - only supported if OTRS is
# installed on Windows as well
# $Self->{DatabaseDSN} = "DBI:ODBC:driver={SQL Server};Database=$Self->{Database};Server=$Self->{DatabaseHost},1433";
# The database DSN for Oracle ==> more: "perldoc DBD::oracle"
# $ENV{ORACLE_HOME} = '/u01/app/oracle/product/10.2.0/client_1';
# $ENV{NLS_DATE_FORMAT} = 'YYYY-MM-DD HH24:MI:SS';
# $ENV{NLS_LANG} = "american_america.utf8";
# $Self->{DatabaseDSN} = "DBI:Oracle:sid=OTRS;host=$Self->{DatabaseHost};port=1522;";
# ---------------------------------------------------- #
# fs root directory
# ---------------------------------------------------- #
$Self->{Home} = 'C:/otrs/OTRS';
# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #
# $Self->{SessionUseCookie} = 0;
# $Self->{CheckMXRecord} = 0;
# ---------------------------------------------------- #
# ---------------------------------------------------- #
# data inserted by installer #
# ---------------------------------------------------- #
$Self->{'LogModule'} = 'Kernel::System::Log::File';
$Self->{'LogModule::LogFile'} = 'C:/otrs/OTRS/var/log/otrs.log';
# $DIBI$
############# Inicio do código #############
# ---------------------------------------------------- #
# Integração do AD com sistema de chamados OTRS
# Desenvolvedor: Eduardo Popovici
# Data: 03/01/2014
# ---------------------------------------------------- #
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
# Coloque nesta linha o nome de seu DC totalmente qualifica (FQDN) ou o IP do servidor de AD. Você também pode colocar o IP do servidor para cara entrada LDAP para Host
$Self->{'AuthModule::LDAP::Host'} = 'servidor.dominio.local';
#Coloque nesta linha a OU aonde estão todos os usuários
$Self->{'AuthModule::LDAP::BaseDN'} = 'DC=dominio,DC=local';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
#Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=usuario,CN=Users,DC=dominio,DC=local';
# Aqui você informa a senha que cadastrou para este usuario
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'SenhaDoUsuario';
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
# Aqui você coloca o nome de seu DC totalmente qualifica (FQDN)
$Self->{'Customer::AuthModule::LDAP::Host'} = 'dominio.local';
#Aqui você informa o OU aonde estão todos os usuários
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'DC=dominio,DC=local';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
#Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'CN=usuario,CN=Users,DC=dominio,DC=local';
# Aqui você informa a senha que cadastrou para este usuário
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'senha';
$Self->{CustomerUser} = { Module => 'Kernel::System::CustomerUser::LDAP',
# Aqui você coloca o nome de seu DC totalmente qualifica (FQDN)
Params => { Host => 'dominio.local',
#Aqui você informa o OU aonde estão os usuários
BaseDN => 'DC=dominio,DC=local',
SSCOPE => 'sub',
##Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
UserDN => 'CN=usuario,CN=Users,DC=dominio,DC=local',
# Aqui você informa a senha que cadastrou para este usuário
UserPw => 'senha',
},
CustomerKey => 'sAMAccountName',
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserPostMasterSearchFields => 'mail',
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
# [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ],
# [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
# [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
# [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
],
};
############## Fim do código de autenticação do AD ##############
# ---------------------------------------------------- #
# ---------------------------------------------------- #
# #
# end of your own config options!!! #
# #
# ---------------------------------------------------- #
# ---------------------------------------------------- #
}
# ---------------------------------------------------- #
# needed system stuff (don't edit this) #
# ---------------------------------------------------- #
use base qw(Kernel::Config::Defaults);
# -----------------------------------------------------#
1;
Show de bola o tutorial, vou replicar depois, agora esperar o tutorial básico de como usar OTRS, só tinha usado o GLPI ;-)
ResponderExcluirQue bom que gostou do tutorial mestre.
ExcluirGrande abraço e sucesso.
Boa tarde amigo, show de bola os seus tutorias. Gostaria de saber se tem como Criar um usuário direto no AD pelo OTRS, preenchendo um formulario de criação de conta?
ExcluirSó tenho a agradecer por tanto conteúdo bom, bem explicado e incrivelmente útil! Mais uma vez, obrigado pelo auxílio e dicas! Grande abraço!
ResponderExcluirOlá Daniel ... obrigado pelos elogios. Nosso intuito é realmente ajudar quem precisa, ainda mais nesse mundo em que sempre temos que fazer o máximo com menos rs...
ExcluirMestre, um grande abraço e muito sucesso.
apos colar o script acima , tento logar com um usuario do meu AD porem não loga e da a seguinte mensagem:
ResponderExcluir"panic, user authenticated but no user data can be foun in OTRS DB! perhaps the user is invalid"
diz que o usuario esta autenticado porem que não há dados do usuario....
o que pode ser ?
apos colar o script acima , tento logar com um usuario do meu AD porem não loga e da a seguinte mensagem:
ResponderExcluir"panic, user authenticated but no user data can be foun in OTRS DB! perhaps the user is invalid"
diz que o usuario esta autenticado porem que não há dados do usuario....
o que pode ser ?
Olá mestre Fagner, bom dia.
ExcluirRapaz, pode ser muita coisa, mas vamos lá...
1) Veja se no AD as portas estão abertas no Firewall em modo de entrada;
2) O usuário precisa apenas de permissão de leitura, e geralmente deixo ele na própria pasta de usuários, fóra das OU´s (principalmente devido GPO´s aplicaas;
3) Veja se a base MySql tem as permissões necessárias para funcionar;
4) Verifique se existe algum firewall ou Proxy com rotas específicas (DMZ);
Pode não ser autenticação no AD e sim no banco. Ele usa um usuário e senha no MySQL.
Espero ter ajudado... grane abraço.
Depois de inserir o texto para integração com o AD ele não entra mais, nem com a conta root nem com a conta do AD, o que pode ter de errado?
ResponderExcluirTem algum erro no arquivo que não reconhece o domínio ou a conta no domínio não existe. Quando vocês aponta para o domínio ele para de olhar a base de usuários local (estou chutando probabilidades). Tente voltar o arquivo original.
ExcluirPOis é, o usuário existe, pude conferir... Depois que eu integro com o AD, qual a forma de logar na interface? domínio\usuário e senha?
ExcluirAbraço!
Não consigo encontrar nenhum erro... Pode me ajudar, por favor!
Excluir############ Inicio do código #############
---------------------------------------------------- #
Integração do AD com sistema de chamados otrs
Desenvolvedor: Eduardo Popovici
Data: 03/01/2014
---------------------------------------------------- #
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
# Coloque nesta linha o nome de seu DC totalmente qualifica (FQDN) ou o IP do servidor de AD. Você também pode colocar o IP do servidor para cara entrada LDAP para Host
$Self->{'AuthModule::LDAP::Host'} = 'dominio.com.br';
#Coloque nesta linha a OU aonde estão todos os usuários
$Self->{'AuthModule::LDAP::BaseDN'} = ' OU=Colaboradores,DC=dominio,DC=com,DC=br ';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
#Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=otrs,OU=Colaboradores,DC=dominio,DC=com,DC=br';
# Aqui você informa a senha que cadastrou para este usuario
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'senha2014';
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
# Aqui você coloca o nome de seu DC totalmente qualifica (FQDN)
$Self->{'Customer::AuthModule::LDAP::Host'} = 'dominio.com.br';
#Aqui você informa o OU aonde estão todos os usuários
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = ' OU=Colaboradores,DC=dominio,DC=com,DC=br ';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
#Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'CN=otrs,OU=Colaboradores,DC=dominio,DC=com,DC=br';
# Aqui você informa a senha que cadastrou para este usuário
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'senha2014';
$Self->{CustomerUser} = { Module => 'Kernel::System::CustomerUser::LDAP',
# Aqui você coloca o nome de seu DC totalmente qualifica (FQDN)
Params => { Host => 'dominio.com.br',
#Aqui você informa o OU aonde estão os usuários
BaseDN => ' OU=Colaboradores,DC=dominio,DC=com,DC=br ',
SSCOPE => 'sub',
##Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
UserDN => 'CN=otrs,OU=Colaboradores,DC=dominio,DC=com,DC=br',
# Aqui você informa a senha que cadastrou para este usuário
UserPw => 'senha2014',
},
CustomerKey => 'sAMAccountName',
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserPostMasterSearchFields => 'mail',
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
# [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ],
# [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
# [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
# [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
],
};
############## Fim do código de autenticação do AD ##############
MAn... tenta duas coisas...
Excluir1) Use o domínio local (algo.local), caso exista;
2) Aqui na declaração da OU do usuário OTRS, mova o usuário para a pasta users.
#Aqui você deve informar o caminho do usuário p/ permitir a leitura da base de usuários do AD
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=usuario,CN=Users,DC=dominio,DC=local';
3) Verifique as permissões de acesso. Esta conta pode ficar como usuários do domínio.
Veja se funciona e me fala. Qualquer coisa add meu e-mail e a gente conversa mais tranquilo. edupopov@gmail.com
Eduardo, bom dia!
ResponderExcluirPrimeiro, obrigado pelo post!
Bem, embora esteja tudo ok e eu consiga ainda logar com meu usuário root nenhuma conta do domínio consegue se logar, nenhum erro em específico, apenas como se o user e a senha estivessem errados.
Pode me ajudar?
Olá Daniel... bom dia.
ExcluirDica importante... evite usar o nome do servidor. Utilize o IP direto do servidor para fazer um teste. Pode ser problema relacionado ao DNS.
Aproveite e acesse o AD. Procure no event viewer se existem entradas de tentativa de autenticação. Ou se as portas estão abertas no firewall do Windows. Geralmente podem ocorrer mensagens como esta :
ExcluirDurante as 24 horas anteriores, alguns clientes tentaram executar associações LDAP que eram:
(1) uma associação LDAP SASL (Negotiate, Kerberos, NTLM ou Digest) que não solicitou assinatura (validação de integridade); ou
(2) uma associação simples LDAP que foi executada em uma conexão com texto não criptografado (não-SSL/criptografada com TLS)
O log aparece pela tentativa de conexão através de LDAP
Olá Eduardo, estou verificando no meu AD e realmente tenho uma mensagem desse tipo. o texto é: During the past 4.21 hours there have been 227 connections to this Domain Controller from client machines whose IP addresses don't map to any of the existing sites in the enterprise. Those clients, therefore, have undefined sites and may connect to any Domain Controller including those that are in far distant locations from the clients. A client's site is determined by the mapping of its subnet to one of the existing sites. To move the above clients to one of the sites, please consider creating subnet object(s) covering the above IP addresses with mapping to one of the existing sites. The names and IP addresses of the clients in question have been logged on this computer in the following log file '%SystemRoot%\debug\netlogon.log' and, potentially, in the log file '%SystemRoot%\debug\netlogon.bak' created if the former log becomes full. The log(s) may contain additional unrelated debugging information. To filter out the needed information, please search for lines which contain text 'NO_CLIENT_SITE:'. The first word after this string is the client name and the second word is the client IP address. The maximum size of the log(s) is controlled by the following registry DWORD value 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\LogFileMaxSize'; the default is 20000000 bytes. The current maximum size is 20000000 bytes. To set a different maximum size, create the above registry value and set the desired maximum size in bytes.
Excluiro arquivo de configuração do LDAP eu fiz com base no seu acima, lembrando q eu estou usando um linux, DEBIAN.
ExcluirObrigado!
Ola Daniel... tudo na paz? Bom dia.
ExcluirVerifique se seu AD esta reconhecendo apenas conexões de autenticação através de Kerberos e LDAP de servidores Microsoft... ou se existe dependência de certificação digital para autenticação, como um servidor RADIUS por exemplo.
Testes:
1) Suba uma maquina virtual com Windows 7 e instale o MySql e o OTRS. Se funciona em Windows e não funciona em Linux, pode ser a configuração de segurança da autenticação.
2) Verifique as entradas do Firewall do Windows e se a autenticação externa com equipamentos esta disponível. Regra de entrada no servidor AD
3) Verifique se o Servidor Linux possui autenticação NTLM disponível. O NTLM é um protocolo mais antigo porém mais compatível com LDAP.
4) Verifique se o caminho para o usuário que criou esta correto. Se não reconhecer o usuário ele não permite a autenticação. O ideal é crar um usuário direto na pasta de usuários do AD sem permissão nenhuma... só para leitura de objetos e com uma senha bem complexa.
Existe algum LOG no OTRS para que eu veja se dá alguma mensagem de erro quando eu tento conectar? Assim ficaria mais fácil o Troubleshooting!
ExcluirOlha... no OTRS eu não conheço, mas vc pode instalar o WhireShark... ele é um Snifer de porta que mostra o resultado das requisições e pacotes... bem para escovar bit... ou se tiver o Zabbix / Nagios pode configurar a monitoração dessa conexão. Eu geralmente uso só o log do AD mesmo.
ExcluirBoa Tarde!
ResponderExcluirapós inserir o código acima para integração no AD, ao tentar abrir o portal otrs\index.pl ele solicita para realizar o download do arquivo. com o config.pm original abre normal.
o que pode ser?
Obrigado.
Boa Tarde!
ResponderExcluirapós inserir o código acima para integração no AD, ao tentar abrir o portal otrs\index.pl ele solicita para realizar o download do arquivo. com o config.pm original abre normal.
o que pode ser?
Obrigado.