8 de nov. 2009

Linux, añadir unidad de red windows

http://rubensa.wordpress.com/2006/05/08/linux-samba/


La red que hay montada en mi lugar de trabajo es una red Windows. Actualmente estoy intentando utilizar lo más posible la distributción Ubuntu que tengo instalada para realizar mi trabajo diario. Una de las necesidades que me surgen es el acceso a unidades compartidas de red de otros equipos Windows.

Aunque el administrador de archivos Nautilus que tiene el Gnome me permite navegar por unidades compartidad de Windows, muchas de las aplicaciones existentes no “entienden” el protocolo “smb” y por tanto no pueden acceder a los archivos que se encuentran en dichas unidades.

Para solucionar este inconveniente, lo mejor es “montar” las unidades compartidas en nuestro arbol de directorio para que todas las aplicaciones vean las unidades como si de un directorio más se tratasen.

Antes de nada, lo primero que necesitamos es añadir el soporte para samba (así se conoce el sistema de compartición de carpetas de Windows) a nuestro GNU/Linux. En Ubuntu, basta con instalar los paquetes “smbfs”, “samba”, “samba-common” y “smbclient”.

A continuación crearemos la carpeta en la que “montaremos” la unidad compartida:

$ sudo mkdir /mnt/compartida

Una vez que nuestro sistema tiene instalado todo lo necesario, ya “entenderá” el protocolo de Samba y podemos “montar” la unidad compartida con el comando:

$ sudo mount -t smbfs -o username='usuario',password='clave',workgroup=grupowin //equipowin/compartida /mnt/compartida

Con lo que conseguimos que la carpeta compartida “compartida” del equipo “equipo.red” esté accesible en el directorio “/mnt/compartida” de nuestro equipo, como si de un directorio local se tratase.

Si lo deseamos, también podemos editar el fichero “/etc/fstab” para añadir una línea que defina cómo se montará esta unidad de red. Antes de ello hacemos una copia de seguridad por si acaso mediante la orden:

$ sudo cp /etc/fstab /etc/fstab_backup

Y después lo editamos mediante:

$ sudo gedit /etc/fstab

Añade lo siguiente al final del fichero:

//equipowin/compartida /mnt/compartida smbfs username=usuario,password=clave,workgroup=grupowin,user,owner,noauto 0 0

Tendrás que personalizar esta línea para cambiar:

* equipowin por el nombre de la máquina Windows a la que te estás conectando
* compartida por el nombre de la carpeta compartida
* /mnt/compartida por el nombre del directorio donde lo quieras montar
* la ip de la máquina Windows a la que te conectas
* username, poner el del usuario en Windows
* password, poner la clave del usuario en Windows
* grupowin por el nombre del grupo de trabajo o dominio en Windows

Sólo hace falta ejecutar:

$ sudo chmod +s /usr/bin/smbmnt

para hacer que un usuario “normal” pueda montar la unidad.

Ahora abre tu equipo mediante Lugares -> Equipo y verás un nuevo icono representando a la carpeta compartida. Mediante un doble clic en ella, se montará la unidad. También puedes montarla con la orden:

$ mount /mnt/compartida

Para desmontarla, hay que ser root, por lo que no puedes desmontarla más que ejecutando:

$ sudo umount /mnt/compartida

Opcones más comunes de mount
La cuarta columna del fichero fstab lista todas las opciones de montaje para el dispositivo o partición. Hay muchas opciones disponibles, pero estas son las más comunes:

* credentials: Permite tener el usuario y contraseña en un fichero en vez de proporcionarlo como parámetro en el comando. El contenido del fichero será similar a esto:

username=usuariowindows
password=passwordwindows

Y generalmente se le asignará permiso de escritura y lectura solamente para el propietario (chmod 600)
* auto y noauto: Con auto (opción por defecto) el dispositivo se montará automaticamente.
* user y nouser: La opción user permite que usuarios normales monten el dispositivo mientras que nouser (valor por defecto) solamente lo permite para root.
* exec y noexec: exec (valor por defecto) permite ejecutar binarios de la partición, mientras que noexec no lo permite.
* ro y rw: ro monta el sistema de archivos en modo solo lectura mientras que rw (valor por defecto) lo monta en modo lectura/escritura.
* sync y async: Indica cómo se realizará la entrada y salida del sistema de archivos. sync significa que se hará de forma síncrona (al ejecutar un comando, se escribe físicamente en el dispositivo el resultado) mientras que con async (valor por defecto) se realiza asíncronamente (el sistema de archivos se sincroniza antes de desmontar la unidad).
* defaults: Utiliza las opciones por defecto que son rw, suid, dev, exec, auto, nouser, y async.

Opciones de smbmount

* username=: nombre de usuario SMB
* password=: contraseña SMB
* netbiosname=: nombre NetBIOS origen
* uid=: usuario que será propietario de la unidad montada
* gid=: grupo que será propietario de la unidad montada
* port=: número puerto remoto SMB
* fmask=: máscara de permisos asignados a los ficheros de la unidad montada
* dmask=: máscara de permisos asignados a los directorios de la unidad montada
* debug=: nivel de depuraciñon
* ip=: nombre host o dir. IP destino
* workgroup=: dominio/grupo NetBios destino
* sockopt=: opciones socket TCP
* scope=: NetBIOS scope
* guest: invitado, sin contraseña
* ro: montar solo-lectura
* rw: montar lectura-escritura

Solución de problemas

Problema:Al montar una unida con:

$ sudo mount -t smbfs -o username=user,password=pass //IP/recurso /mnt/tmp

Nos monta la unidad pero nos dice esto:

20389: session request to IP failed (Called name not present)
20389: session request to 192 failed (Called name not present)

esto se soluciona buscando el nombre NetBios de la máquina a la que se le requiere el servicio:

nmblookup -A IP

por ejemplo:

nmblookup -A 192.168.78.1

y una vez obtenido (si lo sabemos de memorio no hace falta, claro), procedemos al montaje de la unidad mediante:

$ sudo mount -t smbfs -o username=user,password=pass //NOMBRE_NETBIOS/recurso /mnt/tmp

Hecho esto no nos debe a aparecer ninguna alerta al respecto.