OpenLDAP + Samba como alternativa livre ao Active Directory

Filed Under (Artigo, Centos, Openldap, Samba) by Rafaelgomes on 23-09-2010

Há muito tempo tenho interesse de instalar e configurar um ambiente alternativo ao Active Directory da Microsoft, mas nunca tive tempo para tal pesquisa e configuração.

No meu novo emprego, por coincidência ou não, foi solicitado a instalação desse ambiente. Sendo assim estou satisfeito em proporcionar esse resultado.

Vale salientar que algumas funções do Active Directory ainda não foram completamente atendidas, tal como o controle de estações via GPO e afins, mas iremos tratar isso posteriormente.

Eu instalei esse ambiente em um CentOS 5.5 x64 (Final), mas acredito que ele possa ser reproduzido em qualquer distribuição Gnu/Linux.

Segue abaixo os pacotes utilizados e suas versões:

Eu utilizei o repositório EPEL, que é mantido pela comunidade para obter alguns pacotes extras, esse é um repositório sério, pode confiar:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

Agora vamos instalar os pacotes necessários:

# yum install openldap-servers nss_ldap samba httpd openssl mod_ssl mysql mysql-server php php-xml php-ldap php-mysql php-pdo php-cli php-common smbldap-tools

A efeito de entendimento, quando for citado o termo <NOMEDOMINIO>, ele deve ser substituído para nome preterido pelo seu domínio, <NOMEHOST> pelo nome do servidor a ser instalado e <SEUIP> pelo ip do servirdor.

OpenLDAP

Agora vamos começar pelas configurações do OpenLDAP:

Acesse o arquivo /etc/hosts e adicione a seguinte linha:

<SEUIP> <NOMEHOST>.<NOMEDOMINIO> <NOMEHOST>

Execute o comando abaixo para que seu nome seja modificado:

# hostname <NOMEHOST>

Agora vamos ao OpenLDAP,

Execute o comando abaixo para gerar o hash da senha a ser utilizada no arquivo de configuração do OpenLDAP:

# slappasswd

Guarde o arquivo padrão do OpenLDAP com o comando abaixo:

# mv -f /etc/openldap/slapd.conf /etc/openldap/slapd.conf.dist

Acesse o arquivo /etc/openldap/slapd.conf e adicione o seguinte conteúdo:

include /etc/openldap/schema/core.schema

include /etc/openldap/schema/cosine.schema

include /etc/openldap/schema/inetorgperson.schema

include /etc/openldap/schema/nis.schema

include /etc/openldap/schema/samba.schema

allow bind_v2

pidfile /var/run/openldap/slapd.pid

argsfile /var/run/openldap/slapd.args

database bdb

suffix “dc=<NOMEDOMINIO>,dc=com,dc=br”

rootdn “cn=root,dc=<NOMEDOMINIO>”

rootpw Coloque aqui o hash gerado com o comando slappasswd

password-hash {SSHA}

directory /var/lib/ldap

index cn,sn,uid,displayName pres,sub,eq

index uidNumber,gidNumber eq

index sambaSID eq

index sambaPrimaryGroupSID eq

index sambaDomainName eq

index objectClass pres,eq

index default sub

access to attrs=userPassword,sambaLMPassword,sambaNTPassword

by self write

by anonymous auth

by * none

access to *

by * read

Digite os comandos abaixo para que os arquivos necessário sejam copiados e devidamente ajustados:

# cp /usr/share/doc/samba-3.*/LDAP/samba.schema /etc/openldap/schema/
# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
# chmod 600 /var/lib/ldap/DB_CONFIG

Crie o arquivo /etc/openldap/init.ldif, que será utilizado para adicionar as informações básicas de sua base openldap com o seguinte conteúdo:

dn: dc=<NOMEDOMINIO>,dc=com,dc=br

objectclass: dcObject

objectclass: organization

o: CentOS Directory Server

dc: <NOMEDOMINIO>

dn: cn=root,dc=<NOMEDOMINIO>,dc=com,dc=br

objectclass: organizationalRole

cn: root

Agora execute os comandos abaixo para que o arquivo seja carregado corretamente:

# slapadd -l /etc/openldap/init.ldif
# chown -R ldap:ldap /var/lib/ldap
# chmod 600 /var/lib/ldap/*

Com o comando abaixo, você poderá verificar se o procedimento foi efetuado de maneira correta:

# slapcat

Com os comandos abaixo iremos ativar o serviço OpenLDAP:

# service ldap start

# chkconfig ldap on

Com o comando abaixo será possível verificar se todo processo foi efetuado com sucesso:

# ldapsearch -x -b "dc=<NOMEDOMINIO>,dc=com,dc=br"

PHPLDAPAdmin

Pronto, seu OpenLDAP está ok! Agora vamos ao PHPLDAPAdmin.

Execute o comando abaixo para instalar o phpldapadmin:

# yum install phpldapadmin -y

Acesse o arquivo /usr/share/phpldapadmin/config/config.php e adicione as seguintes linhas:

$ldapservers->SetValue($i,’server’,'name’,'CentOS Openldap’);

$ldapservers->SetValue($i,’server’,'host’,'<SEUIP>’);

$ldapservers->SetValue($i,’server’,'base’,array(‘dc=<NOMEDOMINIO>,dc=com,dc=br’));

$ldapservers->SetValue($i,’server’,'auth_type’,'session’);

Obs: Atente que é necessário configurar o acesso ao phpldapadmin via HTTPS. Caso contrário ele não funcionará. Não irei abordar aqui essa configuração.

Agora acesse a URL abaixo:

https://<SEUIP>/phpldapadmin

Obs: Acesse com um usuário criado, ensinaremos posteriormente nesse manual como criar usuários.

Samba

Agora vamos a configuração do Samba.

Primeiramente, vamos guardar os arquivos que são instalados por padrão e obter uma base para nossa configuração com os comandos abaixo:

# mv /etc/samba/smb.conf /etc/samba/smb.conf.dist
# cp /usr/share/doc/smbldap-tools*/smb.conf /etc/samba/smb.conf

Acesse o arquivo /etc/samba/smb.conf e edite conforme seu ambiente.

Como nessa arquitetura, o servidor OpenLDAP e Samba estarão no mesmo servidor, sendo assim segue abaixo três parâmetros que devem ser adicionados no arquivo /etc/samba/smb.conf:

ldap ssl = off

nt acl support = yes

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE

Com o comando abaixo vamos obter uma base para configuração do smbldap-tools:

# cp /usr/share/doc/smbldap-tools-*/smbldap.conf /etc/smbldap-tools/smbldap.conf

Com o comando abaixo vamos gerar o SID do seu domínio:

# net getlocalsid

Obs: Retornará diversos erros. Não se preocupe, espere até o final de todo retorno, que terá a informação necessária.

Acesse o arquivo /etc/smbldap-tools/smbldap.conf, adicione o SID retirado no comando anterior, e modifique os parâmetros de acordo com seu ambiente.

Acesse o arquivo /etc/smbldap-tools/smbldap_bind.conf e configure também de acordo com seu ambiente.

Com os comandos abaixo ajuste a permissão dos arquivos de configuração do smbldap-tools:

# chmod 644 /etc/smbldap-tools/smbldap.conf
# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Digite o comando abaixo e selecione a opção “Local authorization is sufficient” :

# authconfig-tui

Utilize o comando abaixo para verificar se todos os parâmetros do samba estão devidamente configurados:

# testparm

Com os comandos abaixo inicie a população da base LDAP:

# smbpasswd -w < SUA SENHA DE ROOT DO LDAP AQUI >
# smbldap-populate

Inicie o serviço e configure para iniciar no boot automaticamente com os comandos abaixo:

# /etc/init.d/smb start
# chkconfig smb on

Para adicionar um novo usuário é necessário adicionar no unix, samba e LDAP, com os comandos abaixo:

# useradd user1
# smbldap-useradd -a -G 'Domain Users' -m -s /bin/bash -d /home/user2 -F "" -P user1

Com comando abaixo veja quais as relações no LDAP com os GID locais do unix:

# net groupmap list

Agora crie os grupos locais com as relações informadas no comando acima:

# groupadd -g 514 samba_domain_guests
# groupadd -g 515 samba_domain_computers
# groupadd -g 544 samba_administrator
# groupadd -g 548 samba_account_operators
# groupadd -g 550 samba_print_operators
# groupadd -g 551 samba_backup_operators
# groupadd -g 552 samba_replicators

Para criar um novo grupo digite o comando abaixo:

# smbldap-groupadd -a "grupo1"

Agora verifique qual GID está configurado para ele na base LDAP com o comando abaixo:

# net groupmap list

Com o comando abaixo crie o arquivo na base unix com o GID igual ao obtido no comando anterior:

# groupadd -g < GID DO GRUPO AQUI> grupo1

Com os comandos abaixo vamos desabilitar todos os serviços desnecessários do servidor:

# chkconfig ntpd off
# chkconfig bluetooth off
# chkconfig xinetd off
# chkconfig smartd off
# chkconfig yum-updatesd off
# chkconfig rpcidmapd off
# chkconfig rpcgssd off
# chkconfig restorecond off
# chkconfig portmap off
# chkconfig pcscd off
# chkconfig nfslock off
# chkconfig mcstrans off
# chkconfig mdmonitor off
# chkconfig irqbalance off
# chkconfig kudzu off
# chkconfig ip6tables off
# chkconfig hidd off
# chkconfig gpm off
# chkconfig haldaemon off
# chkconfig autofs off
# chkconfig avahi-daemon off
# service ntpd stop
# service bluetooth stop
# service xinetd stop
# service smartd stop
# service yum-updatesd stop
# service rpcidmapd stop
# service rpcgssd stop
# service restorecond stop
# service portmap stop
# service pcscd stop
# service nfslock stop
# service mcstrans stop
# service mdmonitor stop
# service irqbalance stop
# service kudzu stop
# service ip6tables stop
# service hidd stop
# service gpm stop
# service haldaemon stop
# service autofs stop
# service avahi-daemon stop

Com o comando abaixo configure o servidor para buscar parâmetros de usuário e grupo na base ldap:

# authconfig --enableldap --enableldapauth --ldapserver 127.0.0.1 --ldapbasedn dc=<NOMEDOMINIO>,dc=com,dc=br --kickstart

Obs: Não se esqueça de configurar em seu DNS o nome do domínio para o ip do servidor que acabou de configurar.

Pronto! Seu ambiente está completamente pronto!

Clientes com Windows 7

Você tem máquina Windows 7 em sua rede? Não ta conseguindo adicionar ela em seu domínio?

Não se desespere! Siga os passos abaixo:

Primeiro vamos instalar uma versão mais atual do Samba, pois a versão disponível no repositório do CentOS é a 3.0 e o Windows 7 somente foi suportado a partir da versão 3.3.

Vamos configurar o repositório de onde iremos atualizar o nosso samba:

# cd /etc/yum.repos.d/
# wget http://ftp.sernet.de/pub/samba/3.3/centos/5/sernet-samba.repo

Agora atualize seus pacotes, o samba será atualizado:

# yum update

Obs : Caso não queria mais utilizar esse repositório, basta remover o arquivo /etc/yum.repos.d/sernet-samba.repo.

Recoloque o samba na inicialização automática do sistema e reinicialize o serviços com os comandos abaixo:

# chkconfig --add smb
# chkconfig smb on
# service smb restart

Antes de adicionar a máquina no domínio, é necessário executar um .reg na mesma, pois existem algumas opções que precisam ser modificadas para que ele se adeque ao domínio samba.

Pronto, com esse procedimento será possível adicionar uma estação Windows7 em seu domínio.

Atualizar versão do samba

Fonte: http://www.faqforge.com/linux/distributions/centos/updating-samba-on-centos-5/

Updating Samba on CentOS 5

Friday, January 14, 2011 posted by rafael

wrote by Rafael Marangoni, from Servidor Linux team.

This article explains howto update the Samba packages on CentOS 5 to version 3.5.

First, we need to add a new repository:

cd /etc/yum.repos.d/

wget http://ftp.sernet.de/pub/samba/3.5/centos/5/sernet-samba.repo

Then, update samba:

yum update samba

Probably, you will need winbind too:

yum install samba3-winbind samba3-utils

Check the rpm version:

rpm -qa | grep samba

Restarting Samba:

/etc/init.d/smb restart