Identity Management on Linux – IDM – Parte 1 de 2

Bom dia!

Perguntaram-me recentemente quando fazia um post de IDM para Linux.
Tendo em conta que fiz posts de muitos campos de  infra-esturtura, era apenas lógico um post de identity managment e gestão centralizada de utilizadores.

Hoje em dia, o conceito de identity management está completamente na agenda dos CTO’s world wide.
Não só permite o accountability & accessibility, mas igualmente aumenta o numero de KPI’s que um administrador de sistemas pode gerir.

Por norma, o FreeIPA é a tool que necessitamos. É baseada numa combinação de kerberos, ldap e integra tools como bind (dns) e o ntp.
Para empresas, a Red Hat efetuou packaging da solução, com o suporte empresarial que se esperaria deles num produto de nome Red Hat Identity Manager.

O IDM é uma ferramenta muito otimizada, com um baixo perfil de exigencia de hardware:

Screen Shot 2015-07-17 at 12.27.19 PMTendo em conta que a minha preferência é openSuSE, decidi criar um LXC container o mais perto possível do RHEL: O CentOS7.

Assim sendo efetuei:

# zypper install yum
# mv /etc/yum/yum.conf /etc/yum/yum.original | sed ‘s/gpgcheck=1/gpgcheck=0/’ /etc/yum/yum.original >  /etc/yum/yum.conf

Alterar o ficheiro template do LXC para CentOS com o seguinte:

# /usr/share/lxc/config/centos.common.conf
– lxc.cap.drop = mac_admin mac_override setfcap setpcap
+ lxc.cap.drop = mac_admin mac_override setfcap

# lxc-create -t /usr/share/lxc/templates/lxc-centos  –release 7 -f lxc.conf -n lxcVpar4

Após o processo completar, é necessário configurar o LXC para não ter o problema do systemd em runaway efetuando:

No ficheiro de configuração do Container:

lxc.kmsg = 0

E apagar  o ficheiro ${LXC_PATH}/${container}/rootfs.dev/kmsg

Finalmente e após reboot ao container chegamos a altura de instalar o FreeIPA/IDM dentro do container:

[root@lxcvpar4 ~]# yum -y install ipa-server install bind-dyndb-ld

Aguardar que o yum complete a instalação e em seguida configurar o IPA em si:

# ipa-server-install    

Server host name [ipaserver.example.com]: lxcvpar4.net.xpto
Please confirm the domain name [net.xpto]:
Please provide a realm name [NET.XPTO]:
Directory Manager password:
​Password (confirm):
IPA admin password:
​Password (confirm):

(o processo irá pedir então que seja confirmada a informação anteriormente introduzida).

The IPA Master Server will be configured with
​Hostname:    lxcvpar4.net.xpto
​IP address:  192.168.1.1
​Domain name: net.xpto
​Realm name: NET.XPTO
​Continue to configure the system with these values? [no]: yes

Configuring NTP daemon (ntpd)
​[1/4]: stopping ntpd
​…
​Done configuring NTP daemon (ntpd).
​Configuring directory server (dirsrv): Estimated time 1 minute
​[1/38]: creating directory server user
​….
​Configuring certificate server (pki-tomcatd): Estimated time 3 minutes 30 seconds
​[1/20]: creating certificate server user
​…
​Done configuring certificate server (pki-tomcatd).
​Configuring Kerberos KDC (krb5kdc): Estimated time 30 seconds
​[1/10]: adding sasl mappings to the directory
​…
​Done configuring Kerberos KDC (krb5kdc).
​Configuring kadmin
​[1/2]: starting kadmin
​[2/2]: configuring kadmin to start on boot
​Done configuring kadmin.
​Configuring ipa_memcached
​[1/2]: starting ipa_memcached
​[2/2]: configuring ipa_memcached to start on boot
​Done configuring ipa_memcached.
​Configuring ipa-otpd
​[1/2]: starting ipa-otpd
​[2/2]: configuring ipa-otpd to start on boot
​Done configuring ipa-otpd.
​Configuring the web interface (httpd): Estimated time 1 minute
​[1/15]: disabling mod_ssl in httpd
​…
​Done configuring the web interface (httpd).
​Applying LDAP updates
​Restarting the directory server
​Restarting the KDC
​Sample zone file for bind has been created in /tmp/sample.zone.pUfcGp.db
​Restarting the web server
​  
​Setup complete

Finalmente efetuamos restart ao sshd e vamos nos autenticar contra o kerberos:

[root@lxcvpar4 ~]# service sshd restart
[root@lxcvpar4 ~]# kinit admin

Password for [email protected]:

Finalmente testamos de forma a validar que a nossa instalação de IPA/IDM está coerente:

[root@lxcvpar4 ~]# ipa user-find admin
​————–
​1 user matched
​————–
​User login: admin
​Last name: Administrator
​Home directory: /home/admin
​Login shell: /bin/sh
​UID: 939000005
​GID: 939000005
​Account disabled: False
​Password: True
​Kerberos keys available: True
​—————————-
​Number of entries returned 1
​—————————-

Embora este processo tenha sido interativo, todos as variáveis podem ser passadas diretamente pela linha de comando sem a necessidade de interação.

 

Finalmente, chegou a hora de testarmos a autenticação num sistema Linux em si.

Numa nova máquina efetuar:

# yum install ipa-client  ipa-admintools

Aguardar o fim da instalação. Em seguida configurar o cliente:

# ipa-client-install –enable-dns-updates

DNS discovery failed to determine your DNS domain
​Please provide the domain name of your IPA server (ex: example.com): net.xpto

DNS discovery failed to find the IPA Server
​Please provide your IPA server name (ex: ipa.example.com): lxcvpar4.net.xpto

Continue to configure the system with these values? [no]: y
User authorized to enroll computers: admin
Synchronizing time with KDC…
Password for [email protected]:
Successfully retrieved CA cert
Subject: CN=Certificate Authority,O=NET.XPTO
Issuer: CN=Certificate Authority,O=NET.XPTO
Valid From: Jul 13 18:29:07 2015 UTC
Valid Until: Aug 13 18:29:07 2035 UTC
Enrolled in IPA realm NET.XPTO
Created /etc/ipa/default.conf
New SSSD config will be created
Configured /etc/sssd/sssd.conf
Configured /etc/krb5.conf for IPA realm EXAMPLE.COM
Failed to update DNS records.
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_dsa_key.pub
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Client configuration complete.

Finalmente testamos a integração:

[nuno@fvlab10 ~]$ id
​[nuno@fvlab10 ~]$ getent passwd admin
​[nuno@fvlab10 ~]$ getent group admins

Ao sairem e voltarem a entrar no vosso cliente, seja por ssh, consola ou ambiente gráfico, desde que o utilizador em questão não exista já no equipamento com credenciais válidas, o vosso acesso será autenticado e validado pelo IPA.

Refleções finais:

O IPA/IDM é uma das melhores ferramentas de Auth & Auditing que conheco. Alem de ser baseado em opensource, tem o backing e historial do 389 Directory Server da Red Hat (openLDAP no caso do FreeIPA).

Para quem é conhecedor de historia, certamente recordam-se do Netscape Directory Server de onde o 389 é diretamente descendente.

A cereja no topo do doce são mesmo os poucos recursos que tão poderosa solução exige.

Até a próxima vez, onde mostrarei formas de integrar a solução em aplicações, como por exempo o apache, ampache e owncloud.

Caso tenham duvidas podem entrar em contacto comigo através do email nuno at nuneshiggs.com

Abraço
Nuno.