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

307
Stilez

Из-за способа, которым 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) 

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

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

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

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

0

1 ответ на вопрос

0
Jim L.

Я не уверен, что полностью понимаю ваш запрос, но использование nullfsmounts является первой тактикой, которая приходит на ум.

Оставьте физическую, фактическую структуру в покое. Назовите это 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...