==== OpenLDAP no CentOS ====
==== Instalação e configuração inicial ====
# yum install openldap-servers openldap-clients nss-pam-ldapd
Ativando os serviços:
# systemctl enable slapd.service
ln -s '/usr/lib/systemd/system/slapd.service' '/etc/systemd/system/multi-user.target.wants/slapd.service'
Criando uma cópia de segurança do slapd.d
# cp -ap /etc/openldap/slapd.d{,.old}
Copiando o backend de exemplo para o diretório /var/lib/ldap/
# cp -a /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
Ajuste nas permisões e nos contextos do SElinux
# chown -R ldap:ldap /var/lib/ldap
# chcon -u system_u -t slapd_db_t /var/lib/ldap/DB_CONFIG
==== Configurando o syslog ====
# cat /etc/rsyslog.conf
[...]
#### RULES ####
# Envia os logs do slapd(8c) para /var/log/slapd.log
if $programname == 'slapd' then /var/log/slapd.log
& ~
[...]
# cat /etc/logrotate.d/slapd
# /etc/logrotate.d/slapd
/var/log/slapd.log {
rotate 7
compress
}
# chcon -u system_u /etc/logrotate.d/slapd
Reiniciando o rsyslog
# systemctl restart rsyslog
==== Iniciando e checando os serviços do OpenLDAP ====
# systemctl start slapd.service
# systemctl status slapd.service
slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled)
Active: active (running) since Ter 2015-06-16 08:33:35 BRT; 1h 19min ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 1946 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
Process: 1042 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 1976 (slapd)
CGroup: /system.slice/slapd.service
└─1976 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
Jun 16 08:33:34 ldap.laboratorio.com.br runuser[1287]: pam_unix(runuser:session): session opened f...0)
Jun 16 08:33:35 ldap.laboratorio.com.br slapd[1946]: @(#) $OpenLDAP: slapd 2.4.39 (Mar 6 2015 04:... $
mockbuild@worker1.bsys.centos.org:/bu...pd
Jun 16 08:33:35 ldap.laboratorio.com.br slapd[1976]: hdb_db_open: warning - no DB_CONFIG file foun...).
Expect poor performance for suffix "dc=my-dom...".
Jun 16 08:33:35 ldap.laboratorio.com.br slapd[1976]: slapd starting
Jun 16 08:33:35 ldap.laboratorio.com.br systemd[1]: Started OpenLDAP Server Daemon.
Jun 16 09:52:22 ldap.laboratorio.com.br systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
# ps -ef | grep slapd
ldap 1976 1 0 08:33 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
root 2719 2194 0 09:55 pts/0 00:00:00 grep --color=auto slapd
# ss -nat | grep 389
LISTEN 0 128 *:389 *:*
LISTEN 0 128 :::389 :::*
# tail -n1 /var/log/slapd.log
Jun 16 09:58:12 ldap slapd[2775]: slapd starting
==== Adicionando Schemas ====
Na instalação padrão do OpenLDAP no CentOS 7 ele vem apenas com um schema o "core".
Listando schemas disponiveis que vem na instalação
# rpm -ql openldap-servers | grep '\.ldif$'
/etc/openldap/schema/collective.ldif
/etc/openldap/schema/corba.ldif
/etc/openldap/schema/core.ldif
/etc/openldap/schema/cosine.ldif
/etc/openldap/schema/duaconf.ldif
/etc/openldap/schema/dyngroup.ldif
/etc/openldap/schema/inetorgperson.ldif
/etc/openldap/schema/java.ldif
/etc/openldap/schema/misc.ldif
/etc/openldap/schema/nis.ldif
/etc/openldap/schema/openldap.ldif
/etc/openldap/schema/pmi.ldif
/etc/openldap/schema/ppolicy.ldif
/usr/share/openldap-servers/slapd.ldif
Inicialmente iremos adicionar três schema: cosine, inetorgperson e nis.
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
Listando as schemas importados
# ldapsearch -LLLQY EXTERNAL -H ldapi:// -b cn=config | grep cn=schema,cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}inetorgperson,cn=schema,cn=config
dn: cn={3}nis,cn=schema,cn=config
==== Montando a estrutura ====
Vamos criar um diretório para nossas .ldifs
# cd /etc/openldap/
# mkdir ldif
# chcon -u system_u ldif
Para comecar nossa configuração vamos gerar o hash de senha para RootDN
# cd ldif/
# cd ldif/
# slappasswd -s senha123 -n >> passwd
# head passwd
{SSHA}nPgWixvffSfWJI2s/k3SdVhmlDQSDHK0
Agora criaremos nossa estrutura:
# cat conf.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=config
-
replace: olcRootPW
olcRootPW: {SSHA}nPgWixvffSfWJI2s/k3SdVhmlDQSDHK0
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=laboratorio,dc=com,dc=br" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=laboratorio,dc=com,dc=br
-
replace: olcRootDN
olcRootDN: cn=admin,dc=laboratorio,dc=com,dc=br
-
replace: olcRootPW
olcRootPW: {SSHA}nPgWixvffSfWJI2s/k3SdVhmlDQSDHK0
Importando...
# ldapmodify -Y EXTERNAL -H ldapi:/// -f conf.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
Checando a configurações importadas
# ldapsearch -LLLQY EXTERNAL -H ldapi:// -b cn=config "olcDatabase={0}config"
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {SSHA}nPgWixvffSfWJI2s/k3SdVhmlDQSDHK0
# ldapsearch -LLLQY EXTERNAL -H ldapi:// -b cn=config "olcDatabase={1}monitor"
dn: olcDatabase={1}monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" read by dn.base="cn=admin,dc=laboratorio,dc=com,dc=br" read by * no
ne
# ldapsearch -LLLQY EXTERNAL -H ldapi:// -b cn=config "olcDatabase={2}hdb"
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=laboratorio,dc=com,dc=br
olcRootDN: cn=admin,dc=laboratorio,dc=com,dc=br
olcRootPW: {SSHA}nPgWixvffSfWJI2s/k3SdVhmlDQSDHK0
==== Montando o diretório ====
# cat tree.ldif
dn: dc=laboratorio,dc=com,dc=br
dc: laboratorio
objectClass: top
objectClass: domain
dn: ou=PosixAccount,dc=laboratorio,dc=com,dc=br
ou: PosixAccount
objectClass: top
objectClass: organizationalUnit
# ldapadd -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha123 -f tree.ldif
adding new entry "dc=laboratorio,dc=com,dc=br"
adding new entry "ou=PosixAccount,dc=laboratorio,dc=com,dc=br"
# ldapsearch -x -LLL -b dc=laboratorio,dc=com,dc=br
dn: dc=laboratorio,dc=com,dc=br
dc: laboratorio
objectClass: top
objectClass: domain
dn: ou=PosixAccount,dc=laboratorio,dc=com,dc=br
ou: PosixAccount
objectClass: top
objectClass: organizationalUnit
==== Adicionando usuários ====
Aqui iremos adicionar apenas os usuários Posix que foram criado no servidor [[autofs|AutoFS]]
# cat grupo.ldif
dn: cn=sysadmin,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
objectClass: posixGroup
objectClass: top
cn: sysadmin
userPassword: {crypt}x
gidNumber: 5000
# ldapadd -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha123 -f grupo.ldif
adding new entry "cn=sysadmin,ou=PosixAccount,dc=laboratorio,dc=com,dc=br"
# cat usuarios.ldif
dn: uid=tony,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
uid: tony
cn: Tony Stark
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$GPv82i7x$KH7PZ8VZ.NIklrL2EFI2VfZMV6c6h7EX8Oe0.ZfdUCzwDKRrWe9FFRzfSlu9fsg9O6oZqoZMcvtuXiaQp7XlJ1
shadowLastChange: 16602
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 5000
homeDirectory: /ldaphome/tony
gecos: Tony Stark
dn: uid=gean,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
uid: gean
cn: Gean Martins
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$6loKMlcf$WuOqabSfbLCTOiE/bf/E5EXSfXaCZhjiNVoFURrln3StVCM/vIL0K0MoAxmpRmHXpJYMAzEUAtJ71IQsFJJC70
shadowLastChange: 16601
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 5000
homeDirectory: /ldaphome/gean
gecos: Gean Martins
# ldapadd -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha123 -f usuarios.ldif
adding new entry "uid=tony,ou=PosixAccount,dc=laboratorio,dc=com,dc=br"
adding new entry "uid=gean,ou=PosixAccount,dc=laboratorio,dc=com,dc=br"
Checando a importação
# ldapsearch -x -LLL -b dc=laboratorio,dc=com,dc=br
dn: dc=laboratorio,dc=com,dc=br
dc: laboratorio
objectClass: top
objectClass: domain
dn: ou=PosixAccount,dc=laboratorio,dc=com,dc=br
ou: PosixAccount
objectClass: top
objectClass: organizationalUnit
dn: cn=sysadmin,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
objectClass: posixGroup
objectClass: top
cn: sysadmin
userPassword:: e2NyeXB0fXg=
gidNumber: 5000
dn: uid=tony,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
uid: tony
cn: Tony Stark
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JEdQdjgyaTd4JEtIN1BaOFZaLk5Ja2xyTDJFRkkyVmZaTVY2YzZ
oN0VYOE9lMC5aZmRVQ3p3REtScldlOUZGUnpmU2x1OWZzZzlPNm9acW9aTWN2dHVYaWFRcDdYbEox
shadowLastChange: 16602
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 5000
homeDirectory: /ldaphome/tony
gecos: Tony Stark
dn: uid=gean,ou=PosixAccount,dc=laboratorio,dc=com,dc=br
uid: gean
cn: Gean Martins
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JDZsb0tNbGNmJFd1T3FhYlNmYkxDVE9pRS9iZi9FNUVYU2ZYYUN
aaGppTlZvRlVScmxuM1N0VkNNL3ZJTDBLME1vQXhtcFJtSFhwSllNQXpFVUF0SjcxSVFzRkpKQzcw
shadowLastChange: 16601
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 5000
homeDirectory: /ldaphome/gean
gecos: Gean Martins
==== Firewall ====
Liberando no firewall
# firewall-cmd --permanent --add-service=ldap
success
# firewall-cmd --reload
success