¿Cómo montar correctamente la unidad SMB a pedido en Linux?

1

Utilizo principalmente mi computadora portátil, y cuando estoy en casa me gusta poder acceder a los recursos compartidos de SMB en mi NAS. Si bien puedo hacerlo fácilmente en Thunar (uso XFCE) simplemente escribiendo smb: //nas.address/share en la barra de direcciones, ninguna otra aplicación puede acceder a los archivos del recurso compartido. Por ejemplo, si hago doble clic en un archivo de video en mi / compartir películas, me gustaría que comience a reproducirse en mi reproductor de video preferido (VLC), pero en cambio me aparece una pequeña cantidad de mensajes de error y tengo que forzar la salida VLC. Sé que puedo configurar montajes permanentes a través de fstab, pero 1) quiero que me pidan las credenciales cuando las instale en lugar de almacenarlas permanentemente en mi computadora y 2) ya que es una computadora portátil que a menudo usaré cuando esté fuera de mi red local y yo no queremos que intente montar unidades en el arranque que no están disponibles (y no, no tengo ninguna intención de abrir mis recursos compartidos de SMB a Internet). Estoy cansado de tener que copiar todo lo que quiero ver / escuchar en mi computadora portátil a través de Thunar primero. ¿Cómo lidia la gente con esta molestia?

Editar: Así es como se ve la ventana emergente de autenticación en Thunar

This is what the authentication popup in Thunar looks like

De hecho, muy prometedor, exactamente lo que uno esperaría ver, excepto que una autenticación que se "recuerda hasta que se desconecta" solamente Se aplica a Thunar y no a otras aplicaciones. Por lo que puedo ver, una ruta smb: // es como cualquier otra URL, y con las credenciales almacenadas en mi sesión de usuario, cualquier aplicación que se ejecute en esa sesión debería poder usar esas credenciales para acceder a la URL. que el sistema operativo tiene un controlador registrado para las URL de SMB.

Ola Tuvesson
fuente
Windows ha estado haciendo esto perfectamente (aunque inseguro) para décadas - ¿Dónde está el equivalente de Linux?
Ola Tuvesson

Respuestas:

2

yo suelo autofs para montar mis recursos compartidos NFS Bajo demanda en mi kubuntu.

autofs es un programa para montar directorios automáticamente cuando sea necesario. Los montajes automáticos se montan solo cuando se accede a ellos, y se desmontan después de un período de inactividad. Debido a esto, el montaje automático de NFS / Samba conserva el ancho de banda y ofrece un mejor rendimiento general en comparación con los montajes estáticos a través de fstab.

En tu caso esto es útil:

Al especificar un recurso compartido CIFS en un archivo de mapa, especifique -fstype=cifs y precede la ubicación compartida con dos puntos ( : ).

Ejemplo:

mntpoint -fstype=cifs ://example.com/shrname

Ejemplo: Montar lectura-escritura, especificando un usuario y grupo para poseer los archivos:

mntpoint -fstype=cifs,rw,uid=myuserid,gid=mygrpid ://example.com/shrname

Ejemplo: monte lectura-escritura, especificando un nombre de usuario y contraseña para usar para conectarse al recurso compartido:

mntpoint -fstype=cifs,rw,username=myuser,password=mypass ://example.com/shrname

Un archivo de mapa es /etc/auto.master o /etc/auto.* o por ejemplo /etc/auto.master.d/*. Lee la documentación y aprende a configurar el demonio.

A primera vista, parece que esta no es la solución perfecta para usted porque parece tienes que almacenar las credenciales en un archivo. Esto sería un archivo de mapa (como en el ejemplo anterior) o un archivo separado, p. Ej. credentials.txt como puedes ver aquí . sin embargo Ahi esta este comentario allí :

Supongo que podrías hacer credentials.txt una tubería con nombre y ejecute un programa de solicitud de contraseña para alimentar la tubería.

Si esto es correcto, entonces espero que este "programa de solicitud de contraseña" sea solo uno echo o printf Se invoca a mano.


EDITAR:

Lo que pido es una forma fácil de hacer esto sin tener que invocar manualmente el comando cuando se le solicite, y sin tener que almacenar (o falsificar) las credenciales en un archivo.

Linux puede montar / desmontar varios sistemas de archivos a través de mount.* y umount.* ejecutables Esta credentials=/etc/credentials.txt opción en el ejemplo vinculado es, de hecho, una opción para mount.cifs. Creo que si usas algo como

mount -t foo …

o en autofs configuración:

mntpoint -fstype=foo …

tratará de encontrar y correr mount.foo, pasando todas las demás opciones a la misma.

Así que debes crear mount.mycifs como una envoltura sobre mount.cifs. Debería pedirle sus credenciales de alguna manera (sencillo xterm -e … tal vez, uso read o dialog o algo mas; pero Lea esto por favor ), agregar -o username=…,password=… o -o credentials=… Al resto de opciones y pasarlas a mount.cifs (o mount -t cifs ) que hace el montaje real.

Si usted tiene umount.cifs entonces haz umount.mycifs un enlace simbólico a él.

Entonces use -fstype=mycifs en su archivo de mapa sin ninguna opción relacionada con las credenciales.


El seguimiento /sbin/mount.mycifs Es una prueba de concepto rápida y sucia. Entienda lo que hace antes de ejecutarlo en su sistema operativo porque se ejecutará como rootSoy un tipo aleatorio en Internet y no deberías confiar en mí.

#!/bin/bash

tmpf="`mktemp`"
DISPLAY=:0 XAUTHORITY=/home/ola/.Xauthority xterm -e /bin/bash -c '\
read -p "user:" u; \
read -sp "password:" p; \
printf "username=%s\npassword=%s" "$u" "$p" > "$0"; \
' "$tmpf"

mount -t cifs "$@" -o credentials="$tmpf"
rm "$tmpf"

Debe ser propiedad de root:root o lo que sea apropiado para mount.* en su sistema operativo. No te olvides de hacerlo ejecutable ( sudo chmod a+x /sbin/mount.mycifs ), no funcionará de otra manera. Note que hay un truco desagradable con DISPLAY y XAUTHORITY que permite la autofs demonio para mostrar xterm ventana en su pantalla (?) pero en general no debería hacerlo . El hack es solo para el demonio, mount -t mycifs … debe poder mostrar xterm sin el hack si se invoca desde dentro de su entorno de escritorio.

Para hacerlo menos sucio, debe escribir otro programa o script y ejecutarlo con los permisos limitados de su usuario local antes de accede a un directorio donde se montarían automáticamente sus CIFS. Este script debe esperar una señal de mount.mycifs, le pedirá las credenciales (puede mostrar ventanas, etc. sin trucos) y páselos a mount.mycifs que no debería mostrar ninguna ventana ni indicaciones por sí mismo.

Kamil Maciorowski
fuente
Gracias, esto parece una opción interesante, pero ¿por qué no se pueden usar las credenciales de Thunar para esto? Ver actualización a mi pregunta original.
Ola Tuvesson
1
@OlaTuvesson I adivinar Thunar "habla" del protocolo SMB por sí mismo. Otros programas a menudo no entienden smb:// Caminos y protocolo. Cuando tú montar A compartir, estos programas pueden ver el contenido compartido como directorios y archivos, saben cómo abrir archivos normales. Comparar: wget puede descargar desde http:// pero casi ninguna herramienta puede trabajar directamente con tal trayectoria. Sin embargo hay httpfs y httpfs2 que puede montar un recurso compartido HTTP y hacer que aparezca como un archivo para que otros programas lo utilicen.
Kamil Maciorowski
@OlaTuvesson Parece que Thunar pasa las URL sin credenciales, por lo que incluso si un programa determinado puede entender smb:// y el protocolo SMB de "conversación" en sí mismo, como hace VLC, puede que necesite conocer sus credenciales por separado. En VLC puedes introducirlos bajo VLC > Preferences > Show settings (All) > Input / Codecs > Access Modules > SMB, esto funciona para un servidor a la vez. Sigo pensando que el camino correcto es montar una cuota.
Kamil Maciorowski
Gracias. Ya conozco la opción VLC SMB: lo que busco es una forma de hacer que el directorio montado esté accesible para todas las aplicaciones que se ejecutan en mi sesión de usuario, lo cual, como usted dice, se realiza mediante montaje El directorio a nivel del sistema operativo, ya sea utilizando fstab o autofs. Lo que pido es una forma fácil de hacer esto sin tener que invocar manualmente el comando cuando se le solicite, y sin tener que almacenar (o falsificar) las credenciales en un archivo. ¡Es difícil discutir la elegancia de la forma en que Thunar hace esto!
Ola Tuvesson
@OlaTuvesson amplié mi respuesta.
Kamil Maciorowski
0

Declaró que a menudo lo usará cuando esté fuera de su red local, pero luego declaró que no desea abrir sus recursos compartidos de SMB en Internet. Si desea acceder a sus recursos compartidos fuera de su red local, tendrá que abrirlos a Internet, ya que no hay otra forma de hacerlo.

Nasir Riley
fuente
1
Puede montar SMB a través de VPN.
eckes
Disculpas si eso fue confuso, para aclarar: no quiero conectarme a los recursos compartidos de SMB de mi red local cuando no estoy conectado a mi red local.
Ola Tuvesson