miércoles, 26 de septiembre de 2012

Primeros Pasos con Samba File Server; Configuración básica smb.conf

Siguiendo con este uHowTo, ahora pasamos a instalar samba en nuestro server.
Samba es servicio que permite interactuar con redes UNIX - Windows. Se pueden configurar con diversas formas de autenticación, ya sea por user/passwd; domain, server, o share.
Cada uno tiene su ventajas, de los cuales el menos aconsejable es el método share que como lo dice el mismo manual de Red Hat "Los desarrolladores de Samba no recomiendan el uso de la seguridad a este nivel."

 
Empecemos:

root@pruebas:~#aptitude install samba

Instalará las dependencias correspondientes y al final creará entre otras cosas el archivo de configuración de samba en /etc/samba/smb.conf

Luego agregamos los usuarios creados en el tutorial anterior a la base de datos de samba.
root@pruebas:~# smbpasswd -a user1
root@pruebas:~# smbpasswd -a user2
root@pruebas:~# smbpasswd -a user3
En cada uno nos va a pedir que ingresemos su contraseña respectiva que no necesariamente es la misma con la que se hace login en el sistema y es la que usaremos al momento de autenticarnos en los clientes en este caso en los clientes windows.
 
Creamos una copia de seguridad;
root@pruebas:~# cp -p /etc/samba/smb.conf /etc/samba/smb.conf.backup

Ahora para mayor comodidad vamos a eliminar las líneas comentadas. Ésto lo podemos hacer a mano pero la flexibilidad de la terminal y los scripts nos pueden hacer la tarea más facil. Para ello usaremos el comando sed como bien lo tiene documentado nuestros amigos de gentoo en español ( gracias www.gentoo.org por los manuales que son espectaculares). 
root@pruebas:/etc/samba# sed '/#/d' smb.conf.original > smb1.conf && rm smb.conf
root@pruebas:/etc/samba# sed '/^$/d' smb1.conf > smb.conf && rm smb1.conf
Con el primer comando elimino todas las líneas que empiezan con # y lo guardo en un archivo temporal smb1.conf y elimino el archivo smb.conf y con el segundo comando lo que hago es eliminar las líneas en blanco del archivo temporal smb1.conf y guardardo en smb.conf y elimino el archivo temporal smb1.conf.

Listo ahora nos queda un bonito smb.conf para empezar a personalizarlo deacuerdo a nuestras necesidades.

root@pruebas:/etc/samba# cat smb.conf
[global]
   workgroup = mipc
   server string = %h server
   dns proxy = no
   interfaces = 127.0.0.0/8 eth0 172.16.1.0/24
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   security = user
[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0755
   directory mask = 0755
   valid users = %S
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browsable = yes
   read only = yes
   guest ok = no
 

Ahora empezaremos por modificar la línea:
         "workgroup = mipc"

En mi caso le puse = mipc; Ojo esto es el nombre de Grupo, no confundir samba es un servidor NetBios y el formato es solo el nombre, no se puede colocar por ejemplo mipc.com
Luego modificamos la línea:
 interfaces = 127.0.0.0/8 eth0 172.16.1.0/24
y ahí asignamos a samba en que interfaz debe escuchar y en que segmento de red. Yo por facilidad le he puesto que escuche en toda la red 172.16.1.0/24

Luego agregamos el parámetro:
security = user
Esto indica que para acceder a los recursos compartidos se tendrán que autenticar con un usuario/passwd válido en samba. Ojo no es lo mismo usuario de sistema que usuario de recursos compartidos en samba.

El resto de líneas las podemos dejar como está.   

Ahora, pasamos a configurar lo que deseamos compartir:
Yo voy a compartir la carpeta sistemas de propietario sistemas y grupo sistemas y una carpeta shared de propietario nobody y grupo nogroup.

[shared]
    comment = Compartido de users
    path = /home/compartido
    browsable = yes
    writable = yes
    force directory mode = 0777
    guest ok = yes
[sistemas]
    comment = Compartido de users
    path = /home/sistemas
    browseable = no
    writeable = yes
    force directory mode = 0750
    force create mode = 0750
    directory mask = 0750
    create mask = 0750
    force group = sistemas
    valid users = @sistemas
    read list = user3


Con esto he creado un recurso compartido llamado shared que tiene permisos 777 para todo lo que sea creado y que fuerce en cualquier caso contrario, además que se salte la autenticación por usuario con la línea guest ok = yes
Cosa que cualquiera pudiera modificar, leer, ejecutar todo lo que se encuentre aquí. Esto es un recurso útil cuando se quiere un directorio donde todos los usuarios de la red puedan compartir de manera fácil y sin restricciones.
Por el contrario, he creado un recurso sistemas donde sólo los usuarios que son parte del grupo sistemas pueden ingresar y eso lo hago con la línea valid users = @sistemas. Aquí he forzado a que cada carpeta creada por cada usuario tenga los permisos 750, osea que sólo el propietario tiene acceso total a lo que él crea y solo lectura y ejecución a los usuarios que forman parte del grupo sistemas. Esto con la finalizad de garantizar la autoria y autonomía de archivos al usuario creador.

Aqui podemos ver el poder de la jerarquía de permisos en UNIX-LINUX; y es que la línea read list = user3 la he colocado a propósito para verificar que a pesar de haberla colocado y que autoriza al user3 a por lo menos leer los archivos y directorios creados por los usuarios del grupo sistemas, el sistema samba no lo deja ni siquiera entrar, ya que el permiso para "otros" está deshabilitado con la máscara 770.

Con esto podemos seguir creando los recursos que quisieramos, por ejemplo para las diferentes áreas de la empresa que administramos, podemos separar por áreas como contabilidad, finanzas, gerencias, RRHH y que ellos no sepan que existen más recursos compartidos más que la que ha sido asignado.

Más adelante veremos como podemos obtener seguridad a través de usuarios autenticados contra LDAP y así poder configurar un controlador de dominio primario. Todo ésto es posible con el samba actual, que en debian squeeze es 3.5.6.

También veremos como la jerarquía de permisos tradicionales tienen algunas deficiencias frente a las ACL complejas que tienen los sistemas actuales de windows y su sistema de archivos NTFS. Pero en linux también tenemos ACL para manejar escenarios en que los permisos tradicionales simplemente no funcionan. Eso lo veremos en una próxima entrada.


No hay comentarios:

Publicar un comentario