Como montar corretamente a unidade SMB sob demanda no Linux?

1

Uso principalmente meu laptop e, quando estou em casa, gosto de acessar os compartilhamentos SMB no meu NAS. Embora eu possa facilmente fazê-lo no Thunar (eu uso o XFCE) simplesmente digitando smb: //nas.address/share na barra de endereços, nenhum outro aplicativo pode acessar os arquivos no compartilhamento. Por exemplo, se eu clicar duas vezes em um arquivo de vídeo no meu / movies share, gostaria que ele começasse a tocar em meu player de vídeo preferido (VLC), mas em vez disso recebi um insulto de mensagens de erro e preciso forçar a saída VLC. Eu sei que posso configurar montagens permanentes via fstab, mas 1) Eu quero ser solicitado para as credenciais ao montar em vez de armazená-las permanentemente no meu computador e 2) desde que é um laptop, muitas vezes eu vou usá-lo quando estou fora do minha rede local e eu não quero que ele tente montar unidades na inicialização que não estão disponíveis (e não, eu não tenho intenção de abrir meus compartilhamentos SMB para a Internet). Estou cansado de ter que copiar tudo o que quero assistir / escutar no meu laptop via Thunar primeiro - como as pessoas lidam com esse incômodo?

Edit: Isto é o que parece ser o popup de autenticação no Thunar

Muitopromissor,exatamenteoqueseesperariaver-excetoqueumaautenticaçãoqueé"lembrada até que você efetue logout" somente aplica-se ao Thunar e a outros aplicativos. Tanto quanto eu posso ver, um caminho smb: // é como qualquer outro URL, e com as credenciais armazenadas em minha sessão de usuário, qualquer aplicativo em execução nessa sessão deve ser capaz de usar essas credenciais para acessar a URL - desde claro que o sistema operacional tem um manipulador registrado para URLs de SMB.

    
por Ola Tuvesson 22.07.2017 / 01:00

2 respostas

2

Eu uso autofs para montar meus compartilhamentos NFS sob demanda no meu Kubuntu.

autofs is a program for automatically mounting directories on an as-needed basis. Auto-mounts are mounted only as they are accessed, and are unmounted after a period of inactivity. Because of this, automounting NFS/Samba shares conserves bandwidth and offers better overall performance compared to static mounts via fstab.

No seu caso, isso é útil:

When specifying a CIFS share in a map file, specify -fstype=cifs and precede the share location with a colon (:).

Example:

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

Example: Mount read-write, specifying a user and group to own the files:

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

Example: Mount read-write, specifying a username and password to use to connect to the share:

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

Um arquivo de mapa é /etc/auto.master ou /etc/auto.* ou por ex. %código%. Leia a documentação e saiba como configurar o daemon.

À primeira vista, parece que esta não é a solução perfeita para você, porque parece que você precisa armazenar as credenciais em um arquivo. Este seria um arquivo de mapa (como no exemplo acima) ou um arquivo separado, por exemplo /etc/auto.master.d/* como você pode ver aqui . No entanto existe este comentário lá :

I suppose you could make credentials.txt a named pipe and run a password prompting program to feed the pipe.

Se isso estiver correto, então espero que esse "programa de prompts de senha" seja apenas um único credentials.txt ou echo que você invoque manualmente.

EDITAR:

What I'm asking for is an easy way to do this without having to manually invoke the command at a prompt, and without having to store (or fudge) the credentials in a file.

O Linux pode montar / desmontar vários sistemas de arquivos via printf e mount.* executáveis. Essa opção umount.* no exemplo vinculado é, na verdade, uma opção para credentials=/etc/credentials.txt . Eu acho que se você usar algo como

mount -t foo …

ou na configuração mount.cifs :

mntpoint -fstype=foo …

ele tentará encontrar e executar autofs , passando todas as outras opções para ele.

Portanto, você deve criar mount.foo como um wrapper acima de mount.mycifs . Ele deve solicitar suas credenciais de alguma forma (simples mount.cifs talvez, use xterm -e … ou read ou outra coisa; mas leia isto por favor ), adicione dialog ou -o username=…,password=… ao restante das opções e passe-as para -o credentials=… (ou mount.cifs ) que faz a montagem real.

Se você tiver mount -t cifs , faça umount.cifs um link simbólico para ele.

Em seguida, use umount.mycifs no seu arquivo de mapeamento sem nenhuma opção relacionada a credenciais.

O seguinte -fstype=mycifs é uma prova de conceito rápida e suja. Entenda o que ele faz antes de executá-lo no seu sistema operacional porque ele será executado como /sbin/mount.mycifs , eu sou um cara aleatório na Internet e você não deve confiar em mim.

#!/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"

Ele deve ser de propriedade de root ou o que for apropriado para root:root em seu sistema operacional. Não se esqueça de torná-lo executável ( mount.* ), não funcionará de outra forma. Observe que há um corte desagradável com sudo chmod a+x /sbin/mount.mycifs e DISPLAY que permite que o daemon XAUTHORITY exiba a janela autofs na sua tela (?), Mas em geral, não deve fazer isso . O hack é apenas para o daemon, xterm deve ser capaz de exibir mount -t mycifs … sem o hack se invocado de dentro do seu ambiente de desktop.

Para torná-lo menos sujo, você deve escrever outro programa ou script e executá-lo com as permissões limitadas do usuário local antes de acessar um diretório onde seu CIFS seria montado automaticamente. Esse script deve aguardar por um sinal de xterm , solicitar as credenciais (ele pode exibir janelas etc. sem hacks desagradáveis) e passá-las para mount.mycifs , que não deve exibir janelas nem prompts por si próprio.

    
por 22.07.2017 / 07:39
0

Você afirmou que muitas vezes você o usaria fora de sua rede local, mas afirmou que não deseja abrir seus compartilhamentos SMB na Internet. Se você quiser acessar seus compartilhamentos fora de sua rede local, então você terá que abri-los para a internet, pois não há outra maneira de fazê-lo.

    
por 22.07.2017 / 02:03

Tags