Esta resposta funciona no Debian (testado no lenny e squeeze). Após investigação, parece funcionar apenas graças a um patch Debian; usuários de outras distribuições, como o Ubuntu, podem estar sem sorte.
Você pode usar mount --bind
. Monte o sistema de arquivos “real” em um diretório que não seja acessível publicamente. Faça uma montagem de ligação somente leitura que seja mais amplamente acessível. Faça uma montagem de ligação de leitura / gravação para a parte que deseja expor com acesso de leitura / gravação.
mkdir /media/hidden /media/hidden/sdz99
chmod 700 /media/hidden
mount /dev/sdz99 /media/hidden/sdz99
mount -o bind,ro /media/hidden/sdz99/world-readable /media/world-readable
mount -o bind /media/hidden/sdz99/world-writable /media/world-writable
No seu caso de uso, acho que você pode fazer:
mkdir /var/smb/hidden
mv /var/smb/snapshot /var/smb/hidden
mkdir /var/smb/snapshot
chmod 700 /var/smb/hidden
chmod 755 /var/smb/hidden/snapshot
mount -o bind,ro /var/smb/hidden/snapshot /var/smb/hidden/snapshot
Ou seja. coloque o diretório real snapshot
em um diretório restrito, mas conceda snapshot
permissões de leitura para todos. Não será diretamente acessível porque seu pai tem acesso restrito. Vincule-o somente para leitura em um local acessível, para que todos possam lê-lo por esse caminho.
(As montagens de bind somente leitura só se tornaram possíveis vários anos depois que as montagens de bind foram introduzidas, então você pode se lembrar de uma ocasião em que elas não funcionaram. Eu não sei de antemão desde quando funcionam, mas elas já funcionavam no Debian lenny (isto é, agora oldstable).)