Samba: CIFS-Utils

¡Hola Amigos!. «Common Internet File System utilities» o Utilidades Comunes para Sistemas de Archivos de Internet, nos servirán para montar en nuestro sistema de archivos Linux local, recursos de redes CIFS compartidos en máquinas remotas.

El paquete CIFS-Utils formó parte de la Suite Samba hasta versiones anteriores a la 5.5-1 (ver /usr/share/doc/cifs-utils/README) que es la que trae el Debian 7 «Wheezy» y sobre la cual se basa éste articulo. Actualmente, las utilidades CIFS son un proyecto separado de Samba y es activamente mantenido por el Samba Team.

Antes de continuar, debemos leer el artículo Samba: SmbClient pues haremos referencia a él. Prácticamente, este post es su continuación.

Veremos:

  • Instalación y un poco de conocimiento general
  • Uso del comando mount.cifs
  • Ejemplo 1
  • Ejemplo 2
  • Ejemplo 3
  • Resumen

Instalación y un poco de conocimiento general

Si no tenemos instalado el paquete smbclient u otro relacionado con la suite Samba, al instalar cifs-utils por cualquier medio también lo harán:

  • keyutils: Herramientas de gestión de claves de Linux. Keyutils es un conjunto de herramientas para gestionar la retención de claves en el núcleo que se pueden usar en sistemas de archivos, dispositivos de bloques y otros, para obtener y retener la autorización y las claves de cifrado necesarias para realizar operaciones seguras.
  • winbind: Demonio que integra la Autenticación y los mecanismos de búsqueda de usuarios y/o grupos desde un Directorio Activo hacia un sistema Linux.
  • libnss-winbind: Paquete que nos da el plugin nss_winbind, el cual se integra con el servidor local Winbind para proveer la búsqueda de nombres de usuarios y grupos. También nos brinda el plugin nss_wins, el cual provee la búsqueda de nombres de hosts o equipos, tanto por medio de los protocolos NBNS («NetBIOS Name Service») y NetBIOS broadcast.
  • samba-common y samba-common-bin: Tratados en el post Samba: SmbClient en éste mismo sitio.

Las utilidades o herramientas o comandos que nos aporta el paquete cifs-utils son: cifscreds, getcifsacl, setcifsacl, cifs.upcall, cifs.idmap, y mount.cifs. Para propósitos prácticos sólo veremos el comando mount.cifs. Por mucho que queramos no podemos hacer un tratado sobre el tema. Los que quieran o necesiten profundizar más, favor de ejecutar man comando.

Uso del comando mount.cifs

De forma general lo invocamos como:

mount.cifs {servicio} {punto de montaje} [-o opciones]
mount -t cifs {servicio} {punto de montaje} [-o opciones]

mount.cifs monta un sistema de archivos CIFS Linux. Es un comando nativo de Linux y el núcleo o kernel debe tener el soporte para sistemas de archivos cifs. El protocolo CIFS es el sucesor del protocolo SMB y tiene soporte en la mayoría de los servidores Windows y en muchos otros servidores comerciales y equipos NAS «Network Attached Storage». Por supuesto que tiene soporte total por parte del servidor Samba, de código abierto.

Esta utilidad adjunta o monta el recurso de red compartido (o exportado) en un servidor remoto el cual se especifica como servicio utilizando la sintaxis //servidor/recurso -donde «servidor» es el nombre o la dirección IP en el cual reside el recurso compartido y «recurso» es el nombre del recurso compartido- a un directorio local que será el «punto de montaje». El Punto de Montaje debe existir en nuestro sistema de archivos local ANTES de montar el recurso.

Las Opciones del comando se conforman a partir de una lista de pares de valores separados por coma, tipos clave=valor.

Para facilitar el trabajo con ésta utilidad, recomendamos se realicen los cambios indicados en el post Samba: SmbClient al archivo /etc/samba/smb.conf tomando como referencia el equipo miwheezy.amigos.cu el cual no está unido al dominio. También es recomendable instalar el paquete smbclient si aun no lo está, para conocer de forma rápida cuales son los recursos compartidos en la red. Claro que lo anterior, lo podemos determinar mediante el Nautilus o el navegador de archivos que estemos usando, siempre que tenga soporte para el protocolo SMB/CIFS.

Ejemplo 1

Queremos montar el recurso compartido //w2003/tierramedia en la carpeta local /home/xeon/lan con las credenciales del usuario pipin perteneciente al dominio amigos.cu. Como el usuario root o mediante sudo ejecutamos:

xeon@miwheezy:~$ sudo mount.cifs //w2003/tierramedia /home/xeon/lan -o user=pipin@amigos.cu
[sudo] password for xeon:
Password:

Observemos que primero se nos pide la contraseña del usuario local xeon@miwheezy, y luego la del usuario remoto pipin@amigos.cu. Por supuesto que debemos conocerla a menos que tengamos nuestro equipo unido al dominio y hayamos iniciado sesión local en nuestro Debian como pipin. Ese caso lo veremos en artículos posteriores.

También debemos haber creado la carpeta lan (/home/xeon/lan) antes de invocar el comando. Sino, podemos indicar que el punto de montaje será el directorio /mnt, si es que no tenemos montado algún otro recurso en ese directorio genérico.

Seamos curiosos y listemos los archivos del directorio local donde tenemos montado el recurso compartido remoto y veremos que el usuario y el grupo propietarios de las carpetas y archivos es root. Significa que sólo tendremos acceso de lectura. Compruébenlo.

Para algunos será un poco difícil de entender lo anterior, pero son precisamente éstos detalles los que resaltan la Potencia y Seguridad de un sistema de archivos UNIX/Linux.

  • Hemos sido capaces de insertar dentro de nuestra estructura jerárquica de archivos que nace en /, un sistema de ficheros que no es ext3 o ext4, tal y como sucede cuando montamos un sistema de archivos NTFS, FAT, o FAT32 en nuestro equipo con Debian. Operaciones normales que hacemos sin observar su esencia.
  • Después de montado el recurso remoto, podemos tratar a sus carpetas y ficheros como locales.
  • No se requiere de una letra ni nada por el estilo para hacer referencia al recurso remoto.
  • No necesitamos tener nuestro Linux unido a un Dominio Windows. Sólo necesitamos una cuenta de usuario en ese Dominio para acceder a recursos compartidos en los cuales tenga permisos nuestro usuario. Ésto también se puede hacer desde un cliente Windows. Ok?.

Ejemplo 2

Queremos montar el recurso compartido //w2003/tierramedia en la carpeta local /home/xeon/lan con las credenciales del usuario pipin perteneciente al dominio amigos.cu. También necesitamos acceder a los archivos con permisos de lectura/escritura y que el propietario sea el usuario local mediante el cual hemos iniciado sesión y que en nuestro ejemplo es xeon:

xeon@miwheezy:~$ sudo mount.cifs //w2003.amigos.cu/tierramedia /home/xeon/lan -o user=pipin,uid=xeon,forceuid

Seamos nuevamente curiosos y listemos la carpeta lan. Ahora el propietario es xeon y el grupo sigue siendo root. No necesitamos indicarle al mount.cifs la opción rw para tener acceso de lectura/escritura. Los permisos inherentes a un sistema de archivos UNIX/Linux lo garantizan. Lo podemos comprobar creando y borrando directorios; modificando archivos existentes, etcétera.

Ejemplo 3

Cada vez que se inicie nuestro equipo local, queremos montar el recurso compartido //w2003/tierramedia en la carpeta local /home/xeon/lan con las credenciales del usuario pipin perteneciente al dominio amigos.cu. También necesitamos acceder a los archivos con permisos de lectura/escritura y que el propietario sea el usuario local mediante el cual hemos iniciado sesión y que en nuestro ejemplo es xeon.

Una sencilla solución es la de crear un script en el directorio /etc/init.d, darle permisos de ejecución e incluirlo entre los programas que se ejecutan al inicio. Como el usuario root ejecutamos:

 nano /etc/init.d/monta-tierramedia.sh

y añadimos el siguiente contenido al recién creado script de inicio:

#! /bin/sh
### BEGIN INIT INFO
# Provides: Monta el recurso remoto //w2003/tierramedia en /home/xeon/lan
# Required-Start:    $local_fs $syslog 
# Required-Stop:     $local_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Monta recurso remoto
### END INIT INFO
mount.cifs //10.10.10.30/tierramedia /home/xeon/lan \
-o user=pipin,password=contrasena,uid=xeon,gid=xeon, \
forceuid,forcegid

Posteriormente le damos permiso de ejecución al script y lo incluimos entre los scripts de inicio. Como el usuario root ejecutamos:

chmod u+x,o-r,o-x /etc/init.d/monta-tierramedia.sh
update-rc.d monta-tierramedia.sh defaults

Si todo lo hicimos correctamente, no debemos recibir ningún mensaje de error. Para comprobar si la sintaxis del script es la correcta, lo ejecutamos manualmente, y tampoco debemos recibir ningún mensaje de error. Como el usuario root ejecutamos:

/etc/init.d/monta-tierramedia.sh

Resumen

Podemos escribir numerosos ejemplos, pero ese NO es nuestro objetivo. Debemos ir de lo sencillo a lo complejo y éste post es un Punto de Entrada al tema. Nuestros artículos se basan en lo fundamental en las páginas del manual o Man Pages y en la documentación acompañante de cada paquete. Tratamos de ofrecer algo diferente o que complemente a la mayoría de los artículos encontrados en la Aldea WWW.

Si deseamos utilizar Software Libre sobre redes Microsoft, SMB/CIFS, y Samba, hay que al menos leer!!!. Sino, sufriremos las consecuencias del Desconocimiento Básico.

Un consejo gratis: ¿Para que vamos a hacer las cosas difíciles si las podemos implementar bien fáciles?.

Y por ahora, se acabó la actividad, Amigos!!!.


20 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.   Erick dijo

    muy bueno el post debo decir, que bueno que el amigo este ampliando esta informacion ya que samba es un enredijo para muchos, Saludos

    1.    Federico Antonio Valdés Toujague dijo

      Gracias por comentar Erick!!!. Si observas, el enfoque que damos es ligeramente diferente a lo común para que los lectores entiendan mejor el tema Samba. Si leen los cuatro posts publicados hasta ahora, se «desenreda». 🙂

  2.   andye dijo

    También se puede montar un recurso compartido con samba/cifs al inicio incluyendo una línea en el archivo fstab. Algo así:

    //(ip o nombre del servidor samba)/(recurso compartido) /(directorio donde montar) cifs credentials=/(ruta al archivo con el usuario y la contraseña),uid=(id del usuario de este equipo que poseerá los archivos),gid=(igual que antes pero para el grupo),iocharset=utf8,auto 0 0

    iocharset=utf8 está claro que es para la codificación de los archivos.
    auto es para que se monte automáticamente al inicio. Si no queremos que lo haga habrá que poner no-auto, pero en este caso solo root podrá montar el sistema de archivos. Si queremos que cualquier usuario pueda montar el recurso compartido habría que poner la opción «users» al final.

    En vez de la opción credentials, se puede poner la que tu usas de user y password. El problema sería que cualquier persona con cuenta en el equipo podría saber el usuario y contraseña usados para realizar el montaje. En cambio si el usuario y contraseña están en un archivo a parte, a este archivo se le pueden poner permisos restrictivos para que nadie sepa el usuario y contraseña, sino es root.

    En el archivo de credenciales van dos líneas:

    username=(nombre de usuario)
    password=(contraseña)

    Para tu ejemplo la línea del fstab sería:

    //10.10.10.30/tierramedia /home/xeon/lan cifs credentials=/etc/credenciales,uid=xeon,gid=xeon,iocharset=utf8,auto 0 0

    Y en el archivo /etc/credenciales:

    username=pipin
    password=contrasena

    Y a este archivo le pondríamos de usuario y grupo root, y que solo el propietario del archivo tenga permiso de lectura sobre él.

    Fácil y rápido, y la opción más recomendada.

    1.    Rafael dijo

      Soy usuario de OpenSUSE en un dominio Windows y monto las conexiones en fstab, pero , a pesar de tener _netdev como parámetro, finalmente falla en el arranque por no estar levantada la red a tiempo y tengo que forzar más tarde el montaje.

      Sin embargo, con el script de este artículo, puedo conseguir que se monte tras arrancar KDE, a ver si cuela …

      Un saludo

    2.    Alvaro García Bruce dijo

      ANDYE ¿Qué pasa si el recurso se llama Tierra Media en lugar de Tierramedia? Intenté realizar el ejemplo basado en la opción que mencionas. Con Tierramedia se monta sin problema pero con Tierra Media me manda error en esa línea del fstab. ¿Cómo se puede solucionar si por alguna razón es imposible cambiar el nombre de la carpeta?

      1.    andye dijo

        Ten en cuenta que el nombre del recurso compartido no tiene porqué ser igual al nombre de la carpeta. A lo mejor así lo solucionas.

        Sino siempre puedes escapar el espacio del recurso compartido con una barra invertida quedando como tierra media. Que recuerde nunca lo he probado en fstab, pero debería funcionar.

  3.   andye dijo

    En tu ejemplo también se puede cambiar la el user y password por un archivo de credenciales:

    mount.cifs //10.10.10.30/tierramedia /home/xeon/lan
    -o credentials=/etc/credenciales,uid=xeon,gid=xeon,
    forceuid,forcegid

  4.   Federico Antonio Valdés Toujague dijo

    Muchas Gracias por tus comentarios y aporte, @andye!!!. Se que se puede declarar el montaje en el fstab, para que se monte cad vez que inciamos el sistema. Personalmente prefiero una solución que no toque el archivo /etc/fstab, y es por lo cual puse ese ejemplo sencillo. También responde a preguntas que me han hecho sobre como encabezar los scripts de inicio en tareas sencillas en Squeeze y Wheezy.

    1.    Julio Cesar dijo

      Buen post mi socio sigue haciendo buenos aportes saludos el Freeke

      1.    Federico Antonio Valdés Toujague dijo

        Gracias por comentar, Freeke!!!. El próximo post tratará sobre cómo implementar un servidor Samba Standalone.

  5.   Pepo dijo

    Amigos con Debian tengo el siguiente problema:

    sudo mount.cifs //192.168.6.2/Archive /home/pepo/backupA1330/mntCentro -o user=miusuario,password=mipassword

    mount error(5): Input/output error
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

    Esto me está ocurriendo desde hace algún tiempo y ahora tengo que usar el entorno gráfico porque con Dolphin no tengo problema usando smb://192.168.6.2/Archive

  6.   Federico Antonio Valdés Toujague dijo

    Saludos Pepo!!!. Personalmente nunca he recibido ese mensaje de error. Prueba a leer los mensajes del núcleo abriendo una consola y ejecutando como root tail -f /var/log/syslog, mientras que en otra ejecutas el comando mount.cifs… a ver si obtienes más datos que te puedan orientar. Éxitos.

    1.    Pepo dijo

      HOla, a continuación el LOG que obtengo (/var/log/syslog):

      Sep 6 20:34:05 avernum kernel: [74531.103307] FS-Cache: Netfs ‘cifs’ registered for caching
      Sep 6 20:34:05 avernum kernel: [74531.103411] Key type cifs.spnego registered
      Sep 6 20:34:05 avernum kernel: [74531.103441] Key type cifs.idmap registered
      Sep 6 20:34:06 avernum kernel: [74532.602462] CIFS VFS: Send error in SessSetup = -5
      Sep 6 20:34:06 avernum kernel: [74532.602768] CIFS VFS: cifs_mount failed w/return code = -5

  7.   gabux dijo

    Gracias de verdad, este tipo de aporte en desdelinux son de mucha ayuda, gracias a gente como uds nos abrimos al campo extenso de linux…. Gracias a todos…

    1.    federico dijo

      Gracias a ti por comentar @gabux. Alegre de que te abras camino en Linux !!!.

      1.    gabux dijo

        No de verdad gracias a ti Federico y cia (desdelinux), cada día aprendo más con uds, la verdad que me siento como un pequeño saltamonte en este inmenso campo que es linux… 😀

  8.   Sarvelio Navarro dijo

    Buen dia, lei el post se me hace muy interesante y completo me aclaro varias dudas, sin embargo algo que aun me zumba en la mente es que hacer, si tengo que acceder a una carpeta compartida de una maquina que esta pegada a un dominio, el parametro para agregarlo cual seria o se adjunta en el parametro user

  9.   Sarvelio Navarro dijo

    tks

  10.   Rafael dijo

    Después de mucho caldearme la cabeza, y para no tener que hacer nada «a mano», mi consejo es que uséis «smb4k» (Advanced Network Neighborhood Browser for KDE) que os permite desde el entorno de ventana montar y acceder a recursos en servidores Samba. Incluso tiene una opción, si usamos portátil y enchufamos a una red con recursos samba, que automáticamente las monta y desmonta al pasar a modo suspenso o hibernar el portátil.

  11.   Javier Herrera dijo

    Saludos, excelente post, me ayudo mucho, sin embargo quiero ir mas alla… quisiera montar el recurso compartido sin tener que escribir el password. Explico el entorno

    El recurso compartido se encuentra en un windows server con active directory
    El CENTOS es miembro del active directory
    El usuario con que me logueo en el centos es un usuario creado en el active directory de windows
    La carpeta compartida en el servidor active directory tiene como dueño el usuario con que estoy iniciando sesion