Полное скрытие каталога, но сохранение доступа к его потомкам через символические ссылки в Samba

Полное скрытие каталога, но сохранение доступа к его потомкам через символические ссылки в Samba

Из-за того, как Samba обрабатывает символические ссылки и широкие ссылки (она может различать только «внутри корня общего ресурса» и «вне корня общего ресурса»), я хочу создать фиксированные символические ссылки в корне общего ресурса на «фактические» каталоги, а затем запретить пользователю напрямую показывать «фактические» каталоги при просмотре сетевого ресурса, как показано ниже.

Это возможно?

АКТУАЛЬНАЯ СТРУКТУРА (файловый сервер FreeBSD):

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

ЧТО ВИДИТ ПОЛЬЗОВАТЕЛЬ (клиент 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)

По сути, «реальные» каталоги data1/data2 содержат набор каталогов, к которым пользователь может/не может получить доступ, и этот доступ обеспечивается списками контроля доступа (ACL).

Но когда пользователь получает доступ к общему ресурсу, я хочу, чтобы он вообще не видел эти каталоги.

"Обычные" скрытые файлы будут показаны в проводнике Windows, поэтому я не могу использовать "скрытые файлы" или dot-файлы для этого. Я мог бы использовать другие методы, такие как файлы вето, перечисление с контролируемым доступом, чтение/обход ACL и т. д., если они помогут. Однако я хочу только предотвратить показ data1/data2 пользователю напрямую - я не хочу убивать обходчерез символические ссылки d4/d6/d9в подкаталоги data1/data2.

Возможно ли это с помощью комбинации перечисления контролируемого доступа, smb.conf и ACL? Если нет, что приблизит меня ближе всего к решению?

решение1

Я не уверен, что полностью понял вашу просьбу, но использование nullfsездовых животных — это первая тактика, которая приходит на ум.

Оставьте физическую, фактическую структуру в покое. Назовите ее physical_rootради этого примера.

Создайте новый пустой каталог для share_rootи укажите его Samba в файле smb4.conf.

В разделе share_rootсоздайте точки монтирования для всех каталогов, которые вы хотите предоставить клиентам Samba:

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

Теперь выполните нулевое монтирование реальных физических каталогов в фальшивое share_rootпространство:

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

Эти монтирования можно добавить в /etc/fstab, вероятно, используя опцию «late»:

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

Связанный контент