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:
Tendo 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.