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ículo CUPS: 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-common, samba-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 demonio smbd 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]» del smb.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 cuando smbpasswd 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 comando adduser.

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 como root:

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 contabilidad despué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 ejecutar smbclient -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!


26 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Excelente como siempre. Este tipo de artículos se agradecen cuando trabajamos con servidores. 😉

  2.   Julio Cesar dijo

    Muy bueno freeke pero para mi es mejor usar FreeNAS para ese tipo de cosas
    😉

  3.   Federico Antonio Valdés Toujague dijo

    Gracias por sus comentarios!!!. Freeke, el FreeNAS de FreeBSD es otra historia, salvaje, y puede que le dedique algún artículo. Al final es Samba sobre FreeBSD.

  4.   Erick dijo

    Muy buen el post debo decir, como siempre lo he dicho si usted hubiera posteado esto hace unos años, me hubiera evitado un monton de problemas, pero que bueno que alguien se interese en mostrar como configurar samba, Saludos

    1.    Federico Antonio Valdés Toujague dijo

      Como dice el refrán «nunca es tarde si la dicha es buena» y el otro «es mejor tarde que nunca». Gracias por comentar. Empecé a usar Samba creo por allá por el 2007. Hasta ahora no había podido publicar nada sobre él.

      1.    Erick dijo

        De igual manera casi llevo usando samba el mismo tiempo, pero veo que usted se ha perfeccionado bastante y tiene razon de “nunca es tarde si la dicha es buena”, me parecio, debo decir que es muy bueno que alguien comparta sus conocimientos, muchas veces uno no se anima o no tiene tiempo, en mi caso es la primera, Saludos

  5.   Giskard dijo

    Amigo @fico, me gustan mucho tus artículos. Están sumamente bien explicados y detallados. Gracias.

    1.    Federico Antonio Valdés Toujague dijo

      Espero te sean útiles. Ese es el propósito!!!.

      1.    Giskard dijo

        Sí. Lo es 🙂

        Por cierto, acabo de ver que publicaron tu artículo en otra página (http://www.infognu.com.ar/2013/08/samba-servidor-independiente-en-debian.html) y la referencia a la fuente es realmente pequeña. Eso no se hace. Mérito a quién lo merece, coño! No sé si desde acá puedan pedirle a esa gente que ponga en grande quién hace las cosas. Para el ojo no entrenado pasaría como que ellos lo crearon y lo postearon.

  6.   oscar dijo

    Señor autor del post que tal si crea un articulo de como compartir archivos vía samba para los usuarios de a pie, me refiero a algo menos extenso y mas gráfico como por ejemplo como compartir de linux a linux y de linux a windows pero no de una manera tan profesional sino como para compartir archivos entre los PCs en el hogar.

    1.    Federico Antonio Valdés Toujague dijo

      Para ese caso, recomiendo usar ssh para Linux – Linux y winscp para Windows – Linux. Existen en éste mismo sitio varios artículos al respecto.
      Este mismo post, aunque parezca complicado, si haces copiar y pegar los pocos comandos que incluye, funciona también para un red en el hogar.

      1.    eliotime3000 dijo

        Aunque sería más práctico que se usara el sistema SMB/CIFS para usar el mismo protocolo de compartimiento de archivos para Windows (o carpetas compartidas, para abreviar).

        Haré mis experimentos para poder hacer un tuto acerca de cómo hacer una carpeta compartida en GNU/Linux (en mi caso, Debian Wheezy) para que las redes con Windows la reconozcan como carpeta compartida .

  7.   alevel dijo

    muy bueno y lo de extenso se amerita, pero quizá deberías mencionar tempranamente el parámetro oslevel antes de interactuar con windows.
    Saludos

    1.    Federico Antonio Valdés Toujague dijo

      Observa que se trata de una red sin Controlador de Dominio a lo Windows. Ese parámetro ya lo usaremos cuando tratemos sobre una máquina unida a un Dominio.

  8.   lastnewbie dijo

    cuando tenga algo de tiempo, lo haré
    [offtopic] quisiera publicar tutoriales de GIMP. ¿Se puede?
    [/offtopic]

  9.   Federico Antonio Valdés Toujague dijo

    Amigo @giskard, acabo de visitar http://www.infognu.com.ar/2013/08/samba-servidor-independiente-en-debian.html, y no vi referencia alguna a éste post. Hicieron un copy/paste al descaro, Jajajajajajaja. Demuestra que, al menos, el post es de buena calidad. Digo yo, no?, Jajajajajajaja.

    1.    Giskard dijo

      Casi al final en letras diminutas está el link que dice «fuente» y apunta a este site. Pero el haberlo hecho así me parece una descortesía total y una falta de respeto. Por fortuna, acá sí sabemos quién es el autor 🙂

    2.    Julio cesar dijo

      Sí ponen la referencia pero a penas se puede notar tenían que haber hecho mención al principio del artículo

  10.   truko22 dijo

    En la wiki de arch dice que a partir de la Versión 3.4 se recomienda el uso de pdbedit en vez de smbpasswd.

    Una pregunta, según un amigo antes de agregar un usuario a Samba se debe cear un usuario en el sistema pero con /bin/false
    useradd -s /bin/false miusuario
    Es cierto 0.o?

  11.   Federico Antonio Valdés Toujague dijo

    Amigo @truko22, y en general, para los que hagan preguntas parecidas. Recuerden que siempre hemos declarado de que nosotros solo damos un Punto de Entrada al tema tratado. También recomendamos lean la documentación acompañante. Al final, la personalización del servicio corre a cargo del que lo implemente, de forma que responda a sus necesidades y al nivel de seguridad que le satisfaga.

    Por ejemplo, se puede ahorrar la cuestión de los permisos, si permitimos que cualquiera escriba en el recurso compartido mediante chmod 777. Por supuesto que esa no es una solución segura.

    Se puede evitar que el usuario inicie una sesión local o vía ssh si lo creamos mediante adduser usuario –shell /bin/false. O sea, el usuario así creado no puede acceder a una terminal o consola.

    En otras palabras, Samba se puede configurar de muchas formas que van desde las más sencillas a las más complejas.

    ¿Qué pasa?. Si de entrada redactamos el post sin permitir que los usuarios añadidos a Samba inicien sesión local, seguro preguntaran el porqué. Por eso preferimos redactarlo de la forma más clásica posible, y dejar que cada cual saque sus propias conclusiones.

    @truko22, Gracias por darme el punto correcto para hacer el comentario anterior!!!.

    1.    truko22 dijo

      Muchísimas gracias ahora entiendo 😀 lo del –shell /bin/false

  12.   Federico Antonio Valdés Toujague dijo

    Amigo @truko22, olvidé lo de pdbedit. Desde Etch me acostumbré a usar smbpasswd. Este comando lo puede ejecutar cualquier usuario del sistema, y su comportamiento y resultados varían. pdbedit, también se puede utilizar, pero sólo lo puede invocar el usuario root.

    Sobre Samba, se pueden escribir artículos enteros de muchos de sus comandos.

  13.   leo dijo

    Esta muy bueno!!
    Saludos

  14.   Marcos dijo

    Buenisimo el articulo. Felicidades y gracias por semejante aporte

  15.   joseuzin dijo

    queria preguntarte si habia un articulo sobre samba como controlador de Dominio y si ya puede controlar el dominio con politicas de grupo como un windows server, me refiero a impedir cambiar propiedades de las direcciones de red, usar pendrives, etc

  16.   Ricardo Mejias dijo

    Hola que tal Fico, yo tengo instalado Samba 3.6 con LDAP y LAM 3.7 – Me gustaria saber si sabes como permitir al usuarios cambiar la clave al iniciar secion ya que me indica «no tiene permiso de cambiar su contraseña » saludos…