Sejam bem vindos ao sétimo post do blog.
Iremos configurar o LDAP (Lightweight Directory Access Protocol) , que tem como objetivo centralizar e padronizar dados geralmente usado pelo meio corporativo para integrar e autenticar dados da organização.
Instalando e configurando o openLdap Client/Server
Sudo dnf install openldap openldap-clients openldap-servers;
Após a instalação, iremos configurar o arquivo de configuração da base de dados, copiando arquivo exemplo para o local correto e alterando o owner para ldap com os comandos abaixo:
sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ; chown -R ldap:ldap /var/lib/ldap
Gerando uma senha para o adminstrador:
sudo slappasswd
A senha será: senha
Com retorno:
New password: Re-enter new password: {SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG
Onde será exibido o hash gravado:
{SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG
Habilitando e ativando o serviço:
systemctl enable slapd.service ; systemctl start slapd.service;
Configurando Senha Root do LDAP
Abra o arquivo ldaprootpasswd.ldif (inexistente):
sudo vi /tmp/ldaprootpasswd.ldif;
E adicione o conteúdo:
dn: olcDatabase={0}config,cn=config changetype: add add: olcRootPW olcRootPW: {SSHA}PASSWORD
Altere a última linha com o hash extraido no comando slappasswd
e altere o {SSHA}PASSWORD por {SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG como no meu exemplo.
Iremos importar a base de dados para adicionar a senha de root:
sudo ldapadd -H ldapi:// -Y EXTERNAL -f /tmp/ldaprootpasswd.ldif
Feito isso, iremos adicionar diversos arquivos ao diretório /etc/openldap/schema:
for def in cosine.ldif nis.ldif inetorgperson.ldif; do sudo ldapadd -H ldapi:// -Y EXTERNAL -f /etc/openldap/schema/$def; done
Criando domínio no LDAP
sudo vi /tmp/ldapdomain.ldif
Com o conteúdo:
dn: olcDatabase={1}monitor,cn=config changetype: add replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=dominiocaramelo,dc=com" read by * none dn: olcDatabase={2}mdb,cn=config changetype: add replace: olcSuffix olcSuffix: dc=dominiocaramelo,dc=com dn: olcDatabase={2}mdb,cn=config changetype: add replace: olcRootDN olcRootDN: cn=Manager,dc=dominiocaramelo,dc=com dn: olcDatabase={2}mdb,cn=config changetype: add add: olcRootPW olcRootPW: {SSHA}PASSWORD dn: olcDatabase={2}mdb,cn=config changetype: add add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=dominiocaramelo,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=dominiocaramelo,dc=com" write by * read
Importando domínio ao ldap:
sudo ldapadd -H ldapi:// -Y EXTERNAL -f /tmp/ldapdomain.ldif
Com retorno:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry entry "olcDatabase={1}monitor,cn=config" adding new entry entry "olcDatabase={2}mdb,cn=config" adding new entry entry "olcDatabase={2}mdb,cn=config" adding new entry entry "olcDatabase={2}mdb,cn=config" adding new entry entry "olcDatabase={2}mdb,cn=config"
Adicionando níveis a base organizacional.
Criar arquivo baseldapdomain.ldif com o comando:
sudo vi /tmp/baseldapdomain.ldif
Com o conteúdo:
dn: dc=dominiocaramelo,dc=com objectClass: top objectClass: dcObject objectclass: organization o: dominiocaramelo com dc: dominiocaramelo dn: cn=Manager,dc=dominiocaramelo,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=dominiocaramelo,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=dominiocaramelo,dc=com objectClass: organizationalUnit ou: Group
Adicionando ao ldap:
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/baseldapdomain.ldif
Com retorno:
adding new entry "dc=dominiocaramelo,dc=com" adding new entry "cn=Manager,dc=dominiocaramelo,dc=com" adding new entry "ou=People,dc=dominiocaramelo,dc=com" adding new entry "ou=Group,dc=dominiocaramelo,dc=com"
Iremos criar 3 grupos:
1 – Desenvolvimento
2 – Infraestrutura
3 – Operação
Criando Grupos no LDAP
Criando Grupo Desenvolvimento
Criando o grupo:
sudo groupadd Grupo_Desenvolvimento;
Descobrindo o id do grupo:
sudo getent group Grupo_Desenvolvimento | cut -d: -f3
Criando arquivo de importação:
sudo vi /tmp/ldapgrupodesenvolvimento.ldif
Com o conteúdo:
dn: cn=Grupo_Desenvolvimento,ou=Group ,dc=dominiocaramelo,dc=com objectClass: top objectclass: posixGroup gidNumber: 1007 cn: Grupo_Desenvolvimento description: grupo do setor de desenvolvimento
Adicionando ao LDAP:
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupodesenvolvimento.ldif
Com retorno:
Enter LDAP Password: adding new entry "cn=desenvolvimento,ou=groups,dc=dominiocaramelo,dc=com"
Criando Grupo Infraestrutura
Criando o grupo:
sudo groupadd Grupo_Infraestrutura;
Descobrindo o id do grupo:
sudo getent group Grupo_Infraestrutura | cut -d: -f3
Criando o grupo:
sudo groupadd Grupo_Infraestrutura;
Criando arquivo de importação:
sudo vi /tmp/ldapgrupoinfraestrutura.ldif
Com o conteúdo:
dn: cn=Grupo_Infraestrutura,ou=Group,dc=dominiocaramelo,dc=com objectClass: top objectclass: posixGroup gidNumber: 1003 cn: Grupo_Infraestrutura description: grupo do setor de Infraestrutura
Adicionando ao LDAP:
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupoinfraestrutura.ldif
Com retorno:
Enter LDAP Password: adding new entry "cn=desenvolvimento,ou=groups,dc=dominiocaramelo,dc=com"
Criando Grupo Operação
Descobrindo o id do grupo:
sudo getent group Desenvolvimento | cut -d: -f3
Criando arquivo de importação:
sudo vi /tmp/ldapgrupooperacao.ldif
Com o conteúdo:
dn: cn=Grupo_Operacao,ou=Group ,dc=dominiocaramelo,dc=com objectClass: top objectclass: posixGroup gidNumber: 1005 cn: Grupo_Operacao description: grupo do setor de Operacao
Adicionado ao LDAP:
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupooperacao.ldif
Com retorno:
Enter LDAP Password: adding new entry "cn=operacao,ou=Group ,dc=dominiocaramelo,dc=com"
Criando usuários no LDAP
Criando usuário Infraestrutura
Criando usário no Sistema Operacional:
sudo useradd -G Grupo_Infraestrutura primeiro.infra
Criando senha para usuário:
sudo passwd primeiro.infra
Com retorno:
Mudando senha para o usuário primeiro.infra.
Recuperando dados do usuário:
sudo id primeiro.infra
Com retorno:
uid=1003(primeiro.infra) gid=1004(primeiro.infra) grupos=1004(primeiro.infra),1003(Grupo_Infraestrutura)
Gerando senha para o LDAP:
sudo slappasswd -h {SHA} -s infra
Gerando arquivo para importação no LDAP:
sudo vi /tmp/ldapcriarusuariouminfra.ldif
Com o conteúdo:
dn: uid=primeiro.infra,ou=People,dc=dominiocaramelo,dc=com cn: Primeiro Infra givenName: Primeiro sn: Infra uid: primeiro.infra uidNumber: 1004 gidNumber: 1003 homeDirectory: /home/primeiro.infra mail: primeiro.infra@dominiocaramelo.com objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash userPassword: {SHA}XgOljcCFDlE3qOu84pYQZwx1au0=
Adicionando ao ldap
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuariouminfra.ldif
Com retorno:
adding new entry "uid=primeiro.infra,ou=People,dc=dominiocaramelo,dc=com"
Criando usuário Operação
Criando usário no Sistema Operacional:
sudo useradd -G Grupo_Operacao primeiro.operacao
Criando senha para usuário:
sudo passwd primeiro.operacao
Com retorno:
Mudando senha para o usuário primeiro.operacao.
Recuperando dados do usuário:
sudo id primeiro.operacao
Com retorno:
uid=1004(primeiro.operacao) gid=1006(primeiro.operacao) grupos=1006(primeiro.operacao),1005(Grupo_Operacao)
Gerando senha para o LDAP:
sudo slappasswd -h {SHA} -s operacao
Gerando arquivo para importação no LDAP:
sudo vi /tmp/ldapcriarusuarioumoperacao.ldif
Com o conteúdo:
dn: uid=primeiro.operacao,ou=People,dc=dominiocaramelo,dc=com cn: Primeiro Operacao givenName: Primeiro sn: Operacao uid: primeiro.operacao uidNumber: 1006 gidNumber: 1005 homeDirectory: /home/primeiro.operacao mail: primeiro.infra@dominiocaramelo.com objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash userPassword: {SHA}RcjwHPqOKoleAPGamrayTjkE9dw=
Adicionando ao ldap
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuarioumoperacao.ldif
Com retorno:
adding new entry "uid=primeiro.operacao,ou=People,dc=dominiocaramelo,dc=com"
Criando usuário Desenvolvimento
Criando usário no Sistema Operacional:
sudo useradd -G groupadd Grupo_Desenvolvimento primeiro.desenvolvimento
Criando senha para usuário:
sudo passwd primeiro.desenvolvimento
Com retorno:
Mudando senha para o usuário primeiro.desenvolvimento. Nova senha: SENHA INCORRETA: A senha é menor do que 8 caracteres Redigite a nova senha: passwd: todos os tokens de autenticações foram atualizados com sucesso.
Recuperando dados do usuário:
sudo id primeiro.desenvolvimento
Com retorno:
uid=1005(primeiro.desenvolvimento) gid=1008(primeiro.desenvolvimento) grupos=1008(primeiro.desenvolvimento),1007(Grupo_Desenvolvimento)
Gerando senha para o LDAP:
sudo slappasswd -h {SHA} -s desenvolvimento
Gerando arquivo para importação no LDAP:
sudo vi /tmp/ldapcriarusuarioumdesenvolvimento.ldif
Com o conteúdo:
dn: uid=primeiro.desenvolvimento,ou=People,dc=dominiocaramelo,dc=com cn: Primeiro Desenvolvimento givenName: Primeiro sn: Desenvolvimento uid: primeiro.desenvolvimento uidNumber: 1008 gidNumber: 1007 homeDirectory: /home/primeiro.desenvolvimento mail: primeiro.infra@dominiocaramelo.com objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash userPassword: {SHA}eo6JbSC9OWjUesX8IEtSGPJCZ/A=
Adicionando ao LDAP:
sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuarioumdesenvolvimento.ldif
Com retorno:
adding new entry "uid=primeiro.desenvolvimento,ou=People,dc=dominiocaramelo,dc=com"
Facilitando o trabalho com PHP Ldap Admin
Iremos trabalhar com a lib PHP Ldap Admin no link.
Criando host para o ldap.
Adicione o host : dominiocaramelo.com ao ip 127.0.0.1 no documento /etc/hosts
Configurando no Nginx:
sudo vi /etc/nginx/conf.d/phpldapadmin.conf
Com o conteúdo:
server { listen 80; server_name phpldapadmin.local; #root /usr/share/nginx/html; root /var/www/html/phpldapadmin; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } location ~ \.php$ { root /var/www/html/phpldapadmin; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php56-fpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Restartando servidor:
sudo systemctl restart nginx;
Configurando no Apache:
sudo vim /etc/httpd/conf.d/phpldapadmin.conf
Com o conteúdo:
<VirtualHost *:81> DocumentRoot /var/www/html/phpldapadmin/ ServerName phpldapadmin.local ServerAlias phpldapadmin.local <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all <IfModule mod_fcgid.c> <FilesMatch \.php$> SetHandler application/x-httpd-php-default </FilesMatch> </IfModule> </Directory> </VirtualHost>
Restartando servidor:
sudo systemctl restart httpd
Editando configuração da aplicação:
Copie o arquivo config.php.example para config.php:
sudo cp /var/www/html/phpldapadmin/config/config.php.example /var/www/html/phpldapadmin/config/config.php
Configurando conexão ao LDAP:
adicione as Linhas
$servers->setValue('server','name','dominiocaramelo.com'); $servers->setValue('server','base',array('dc=dominiocaramelo,dc=com'));
Após a linha com o valor:
$servers->newServer('ldap_pla');
Acesse a aplicação no endereço: phpldapadmin.local
Login:
Tela Inicial e menus com itens cadastrados antes:
Configurando Client
Linux
Instalando Componentes:
apt-get install ldap-auth-client nscd;
Após instalado iremos preparar a configuração:
auth-client-config -t nss -p lac_ldap;
Iremos configurar: ldap://dominiocaramelo.com
Iremos definir: cn=Manager,dc=dominiocaramelo,dc=com
Iremos definir : 3
Configurando criação do /home automático:
sudo vim /usr/share/pam-configs/mkhomedir
Com o seguinte conteúdo.
Name:mkhomedir Default:yes Priority:900 Session-Type:Additional Session-Interactive-Only:yes Session: required pam_mkhomedir.so skel=/etc/skel umask=0022
Atualizando pam-auth:
Com o comando :
sudo pam-auth-update
E o módulo será exibido ativo.
Reiniciando nscd:
sudo service nbsp restart;
Após isso veremos os novos usuários importados, com o comando:
getent passwd;
Onde surgiram os usuários:
primeiro.infra:x:1003:1004:Primeiro Infra:/home/primeiro.infra:/bin/bash primeiro.operacao:x:1004:1006:Primeiro Operacao:/home/primeiro.operacao:/bin/bash primeiro.desenvolvimento:x:1005:1008:Primeiro Desenvolvimento:/home/primeiro.desenvolvimento:/bin/bash
Ativando usuários:
É possível usar o login de um usuário pelo GUI, obtendo o mesmo resultado (criação de um perfil login na estação).
Para utilizar o compartilhamento NFS, é necessário seguir o procedimento contido em: Criando e consumindo uma rede de compartilhamento NFS
Windows
Iremos configurar o client no Windows através do programa pGina disponível no link
Para configurar a aplicação, iremos a aba Plugin session:
Ao clicar em configure, preencha os parâmetros.
Depois de configurar , iremos a a aba Plugin order.
Vamos colocar o LDAP antes de Local Machine como a imagem abaixo:
Agora iremos simular as configurações na aba Simulation:
Realizando Login:
O próximo passo é habilitar o Serviço NFS para acesso à montagem no servidor.
Iremos em: Painel de Controle -> Programas -> Ativar ou desativar recursos do Windows:
Mapear unidade de rede:
Configurando montagem:
Montagem efetuada,como visto abaixo:
Arquivo aberto no compartilhamento:
Raiz do compartilhamento:
Observação: recurso disponível nas versões Ultimate e Enterprise do Windows 7.
Temos um LDAP e rede de NFS de compartilhamento para serem usados.
É isso aí.
Espero ter sido claro na explicação.
Valeu e até a próxima!