Samba como Controlador de Dominio (PDC) en Slackware. Introduccion a Samba. Samba es uno de los proyectos mas grandes en el mundo Unix/Linux ya que ofrece interconectividad entre sistemas Microsoft Windows y Unix/Linux, el lema de el projecto Samba es "Opening Windows to a Wider World!" y una de sus metas es eliminar las barreras a la interoperatibilidad. Samba ofrece servicios de archivos e impresion para clientes Windows, utilizando los protocolos de CIFS/SMB, con samba podemos hacer actuar a un equpo linux como un servidor de archvos anonimo, restringido por usaurios, grupos u otros criterios, podemos hacer un simple servidor de impresion, hasta uno mas avanzado teniendo la oportunidad de integrarlo con CUPS para tener un mejor control de las impresiones, tambien pude actuar como un servidor controlador de dominio primario y secundario ( PDC y BDC) en este documento nos enfocaremos a convertir nuestro servidor en un Servidor Primario Controlador de Dominio (al estilo de MS Windows NT4), para asi gestionar el acceso de usuarios a la red, el acceso a los recursos, ejecutar scripts al arranque de los clientes para hacer mapeos de unidades de red, configurar la hora de el cliente windows, etc, tambien podremos hacer el uso de los llamados "perfiles moviles" (Roaming Profiles). Este mismo servidor sera el Master Browser y el servidor primario WINS necesarios para trabajar como PDC, la integracion con la red Windows sera con clientes win98 y Windows NT/2000/XP-Pro los ultimos se integran completamente con el servidor Controlador de dominio, para los clientes win98 es algo diferente. Verificacion de requerimientos. Antes de iniciar verificaremos que tengamos los paquetes necesarios para poder trabajar con samba, en este caso lo haremos especifico para nuestra distribucion favorita: Slackware Linux. para esto podemos ejecutar esto: $ ls /var/log/packages | grep samba samba-3.0.10-i486-1 Y como vemos tenemos el paquete samba version 3.0.10 que es la ultima version para Slackware 10.1, este paquete ya contiene todo lo necesario para trabajar. Si no aparece nada entonces tienes que instalarlo desde tus CDs, se encuentran en el diskset "n" de tus discos o si usas swaret puedes hacer esto para conseguir instalarlo: # swaret --install samba Una vez que lo tengas intalado seguiremos con la siguiente seccion. Introduccion a la configuracion de Samba. La configuracion de Samba esta almacenada en el archivo smb.conf que en nuestro caso debe de estar en /etc/samba/ # cd /etc/samba # pwd /etc/samba # ls private/ smb.conf-sample Como vemos no tenemos el archivo de configuracion, pero si existe el archivo smb.conf-sample que es un archivo de configuracion de samba de ejemplo, el cual si le das un vistaso te encontraras que ya viene con algunas configuraciones por defecto y todo esta muy bien documentado (pero en Inglés), en este caso iniciaremos con un archivo de configuracion nuevo (vacio) para ir aprendiendo, pero puedes basarte en el smb.conf-sample para entender las opciones, y tambien puedes hacer uso de la pagina de manual de smb.conf (man smb.conf). El archivo de configuracion de Samba es un simple archivo en texto plano por lo tanto puede ser editado con tu editor de textos favorito, yo lo hare con vim :). El archivo de configuracion consiste de secciones y parametros, las secciones inician con el nombre de la seccion entre "corchetes []" y termina cuando la siguiente seccion inicia, las secciones contienen parametros en la forma de: nombre = valor El archivo de configuracion es basado en lineas, esto quiere decir que cada nueva linea puede ser una nueva seccion, un comentario o un parametro. Las secciones y parametros no son case-sensitive, osea que puede ser nombrada tanto en mayusculas y minusculas sin tener mayor relevancia, lo que si es importante es que para dar un valor a un parametro se tiene que usar el simbolo de igual "=", espacios al inicio o al final de la declaracion de un parametro o seccion son irrelevantes, sin embargo pueden haber parametros de mas de dos palabras. Cualquier linea que inicia con ";" o "#" se considera como un comentario y por lo tanto son descartados. Cualquier linea que termina con un "\" es la continuacion de una linea al estilo de UNIX. Los valores que siguen al signo "=" en un parametro son o una cadena "string" o un valor boleano, que puede ser yes/no, 0/1 o true/false. Cada seccion en el archivo de configuracion ( excepto la seccion [global]) describe un recurso compartido ( tambien conocido como "share") El nombre de la seccion es el nombre de el recurso compartido y los parametros de la seccion definen los atributos de dicha seccion. Hay unas secciones especiales, [global], [homes] y [printer], las cuales son consideradas de una manera especial diferente de los "shares" ordinarios. Una seccion ordinaria consiste de un directorio a el cual se da acceso mas los permisos que se permiten a un usuario o servicio. Las secciones pueden ser servicios de archivos compartidos o de impresoras. Los permisos de acceso a las secciones de shares estan definidos por acceso de usuario y contraseña, que pueden ser acceso anonimo (guest) en el cual no es requerida una contraseña para accesar dicho recurso, y en secciones que no son anomimas se requiere una contraseña para tener acceso al recurso, los permisos de acceso son definidos en primer plano por los permisos unix, ( ver http://www.tuxjm.net/docs/permisos.txt) Antes de empezar voy a pasar una lista de variables que pueden ser usadas en el smb.conf par mayor comodidad y mejor control. Por ejemplo la opcion "path = /tmp/%u" es interpretada como "path = /tmp/john" si el nombre de usaurio que se conecta el john. %U Nombre de usuario de sesion. %G El grupo primario de %U. %h El nombre del host (Internet name) en el cual samba esta corriendo. %m El nombre NetBIOS de la maquina cliente. %L El nombre NetBIOS de el servidor samba, esto permite cambiar la configuracion basado en el nombre por el cual el cliente llama al servidor, por lo cual el servidor puede tener doble personalidad basado en su nombre NetBIOS. %M El nombre del host (Internet name) de la maquina cliente. %d El identificador del proceso el el servidor samba. %a La architectura de la maquina cliente. Solo algunas son reconocidas y no son 100% confiables, actualmente reconoce Samba, Windows for Workgroups, Windows 95, Windows NT and Windows 2000. %I La direccion IP de la maquina cliente. %T La fecha y hora actual. %D Nombre de el dominio o grupo de el usaurio actual. %u Nombre de usaurio de el servicio actual. %g Grupo primario de %u. %H El directorio HOME de el usaurio %u. Estas son algunas de las variables que se pueden usar para controlar los recursos compartidos, claro hay mas que no se utilizaran regularmente. Bien entonces iniciaremos con un archivo de configuracion vacio y agregaremos esto: [global] workgroup = TUXJM [test] comment = Directorio compartido de prueba path = /usr/local/samba/tmp read only = no guest ok = yes Y despues ejecutaremos estos comandos, para crear el directorio que vamos a compartir. # mkdir -p /usr/local/samba/tmp # chmod 777 /usr/local/samba/tmp y vemos los permisos, que como quien dice es todos los permisos para todos (777) # ls -ld /usr/local/samba/tmp/ drwxrwxrwx 2 root root 48 2005-03-09 21:46 /usr/local/samba/tmp// Esta cofiguracion le decimos a samba que ofrezca el el directorio /usr/local/samba/tmp para compartir con el nombre de "test", tambien, samba sera parte de el grupo de trabajo "TUXJM" Con esta configuracion ya podremos levantar el servicio samba solo con propositos de prueba, pero primero les explicare que es y de que esta conformado el daemon samba. Samba consiste de tres daemons, Un Daemon en UNIX es una aplicacion que corre en el fondo y provee algun servicio. En el caso de Samba hay 3 daemons que dos de los cuales son necesarios, estos servicios son: nmbd: Este daemon maneja todos los registros y resoluciones de nombres. Es el primer vehiculo envuelto en la exploracion de la red. Maneja los protocolos basados en UDP, El daemon NMBD debe de ser el primer comando que inicie en el proceso de inicio de Samba. smbd: Este daemon maneja todas las con conexiones TCP/IP para las operaciones de comparticion de impresoras y archivos. Y tambien maneja la autenticacion local. Debe de ser iniciado inmediatamente despues del comando NMBD. winbindd: Este demonio debe de ser iniciado cuando Samba actua como un miembro de un dominio Windows NT o un dominio de Active Directory (ADS). Tambien es necesario cuando samba tiene "relaciones de confianza" (trust relationships en Inglés) con otros dominios, El daemon winbindd checara el archivo smb.conf por la presencia de los parametros idmap uid y idmap gid. Si estos parametros no son encontradas se negara a iniciar. Estos damenos pueden ser iniciados ejecutando los comandos manualmente desde la linea de comandos, pero lo cual no es tan comodo, para eso la mayoria de distribuciones Linux proveen algun script de inicio para Samba, en el caso de Slackware Linux, el script /etc/rc.d/rc.samba se encarga de de iniciar los servicios smbd y nmbd, el daemon winbindd no es ejecutado en este script ya que no es necesario para una configuracion basica, pero no te preocupes es facil agregar una linea a ese script para que inicie tambien el winbindd. Antes de iniciar samba probaremos que la sintaxis del archivo smb.conf se a correcta, esto lo haremos con el comando: # testparm /etc/samba/smb.conf Load smb config files from /etc/samba/smb.conf Processing section "[test]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] workgroup = TUXJM [test] comment = Directorio compartido de prueba path = /usr/local/samba/tmp read only = No guest ok = Yes Como vemos testparm reviso el archivo smb.conf y no reporto ningun parametro desconocido o algun error de sintaxis. Ahora que conocemos los elementos que conforman a Samba, creamos un archivo de prueba y verificamos que este correcto, podemos lanzar el servicio samba asi: # /etc/rc.d/rc.samba start Starting Samba: /usr/sbin/smbd -D /usr/sbin/nmbd -D Ahora probaremos que el servicio este activo y veremos que este escuchando peticiones de red. # ps aux | grep smbd root 23146 0.0 2.2 6592 2092 ? Ss 22:06 0:00 /usr/sbin/smbd -D root 23148 0.0 2.2 6592 2076 ? S 22:06 0:00 /usr/sbin/smbd -D # ps aux | grep nmbd root 23149 0.0 1.5 3564 1448 ? Ss 22:06 0:00 /usr/sbin/nmbd -D root 23172 0.0 0.6 1688 596 pts/0 R+ 22:09 0:00 grep nmbd Y ahora probamos con netstat: # netstat -plutn | grep smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 23146/smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 23146/smbd # netstat -plutn | grep nmbd udp 0 0 10.0.0.1:137 0.0.0.0:* 23149/nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 23149/nmbd udp 0 0 10.0.0.1:138 0.0.0.0:* 23149/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 23149/nmbd Si todo se muestra bien, significa que todo se ejecuto bien. Ahora intentaremos listar los recursos compartidos en este servidor, lo haremos localmente con el comando: # smbclient -L localhost Password: <<<<----- Solo dar Enter Anonymous login successful Domain=[TUXJM] OS=[Unix] Server=[Samba 3.0.10] Sharename Type Comment --------- ---- ------- test Disk Directorio compartido de prueba IPC$ IPC IPC Service (Samba 3.0.10) ADMI# smbclient //localhost/test Password: Anonymous login successful Domain=[TUXJM] OS=[Unix] Server=[Samba 3.0.10] smb: \> N$ IPC IPC Service (Samba 3.0.10) Anonymous login successful Domain=[TUXJM] OS=[Unix] Server=[Samba 3.0.10] Server Comment --------- ------- NS1 Samba 3.0.10 Workgroup Master --------- ------- TUXJM NS1 Y ahora nos conectaremos a dicho recurso (tambien localmente): # smbclient //localhost/test Password: Anonymous login successful Domain=[TUXJM] OS=[Unix] Server=[Samba 3.0.10] smb: \> Esto nos manda a un prompt que se usa similar a los comando ftp. Si quieres probar desde un host remoteo UNIX hacer asi: $ smbclient //ipserver-o-nombre/share por ejemplo: $ smbclient //10.0.0.1/test Password: Anonymous login successful Domain=[TUXJM] OS=[Unix] Server=[Samba 3.0.10] smb: \> Para probar desde un host windows, puedes hacerlo desde el entorno de red. LISTO, nuestro servidor samba funciona. Ahora ha llegado el momento de hacer varias pruebas compartiendo varios recursos de diferentes maneras, en este caso iniciaremos configurando un servidor de archivos con acceso anonimo de solo lectura a un recurso, para esto compartiremos el directorio /export el cual sera dueño el usuario "prueba" y tendra una contraseña de "prueba" (claro sin las comillas". Entonces crearemos el usuario prueba, lo puedes hacer con el comando: # useradd -m -g users -d /home/prueba -c "Usuario de Prueba" \ -s /bin/false prueba Creacion del share. # mkdir /share # chmod u+rwx,g+rw,o+rx /share # chown prueba.users /share Y ahora nuestro archivo de configuracion quedara de esta manera: [global] workgroup = TUXJM netbios name = ns1 security = share [test] comment = Directorio compartido de prueba path = /share read only = Yes guest ok = Yes Y ejecutaremos el comando testparm: # testparm Load smb config files from /etc/samba/smb.conf Processing section "[test]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] workgroup = TUXJM security = SHARE [test] comment = Directorio compartido de prueba path = /share guest ok = Yes Ahora detendremos el servicio samba y lo volveremos a iniciar. # /etc/rc.d/rc.samba stop # /etc/rc.d/rc.samba start Ahora puedes probar desde una maquina windows que este configurada con el grupo de trabajo TUXJM e ir al entorno de red y veras dicho recurso compartido, desde una maquina UNIX usar el comando: $ smbclient //ip-servidor-o-nombre/test -N NOTA: el parametro -N es para que no pida la contraseña, es util en este caso ya que estamos accediendo de manera anonima.