miércoles, 25 de julio de 2012


Integración de ssh con AD en FreeBSD

Recientemente he integrado algunas plataformas debianeras con AD, pero quise experimentar con FreeBSD, así que decidí integrarlo con un dominio en Windows 2003 standard edition SP2. Después de buscar encontré alguna documentación, los tome como referencia y comencé con esta aventura. (OJO funciono a la perfección para mí).

Este COMO predispone que se conoce cómo utilizar el árbol de ports de FreeBSD, y comandos básicos de Linux/BSD. La versión que utilice fue FreeBSD-9.0-RELEASE-i386 + Windows 2003 standard edition SP2.
Preparando la integración al dominio
Primero necesito instalar samba36
cd /usr/ports/net/samba36 && make install clean
Instalar con las siguientes opciones: LDAP, ADS, WINBIND, ACL_SUPPORT, SYSLOG, UTMP, PAM_SMBPASS, DNSUPDATE, EXP_MODULES, & POPT (CUPS es opcional si desea imprimir en su BSD)
Añada lo siguiente en /etc/rc.conf para asegurarnos que samba inicie al iniciar el servidor.
# Samba services for AD
nmbd_enable=”YES”
smbd_enable=”YES”
winbindd_enable=”YES”
kerberos5_server_enable=”YES”
kadmind5_server_enable=”YES”

Crear un nuevo fichero smb.conf, y grabar el existente:
mv /usr/local/etc/smb.conf /usr/local/etc/smb.conf.original
Edite /usr/local/etc/smb.conf
Modifique el fichero smb.conf de acuerdo a los datos reales de su dominio
[global]
workgroup = TUDOMINIO
server string = FreeBSD Client %v
load printers = no
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
smb ports = 139
security = ADS
realm = TUDOMINIO.COM
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%D/%U
template shell = /usr/local/bin/bash
client ntlmv2 auth = yes
winbind use default domain = yes
restrict anonymous = 2
domain master = no
local master = no
preferred master = no
disable netbios = no
dos charset = ASCII
unix charset = UTF8
display charset = UTF8

Ahora editaremos el fichero /etc/krb5.conf, e inserte lo siguiente.
[logging]
default = SYSLOG:INFO:LOCAL7
[libdefaults]
ticket_lifetime = 24000
clock_skew = 300
default_realm = TUDOMINIO.COM
[realms]
domain.LOCAL = {
kdc = tuservidor.tudominio.com:88
admin_server = tuservidor.tudominio.com:464
default_domain = tudominio.com
}
[domain_realm]
.domain.local = TUDOMINIO.COM
domain.local = TUDOMINIO.COM

Ahora necesitaremos incrementar el número máximo de archivos que el kernel puede manejar, después de hacer esto hay que reiniciar el BSD
Edite /etc/sysctl.conf y añada lo siguiente:
kern.maxfiles=16384
kern.maxfilesperproc=16384

Como sabemos AD es un servidor NTP, así que tendremos que integrarlo para que sincronice la hora con nuestro BSD.
Edite /etc/ntp.conf
Comente los demás servidores configurados en /etc/ntp.conf y añada la siguiente línea.
tuservidor.tudominio.com iburst maxpoll 9

Añada lo siguiente en /etc/rc.conf para que ntp inicie con BSD
ntpdate_enable="YES"
ntpd_enable="YES"
Para comprobar inicie el demonio ntp con el siguiente comando.
/etc/rc.d/ntpdate start

Finalmente edite /etc/rc.conf y modifique el nombre de su host de tu BSD
hostname="myFreeBSDName.tudominio.com"
Revisar que tu /etc/resolv.conf este configurado de la siguiente manera.
search tudominio.com
nameserver 192.168.1.3 #En mi caso es mi AD/DNS

Ahora vamos a realizar algunas pruebas para validar la integración al dominio.
kinit administrator
Aquí pedirá la contraseña del administrator de su controlador de dominio, ingréselo.
Si funciona todo OK, entonces podemos ya participar en el AD.
/usr/local/bin/net ads join -U tuservidor.tudominio.com -U administrator
Si todo sale bien saldrá un mensaje como el siguiente TUDOMINIO.COM
Para comprobar los miembros del dominio, ejecutamos lo siguiente wbinfo –u, si todo esta OK deberán salir todos los objetos miembros del dominio. Si no funcionase reinicie samba o el BSD.
Felicitaciones hasta aquí ya estas listo para integrar el servicio SSH con el AD.
Integración con SSH
Ahora, necesito configurar el acceso SSH a través de PAM para autenticar a los usuarios de AD. En primer lugar, voy a tener que editar el fichero /etc/nsswitch y modificar el group y el passwd con lo siguiente:
group: files winbind
passwd: files winbind
Ahora tenemos que instalar el modulo para hacer que los usuarios que loguen vía ssh tengas sus directorios.
cd /usr/ports/security/pam_mkhomedir && make install clean
mkdir /home/TUDOMINIO
Ahora tenemos que decirle a PAM que autenticaremos usando sus módulos
# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            sufficient      /usr/local/lib/pam_winbind.so   # Permite el acceso a todo el mundo del dominio
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_login_access.so
account         required        pam_unix.so

# session
#session        optional        pam_ssh.so
session         required        /usr/local/lib/pam_mkhomedir.so  #Crea los directorios de los usuarios logeados del dominio
session         required        pam_permit.so
# password
#password       sufficient      pam_krb5.so             no_warn try_first_pass
password        required        pam_unix.so             no_warn try_first_pass
Ahora solo queda probarlo, puede usted logear con cualquier objeto miembro del dominio vía ssh y verificarlo con tail –f /var/log/auth.log, además validando que se crea su directorio en /home/TUDOMINIO/

NOTA.- No se olviden de compilar el bash, de la siguiente manera:
cd /usr/ports/shells/bash && make install clean