sábado, 29 de agosto de 2009

Centos 5 Samba PDC con LDAP

Hola, aqui de nuevo, hace tiempo que no agrego nada, esta vez tengo un bonche de cosas que escribir, ya que si no lo hacemos se nos olvida y creo que todo lo que a continuacion voy a redactar les va a servir a muchos administradores de dominios como yo.

Si no estamos amarrados del Active Directory entonces Samba es la opcion a seguir por muchos factores tanto de costo como seguridad, que no voy a entrar en detalles ya una buscada al respecto y se encontraran con muchos sitios que habla del tema.

Me vi en la tarea de implementar un PDC con Samba teniendo como bd a Ldap, con estas dos herramientas y otras mas que por ahi luefo se las digo, vamos a crear un dominio tipo NT4 para nuestra red pero con Linux.

Ya no tenemos la necesidad de tener que adquirir las costosas licencias tanto del OS como del antivirus que tienes que comprar de rigor, no hay de otra. Como mencione arriba, si no estamos atados a Active Directory, este es el camino.

Me llevo algo de tiempo comprender como crear esta configuracion, y hacerla funcionar, pero al final valio la pena. Despues de varios dias leyendo, configurando, resinstalando el OS de nuevo por fin ya puedo plasmar los pasos, uno a uno para no perderme y la proxima vez solo venir a este espacio y hacerlo ya casi de copy-paste.

El server con el que estoy trabajando es un Dell PowerVault 745N y tiene estas caracteristicas:

P4 2.8Ghz
1.5GB RAM
140GB Disco Duro.

El problema que le encontre, es que no vi la manera de como adaptarle un lector de DC/DVD, por mas que le busque, estos amigos de Dell si que nos hacen la vida difcil, no se como demonios le meterian el Windows 2k3 que tiene un sticker del COA.

Ademas otro detalle es que tampoco vi la manera de como deshabilitar la tarjeta externa Raid, ya que tiene 2 entradas para Sata en la placa madre, pero ninguna me detecto los discos, ademas segun el manual o conectas los discos en la placa madre o usas los de la tarjeta controladora, que al final me tuve que conformar con la tarjeta controladora, me hubiera gustado usar los discos conectados a la placa madre para implementar un raid mirror por software y no depender de una tarjeta externa.

Leyendo unos articulos la respecto, ya las velocidades de los Raid por software y los Raid por Hardware casi se andan codeando, asi que yo prefiero los primeros, aunque ahi veces que no tienes opcion, como yo.

Voy a usar Centos 5.2 ya que baje el Centos 5.3 pero como que en esos momentos que lo baje algo paso que nunca lo logre instalar, me marco muchos errores, creo que seria la distro, ya que vi varios posts de otros usuarios con problemas con esta version.

No importa, de ahi nos vamos a brincar a la 5.3 para tener todo a el dia, es recomendable actualizar su distro minimo 1 vez a la semana, asi lo hago yo.

Como les dije, como no tengo manera de meter el DVD directamente a el server, me vi en la necesidad de implementar un servidor de boteo, al final no estan dificil hacerlo, para ello levante otro servidor con Centos 5.3 virtualizado, para ello use Vmware 2.0.1, todo lo que tiene que ver con virtualizar lo admiro, ya no tenemos que andar metiendole mano a la PC para poder instalar algun OS de prueba, unos cuantos clicks con el raton y listo.

Configurando a PXE

Como utilizo pfsense(pfsense.org) como fw, este gran OS trae un dhcp server, ahi mismo viene una opcion para levantar un servidor de boteo, ahi solo le digo quien tiene los archivos de arranque y listo, aqui les pongo la imagen para su mayor compresion:


Si ven al imagen, solo le damos 2 parametros:

1; Enter the IP address from the network boot server: IP del servidor que tiene los archivos de arranque.

2; Enter the filename used for network booting, la ruta de los archivos de arranque de ese servidor.

Con eso tenemos, salvamos y como podran darse cuenta ya inicie la implementacion, asi que vivos.

Nos vamos del lado de nuestro servidor de boteo, o sea el Centos, ahi necesitamos tener instalado ciertos paquetes, vamos a ver, dejenme nomas que prenta la maquina virtual para ver esta informacion.

Se supone que el programa que tenemos que utilizar es tftp y ademas el xinetd, las versiones que estamos usando son:

xinetd.i386 2:2.3.14-10.el5
tftp-server.i386 0.42-3.1.el5.centos

Pero vamos aclarando ciertos detalles que no funcionaron como deberia, segun xinetd, los archivos de configuracion estan en /etc, ahi dentro tenemos 2 entradas referentes a el, esta:

/etc/xinetd.conf Archivo Ascii
/etc/xinetd.d Directorio

Los servicios estan dentro del directorio, ahi tenemos todos estos:

-rw-r--r-- 1 root root 1157 Mar 14 2007 chargen-dgram
-rw-r--r-- 1 root root 1159 Mar 14 2007 chargen-stream
-rw-r--r-- 1 root root 1157 Mar 14 2007 daytime-dgram
-rw-r--r-- 1 root root 1159 Mar 14 2007 daytime-stream
-rw-r--r-- 1 root root 1157 Mar 14 2007 discard-dgram
-rw-r--r-- 1 root root 1159 Mar 14 2007 discard-stream
-rw-r--r-- 1 root root 1148 Mar 14 2007 echo-dgram
-rw-r--r-- 1 root root 1150 Mar 14 2007 echo-stream
-rw-r--r-- 1 root root 323 Sep 9 2004 eklogin
-rw-r--r-- 1 root root 347 Sep 6 2005 ekrb5-telnet
-rw-r--r-- 1 root root 326 Sep 9 2004 gssftp
-rw-r--r-- 1 root root 310 Sep 9 2004 klogin
-rw-r--r-- 1 root root 323 Sep 9 2004 krb5-telnet
-rw-r--r-- 1 root root 308 Sep 9 2004 kshell
-rw-r--r-- 1 root root 338 May 10 13:24 rsync
-rw-r--r-- 1 root root 1212 Mar 14 2007 tcpmux-server
-rw-r--r-- 1 root root 507 Aug 1 14:52 tftp
-rw-r--r-- 1 root root 1149 Mar 14 2007 time-dgram
-rw-r--r-- 1 root root 1150 Mar 14 2007 time-stream

Yo solo necesito el tftp, lo abrimos y tenemos esto:

service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}

Voy a aclarar, que por mas que estuve analizando esto nunca logre hacer que funcionara, ya no voy a intentarlo, por que ya de por si me hizo perder mucho tiempo, hasta que me di por vencido, mas adelante regreso aqui.

Bien pero, tftp tiene la opcion de ejecutarse manualmente que es como me funciono, para ello hice lo siguiente:

En mi "/" hice un nuevo directorio llamado tftpboot...

[root@vmmachine /]#mkdir /tftpboot

Le otorgo todos los permisos posibles:

[root@vmmachine /]# chmod 777 tftpboot/

Para ejecutarlo manualmente fue:

[root@vmmachine tftpboot]#in.tftpd -l -a 192.168.50.200:69 -u nobody /tftpboot

El ejecutable esta en: /usr/sbin/

Comprobamos que el puerto este abrierto:

[root@vmmachine tftpboot]# netstat -na | grep 69
udp 0 0 192.168.50.200:69 0.0.0.0:*

Ahi esta el puerto abierto, nos vamos a un equipo con algun cliente tftp, en linux no encontre alguno, si alguien sabe de alguno me lo dice, asi que me fui a windows y ese si trae uno, quien lo viera no?

Probando:

tftp 192.168.50.200 get test.txt
Error on server : Only absolute filenames allowed22.el5.centos.2

Un error, parece que desea toda la ruta del archivo:

C:\Documents and Settings\zorrita\My Documents>tftp 192.168.50.200 get /tftpboot
/test.txt
Transfer successful: 0 bytes in 1 second, 0 bytes/s

Ahi esta funcionando, si les marca un error de acceso denegado, deben irse a "My Documents" ya que por default el "cmd" los coloca en la ruta del usuario por ello les marca ese error.

Una vez hecho, me fui a el manual de Centos donde dice como configurar el servidor PXE, una buscada mas y logre tener estos 2 tutoriales:

http://wiki.centos.org/HowTos/PXE/PXE_Setup
http://www.linux-sxs.org/internet_serving/pxeboot.html

Segun aqui tenemos que tener instalado a xinetd y ademas a syslinux que la version que tengo es:

syslinux.i386 3.82-1.el5.rf

El manual dice que los archivos estan en:

/usr/lib/syslinux

Pero no, en realida estan en:

/usr/share/syslinux/memdisk

Esto por que me puse a buscarlos, en fin luego le escribimos o a lo mejor ya lo hicieron, vamos a seguir. Aqui la instalacion se va hacer atraves de un servidor http, asi que tambien instalamos apache, la version que estoy manejando es:

httpd.i386 2.2.3-22.el5.centos.2

Lo configuran para que corra solo en su red, el manual habla de varios pasos que no vamos a hacer ya que solo vamos a manejar una version de Centos, asi que yo al final solo necesite de copiar este archivo de syslinux:

-rwxrwxrwx 1 root root 16138 Aug 1 13:30 pxelinux.0

Pero tuve que crear el folder:

mkdir /tftpboot/pxelinux.cfg

Ahi dentro hice un archivo de texto llamado: "default" y su contenido es:

prompt 1
default linux
timeout 100

label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=9216 noapic acpi=off

Asi que ahora necesitamos 2 archivos mas:

initrd.img
vmlinuz

Estos los vamos a localizar en el dvd de instalacion, como es una maquina virtual, pues vamos a tener que montar el DVD para sacar esos archivos.

Ya con el DVD a nuestro alcance, vamos a sacar esos archivos los cuales estan en la ruta:

images/pxeboot

Ahora si tenemos que tener los siguientes archivos para que nuestro cliente pueda botear Centos desde la red.

-rwxrwxrwx 1 root root 5669675 Aug 1 13:28 initrd.img
-rwxrwxrwx 1 root root 16138 Aug 1 13:30 pxelinux.0
drwxrwxrwx 2 root root 4096 Aug 30 23:26 pxelinux.cfg
-rwxrwxrwx 1 root root 1806388 Aug 1 13:28 vmlinuz

Mas vale cambiarle el permiso de nuevo a todo el directorio:

[root@vmmachine tftpboot]# chmod -R 777 /tftpboot/

Ya esta listo nuestro servidor de boteo, ahora sigue hechar a volar a apache para que sirva nuestra distro via http, otra cosa interesante de esto, es que no tengo necesidad de copear todo el dvd a nuestro servidor, yo solo lo monto, creo un Alias a el directorio donde monte el DVD y listo, que bonito no...?

Alias /linux /mnt

Options Indexes
AllowOverride None


Creamos el enlace simbolico:

ln -s /mnt/ /var/www/html/

Reiniciamos a apache y listo.

Se van a su navegador y al entrar a: "http://192.168.50.200/linux/", les debe mostrar el contenido del DVD que tenemos montado en /mnt.

Sigamos, ahora ya tenemos listo el servidor, este servidor automaticamente cuando detecta que se tiene ningun SO instalado, va en busca de un servidor de boteo, aunque tiene 2 NIC's, solo una de ellas esta habilitada para esta funcion, la otra no puede botear por red.

Una vez que arranca y botea Centos, nos pide saber cual NIC vamos a usar, por default de las 2 tome la primera, deshabilitamos el IPv6 y usamos nuestro DHCP entregado por Pfsense para darnos una IP.

Despues nos pregunta que como vamos a instalar Centos, ahi le decimos que via http, nos pide el nombre del servidor http aqui le ponemos el IP del apache, y abajo la ruta que es en mi caso linux. por que asi lo configure.

Arriba explique esto, bien una vez que nuestro equipo da con los archivos necesarios para empezar la instalacion, ya lo que sigue ya se lo saben, no voy a entrar en detalles de como se instala Centos, de eso ya hay mucho. Lo unico que si les voy a aclarar es que no instalo nada referente a el X, no ventanas en mis servidores, no hay necesidad de instalarlas para mi.

Una vez que termina y entramos a la consola es hora de actualizar todo el OS, lo hacen y reinician.

Yo en lo personal, cuando estoy haciendo instalaciones de samba, claro que no uso nada referente a firewalls, selinux, y muchos servicios que no es necesario ejecutar para que samba funcione, por ello siempre apago esos servicios:

chkconfig iptables off
chkconfig ip6tables off
chkconfig avahi-daemon off
chkconfig avahi-dnsconfd off
chkconfig netfs off
chkconfig pcscd off
chkconfig portmap off

selinux disable esto se hace al iniciar o bien pueden hacerlo directamente del archivo de configuracion de selinux /etc/selinux/config

SELINUX=disabled
SELINUXTYPE=targeted
SETLOCALDEFS=0

Una ves hecho esto, volvemos a reiniciar el servidor ya que selinux no aplica los cambios hasta que reiniciemos el servidor, metanse a el folder donde se almancena todos los scripts de arranque /etc/init.d, y lean que hace cada uno de ellos, la mera verdad hay muchos que nunca les visto razon de tenerlos ejecutandose aun, por ellos los apago, prefiero darle ese pequeño tiempo de cpu a las aplicaciones que en realidad deben ejecutarse.

Ya que regresamos, ahora si vamos a empezar a trabajar con samba y ldap.

Configurando OpenLDAP.

Nuestro dominio se va a llamar: klabacita.

Necesitamos instalar el openldap server y cliente, asi que nos vamos con el yum:

yum install openldap-servers openldap-clients

Ahora nos vamos a el folder de la configuracion

cd /etc/openldap

respaldamos slapd.conf y ldap.conf por si llegaramos a necesitarlos frescos.

cp slapd.conf slapd.conf.ori
cp ldap.conf ldap.conf.ori

Vamos a crear un folder donde vamos a almacenar la base de datos de nuestro dominio, ldap tiene un folder en la ruta /var/lib/ldap, ahi dentro vamos a crear el folder

cd /var/lib/ldap
mkdir klabacita

Copeamos el archivo DB_CONFIG.example en este folder pero ya sin la extension

cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/klabacita/DB_CONFIG

Ahora necesitamos cambiar los permisos de ese folder hacia el usuario ldap y el mismo grupo

chown -R ldap:ldap /var/lib/ldap/

Ahora necesitamos instalar a samba y sus amigos, aqui necesitamos hacerlo por que ldap necesita un archivo que samba proporciona cuando los instalamos.

yum install samba samba-common

El archivo esta en

/usr/share/doc/samba-3.0.33/LDAP

Se llama samba.schema y este archvo se lo tenemos que dar a ldap

cp /usr/share/doc/samba-3.0.33/LDAP/samba.schema /etc/openldap/schema

Ahora necesitamos sacar el password de nuestro ldap

slappasswd
New password:
Re-enter new password:
{SSHA}bvy+Zsifm39+sWmxHwzu1j8s+VBP32m1

Por razones obvias el programa no refleja la palabra que usamos como password, pero ustedes deben de recordarla, por la vamos a usar varias veces.

Ese campo de texto se lo tenemos que dar a el archivo slapd.conf

Ahora si, nos vamos a editar el archivo slapd.conf y vamos a dejarlo como sigue, si ustedes quieren ponerle a el dominio otro nombre adelante.

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/samba.schema

# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

access to attrs=userPassword,sambaLMPassword,sambaNTPassword,shadowLastChange
by self write
by anonymous auth
by * none
access to *
by * read
#######################################################################
# ldbm and/or bdb database definitions
#######################################################################

database bdb
suffix "dc=klabacita,dc=local"
rootdn "cn=Manager,dc=klabacita,dc=local"
cachesize 100000
dbcachesize 1000000
#lastmod on

rootpw {SSHA}bvy+Zsifm39+sWmxHwzu1j8s+VBP32m1
# rootpw {crypt}ijFYNcSNctBYg

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/ldap/rmai
index objectClass eq
index cn pres,sub,eq
index sn pres,sub,eq
index uid pres,sub,eq
index displayName pres,sub,eq
index uidNumber eq
index gidNumber eq
index memberUID eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub

loglevel 256

Ahora nos vamos por el archivo /etc/openldap/ldap.conf, este es mas sencillo:

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE dc=klabacita,dc=local
URI ldap://127.0.0.1/
#HOST 127.0.0.1

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
TLS_CACERTDIR /etc/openldap/cacerts

Les voy a recomendar algo, vuelvan a aplicar los permisos a el folder de la bd

chown -R ldap:ldap /var/lib/ldap

Ahora si iniciamos el servicio ldap

service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]

Lo apagamos ya que vamos a crear la estructura del dominio...

service ldap stop

Creamos un archivo como esta, recuerden cambiar su nombre de domonio por el suyo:

dn: dc=klabacita,dc=local
objectClass: dcObject
objectClass: organizationalUnit
dc: klabacita
ou: Klabacita

dn: cn=Manager,dc=klabacita,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: Manager
description: LDAP administrator
userPassword:{SSHA}Ik6PFUBPqcQYA+YJeU48oUnCAehvepP+

dn: ou=Users,dc=klabacita,dc=local
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=klabacita,dc=local
objectClass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=klabacita,dc=local
objectClass: organizationalUnit
ou: Computers

dn: ou=Idmap,dc=klabacita,dc=local
objectClass: organizationalUnit
ou: Idmap

Yo guardo este archivo en /etc/openldap/ y le llame klabacita.ldif, les recuerdo que el parametro userPassword debe ser igual que el que ingresaron en el archivo slapd.conf.

Ahora vamos a ejecutar este comando para encviar esta estrucutra a ldap:

slapadd -v -l /etc/openldap/klabacita.ldif
added: "dc=klabacita,dc=local" (00000001)
added: "cn=Manager,dc=klabacita,dc=local" (00000002)
added: "ou=Users,dc=klabacita,dc=local" (00000003)
added: "ou=Groups,dc=klabacita,dc=local" (00000004)
added: "ou=Computers,dc=klabacita,dc=local" (00000005)
added: "ou=Idmap,dc=klabacita,dc=local" (00000006)

Este comando le cambia los permisos a el folder de la base de datos, asi que vuelvan a cambiar los permisos, ya vieron como...

Y de nuevo ejecuten el servicio del ldap:

service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]

Todo bien,