Samba: Servidor Independiente en Debian



¡Hola Amigos!. Si queremos tener un Servidor Independiente (Standalone) para compartir recursos ya sea desde nuestra estación de trabajo; o para un pequeño grupo de máquinas; o para una LAN sin un controlador de dominio al estilo Microsoft, lo más sencillo es hacerlo mediante Samba.
Existen algunas herramientas gráficas para ese fin, así como la herramienta para administrar Samba vía web “SWAT”. Sin embargo, recomendamos a los principiantes que se inicien en éste maravilloso mundo de forma manual. No es tan difícil ni diabólico como muchos piensan. Y en el proceso se aprende mucho sobre redes SMB/CIFS y sobre Permisos y Derechos en sistemas de archivos Linux.
Antes de continuar, recomendamos lean:
NO veremos cómo compartir impresoras mediante Samba. A los que deseen utilizar ésta suite para esos fines, recomendamos lean la documentación acompañante tal y como se indica en Samba: Necesaria Introducción. También pueden leer el artículoCUPS: Como usar y configurar las impresoras de forma fácil.

Puntos fundamentales a tener en consideración

  • A pesar de toda el aura que envuelve a los Directorios Activos y sus Controladores de Dominio los cuales en numerosas ocasiones no son necesarios o pobremente explotados, el instalar y configurar un Servidor Samba Independiente ES una opción válida y confiable.
  • Un Servidor Independiente puede ser tan seguro o inseguro según nuestras necesidades, y lo podemos configurar de forma sencilla o compleja.
  • La autenticación de los usuarios se realiza en el propio servidor donde residen los recursos.
  • Para que un usuario pueda acceder a los recursos desde un equipo remoto, debe estar además registrado en la base de usuarios de Samba.
  • Solo podemos añadir a la base de datos de usuarios Samba aquellos usuarios que ya existan en nuestro servidor o máquina de escritorio.
  • Un Servidor Independiente Samba NO provee Inicio de Sesión en Red, como lo hace un Controlador de Dominio. Tampoco provee Inicio de Sesión en un Dominio.
  • Mientras menos cambiemos y/o adicionemos parámetros al archivo /etc/smb.conf sin antes conocer al detalle que es lo que queremos lograr, será Mucho Mejor.
  • El servicio de compartir recursos en Samba trabaja sobre el sistema de ficheros de Linux, incluyendo su seguridad inherente. Muchas problemas se resuelven prestando la debida atención a los permisos en archivos y directorios.
  • Es imprescindible entender como manejar el comportamiento del sistema de archivos desde el archivo smb.conf, así como comprender como funciona la seguridad del sistema de archivos UNIX/Linux.
  • Recomendamos no utilizar acentos, ni eñes, ni espacios en los nombres de los carpetas y recursos compartidos. Preferentemente utilizar minúsculas para los nombres.
  • En una LAN no se pueden repetir nombres de recursos compartidos. Cada nombre es único.
  • Si en nuestra LAN NO existe un servidor WINS, podemos hacer que nuestro Samba actúe como tal agregando en la sección “global” del archivo smb.conf el parámetro wins support = Yes., lo cual es muy recomendable.

Servidor de ejemplo

Nombre: miwheezy. Dominio: amigos.cu. IP: 10.10.10.20. Usuarios: xeon, zeus y triton.Grupos adicionales: contadores

Instalación

Mediante el Synaptic o por medio de la consola instalamos el paquete samba.
sudo aptitude install samba
Es muy útil instalar además el paquete smbclient. Lo usaremos para comprobaciones.
En el proceso, se instalarán los paquetes -sino hemos instalado con anterioridad algún otro relacionado con la Suite- samba, samba-commonsamba-common-bin y tdb-tools. Además, se crea el archivo /etc/samba/smb.conf. Este archivo se creará siempre y cuando se instalen los paquetes samba-common y samba-common-bin, y no se borrará del sistema hasta tanto no los des instalemos.

El archivo smb.conf es el más importante de la Suite Samba

Samba tiene una enorme cantidad de opciones de configuración, la mayoría de las cuales no se muestran en el ejemplo de smb.conf que instala por defecto. Las opciones comentadas con un “;” se consideran lo suficientemente importantes como para mostrarlas y sus valores propuestos difieren de los valores por defecto del comportamiento de Samba. Las opciones de configuración comentadas con un “#“, tienen los valores por defecto de Samba, y también se consideran importantes como para ser mostradas.
Si deseamos ver el contenido del archivo sin considerar las opciones comentadas ya sean con “;” o con “#“, debemos ejecutar:
 egrep -v '#|;|^ *$' /etc/samba/smb.conf
Si deseamos ver el contenido del archivo sin considerar las opciones comentadas con “#“, debemos ejecutar:
egrep -v '#|^ *$' /etc/samba/smb.conf
Lo primero que debemos hacer es una copia del archivo /etc/samba/smb.conf. En el propio archivo encontramos la forma en que Samba recomienda hacer una copia de trabajo, la cual detallamos a continuación. Como root ejecutamos:
cd /etc/samba
mv smb.conf smb.conf.master
testparm -s smb.conf.master > smb.conf
root@miwheezy:/etc/samba# ls -l
total 32
-rw-r--r-- 1 root root     8 nov 10  2002 gdbcommands
-rw-r--r-- 1 root root   805 ago  4 12:05 smb.conf
-rw-r--r-- 1 root root 12173 ago  4 12:05 smb.conf.master
Observen la diferencia de tamaño entre el smb.conf generado de ésta forma y el original. Al ser menor el tamaño, el rendimiento del servidor aumenta acorde a lo indicado por el Samba Team.
El contenido inicial del archivo /etc/samba/smb.conf será (recuerden que no desarrollaremos el compartir impresoras):
[global]
        workgroup = AMIGOS
        netbios name = MIWHEEZY
        security = user
        server string = %h server
        map to guest = Bad User
        obey pam restrictions = Yes
        pam password change = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword$
        unix password sync = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        usershare allow guests = Yes
        panic action = /usr/share/samba/panic-action %d
        idmap config * : backend = tdb

[homes]
        comment = Home Directories
        valid users = %S
        create mask = 0700
        directory mask = 0700
        browseable = No
Los valores resaltados en negritas son los únicos que debemos modificar inicialmente. Observen que, a pesar de ser el comportamiento por defecto de Samba, hemos declarado explícitamente la opción security = user dada su gran importancia.
Si en nuestra LAN NO existe un servidor WINS, podemos hacer que nuestro Samba actúe como tal agregando en la sección “global” del archivo smb.conf el parámetro wins support = Yes., lo cual es muy recomendable.
Regla de Oro: Mientras menos cambiemos y/o adicionemos parámetros al archivo smb.conf sin antes conocer al detalle que es lo que queremos lograr, será Mucho Mejor.
A continuación damos un apretado resumen de algunas de las opciones mostradas. Para más información, por favor ejecuten man smb.conf.
  • workgroup: Controla en cual Grupo de Trabajo aparecerá el equipo al hacer un browser de la red. Este parámetro también controla el nombre del Dominio cuando se trabaja con la opción security = domain y en la cual se une el equipo a un Dominio. Lo veremos en artículos posteriores. El valor por defecto es WORKGROUP.
  • netbios name: Fija el nombre NetBIOS mediante el cual se conocerá el servidor Samba en la red. Por defecto es el mismo que el primer componente del FQDN del host. En nuestro ejemplo el FQDN del equipo es miwheezy.amigos.cu. Podemos usar un nombre diferente al del host para nuestro servidor Samba. En ese caso es recomendable incluir un registro CNAME en nuestro DNS.
  • security: Parámetro que afecta el cómo los clientes responden a Samba y es uno de los más importantes del archivo smb.conf. El valor por defecto es user.
  • server string: Controla que nombre se muestra en los comentarios que aparecen en un browser de red próximo al nombre del equipo.
  • map to guest: Parámetro que sólo es útil cuando se establece security = user o security = domain. El valor “Bad User” le indica a Samba que rechace una contraseña no válida, a menos que NO exista el usuario, en cuyo caso se le tratará como Invitado o “guest“. Si no queremos permitir sesiones de invitados, debemos cambiar su valor a Never, el cual precisamente es el valor por defecto, y también cambiar el parámetro usershare allow guest a no, el cual también es el valor por defecto.
  • obey pam restrictions: Controla si Samba debe obedecer o no las restricciones propias de PAM “Plugable Authentication Module“, en cuanto a las Directivas de Administración de Cuentas de Usuario y Sesiones. El valor por defecto es no.
  • pam password change: Le indica a Samba que utilice a PAM para los cambios de contraseñas solicitados por un cliente SMB. El valor por defecto es no.
  • passwd program: Programa utilizado para establecer las contraseñas UNIX de los usuarios.
  • passwd chat: Cadena que controla la conversación que tiene lugar entre el demoniosmbd y el programa local para el cambio de contraseña definido en el parámetro anterior.
  • unix password sync: Le indica a Samba que sincronice la contraseña SMB con la contraseña UNIX, siempre y cuando la primera cambie. El valor por defecto es no.
  • valid users: Lista de usuarios a los cuales se le permite iniciar una sesión en un recurso compartido.

Reiniciar o Recargar el servicio Samba

Siempre que hagamos cambios significativos, sobre todo en la sección “[global]” delsmb.conf, debemos reiniciar el servicio. Si ya tenemos usuarios conectados a nuestro servidor, cada vez que reiniciamos Samba, los desconectaremos. Es por lo cual, y prácticamente en lo adelante, solo Recargaremos el servicio cuando agreguemos o modifiquemos recursos compartidos. Para reiniciar el servicio, ejecutamos como root:
service samba restart
Para recargar el servicio:
service samba reload

Adicionamos los usuarios al sistema y a la base de datos de usuarios Samba

Solo podemos añadir a la base de datos de usuarios Samba aquellos usuarios que ya existan en nuestro servidor local.
En nuestro ejemplo, el usuario xeon fue añadido durante la instalación de Wheezy. Por tanto, no lo adicionaremos a los usuarios del equipo. El grupo users existe en el sistema y se creó durante la instalación.
Algunas opciones del comando smbpasswd son:
  • -a: Añade el usuario indicado al archivo local smbpasswd.
  • -x: El usuario indicado debe ser eliminado de la del archivo local smbpasswd. Sólo disponible cuando smbpasswd se ejecuta como root.
  • -d: Se debe deshabilitar la cuenta del usuario indicado. Sólo disponible cuandosmbpasswd se ejecuta como root.
  • -e: Lo contrario de la opción -d siempre y cuando la cuenta del usuario esté deshabilitada.
Para crear los usuarios en nuestra equipo, lo hacemos con el conocido comandoadduser.
adduser zeus
adduser triton
Para crear el grupo contadores:
addgroup contadores
Para adicionar a los usuarios a la base de datos de Samba:
smbpasswd -a root
smbpasswd -a xeon
smbpasswd -a zeus
smbpasswd -a triton
Unimos al grupo contadores a los usuarios que queramos:
adduser xeon contadores
adduser zeus contadores
adduser triton contadores
Es recomendable unir cada usuario creado al grupo users, por si queremos otorgar permisos a todos los usuarios que hemos creado, sobre un recurso determinado. Una forma más sencilla de unir varios usuarios a un grupo es editando directamente el archivo /etc/group, y añadiendo la lista de usuarios separados por una coma. Pueden guiarse por el grupo contadores. Damos por hecho de que unimos los usuarios al grupo users.
En una estación de trabajo, para eliminar que se muestren los usuarios creados mediante adduser, debemos editar el archivo /etc/gdm3/greeter.gsettings y quitar el comentario a la opción disable-user-list=true, para que NO se muestre ninguna lista de usuarios al iniciar sesión. Ese es el comportamiento estándar de cualquier equipo cliente Windows unido a un Dominio.
De igual forma, si queremos que los usuarios creados no inicien una sesión remota mediante ssh, editamos el archivo /etc/ssh/sshd_config y añadimos al final del archivo la instrucción AllowUsers. Ejemplo:
[....]
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

AllowUsers xeon

Adicionamos recursos compartidos

Ejemplo 1: Queremos compartir la carpeta /home/xeon/musica para todos los usuarios registrados. El permiso será de sólo lectura. Ante todo creamos la carpeta/home/xeon/musica y configuramos su propietario y permisos de ser necesarios. Como el usuario Xeon ejecutamos:
mkdir /home/xeon/musica
ls -l /home/xeon | grep musica
Luego, al final del archivo smb.conf adicionamos lo siguiente:
[musica-xeon]
        comment         = Carpeta personal de musica
        path            = /home/xeon/musica
        read only       = Yes 
        valid users     = @users
        read list       = @users
Después de las modificaciones al archivo, ejecutamos testparm como el usuario xeon y recargamos el servicio como root. También podemos ejecutar ambos comandos comoroot:
testparm
service samba reload
Para comprobar el servicio recién configurado lo podemos hacer mediante la ejecución del siguiente comando en el propio equipo:
smbclient -L localhost -U%
Ejemplo 2: Queremos compartir la carpeta /home/xeon/musica para todos los usuarios registrados. Los permisos serán de lectura/escritura para xeon y de sólo lectura para el resto de los usuarios pertenecientes al grupo users. No tenemos necesidad de modificar el propietario o los permisos en la carpeta. Sólo cambiamos un poco la configuración del recurso compartido en el archivo smb.conf.
[musica-xeon]
        comment         = Carpeta personal de musica
        path            = /home/xeon/musica
        read only       = No
        valid users     = @users
        write list      = xeon
        read list       = @users
Ejemplo 3: Queremos compartir la carpeta /home/xeon/contabilidad para el grupo de usuarios contadores. Todos los miembros del grupo tendrán permiso de lectura. Los usuarios triton y zeus podrán escribir en el carpeta compartida.
Ahora SI tenemos que modificar el propietario y permisos de la carpeta contabilidaddespués de creada, de forma que puedan escribir triton y zeus que son miembro del grupo contadores. También debemos cuidar de que el último usuario que cree o modifique un archivo no se haga su propietario absoluto, de forma que se pueda modificar por otro(s) usuarios con permisos de escritura.
Es imprescindible entender como manejar el comportamiento del sistema de archivos desde el smb.conf, así como comprender como funciona la seguridad del sistema de archivos UNIX/Linux.
En estos casos debemos:
  • Declarar a conveniencia quien será el Usuario Propietario y quien el Grupo Propietario del Directorio Compartido.
  • Permitir la escritura en el Directorio Compartido por parte del Grupo Propietario.
  • Declarar el bit SGID (Set Group ID) del directorio durante su creación.
  • Declarar adecuadamente en el archivo smb.conf los modos de creación de archivos y directorios dentro de nuestro recurso compartido.
Una sencilla y posible solución en la práctica tendremos si ejecutamos como root:
mkdir /home/xeon/contabilidad
chown -R root:contadores /home/xeon/contabilidad
chmod -R g+ws /home/xeon/contabilidad
ls -l /home/xeon
Y agregamos lo siguiente al final del archivo smb.conf:
[contabilidad]
        comment         = Carpeta para los contadores
        path            = /home/xeon/contabilidad
        read only       = No
        valid users     = @contadores
        write list      = triton, zeus
        read list       = @contadores
    force create mode   = 0660
   force directory mode = 0770
Inmediatamente comprobamos la sintaxis básica del smb.conf mediante testparm y recargamos el servicio mediante service samba reload. También podemos ejecutarsmbclient -L localhost -U%. en el servidor local, y smbclient -L miwheezy -U% o smbclient -L miwheezy.amigos.cu -U% desde el equipo remoto.
Hora es de que desde un equipo remoto nos conectemos al recurso compartido y hagamos todas las pruebas necesarias. Es recomendable comprobar como cambia el usuario propietario de las carpetas y archivos en la medida en que se crean dentro del recurso.
Importante: El usuario root o el usuario xeon y en general cualquier miembro del grupo contadores, puede escribir desde una sesión local iniciada en el mismo equipo o mediante ssh, o sea, sin utilizar el protocolo SMB/CIFS. Si crean una carpeta o un archivo de forma local, recuerden reasignar los permisos adecuados. Comprueben mediante ls -l. No hacer lo anterior es origen de muchas confusiones.
Amigos, me perdonan la longitud del artículo y espero les sirva de alguna utilidad. ¡Hasta la próxima aventura!

No hay comentarios:

Publicar un comentario