Instalando e Configurando OpenLDAP com Kerberos no Debian Squeeze
Vamos preparar o nosso servidor Kerberos
- Nome ldap1.douglasqsantos.com.br
- IP: 10.0.0.25
- Domínio: douglasqsantos.com.br
- Realm: douglasqsantos.com.br
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
Sempre quanto terminar a edição de algum arquivo .ldif no vim sempre pressione F7 para ele remover os espaços nos finais de linha que sempre da merda ;)
Vamos desabilitar o ipv6
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
Agora vamos acertar o nome da maquina
vim /etc/hostname ldap1
Agora vamos acertar o arquivo /etc/hosts
vim /etc/hosts 127.0.0.1 localhost 10.0.0.23 ldap1.douglasqsantos.com.br ldap1
Agora vamos reinicar o servidor para ficar certa a nossa configuração
reboot
Agora vamos atualizar os repositórios e instalar alguns pacotes necessários
aptitude update && aptitude dist-upgrade -y && aptitude install ssh ntp ntpdate xinetd nmap -y
Agora vamos instalar os pacotes necessários para o kerberos
apt-get install krb5-{admin-server,user,config} libpam-krb5 -y ##Responder da seguinte forma 1) douglasqsantos.com.br 2) ldap1.douglasqsantos.com.br 3) ldap1.douglasqsantos.com.br
Agora vamos fazer um acerto no xinetd, por causa do serviço de propagação de base do kerberos
vim /etc/xinetd.d/krb_prop service krb_prop { disable = no socket_type = stream protocol = tcp user = root wait = no server = /usr/sbin/kpropd }
Agora vamos reiniciar o xinetd
/etc/init.d/xinetd restart
Agora vamos criar o nosso realm kerberos
krb5_newrealm This script should be run on the master KDC/admin server to initialize a Kerberos realm. It will ask you to type in a master key password. This password will be used to generate a key that is stored in /etc/krb5kdc/stash. You should try to remember this password, but it is much more important that it be a strong password than that it be remembered. However, if you lose the password and /etc/krb5kdc/stash, you cannot decrypt your Kerberos database. Loading random data Initializing database '/var/lib/krb5kdc/principal' for realm 'douglasqsantos.com.br', master key name 'K/M@douglasqsantos.com.br' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: #senha Re-enter KDC database master key to verify: #senha Now that your realm is set up you may wish to create an administrative principal using the addprinc subcommand of the kadmin.local program. Then, this principal can be added to /etc/krb5kdc/kadm5.acl so that you can use the kadmin program on other computers. Kerberos admin principals usually belong to a single user and end in /admin. For example, if jruser is a Kerberos administrator, then in addition to the normal jruser principal, a jruser/admin principal should be created. Don't forget to set up DNS information so your clients can find your KDC and admin servers. Doing so is documented in the administration guide.
Vamos acertar agora as acls do kerberos
vim /etc/krb5kdc/kadm5.acl [...] */admin * admin *
Agora vamos fazer um backup do arquivo /etc/krb5.conf
cp -Rfa /etc/krb5.conf{,.bkp}
Agora vamos acertar o arquivo /etc/krb5.conf
vim /etc/krb5.conf [libdefaults] default_realm = douglasqsantos.com.br forwardable = true proxiable = true [realms] douglasqsantos.com.br = { kdc = ldap1.douglasqsantos.com.br admin_server = ldap1.douglasqsantos.com.br } [domain_realm] .douglasqsantos.com.br = douglasqsantos.com.br douglasqsantos.com.br = douglasqsantos.com.br [logging] kdc = FILE:/var/log/krb5/kdc.log admin_server = FILE:/var/log/krb5/kadmin.log default = FILE:/var/log/krb5/klib.log
Agora vamos criar o diretório para armazenar os logs
mkdir /var/log/krb5
Agora vamos acertar o logrotate para o kerberos
vim /etc/logrotate.d/krb5 /var/log/krb5/kadmin.log /var/log/krb5/kdc.log /var/log/krb5/klib.log { daily missingok rotate 7 compress delaycompress notifempty }
Agora vamos mudar o tempo de vida do ticket
kadmin.local Authenticating as principal root/admin@douglasqsantos.com.br with password. kadmin.local: modprinc -maxlife "1 day" -maxrenewlife "90 day" krbtgt/douglasqsantos.com.br Principal "krbtgt/douglasqsantos.com.br@douglasqsantos.com.br" modified. kadmin.local: q
Agora vamos acertar o kdc.conf para acertar o tempo de vida do ticket
vim /etc/krb5kdc/kdc.conf [...] max_life = 1d 0h 0m 0s max_renewable_life = 90d 0h 0m 0s
Agora vamos reiniciar os serviços
/etc/init.d/krb5-admin-server restart ; /etc/init.d/krb5-kdc restart
Agora vamos criar o nosso admin
kadmin.local Authenticating as principal root/admin@douglasqsantos.com.br with password. kadmin.local: addprinc admin WARNING: no policy specified for admin@douglasqsantos.com.br; defaulting to no policy Enter password for principal "admin@douglasqsantos.com.br": #Informe a senha Re-enter password for principal "admin@douglasqsantos.com.br": #Informe a senha Principal "admin@douglasqsantos.com.br" created. kadmin.local: q
Agora vamos criar a nossa keytab e adicionar o nosso host
kadmin -p admin Authenticating as principal admin with password. Password for admin@douglasqsantos.com.br: #senha kadmin: addprinc -randkey host/ldap1.douglasqsantos.com.br WARNING: no policy specified for host/ldap1.douglasqsantos.com.br@douglasqsantos.com.br; defaulting to no policy Principal "host/ldap1.douglasqsantos.com.br@douglasqsantos.com.br" created. kadmin: ktadd host/ldap1.douglasqsantos.com.br Entry for principal host/ldap1.douglasqsantos.com.br with kvno 2, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/ldap1.douglasqsantos.com.br with kvno 2, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/ldap1.douglasqsantos.com.br with kvno 2, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/ldap1.douglasqsantos.com.br with kvno 2, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab. kadmin: q
Agora vamos aos testes
Vamos criar um ticket para o admin
kinit admin Password for admin@douglasqsantos.com.br: #informe a senha
Agora vamos listar o nosso ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: admin@douglasqsantos.com.br Valid starting Expires Service principal 09/28/11 11:49:11 09/29/11 11:49:10 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora para destruir o ticket para testar
kdestroy
Agora vamos listar novamente
klist klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
Agora vamos testar o kerberos com ssh, vamos adicionar o root no kerberos
kadmin -p admin kadmin: addprinc root WARNING: no policy specified for root@douglasqsantos.com.br; defaulting to no policy Enter password for principal "root@douglasqsantos.com.br": Re-enter password for principal "root@douglasqsantos.com.br": Principal "root@douglasqsantos.com.br" created. kadmin: q
Vamos somente acertar o arquivo de configuração da sessão caso o usuário não tenho um diretório home, então vai ser criado automáticamente
vim /etc/pam.d/common-session session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session optional pam_krb5.so minimum_uid=1000 session required pam_unix.so session optional pam_mkhomedir.so skel=/etc/skel umask=077
Agora vamos acertar o arquivo de configuração do serviço de ssh
vim /etc/ssh/sshd_config [...] #A opção abaixo deve estar habilitada para que a troca de senhas via ssh # ocorra adequadamente. ChallengeResponseAuthentication yes # Opções para autenticação via Kerberos: KerberosAuthentication yes KerberosOrLocalPasswd yes KerberosTicketCleanup yes # Opções para aunteticação via GSSAPI: GSSAPIAuthentication yes GSSAPICleanupCredentials yes
Agora vamos reiniciar o serviço de ssh
/etc/init.d/ssh restart
Vamos acertar o cliente ssh
vim /etc/ssh/ssh_config [...] StrictHostKeyChecking no GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Agora temos que iniciar o ticket do root para testar o ssh
kinit root Password for root@douglasqsantos.com.br: #informe a senha setada no kerberos
Vamos listar o ticket para ver se foi criado com sucesso
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: root@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 12:28:15 11/08/11 12:28:15 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos testar a conexão ssh
ssh ldap1.douglasqsantos.com.br Warning: Permanently added 'ldap1.douglasqsantos.com.br,10.0.0.25' (RSA) to the list of known hosts. Linux ldap1 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Nov 7 11:59:00 2011 from 10.0.0.20 [12:29:03] root@ldap1 [~] #
Como pode ser notado ocorreu tudo ok, não foi solicitada a senha para a conexão via ssh por causa que configuramos o serviço do ssh a utilizar o ticket do kerberos
Agora vamos verificar se as portas do kerberos estão escutando ok
nmap -sU -sT -p U:88,464,T:464,749 ldap1.douglasqsantos.com.br Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-07 12:31 BRST Interesting ports on ldap1.douglasqsantos.com.br (10.0.0.25): PORT STATE SERVICE 464/tcp open kpasswd5 749/tcp open kerberos-adm 88/udp open|filtered kerberos-sec 464/udp open|filtered kpasswd5 Nmap done: 1 IP address (1 host up) scanned in 3.08 seconds
Como pode ser notado elas estão open então vamos configurar
Agora vamos cadastrar o serviço do ldap no kerberos
kadmin -p admin Authenticating as principal admin with password. Password for admin@douglasqsantos.com.br: #senha kadmin: addprinc -randkey ldap/ldap1.douglasqsantos.com.br WARNING: no policy specified for ldap/ldap1.douglasqsantos.com.br@douglasqsantos.com.br; defaulting to no policy Principal "ldap/ldap1.douglasqsantos.com.br@douglasqsantos.com.br" created. kadmin: ktadd ldap/ldap1.douglasqsantos.com.br Entry for principal ldap/ldap1.douglasqsantos.com.br with kvno 2, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5.keytab. Entry for principal ldap/ldap1.douglasqsantos.com.br with kvno 2, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal ldap/ldap1.douglasqsantos.com.br with kvno 2, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal ldap/ldap1.douglasqsantos.com.br with kvno 2, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab. kadmin: q
Agora vamos para a configuração do LDAP o nosso Kerberos já esta ok
Vamos instalar os pacotes necessários
aptitude install slapd ldap-utils -y #Respostas 1) Informe a senha 2) Confirme a senha
Vamos verificar a porta do ldap
nmap -p 389 localhost -T4 Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-07 12:34 BRST Interesting ports on localhost (127.0.0.1): PORT STATE SERVICE 389/tcp closed ldap Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Agora vamos ajustar a consulta para a nossa base LDAP
vim /etc/ldap/ldap.conf BASE dc=douglasqsantos,dc=com,dc=br URI ldap://ldap1.douglasqsantos.com.br
Vamos verificar a configuração da nossa base
ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "(|(cn=config)(olcDatabase={1}hdb))" dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/slapd/slapd.args olcLogLevel: none olcPidFile: /var/run/slapd/slapd.pid olcToolThreads: 1 dn: olcDatabase={1}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcDbDirectory: /var/lib/ldap olcSuffix: dc=douglasqsantos,dc=com,dc=br olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou s auth by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self write by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" wri te by * read olcLastMod: TRUE olcRootDN: cn=admin,dc=douglasqsantos,dc=com,dc=br olcRootPW: {SSHA}6B8iNyd8/fUHy8DPMsvo9nIjRQCyu9/T olcDbCheckpoint: 512 30 olcDbConfig: {0}set_cachesize 0 2097152 0 olcDbConfig: {1}set_lk_max_objects 1500 olcDbConfig: {2}set_lk_max_locks 1500 olcDbConfig: {3}set_lk_max_lockers 1500 olcDbIndex: objectClass eq
Agora vamos acertar a configuração do nosso LDAP
vim ~/olc-mod1.ldif # 1. dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats # 2.1.1. dn: olcDatabase={1}hdb,cn=config changetype: modify delete: olcAccess olcAccess: {2}to * by self write by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by * read - # 2.1.2. delete: olcAccess olcAccess: {1}to dn.base="" by * read - # 2.1.3. delete: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by * none - # 2.2.1. add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by * none - # 2.2.2. add: olcAccess olcAccess: {1}to attrs=loginShell by self write by * none - # 2.2.3. add: olcAccess olcAccess: {2}to dn.base="" by * read - # 2.2.4. add: olcAccess olcAccess: {3}to * by users read by * none - # 2.3. add: olcDbIndex olcDbIndex: uid eq - # 2.4. add: olcDbIndex olcDbIndex: cn eq - # 2.5. add: olcDbIndex olcDbIndex: ou eq - # 2.6. add: olcDbIndex olcDbIndex: dc eq
Agora vamos importar a configuração
ldapmodify -QY EXTERNAL -H ldapi:/// -f ~/olc-mod1.ldif modifying entry "cn=config" modifying entry "olcDatabase={1}hdb,cn=config"
Agora vamos remover o admin criado na instalação do ldap pois vamos utilizar o admin do kerberos
ldapdelete -x -h localhost -D cn=admin,dc=douglasqsantos,dc=com,dc=br -w senha cn=admin,dc=douglasqsantos,dc=com,dc=br
Agora vamos instalar o sasl2 para a autenticação do ldap no kerberos
aptitude install libsasl2-modules-gssapi-mit -y
Vamos acertar as permissões do keytab agora
chmod 640 /etc/krb5.keytab chown root.openldap /etc/krb5.keytab
Agora precisamos descomentar a seguinte linha no arquivo /etc/default/slapd
vim /etc/default/slapd [...] #No final do arquivo export KRB5_KTNAME=/etc/krb5.keytab
Agora vamos acertar o /etc/ldap/ldap.conf
vim /etc/ldap/ldap.conf [...] #No final do arquivo SASL_MECH GSSAPI
Agora vamos criar a base para o nosso LDAP
vim ~/ous.ldif dn: ou=Usuarios,dc=douglasqsantos,dc=com,dc=br objectClass: organizationalUnit ou: Usuarios dn: ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: organizationalUnit ou: Grupos
Vamos importar a configuração
ldapadd -xWD cn=admin,dc=douglasqsantos,dc=com,dc=br -f ~/ous.ldif Enter LDAP Password: adding new entry "ou=Usuarios,dc=douglasqsantos,dc=com,dc=br" adding new entry "ou=Grupos,dc=douglasqsantos,dc=com,dc=br"
Vamos acertar as permissões agora no LDAP
vim ~/olc-mod2.ldif # 1.1. dn: cn=config changetype: modify add: olcAuthzRegexp olcAuthzRegexp: uid=([^,]+),cn=douglasqsantos.com.br,cn=gssapi,cn=auth uid=$1,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br - # 1.2. add: olcSaslRealm olcSaslRealm: douglasqsantos.com.br # 2.1. dn: olcDatabase={1}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: uid=admin,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br - # 2.2 delete: olcRootPW
Vamos importar a configuração
ldapmodify -QY EXTERNAL -H ldapi:/// -f ~/olc-mod2.ldif modifying entry "cn=config" modifying entry "olcDatabase={1}hdb,cn=config"
Agora vamos reiniciar o LDAP
/etc/init.d/slapd restart Stopping Openldap: slapd. Starting Openldap: slapd.
Vamos efetuar uma consulta anonima
ldapsearch -xLLL No such object (32)
Agora vamos efetuar uma consulta com o admin interno do ldap
ldapsearch -xWLLL -D cn=admin,dc=douglasqsantos,dc=com,dc=br ou=Usuarios Enter LDAP Password: ldap_bind: Invalid credentials (49)
Agora vamos criar um tiket no kerberos para o admin
kinit admin Password for admin@douglasqsantos.com.br: #senha
Agora vamos verificar se foi gerado o ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: admin@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 12:50:01 11/08/11 12:50:00 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos efetuar uma consulta no LDAP
ldapsearch -LLL SASL/GSSAPI authentication started SASL username: admin@douglasqsantos.com.br SASL SSF: 56 SASL data security layer installed. dn: dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: dcObject objectClass: organization o: douglasqsantos.com.br dc: douglas dn: ou=Usuarios,dc=douglasqsantos,dc=com,dc=br objectClass: organizationalUnit ou: Usuarios dn: ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: organizationalUnit ou: Grupos
Agora vamos verificar o usuário que estamos logados para o Linux
whoami root
Agora vamos verificar no LDAP com qual usuário estamos logados
ldapwhoami SASL/GSSAPI authentication started SASL username: admin@douglasqsantos.com.br SASL SSF: 56 SASL data security layer installed. dn:uid=admin,ou=usuarios,dc=douglasqsantos,dc=com,dc=br
Agora vamos criar um novo usuário
Temos que criar o usuário tanto na base LDAP quanto na base Kerberos
Vamos criar o usuário primeiro no kerberos
kadmin -p admin Authenticating as principal admin with password. Password for admin@douglasqsantos.com.br: kadmin: addprinc douglas WARNING: no policy specified for douglas@douglasqsantos.com.br; defaulting to no policy Enter password for principal "douglas@douglasqsantos.com.br": Re-enter password for principal "douglas@douglasqsantos.com.br": Principal "douglas@douglasqsantos.com.br" created. kadmin: q
Vamos gerar um hash da senha para armazenar no LDAP
slappasswd -s 123 {SSHA}oJvrkYndrF0M3EZEXisub3Rm1yB9XEXA
Agora vamos criar o usuário no LDAP
vim ~/douglas.ldif dn: cn=ti-admin,ou=Grupos,dc=douglasqsantos,dc=com,dc=br cn: ti-admin gidNumber: 20001 objectClass: top objectClass: posixGroup dn: uid=douglas,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br uid: douglas uidNumber: 20001 gidNumber: 20001 cn: Douglas sn: Santos objectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/bash homeDirectory: /home/douglas userPassword: {SSHA}oJvrkYndrF0M3EZEXisub3Rm1yB9XEXA
Agora vamos importar o nosso usuário
ldapadd -Qf ~/douglas.ldif adding new entry "cn=ti-admin,ou=Grupos,dc=douglasqsantos,dc=com,dc=br" adding new entry "uid=douglas,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br"
Vamos destruir o ticket do admin
kdestroy
Agora vamos criar um ticket para o novo usuário
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Agora vamos listar o ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 12:58:32 11/08/11 12:58:32 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos ver com quem estamos logados no LDAP
ldapwhoami SASL/GSSAPI authentication started SASL username: douglas@douglasqsantos.com.br SASL SSF: 56 SASL data security layer installed. dn:uid=douglas,ou=usuarios,dc=douglasqsantos,dc=com,dc=br
Como pode ser notado estamos logado com o novo usuário
Vamos configurar agora o servidor como cliente
Vamos acertar o debconf
dpkg-reconfigure debconf #Responda a perguntas #1) Dialog #2) baixa
Agora vamos instalar os pacotes para trabalhar como cliente LDAP
aptitude install ldap-utils libnss-ldap libpam-ldap nscd libsasl2-modules-gssapi-mit -y #Responda as perguntas da seguinte forma #1) ldap://ldap1.douglasqsantos.com.br #2) dc=douglasqsantos,dc=com,dc=br #3) 3 #4) No #5) No #6) No #7) OK #8) No #9) No #10) Criptografia #11) No #12) Deixe selecionado somente Kerberos e Unix Autentication
Vamos instalar o kstart
aptitude install kstart -y
Adicione no final do arquivo /etc/inittab
vim /etc/inittab [...] KS:2345:respawn:/usr/bin/k5start -U -f /etc/krb5.keytab -K 10 -l 24h
Agora vamos forçar o reload do /etc/inittab
kill -HUP 1
Vamos acertar o arquivo /etc/libnss-ldap.conf
vim /etc/libnss-ldap.conf [...] #No final do arquivo adicione use_sasl on sasl_mech gssapi krb5_ccname FILE:/tmp/krb5cc_0
Agora vamos acertar o /etc/nsswitch.conf
vim /etc/nsswitch.conf [...] passwd: compat ldap group: compat ldap shadow: compat ldap
Reiniciar o nscd
/etc/init.d/nscd restart Restarting Name Service Cache Daemon: nscd.
Vamos fazer um teste de autenticação com o novo usuário
Vamos gerar um ticket para ele
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Vamos listar o ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 13:42:37 11/08/11 13:42:36 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos efetuar um teste de ssh no servidor para ele mesmo com o usuário douglas
ssh douglas@ldap1.douglasqsantos.com.br Creating directory '/home/douglas'. Linux ldap1 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. $ pwd /home/douglas $
Agora vamos fazer um teste de conexão de um cliente remoto para o servidor
ssh douglas@10.0.0.25 Password: Linux ldap1 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Nov 7 13:45:35 2011 from ldap1.douglasqsantos.com.br $
Como o nosso cliente não esta configurado para ser cliente do nosso domínio kerberos foi solicitada a senha, porém foi gerado o ticket na inicialização da sessão vamos confirmar isso
$ klist Ticket cache: FILE:/tmp/krb5cc_20001_zz3086 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 13:47:10 11/08/11 13:47:10 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Foi gerado corretamente o ticket, agora vamos consultar o log de autenticação no servidor
tail -f /var/log/auth.log Nov 7 13:47:10 ldap1 sshd[3088]: pam_krb5(sshd:auth): user douglas authenticated as douglas@douglasqsantos.com.br Nov 7 13:47:10 ldap1 sshd[3086]: Accepted keyboard-interactive/pam for douglas from 10.0.0.20 port 57753 ssh2 Nov 7 13:47:10 ldap1 sshd[3086]: pam_unix(sshd:session): session opened for user douglas by (uid=0)
Como pode ser notado o cliente foi autenticado como douglas@douglasqsantos.com.br e a autenticação foi validada por pam_krb5
Agora vamos configurar o cliente kerberos
- Nome: cliente.douglasqsantos.com.br
- IP: 10.0.0.27
- Domínio: douglasqsantos.com.br
- Realm: douglasqsantos.com.br
Vamos desabilitar o ipv6
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
Acertando o nome da maquina
vim /etc/hostname cliente
Vamos acertar o /etc/hosts
vim /etc/hosts 127.0.0.1 localhost 10.0.0.27 cliente.douglasqsantos.com.br cliente 10.0.0.25 ldap1.douglasqsantos.com.br ldap1
Vamos reiniciar a maquina cliente
reboot
Vamos atualizar os repositórios e instalar alguns pacotes necessários
aptitude update && aptitude dist-upgrade -y && aptitude install ssh ntp ntpdate nmap -y
Agora vamos verificar se o servidor kerberos esta respondendo consultas
nmap -sU -sT -p U:88,464,T:464,749 ldap1.douglasqsantos.com.br Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-07 13:59 BRST Interesting ports on ldap1.douglasqsantos.com.br (10.0.0.25): PORT STATE SERVICE 464/tcp open kpasswd5 749/tcp open kerberos-adm 88/udp open|filtered kerberos-sec 464/udp open|filtered kpasswd5 MAC Address: 08:00:27:C5:C8:32 (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 1.37 seconds
Agora vamos instalar os pacotes para o cliente poder logar no servidor kerberos
aptitude install krb5-{config,user} libpam-krb5 -y #Responder as perguntas da seguinte forma #1) douglasqsantos.com.br #2) ldap1.douglasqsantos.com.br #3) ldap1.douglasqsantos.com.br
Agora vamos acertar o /etc/krb5.conf
Vamos fazer backup do arquivo /etc/krb5.conf
cp /etc/krb5.conf{,.bkp}
Agora vamos modificar o arquivo
vim /etc/krb5.conf [libdefaults] default_realm = douglasqsantos.com.br forwardable = true proxiable = true [realms] douglasqsantos.com.br = { kdc = ldap1.douglasqsantos.com.br admin_server = ldap1.douglasqsantos.com.br } [domain_realm] .douglasqsantos.com.br = douglasqsantos.com.br douglasqsantos.com.br = douglasqsantos.com.br [logging] kdc = FILE:/var/log/krb5/kdc.log admin_server = FILE:/var/log/krb5/kadmin.log default = FILE:/var/log/krb5/klib.log
Vamos criar o diretorio para armazenar os logs
mkdir /var/log/krb5
Agora vamos inserir o host do cliente no kerberos, no servidor kerberos
kadmin -p admin Authenticating as principal admin with password. Password for admin@douglasqsantos.com.br: kadmin: addprinc -randkey host/cliente.douglasqsantos.com.br WARNING: no policy specified for host/cliente.douglasqsantos.com.br@douglasqsantos.com.br; defaulting to no policy Principal "host/cliente.douglasqsantos.com.br@douglasqsantos.com.br" created. kadmin: ktadd host/cliente.douglasqsantos.com.br Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab. kadmin: q
Agora vamos adicionar o host no keytab do cliente agora, no cliente
kadmin -p admin Authenticating as principal admin with password. Password for admin@douglasqsantos.com.br: kadmin: ktadd host/cliente.douglasqsantos.com.br Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/cliente.douglasqsantos.com.br with kvno 2, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab. kadmin: q
Vamos consultar o keytab para verificar a existência do nosso host
klist -ke Keytab name: WRFILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 2 host/cliente.douglasqsantos.com.br@douglasqsantos.com.br (AES-256 CTS mode with 96-bit SHA-1 HMAC) 2 host/cliente.douglasqsantos.com.br@douglasqsantos.com.br (ArcFour with HMAC/md5) 2 host/cliente.douglasqsantos.com.br@douglasqsantos.com.br (Triple DES cbc mode with HMAC/sha1) 2 host/cliente.douglasqsantos.com.br@douglasqsantos.com.br (DES cbc mode with CRC-32)
Vamos acertar o debconf
dpkg-reconfigure debconf #Responda a perguntas #1) Dialog #2) baixa
Agora vamos instalar os pacotes para trabalhar como cliente LDAP
aptitude install ldap-utils libnss-ldap libpam-ldap nscd libsasl2-modules-gssapi-mit -y #Responda as perguntas da seguinte forma #1) ldap://ldap1.douglasqsantos.com.br #2) dc=douglasqsantos,dc=com,dc=br #3) 3 #4) No #5) No #6) No #7) OK #8) No #9) No #10) Criptografia #11) No #12) Deixe selecionado somente Kerberos e Unix Autentication
Vamos instalar o kstart
aptitude install kstart -y
Adicione no final do arquivo /etc/inittab
vim /etc/inittab [...] KS:2345:respawn:/usr/bin/k5start -U -f /etc/krb5.keytab -K 10 -l 24h
Agora vamos forçar o reload do /etc/inittab
kill -HUP 1
Vamos acertar o arquivo /etc/libnss-ldap.conf
cp -Rfa /etc/libnss-ldap.conf{,.bkp} vim /etc/libnss-ldap.conf [...] #No final do arquivo adicione use_sasl on sasl_mech gssapi krb5_ccname FILE:/tmp/krb5cc_0
Vamos acertar o arquivo /etc/ldap/ldap.conf
cp -Rfa /etc/ldap/ldap.conf{,.bkp} vim /etc/ldap/ldap.conf BASE dc=douglasqsantos,dc=com,dc=br URI ldap://ldap1.douglasqsantos.com.br SASL_MECH GSSAPI
Agora vamos acertaro /etc/nsswitch.conf
vim /etc/nsswitch.conf [...] passwd: compat ldap group: compat ldap shadow: compat ldap
Reiniciar o nscd
/etc/init.d/nscd restart Restarting Name Service Cache Daemon: nscd.
Vamos acertar a configuração da sessão na pam
vim /etc/pam.d/common-session session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session optional pam_krb5.so minimum_uid=1000 session required pam_unix.so session optional pam_mkhomedir.so skel=/etc/skel umask=077
Vamos acertar o ssh
vim /etc/ssh/sshd_config [...] #A opção abaixo deve estar habilitada para que a troca de senhas via ssh # ocorra adequadamente. ChallengeResponseAuthentication yes # Opções para autenticação via Kerberos: KerberosAuthentication yes KerberosOrLocalPasswd yes KerberosTicketCleanup yes # Opções para aunteticação via GSSAPI: GSSAPIAuthentication yes GSSAPICleanupCredentials yes
Vamos reiniciar o serviço do ssh
/etc/init.d/ssh restart
Vamos acertar o cliente ssh
vim /etc/ssh/ssh_config [...] StrictHostKeyChecking no GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Agora vamos testar a conexão do novo cliente com o servidor kerberos
Vamos iniciar um ticket para o cliente
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Vamos verificar se ele esta ok
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 14:11:38 11/08/11 14:11:38 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br renew until 11/08/11 14:16:26
Agora vamos efetuar o teste de ssh para o servidor kerberos
ssh douglas@ldap1.douglasqsantos.com.br Warning: Permanently added 'ldap1.douglasqsantos.com.br,10.0.0.25' (RSA) to the list of known hosts. Linux ldap1 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Nov 7 13:47:10 2011 from 10.0.0.20 $
Vamos ver se foi criado um ticket na sessão de ssh para o servidor
$ klist Ticket cache: FILE:/tmp/krb5cc_20001_BDtCdl3117 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 14:11:46 11/08/11 14:11:38 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br renew until 11/08/11 14:16:26
Agora vamos efetuar um teste de conexão do servidor para o cliente
Vamos acertar o arquivo /etc/hosts do servidor
vim /etc/hosts 127.0.0.1 localhost 10.0.0.25 ldap1.douglasqsantos.com.br ldap1 10.0.0.27 cliente.douglasqsantos.com.br cliente
Vamos inicializar um ticket
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Agora vamos listar o nosso ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 14:16:22 11/08/11 14:16:21 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos testar a conexão
ssh douglas@cliente.douglasqsantos.com.br Warning: Permanently added 'cliente.douglasqsantos.com.br,10.0.0.27' (RSA) to the list of known hosts. Password:
Como pode ser notado tivemos um erro novamente, vamos analizar no cliente
Vamos efetuar um teste de ssh para do cliente para ele mesmo
Vamos inicializar um ticket
kinit douglas Password for douglas@douglasqsantos.com.br: kinit: Clock skew too great while getting initial credentials
O cliente esta com problemas com o horário, vamos verificar o horário no cliente e no servidor
No cliente
date Seg Nov 7 14:32:06 BRST 2011
No servidor
date Seg Nov 7 14:26:41 BRST 2011
Como pode ser notado temos uma diferença entre os dois vamos sincronizar o cliente com o servidor
ntpdate -u ldap1.douglasqsantos.com.br 7 Nov 14:36:42 ntpdate[2086]: no server suitable for synchronization found
Vamos sincronizar os dois servidor com o ntp.usp.br
No servidor
ntpdate -u ntp.usp.br 7 Nov 14:43:32 ntpdate[3483]: step time server 143.107.255.15 offset 5.530868 sec
No cliente
ntpdate -u ntp.usp.br 7 Nov 14:44:10 ntpdate[2103]: step time server 143.107.255.15 offset -0.848529 sec
Agora no cliente vamos incializar um novo ticket
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Agora vamos listar o ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 15:07:45 11/08/11 15:07:45 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br renew until 11/08/11 15:08:21
Agora vamos efetuar uma conexão de ssh do cliente para ele mesmo
ssh douglas@cliente.douglasqsantos.com.br Creating directory '/home/douglas'. Linux cliente 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. [14:57:44] douglas@cliente [~] $
Como pode ser notado a configuração passou normalmente
Agora novamente no servidor vamos fazer o teste de conexão ssh
Vamos inicializar um ticket
kinit douglas Password for douglas@douglasqsantos.com.br: #senha
Agora vamos listar o ticket
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: douglas@douglasqsantos.com.br Valid starting Expires Service principal 11/07/11 15:13:28 11/08/11 15:13:27 krbtgt/douglasqsantos.com.br@douglasqsantos.com.br
Agora vamos testar a conexão ssh do servidor para o cliente
ssh douglas@cliente.douglasqsantos.com.br Linux cliente 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Nov 7 15:13:51 2011 from cliente.douglasqsantos.com.br [15:14:22] douglas@cliente [~] $
Como pode ser notado a autenticação estão ok