Escondendo completamente um diretório, mas deixando seus descendentes acessíveis via links simbólicos, no Samba

Escondendo completamente um diretório, mas deixando seus descendentes acessíveis via links simbólicos, no Samba

Devido à maneira como o Samba lida com links simbólicos e links amplos (ele só consegue distinguir "dentro da raiz de compartilhamento" ou "fora da raiz de compartilhamento"), quero criar links simbólicos fixos na raiz de compartilhamento para os diretórios "reais" e, em seguida, evitar o diretórios "reais" sendo mostrados diretamente ao usuário quando ele navega no compartilhamento de rede, conforme mostrado.

Isso é possível?

ESTRUTURA REAL (servidor de arquivos FreeBSD):

share_root
   --- data1
          --- data3
          --- data4
          --- data5
          --- data6
   --- data2
          --- data7
          --- data8
          --- data9
   --- d4 (=symlink to data4)
   --- d6 (=symlink to data6)
   --- d9 (=symlink to data9)

O QUE O USUÁRIO VÊ (cliente Windows):

share_root
   --- d4 (and all data4's subdirs)
   --- d6 (and all data6's subdirs)
   --- d9 (and all data9's subdirs)

   (note: actual access to any dir is controlled by ACLs on data1/data2
    and their subdirs, so this just cleans up the tree seen by a user
    when they browse the share; it doesn't create any security)

Essencialmente, os diretórios "reais" data1/data2 contêm uma mistura de diretórios que o usuário pode/não pode acessar, e esse acesso é imposto por ACLs.

Mas quando o usuário acessa o compartilhamento, quero que ele não veja esses diretórios em primeiro lugar.

Arquivos ocultos "normais" serão mostrados no Windows Explorer, portanto não posso usar "ocultar arquivos" ou arquivos de ponto para fazer isso. Eu poderia usar outros métodos, como arquivos de veto, enumeração controlada por acesso, leitura/transferência de ACL e assim por diante, se ajudarem. No entanto, eu só quero evitar que data1/data2 seja mostrado diretamente ao usuário - não quero interromper a travessiavia links simbólicos d4/d6/d9para subdiretórios de data1/data2.

Isso é possível usando uma combinação de enumeração controlada por acesso, smb.conf e ACLs? Se não, o que me deixaria mais próximo de uma solução?

Responder1

Não tenho certeza se entendi completamente sua solicitação, mas usar nullfsmontarias é a primeira tática que me vem à mente.

Deixe a estrutura física e real de lado. Chame-o physical_rootpor causa deste exemplo.

Crie um novo diretório vazio para o share_roote aponte o Samba para ele em seu smb4.conf.

Em share_root, crie pontos de montagem para todos os diretórios que você deseja expor aos clientes Samba:

for DIR in d4 d6 d9; do
    mkdir /share_root/$DIR
done

Agora faça a montagem nula dos diretórios físicos reais no share_rootespaço falso:

mount_nullfs /physical_root/data1/data4 /share_root/d4
mount_nullfs /physical_root/data1/data6 /share_root/d6
mount_nullfs /physical_root/data2/data9 /share_root/d9

Essas montagens podem ser adicionadas ao /etc/fstab, provavelmente usando a opção 'late':

/physical_root/data1/data4  /share_root/d4  nullfs  rw,late  0  0
...etc...

informação relacionada