Como você faz o samba seguir o link simbólico fora do caminho compartilhado

61

Este é o servidor Ubuntu 10.04 64 e o samba 3.4.7.

Eu tenho um diretório compartilhado /home/mit/sharee outro /home/tempque eu vinculo ao diretório compartilhado:

ln -s /home/temp /home/mit/share/temp

Mas no Windows, depois de usar a Internet, não consigo abrir S:/temp, mas no Linux é possível acessar /home/mit/share/tempcomo esperado.

Isso funciona se eu vincular diretórios dentro /home/mit/share/temp, então acho que o samba está restringindo o salto com um link fora / acima do diretório compartilhado.

EDITAR:

Veja também esta pergunta, intitulada Ubuntu + versão mais recente do samba, os links simbólicos não funcionam mais no compartilhamento montado no Windows .

Parece melhor colocar unix extensions = nona seção global follow symlinks = yese wide links = yessomente na seção de ações, onde você realmente precisa.

A unix extensionbandeira deve estar na seção global e não nas seções de ações individuais. Mas, por razões de segurança, é melhor usar as outras opções somente onde você precisar, e não globalmente.

mit
fonte
Você pode tentar um hardlink em vez de um link simbólico?
Falmarri

Respostas:

92

Editar smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Nota: Se você estiver usando uma versão mais recente do samba, o seguinte poderá funcionar para você:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

documentação follow symlinkse wide linkssinalizadores: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1

Mahesh
fonte
Veja também a explicação no final da pergunta acima, por que essa é uma boa solução.
mit
No caso, alguém luta com todos aqueles comentários ofuscar esse arquivo bastante curto: copiar para um backup, e recriar filtrada: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke
não [share]quer dizer [<share_name>]?
Necktwi
@eckTwi - Isso é o que eu assumi, e funcionou para mim.
Geoff
@ Geoff Isso não funcionou para mim! mudou parasshfs
Necktwi
11

Saudações, tentei colocar isso na configuração para corrigir links simbólicos para Windows na minha instalação, mas não tenho certeza se isso afetará o cliente Windows, caso contrário, segue links simbólicos quando eu me conecto a esta caixa.

[global]                                                                        
unix extensions = no
Qiqi
fonte
A resposta de Qiqi concorda com esta: superuser.com/questions/128716/…
Janus
Sim, isso definitivamente corrige o problema no meu ambiente.
TML 28/07
10

Alternativamente às outras respostas, para manter as extensões unix ativadas, é possível usar:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes
user1182474
fonte
não [share]quer dizer [<share_name>]?
Necktwi
Sim, pode ser qualquer seção do smb.conf que 'descreva um recurso compartilhado (conhecido como “compartilhamento”)' (citado na documentação). Também pode estar em uma seção especial [homes], onde eu a uso. Veja a documentação para detalhes.
user1182474
4

Para permitir que os clientes Samba sigam links simbólicos fora do caminho compartilhado, tudo que você precisa na configuração do Samba é:

[global]
allow insecure wide links = yes
unix extensions = no

[myShare]
wide links = yes

(além do próprio Samba compartilha as definições, é claro). Teoricamente, isso é suficiente para clientes * nix.

NB: A diretiva "follow symlinks" não é necessária, pois o padrão é "yes"

Quanto aos clientes Windows, ainda falta uma configuração para permitir que eles sigam esses links. Para fazer isso:

  1. abrir um shell do Windows com privilégios de administrador
  2. corre :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. reinicie para recarregar as configurações

Nota: o mesmo resultado pode ser obtido editando o registro do Windows. Veja os links abaixo

fontes :

Httqm
fonte
0

Pode ser necessário endereçar mais do que apenas o arquivo de configuração do Samba, se você estiver executando o AppArmor.

Você precisa das seguintes diretrizes no seu smb.conf:

follow symlinks = yes
wide links = yes
unix extensions = no
# No need for "allow insecure wide links" unless you want "unix extensions = yes"

Porém, o AppArmor bloqueia o acesso a partes do sistema de arquivos de acordo com sua própria semântica do conjunto de regras. Portanto, se seu link simbólico no Samba apontasse para um local que o AppArmor iria bloquear, o Samba negaria o acesso.

No meu sistema, o Samba atualiza os perfis do AppArmor no início / parada do serviço, para que eu possa alterar um perfil do AppArmor, mas arrisco o Samba ou outro programa substituí-lo. Em vez disso, decidi criar um compartilhamento inacessível no Samba referenciando o local que continha o destino do link simbólico que eu queria acessar (ainda em smb.conf):

# The following is a hack for AppArmor to allow the path
[share1 for AppArmor] # Or whichever name you choose
    browseable = no
    path = /home # Point to directory or parent directory of the location to access
    read only = yes
    guest ok = no
    valid users = none
palswim
fonte