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 nullfs
montarias é a primeira tática que me vem à mente.
Deixe a estrutura física e real de lado. Chame-o physical_root
por causa deste exemplo.
Crie um novo diretório vazio para o share_root
e 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_root
espaç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...