Montar o Samba a partir da linha de comando como não-root, leitura/gravação, sem fstab?

Montar o Samba a partir da linha de comando como não-root, leitura/gravação, sem fstab?

Bem, pensei que isso teria sido mais fácil, mas simplesmente não consigo descobrir se o que quero é viável.

Quero montar um compartilhamento de rede Samba a partir da linha de comando no Ubuntu 20.04 (MATE) - de preferência sem nenhuma alteração nos arquivos ou salvando configurações em algum lugar; apenas uma linha de comando.

Então primeiro eu tentei:

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

Isso funciona muito bem - no sentido de montar, listar arquivos e fornecer acesso somente leitura aos arquivos; mas não permite gravar arquivos (permissão negada).

Aparentemente, isso se deve a:

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

Você está montando o compartilhamento CIFS como root (porque usou o sudo), portanto não pode escrever como usuário normal. Se sua distribuição Linux e seu kernel forem recentes o suficiente para que você possa montar o compartilhamento de rede como um usuário normal (mas em uma pasta de propriedade do usuário), você terá as credenciais adequadas para gravar o arquivo

Sim, quero "montar o compartilhamento de rede como um usuário normal", e isso pode parecer uma opção - no entanto, meu nome de usuário no Ubuntu é diferente do nome de usuário do Samba, então:

Uma alternativa é especificar o ID do usuário e do grupo que o compartilhamento de rede montado deve usar, o que permitiria que esse usuário específico e potencialmente o grupo escrevessem no compartilhamento. Adicione as seguintes opções à sua montagem: ...


Primeiro problema - como você desmonta o item acima; Eu fiz:

$ sudo umount /tmp/myshare
$ 

... e como não relata erros, presumo que tenha sido concluído corretamente, mas tento:

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

... os arquivos ainda estão listados, então o compartilhamento está montado; Acontece que (atravéshttps://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount) para desmontá-lo, tenho que fazer:

$ sudo umount -a -t cifs -l

Aqui está a parte complicada - se eu quiser montar como usuário normal e ainda especificar o nome de usuário SMB, terei que escrever o mesmo comando acima, mas sem sudo:

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

Então, talvez eupoderiacaso contrário, executei isso como não-root,seNão precisei usar a useropção - mas uso. Portanto, não posso realmente usar este comando.

Uma sugestão para contornar isso é especificar opções no fstab - via montar pasta compartilhada cifs sem sudo:

Para poder montar essa pasta como um usuário normal, inclua as opções de montagem da pasta cifs no arquivo de configuração /etc/fstab e adicione as opções noauto,user,

No entanto, eu façonãoquero fazer isso, porque não quero manter registros das credenciais SMB em minha máquina - e se eu tiver que editar o fstab, então recai sobre mim a responsabilidade de excluir a entrada do fstab assim que isso for feito, e geralmente nesse momento quando estou cansado, posso esquecer, blá, blá.

Descobri que provavelmente é algum recurso de segurança:

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

A limitação -o (apenas o root pode especificá-la) existe para proteger o sistema: o administrador pode configurar quaisquer opções que sejam necessárias, seja diretamente usando -o ou usando /etc/fstab; os usuários só podem fazer com que sistemas de arquivos controláveis ​​pelo usuário sejam montados ou desmontados, sem especificar opções, porque as opções do sistema de arquivos permitem vários cenários hostis. Como resultado, alguns sistemas de arquivos suportam outras formas de definir determinadas opções, como a variável de ambiente USER usada acima com CIFS.

Ah, sim, mas para mim é mais seguro não inserir nenhum caminho SMB /etc/fstab.

Então, eu realmente gostaria de montarapenasusando uma linha de comandosemalterando quaisquer arquivos de configuração (incluindo /etc/fstab) em qualquer lugar.

Eu esperava que houvesse outro comando e descobri gvfs-mount- mas estou com o mesmo problema queMonte o compartilhamento SMB com gvfs na linha 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:
$

Neste ponto, parece que foi montado, mas na verdade não foi:

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

... e via gvfs-mount -l, podemos ver que não há ponto de montagem correspondente:

$ 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

... e portanto não podemos acessar nenhum arquivo com esta "montagem" de qualquer maneira.


Novamente, como você desmonta isso - você não pode fazer isso umount /tmp/myshare, não é considerado montado; descobri isso aquiDesmontar o compartilhamento gvfs samba com arquivo aberto:

$ 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.

Depois disso, verificar com gvfs-mount -lconfirma que o compartilhamento realmente desapareceu)


E para abordar a menção de gio mount- primeira observação, que sem iniciar uma sessão dbus, ela falha com:

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

... então, dentro de um shell iniciado por dbus-launch bash, ele se comporta exatamente da mesma forma 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, mas:

$ 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

... novamente, não há ponto de montagem do diretório local.


Dito isso: é possível montar o compartilhamento SMB, a partir da linha de comando, sem alterar nenhum arquivo local (como, e principalmente /etc/fstab), sem sudo e com permissões r/w (que confirmei no Windows, o O usuário SMB MYUSER possui) - e se for, como?

Responder1

Bem, postando isso como uma resposta, como descobri, alguns desses gvfs/ giocomandos aparentemente funcionaram - eu simplesmente não estava olhando para a pasta de montagem correta; aparentemente no meu Ubuntu 20.04 não é:

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

... mas ao invés:

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

... e os arquivos estão lá, e eu posso ler/escrever ... Agora estou intrigado como ele ainda está lá, pois acho que o desmontei ... tudo bem.

Bem, estou feliz depois de todas essas décadas de desenvolvimento, o compartilhamento de arquivos é tão fácil hoje em dia! E ansioso por novas mudanças, esperamos ver ~/.cache/.etc/gvfs-2/em uso, para termos ainda mais quebras e ainda mais respostas inúteis, que teremos que passar horas vasculhando, no futuro! O desenvolvimento da tecnologia não é ótimo?:)

Responder2

O ponto de montagem não está abaixo~/.cache/gvfs/Está abaixo/executar/usuário/1000/gvfs

Substitua 1000 pelo seu próprio número UID

Vou montar uma de minhas próprias ações:

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

Vou verificar se 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'

Vou verificar o conteúdo do compartilhamento 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'

Vou desmontar o compartilhamento:

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

Vou verificar se ainda 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 ..

informação relacionada