¿Montar Samba desde la línea de comando como no root, lectura/escritura, sin fstab?

¿Montar Samba desde la línea de comando como no root, lectura/escritura, sin fstab?

Bueno, pensé que esto habría sido más fácil, pero simplemente no puedo saber si lo que quiero es factible.

Quiero montar un recurso compartido de red Samba desde la línea de comandos en Ubuntu 20.04 (MATE), preferiblemente sin realizar cambios en los archivos ni guardar la configuración en algún lugar; solo una línea de comando.

Entonces primero probé:

sudo mount -t cifs -o user=MYSMBUSER //192.0.2.1/myshare /tmp/myshare

Esto funciona muy bien, en el sentido de montar, enumerar archivos y proporcionar acceso de sólo lectura a los archivos; pero no permite escribir archivos (permiso denegado).

Esto aparentemente se debe a:

https://unix.stackexchange.com/questions/68079/mount-cifs-network-drive-write-permissions-and-chown

Está montando el recurso compartido CIFS como root (porque usó sudo), por lo que no puede escribir como usuario normal. Si su distribución de Linux y su kernel son lo suficientemente recientes como para poder montar el recurso compartido de red como un usuario normal (pero en una carpeta que pertenece al usuario), tendrá las credenciales adecuadas para escribir el archivo.

Sí, quiero "montar el recurso compartido de red como un usuario normal", y esto puede parecer una opción; sin embargo, mi nombre de usuario en Ubuntu es diferente del nombre de usuario de Samba, entonces:

Una alternativa es especificar el ID de usuario y grupo que debe usar el recurso compartido de red montado; esto permitiría que ese usuario en particular y potencialmente el grupo escriban en el recurso compartido. Agregue las siguientes opciones a su montura: ...


Primer problema: ¿cómo se desmonta lo anterior? He hecho:

$ sudo umount /tmp/myshare
$ 

... y como no informa errores, asumo que se completó bien, pero luego intento:

$ ls /tmp/myshare
file_from_share01.txt  file_from_share02.txt ...

... los archivos todavía aparecen en la lista, por lo que el recurso compartido está montado; resulta (a través dehttps://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount) para desmontarlo, tengo que hacer:

$ sudo umount -a -t cifs -l

Aquí está la parte complicada: si quiero montar como usuario normal y aún así especificar el nombre de usuario SMB, tendría que escribir el mismo comando que el anterior, pero sin sudo:

$ mount -t cifs -o user=MYUSER //192.0.2.1/myshare /tmp/myshare
mount: only root can use "--options" option

Entonces, tal vez yopodríaDe lo contrario, he ejecutado esto como no root,siNo tuve que usar la useropción, pero la hago. Entonces realmente no puedo usar este comando.

Una sugerencia para solucionar este problema es especificar opciones en fstab, a través de montar carpeta cifs compartida sin sudo:

Para poder montar esa carpeta como un usuario normal, incluya las opciones de montaje para la carpeta cifs en el archivo de configuración /etc/fstab y agregue las opciones noauto,user,

Sin embargo, lo hagonoQuiero hacer esto porque no quiero mantener registros de las credenciales de SMB en mi máquina, y si tengo que editar fstab, entonces tengo la responsabilidad de eliminar la entrada de fstab una vez hecho esto, y generalmente en ese momento. vez que estoy cansado, podría olvidar, bla, bla.

Descubrí que probablemente se trate de alguna característica de seguridad:

https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user

La limitación -o (solo el root puede especificarla) existe para proteger el sistema: el administrador puede configurar cualquier opción que sea necesaria, ya sea directamente usando -o o usando /etc/fstab; Los usuarios sólo pueden hacer que los sistemas de archivos controlables por el usuario se monten o desmonten, sin especificar opciones, porque las opciones del sistema de archivos permiten una serie de escenarios hostiles. Como resultado, algunos sistemas de archivos admiten otras formas de configurar ciertas opciones, como la variable de entorno USER utilizada anteriormente con CIFS.

Eh, sí, pero para mí es más seguro no ingresar ninguna ruta SMB /etc/fstab.

Entonces realmente me gustaría montarjustousando una línea de comandosincambiando cualquier archivo de configuración (incluido /etc/fstab) en cualquier lugar.

Esperaba que hubiera otro comando y lo encontré gvfs-mount, pero tengo el mismo problema queMontar el recurso compartido SMB con gvfs desde la línea de comando:

$ dbus-launch bash
$  gvfs-mount smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

En este punto, parece que se montó, pero en realidad no fue así:

$ ls /run/user/1000/gvfs/
$

... y vía gvfs-mount -l, podemos ver que no hay ningún punto de montaje correspondiente:

$ gvfs-mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... y por eso no podemos acceder a ningún archivo con este "montaje" de todos modos.


Nuevamente, ¿cómo se desmonta esto? No se puede hacer umount /tmp/myshare, ni siquiera se considera montado; encontré que aquíDesmontar el recurso compartido gvfs samba con el archivo abierto:

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

$ gvfs-mount -u smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

Después de esto, consultar con gvfs-mount -lconfirma que el recurso compartido efectivamente desapareció)


Y para abordar la mención de gio mount: primera nota, que sin iniciar una sesión dbus, falla con:

$ gio mount smb://192.0.2.1
gio: smb://192.0.2.1: volume doesn’t implement mount

... luego, dentro de un shell iniciado por dbus-launch bash, se comporta exactamente igual que gvfs-mount:

$ gio mount smb://192.0.2.1/myshare
Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

Parece que está montado, pero:

$ gio mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... nuevamente no hay ningún punto de montaje del directorio local.


Dicho lo anterior: ¿es posible montar un recurso compartido SMB, desde la línea de comandos, sin cambiar ningún archivo local (como y especialmente /etc/fstab), sin sudo y con permisos de lectura/escritura (que he confirmado en Windows, el El usuario SMB MYUSER tiene) - y si es así, ¿cómo?

Respuesta1

Bueno, al publicar esto como respuesta, resultó que algunos de esos comandos gvfs/ gioaparentemente funcionaron; aparentemente no estaba mirando la carpeta de montaje correcta; aparentemente en mi Ubuntu 20.04 no lo es:

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

... pero en lugar:

$ ls ~/.cache/gvfs/
'smb-share:server=192.0.2.1,share=myshare'

... y los archivos están ahí, y puedo leer/escribir... Ahora me sorprende cómo sigue ahí, ya que creo que lo desmonté... oh, bueno.

Bueno, estoy feliz después de todas estas décadas de desarrollo, ¡compartir archivos es tan fácil hoy en día! Y esperamos más cambios, con suerte veremos ~/.cache/.etc/gvfs-2/en uso, para que obtengamos aún más roturas y respuestas aún más inútiles, ¡que tendremos que pasar horas rastreando en el futuro! ¿No es fantástico el desarrollo de la tecnología?:)

Respuesta2

El punto de montaje no está debajo~/.cache/gvfs/está debajo/ejecutar/usuario/1000/gvfs

Reemplace 1000 con su propio número uid

Montaré una de mis propias acciones:

~$ gio mount smb://vubmate2004.local/Private
Password required for share private on vubmate2004.local
User [tester]: tester
Domain [WORKGROUP]: 
Password: 

Comprobaré si está montado:

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  3 tester tester   0 Jan  5 15:08  .
drwx------ 10 tester tester 300 Jan  5 15:13  ..
drwx------  1 tester tester   0 Jan  5 15:14 'smb-share:server=vubmate2004.local,share=private'

Verificaré el contenido del recurso compartido montado:

~$ ls -al /run/user/1000/gvfs/smb-share:server=vubmate2004.local,share=private
total 0
drwx------ 1 tester tester 0 Jan  5 15:14  .
dr-x------ 3 tester tester 0 Jan  5 15:08  ..
-rwx------ 1 tester tester 0 Jan  5 15:14 'new file'

Desmontaré el recurso compartido:

~$ gio mount -u smb://vubmate2004.local/Private

Comprobaré si todavía está montado:

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  2 tester tester   0 Jan  5 15:08 .
drwx------ 10 tester tester 300 Jan  5 15:13 ..

información relacionada