samba_logo

¡Hola Amigos!. Les traigo un apretado resumen de como implementar un servidor independiente en Debian utilizando solamente la Consola y un Editor de Texto. Paso previo para darnos cuenta de las limitaciones y/o complejidades de las interfaces gráficas que existen para implementar un servicio similar, y que invito a probarlas.

No estamos obligando a nadie a que use el método aquí dado. Sólo compartimos nuestra poca experiencia al respecto. Muy personalmente opino que es más sencillo compartir carpetas en Linux mediante la consola y un editor de texto. Existen muchos artículos en la web sobre como utilizar herramientas gráficas tales como System-Config-Samba en Ubuntu, SWAT, Gadmin-Samba, Zentyal-Samba en Ubuntu, etcétera. Recomendamos las busquen, instalen, usen y estudien, y luego comparen con el sencillo método aquí propuesto. Como decimos en Cuba, Saque Usted sus propias conclusiones.

El método se puede utilizar para cualquier equipo donde se ejecute Debian, sea una máquina de escritorio o un servidor.

Cualquier duda, lea el artículo anterior “Samba: Servidor Independiente en Debian” o consulte la documentación.

Veremos:

  • Red en el Hogar
  • 1.- Instalamos y configuramos Samba
  • 2.- Creamos los usuarios en nuestro equipo y los adicionamos a la base de datos de usuarios de Samba.
  • 3.- Creamos los directorios a compartir y los reflejamos en el archivo /etc/samba/smb.conf.

En el ejemplo crearemos los usuarios de forma que NO puedan iniciar una sesión local en nuestro equipo. También los crearemos sin carpeta personal. Además explicamos el porqué NO usamos pdbedit para adicionarlos a la base de datos de usuarios de Samba.

Red en el hogar

Al menos una de las PCs tendrá Linux instalado :-), y más específicamente Debian. Para el ejemplo escogeremos la pc-hijo, pues el Hijo, que se llama Pepito (Jaimito en otras latitudes) es cardíaco al Software Libre y está cursando estudios al respecto. A cada rato discute con el Padre sobre las ventajas del SWL, pero éste último generalmente le dice “Tengo más experiencia que tu, y eso de Libre… no me convence.”. Entonces el Hijo le responde “Padre, recuerda que tu Windows 7 es una copia pirata…”. Nada, cosas de familia. 🙂

Equipos: pc-madre, pc-padre, pc-hija y pc-hijo
Subnet: 192.168.1.0/255.255.255.0
Grupo de Trabajo: CASA
Usuarios: madre, padre, hija e hijo

Los siguientes datos que servirán para resolver los nombres en la red, los debemos adicionar al archivo hosts en cada uno de los equipos. En el caso de Linux el archivo es /etc/hosts, mientras que en los Windows usualmente está en C:\Windows\System32\Drivers\etc\hosts.

192.168.1.10 pc-madre
192.168.1.15 pc-padre
192.168.1.20 pc-hija
192.168.1.25 pc-hijo

De esa forma nos ahorraremos instalar y configurar un DNS. No obstante, el que quiera lo puede hacer mediante la guía “DNS Maestro Primario….”.

El Grupo de Trabajo en el equipo con Debian lo declararemos en el archivo /etc/samba/smb.conf. En Windows, se declara en la Propiedades de MiPc. Las direcciones IP de cada equipo con Windows, se declaran en las Propiedades de la Conexión de Red.

Para comprobar que hasta aquí todo funciona bien, en cualquier equipo ejecutamos ping nombre-pc-remota y el equipo remoto debe devolver la solicitud. Damos por sentado que conocemos como hacer una pequeña red hogareña. El Cómo se Hace no es objetivo de éste post. Pueden preguntar a amigos que ya lo sepan. Solo dimos los tips esenciales.

1.- Instalamos y configuremos Samba

:~# aptitude install samba smbclient
:~# cp /etc/samba/smb.conf /etc/samba/smb.conf.original
:~# dpkg-reconfigure samba

samba-06-01

dpkg-reconfigure samba-common

samba-06-02
samba-06-03
samba-06-04

:~# testparm
:~# service samba restart
:~# smbclient -L localhost -U

:~# smbclient -L localhost -U%
Domain=[CASA] OS=[Unix] Server=[Samba 3.6.6]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (pc-hijo server)
Domain=[CASA] OS=[Unix] Server=[Samba 3.6.6]

    Server               Comment
    ---------            -------
    PC-HIJO              pc-hijo server

    Workgroup            Master
    ---------            -------
    CASA                 PC-HIJO

Nota: Si no obtiene de inmediato la salida anterior correctamente, espere unos minutos. También, sino existe un servidor WINS en la red, edite el archivo /etc/samba/smb.conf y elimine el comentario de la línea # wins support = no y déjela así: wins support = yes. Después ejecute como el usuario root: testparm y a continuación service samba restart.

2.- Creamos los usuarios en nuestro equipo y los adicionamos a la base de datos de usuarios de Samba.

adduser --no-create-home --shell /bin/false padre
adduser --no-create-home --shell /bin/false madre
adduser --no-create-home --shell /bin/false hijo
adduser --no-create-home --shell /bin/false hija

Si quieren comprobar la no creación de las carpetas personales ejecuten updatedb y a continuación locate padre o locate madre. Si también quieren comprobar si pueden iniciar sesión en el equipo local los usuarios creados, traten de hacerlo directamente o mediante ssh.

¿Por qué no usamos pdbedit para adicionar los usuarios del equipo a Samba?.

Si ejecutamos man pdbedit, y leemos sobre la opción -a|–create se explica muy bien que añade usuarios a Samba, pero que NO llama al Script de Sincronización de Contraseñas UNIX. Además, pdbedit siempre debe ser invocado por el usuario root o con sus permisos.

Si en el archivo principal de configuración de Samba /etc/samba/smb.conf está declarado unix password sync = yes, que es el parámetro por defecto, pdbedit sólo actualizará los datos en la base de datos de usuarios de Samba y NO lo hará en la base de datos del equipo, o sea en el archivo /etc/shadow.

Un poquito técnico pero es así. Sin embargo, “smbpasswd” SI añade al usuario y sincroniza su contraseña de inmediato, mediante el Script de Sincronización. Usemos pues smbpasswd para no enredarnos en las patas de los caballos. 🙂 Nuestro primer usuario a añadir a Samba es root.

smbpasswd -a root
smbpasswd -a padre
smbpasswd -a madre
smbpasswd -a hijo
smbpasswd -a hija

Ahora SI usaremos el comando pdbedit para comprobaciones. Para más información ejecute man pdbedit. No podemos dar todas las respuestas en un post o en toda una serie de ellos. Samba es Muy Grande en verdad.

:~# pdbedit -L
root:0:root
madre:1002:
hija:1004:
padre:1001:
hijo:1003:
:~# pdbedit -Lv

Por conveniencia, adicionamos a todos los usuarios creados al grupo users. Muy conveniente para carpetas públicas con permisos de sólo lectura o de lectura/escritura. El grupo users es un comodín.

:~# adduser madre users
:~# adduser hija users
:~# adduser padre users
:~# adduser hijo users 
:~# less /etc/group | grep users 

users:x:100:padre,madre,hijo,hija

Hasta aquí todo está Ok en relación a la creación de usuarios.

3.- Creamos los directorios a compartir y los reflejamos en el archivo /etc/samba/smb.conf

Básicamente es lo mismo que lo publicado en el artículo anterior.

Ejemplo 1: Queremos compartir la carpeta /home/hijo/musica para todos los usuarios de la casa. El permiso será de sólo lectura. Ante todo creamos la carpeta /home/hijo/musica y configuramos su propietario y permisos de ser necesarios. Como el usuario hijo ejecutamos:

mkdir /home/hijo/musica
ls -l /home/hijo | grep musica

Para editar el archivo de configuración de Samba con permisos de root, presionamos ALT + F2 y ejecutamos gksu gedit /etc/samba/smb.conf, tecleamos la contraseña del root, y adicionamos lo siguiente al final del archivo:

[pc-hijo-musica]
        comment         = Carpeta personal de musica
        path            = /home/hijo/musica
        read only       = Yes 
        valid users     = @users
        read list       = @users

Después de las modificaciones al archivo, ejecutamos testparm como el usuario hijo 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/hijo/musica para todos. Los permisos serán de lectura/escritura para hijo y de sólo lectura para el resto de la familia agrupados en el 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.

[pc-hijo-musica]
        comment         = Carpeta personal de musica
        path            = /home/hijo/musica
        read only       = No
        valid users     = @users
        write list      = hijo
        read list       = @users

Ejemplo 3: El padre de Pepito es cardíaco a las series de acción y ya tiene su disco duro al tope. Le pidió a su hijo que le dejara un espacio en su máquina para él poder llenarlo con las series, y que también sea accesible a toda la familia.

Pepito accedió, por supuesto, pues así le puede pedir a su papá que le compre otro disco duro de 2 teras, lo cual es su sueño. Seguro que Pepito chantajea al padre con el asunto de que le ahorró unos cuantos pesos con la instalación del Windows 7 pirata. 🙂

Si ejecutamos como root:

mkdir /home/hijo/series
chown -R root:users /home/hijo/series
chmod -R g+ws /home/hijo/series
ls -l /home/hijo | grep series

Para editar el archivo de configuración de Samba con permisos de root, presionamos ALT + F2 y ejecutamos gksu gedit /etc/samba/smb.conf, tecleamos la contraseña del root, y adicionamos lo siguiente al final del archivo:

[pc-hijo-series]
        comment         = Las Series de Papá
        path            = /home/hijo/series
        read only       = No
        valid users     = @users
        write list      = padre, hijo
        read list       = @users
    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 la máquina de Pepito, o smbclient -L pc-hijo -U% desde otro equipo de la casa que tuviera Linux instalado, así como el paquete smbclient.

Y esto es todo por hoy, Amigos!!!.