Integrar un equipo Linux a Active Directory


El propósito del siguiente es integrar un equipo Linux con Active Directory, para realizar esto debemos cumplir con los siguientes requerimientos:

1- Se debe tener instalado correctamente Active Directory.
2- En el equipo Linux debe de tener instalado el demonio Samba (mas actual).
3- Se debe contar con conexión a Internet, si para llegar a la nube primero se debe pasar
por un Firewall, verificar que este no bloquee el puerto 123 de NTP.

La configuración con la que contamos es la siguiente:
Obviamente debe de existir comunicación entre el Windows y Linux, el A.D debe resolverle al
Linux las zonas del DNS.

Ahora descargamos los siguientes paquetes, con:

#apt-get install samba smbclient winbind krb5-user krb5-config

Luego nos ubicamos en /etc/hosts y agregamos esto:

127.0.1.1 ad.prueba.local ad
192.168.159.130 linux.prueba.local linux

Ojo, agregamos estas líneas pues me sirvieron, recordemos que prueba.local es el dominio y
que la dirección IP 192.168.159.131 es la dirección IP del equipo que tiene instalado Active
Directory.

[libdefaults]
default_realm = PRUEBA.LOCAL
clockskew = 300

[realms]
PRUEBA.LOCAL = {
kdc = 192.168.159.131
default_domain = prueba.local
admin_server = 192.168.159.131
}
prueba.local = {
kdc = 192.168.159.131
default_domain = prueba.local
admin_server = 192.168.159.131
}
prueba = {
kdc = 192.168.159.131
default_domain = prueba
admin_server = 192.168.159.131
}

[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON

[domain realm]
.prueba = prueba
.prueba.local = PRUEBA.LOCAL

[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
retain_after_close = false
minimum_uid = 0
try_first_pass = true
}
Ahora creamos un ticket de Kerberos, ejecutando lo siguiente, acá nos pedirá la contraseña del
administrador del dominio:

#Kinit Administrador@prueba.local

Ahora sigue Samba, otra vez recomiendo, hacer el backup del archivo original, luego borramos
el contenido del archivo smb.conf y agregamos estas líneas:

[global]
security = ADS
netbios name = debian
realm = PRUEBA.LOCAL
password server = ad.prueba.local
workgroup = PRUEBA
log level = 1
syslog = 0
idmap uid = 10000-29999
idmap gid = 10000-29999
winbind separator = *
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
domain master = no
server string = linux como cliente de AD
encrypt passwords = yes

##compartir el home del usuario solo para él cuando se encuentre en
otro equipo de la red

[homes]
comment = Home Directories
valid users = %S
browseable = No
read only = No
inherit acls = Yes

[profiles]
comment = Network Profiles Service
path = %H
read only = No
store dos attributes = Yes
create mask = 0600
directory mask = 0700

##compartir una carpeta para todos los usuarios
[users]
comment = All users
path = /home/samba/
read only = No
inherit acls = Yes
veto files = /aquota.user/groups/shares/

##compartir carpeta solo para el usuario
[PEPE]
comment = Prueba con usuario del dominio PEPE
inherit acls = Yes
path = /home/pepe/
read only = No
available = Yes
browseable = Yes
valid users = prueba*pepe

¡Creo que no hay que explicar nada de cómo se comparte archivos con Samba… y las opciones
nuevas no es si no leerlas son fáciles de comprender!.

Después se reinicia Samba y se ejecuta el comando testparm, el cual no da un resumen de la
configuración de Samba y el rol que este cumple (PDC, Grupo de trabajo, miembro de dominio
etc.)

#/etc/init.d/samba restart && testparm

Ahora agregamos el Linux al dominio, con:

#net ads join -S ad.pruebas.local -U administrador

Nos apareció esto cierto!! Fallamos.

Administrador's password:
[2009/05/31 16:58:33, 0]
libsmb/cliconnect.c:cli_session_setup_spnego(785)
Kinit failed: Clock skew too great
Failed to join domain!

Lo que pasa es que Kerberos es muy exigente con la hora lo cal de nuestro Linux si no nos
apareció esto no hay por qué preocuparse, para arreglar esto digitamos.

#ntpdate pool.ntp.org

Esta línea significa que para poder gestionar la fecha y hora en el servidor de manera correcta
con respecto a los servidores de hora en Internet, debemos de tener instalado el demonio
NTP.

Después de hacer esto nos debería unir el Linux al dominio, y si no es porque algo fallo en la
configuración de Kerberos.

Para poder resolver nombres de usuarios y grupos del dominio editamos “/etc/nsswitch.conf”,
nos debe de quedar igual a esto:

passwd: files winbind
group: files winbind
shadow: files winbind
hosts: files dns winbind

Con estas líneas los usuarios y los grupos pueden ser resueltos.
Reiniciamos Winbind.

#/etc/init.d/winbind restart

Para ver si nuestro Linux está bien integrado al dominio, escribimos.

#net rpc testjoin
---------
Join to 'PRUEBA' is OK

Ahora par ver información del dominio.

#net ads info
-----------
LDAP server: 192.168.159.131
LDAP server name: ad.prueba.local
Realm: PRUEBA.LOCAL
Bind Path: dc=PRUEBA,dc=LOCAL
LDAP port: 389
Server time: dom, 5 may 2009 16:59:04 MDT
KDC server: 192.168.1.254
Server time offset: 11

Ahora si queremos ver las características del usuario como grupo a que pertenece, SID,
Dominio a que pertenece etc.

#net rpc info -U Administrador
-----------
Password:
Domain Name: PRUEBAS
Domain SID: S-1-5-21-4-405764553-56874023-5698031759
Sequence number: 96
Num users: 10
Num domain groups: 9
Num local groups: 21

¡Obviamente no nos tiene que aparecer estos mismos resultados!
Para verificar que el demonio Winbind esté funcionando correctamente digitamos.

#wbinfo -u" Lista usuarios del dominio.
#wbinfo -g" Lista grupos del dominio.
#getent passwd" Muestra usuarios locales y del dominio.
#getent group" Muestra grupos locales y del dominio.

Si todo esto está funcionando estamos por buen camino.
Aun mejor si queremos que los usuarios de Active Directory, se logueen en la maquina Linux,
no es si modificar el PAM, ¡ojo si no se configura bien no podremos ingresar al Linux!,
acuérdense del Mandriva Directory Server…… Lo que haremos es lo siguiente comentamos las
líneas que no lo están en los siguientes archivos.

1- Editamos /etc/pam.d/common-account

Account sufficient pam_winbind.so
account required pam_unix.so try_first_pass

2- Editamos /etc/pam.d/common-auth

auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure try_first_pass

3- Editamos /etc/pam.d/common-password

password sufficient pam_winbind.so
password required pam_unix.so nullok obscure min=4 max=8 md5try_first_pass

4- Editamos /etc/pam.d/common-session

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so try_first_pass

El modulo pam_winbind.so le indica a PAM que obtenga los usuarios y grupos de Winbind. Y
el modulo pam_mkhomedir.so nos crea el directorio home del usuario en caso de no existir.

Creamos el directorio /home/PRUEBA (En mayúscula y recuerden este se crea con el nombre NetBIOS del dominio), acá se alojaran el home de los usuarios.

Ahora las pruebas!
Recordemos que habíamos creado una sesión en Samba que decía:

[PEPE]
comment = Prueba con usuario del dominio PEPE
inherit acls = Yes
path = /home/pepe/
read only = No
available = Yes
browseable = Yes
valid users = prueba*pepe

1-Entonces debe existir este directorio /home/pepe/ y /home/samba/
2-En el Active Directory debe existir el usuario pepe.
3-Ahora nos logueamos con pepe en la maquina Linux, nos saldrá algo como esto:
1- Desmontamos las unidades de los clientes Windows con el siguiente comando desde CMD.
2- Accedemos al recurso compartido por este usuario (pepe), digitando en ejecutar o en el
Explorador de Windows \\linux o \\192.168.159.130.
3- Como vemos solo podemos ingresar al directorio del usuario.

Si tratamos de ingresar a otro directorio de otro usuario saldrá una ventana de login.

Virtual Host en LigHTTPD


Se configurará LigHTTPD, con soporte para albergar varios sitios Webs, ya sea por IP, nombre o puerto.

1- Se procede a la descarga del software necesario.
#apt-get install lighttpd

2- Editamos el archivo principal de LigHTTPD, y al final agregamos.
#vim /etc/lighttpd/lighttpd.conf

3- Host Virtual por puerto:
$SERVER["socket"] == ":44" {
server.document-root = "/var/www/web1"
}

En /var/www/web1, es en donde se encuentra el index.html, que cargara este sitio.
4- Host Virtual por Encabezado.
$HTTP["host"] == "www.home.local" {
server.document-root = "/var/www/web2/"
}

$HTTP["host"] == "prueba.home.local" {
server.document-root = "/var/www/web3/"
}

5- Directorio Virtual.
$HTTP["host"] == "www.home.local" {
alias.url = ("/directorio_virtual" => "/var/www/directorio_virtual")
}

Nota:
Recordemos que debemos tener un Server DNS, el cual nos resuelve los nombres FQND, de los sitios.

Apache + Autenticación


En este se mostrara como acceder a un sitio Web cargado por Apache utilizando autenticación basica (No se cifra las credenciales).

1- Software necesario:

#aptitude install apache2 apache2-utils


2- Cramos un directorio en la ruta /etc/apache2/, lo llamamos autenticacion.

#mkdir /etc/apache2/autenticacion


3- Dentro del nuevo directorio creamos un archivo, llamado usuarios.

#touch /etc/apache2/autenticacion/usuario

4- Creamos los usuarios.

#htpasswd -d /etc/apache2/autenticacion/usuario pepe
----------
New password:******
Re-type new password:******
Adding password for user pepe

5- Editamos el host virtual pero primero realizamos Backup de este archivo, agregamos al final del archivo las siguientes lineas, tambien verificamos que la linea DocumentRoot /var/www encontrada al principio del archivo apunte al directorio en donde tenemos nuestro sitio, en este caso seria: DocumentRoot /var/www/sitio1/

#vim /etc/apache2/sites-available/default
----------


Instalar CA + Apache2


En este mini howto, se instalara una entidad certificadora, con el fin de configurar un sitio SSL en Apache2.

1- Software necesario.

#apt-get install apache2 openssl ssl-cert


2- Nos hubicamos en un directorio opcional, en este ejemplo se utilizara /OPT y ejecutamos este Script.

#cd /opt
---------
#/usr/lib/ssl/misc/CA.pl -newca

3- Se solicitaran algunos datos.

Enter PEM pass phrase:****
Verifying - Enter PEM pass phrase:****
---------
Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Antioquia
Locality Name (eg, city) []:Medellin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Prueba S.A
Organizational Unit Name (eg, section) []:Sistemas
Common Name (eg, YOUR name) []:Admin
Email Address []:admin@prueba.net
---------
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:[ ENTER ]
---------
Enter pass phrase for ./demoCA/private/cakey.pem:**** (Repetimos la contraseña)


No nos debe salir ningun error.

4- Editamos el archivo de configuracion de OpenSSL, hubicamos esta linea y especificamos la ruta en donde se creo la CA, el resto lo dejamos como esta.

#vim /etc/ssl/openssl.cnf
--------------------[ ]---------------------
dir = /opt/demoCA # Where everything is kept
--------------------[ ]---------------------


5- Creamos el directorio en donde guardaremos los certificados para el sitio Web.

#mkdir /etc/apache2/ssl

6- Realizamos la peticion del certificado para el sitio, se nos solicitara algunos datos.

#openssl req -newkey rsa:1024 -out req.paginaweb.pem
---------
Enter PEM pass phrase:****
Verifying - Enter PEM pass phrase:****
---------
Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Antioquia
Locality Name (eg, city) []:Medellin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Prueba S.A
Organizational Unit Name (eg, section) []:Sistemas
Common Name (eg, YOUR name) []:Administrator (El
cer, en CN debe ser diferente)
Email Address []:admin@prueba.net
---------
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: [ ENTER ]
An optional company name []: [ ENTER ]


Al momento de listar veremos:

#ls
privkey.pem req.paginaweb.pem


En donde privkey.pem es la llave privada y req.paginaweb.pem es el requerimiento para el certificado.

7- Ahora la CA firmará el requerimiento que hicimos, para esto dijitamos:

#openssl ca -in req.paginaweb.pem -out cert.paginaweb.pem
---------
Enter pass phrase for /opt/demoCA/private/cakey.pem:**** (Repetimos la contraseña, del punto 3)
---------
Certificate is to be certified until Dec 12 18:39:42 2010 GMT (365 days)
Sign the certificate? [y/n]: y
---------
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


8- Editamos el sitio Web, nos dirigimos a:

#cd /etc/apache2/sites-available/


Realizamos copia del sitio por defecto

#cp default-ssl Sitio_seguro

Y editamos

#vim Sitio_seguro

Verificamos estas lineas:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/cert.paginaweb.pem (Llave publica)
SSLCertificateKeyFile /etc/apache2/ssl/privkey.pem (Llave privada)


9- Habilitamos este sitio con:

#a2ensite Sitio_seguro

Tambien habilitamos el modulo Rewrite con:

#a2enmod rewrite

Y por ultimo el modulo SSL.

#a2enmod ssl

10- Editamos el archivo Ports, agregando Listen 443, debe quedar asi:

#vim /etc/apache2/ports.conf
---------
Listen 80
Listen 443


11- Reiniciamos el servicio Web, se nos solicitara la contraseña del certificado.

#/etc/init.d/apache2 restart
---------
Server 127.0.1.1:443 (RSA)
Enter pass phrase:**** (Repetimos la contraseña, del punto 6)
---------
OK: Pass Phrase Dialog successful.

12- Accedemos al sitio.

Se ha realizado localmente https://192.168.1.64

Si queremos que las peticiones HTTP, se redireccionen a HTTPS, agregamos en nuestro VirtualHost:
---------

LigHTTPD + WebDAV


En este mini manual, mostrare como configurar un Server Lighttpd, con soporte WebDAV en Debian Lenny.

1- Instalamos el software necesario.

#aptitude install lighttpd lighttpd-mod-webdav apache2-utils

2- Nos aseguramos que el propietario de
/var/run/lighttpd/, sea www-data:www-data, ya que aqui es donde se aloja la base de datos SQLite de WebDAV.

#chown www-data:www-data /var/run/lighttpd/


3- Habilitamos los siguientes modulos.

#lighty-enable-mod auth
#lighty-enable-mod webdav

4- Reiniciamos el servicio.

#/etc/init.d/lighttpd force-reload


5- Creamos los directorios en donde se alojaran los sitios, y lo vinculamos al siguiente grupo.

#mkdir /var/www/web
#chown www-data:www-data /var/www/web


6- Creamos un usuario, este accedera al sitio que publicamos, dijitamos la contraseña, y vinculamos este archivo al siguiente grupo.

#htpasswd -c /var/www/web/passwd.dav pepe
#chown www-data:www-data /var/www/web/passwd.dav


7- Editamos el archivo de configuracion de Lighttpd.

#vim /etc/lighttpd/lighttpd.conf

8- Agregamos lo siguente:

$HTTP["host"] == "192.168.1.36" {
server.document-root = "/var/www/web"
alias.url = ( "/webdav" => "/var/www/web" )
$HTTP["url"] =~ "^/webdav($|/)" {
webdav.activate = "enable"
webdav.is-readonly = "disable"
webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/var/www/web/passwd.dav"
auth.require = ( "" => ( "method" => "basic",
"realm" => "webdav",
"require" => "valid-user" ) )
}
}


9- Reiniciamos el servicio Web.

#/etc/init.d/lighttpd restart


10- Descargamos el software CADAVER para realizar pruebas.

#aptitude install cadaver

11- Realizamos las pruebas.

#cadaver http://192.168.1.36/webdav/

El resultado debe ser:

#cadaver http://192.168.1.36/webdav
Autenticación requerida para webdav en el servidor '192.168.1.36':
Nombre de usuario: pepe
Contraseña:
dav:/webdav/>quit
Conexión con '192.168.1.36' cerrada.


Como Accedemos?, Nautilus cuenta con cliente WebDAV, en este ejemplo lo utilizaremos.
Lugares - Conectar con el Servidor - WebDAV (HTTP).

Nos solicitara la contraseña (Punto 6).
Este seria el directorio en que alojamos el sitio Web.
Nota: Si queremos que el archivo de contraseñas no se visualice lo creamos en otro sitio, o lo ocultamos con un (.), y lo especificamos en /etc/lighttpd/lighttpd.conf

Editamos nuestro Index.
Y al acceder a nuestra pagina Web, mediante un navegador.

Sacado de: www.howtoforge.net
 
|  Esdebian Foro El que sabe sabe, no como el que quiere aprender!