¡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!!!.
muy bueno el post debo decir, que bueno que el amigo este ampliando esta informacion ya que samba es un enredijo para muchos, Saludos
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». 🙂
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.
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
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?
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.
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
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.
Buen post mi socio sigue haciendo buenos aportes saludos el Freeke
Gracias por comentar, Freeke!!!. El próximo post tratará sobre cómo implementar un servidor Samba Standalone.
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
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.
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
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…
Gracias a ti por comentar @gabux. Alegre de que te abras camino en Linux !!!.
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… 😀
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
tks
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.
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