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.


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


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

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

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 :


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.