
Я предоставляю общий доступ к некоторым папкам в Ubuntu 18.04, чтобы к ним можно было получить доступ на чтение и запись с клиентов Windows.
Структура файла:
myshare/
dir1/
somefile1.txt
somefile2.txt
dir2/
dir3/
Клиент Samba имеет разрешения на чтение/запись/создание/удаление файлов внутри dir1
.
Я попал под непреднамеренную аварию пользователя: Пользователь нажалудалитьна dir1
, и все файлы внутри dir1
были удалены.
Мне не удалось применить настройки разрешений, которые могли бы это предотвратить. Похоже, все сводится к тому, как клиенты samba реализуют удаление структуры папок, они делают это, перечисляя содержимое папок, а затем выполняя удаление файлов по одному, рекурсивно с самого глубокого уровня дерева каталогов.
Итог: на стороне сервера у меня нет возможности отличить разрешенное удаление одного файла от нежелательного, полного, рекурсивного удаления папки.
Я что-то пропустил?
Я думал о двух трюках, но не смог найти ни одного решения:
Могу ли я поместить файл внутрь
dir1
, который заставит клиент samba прервать операцию пакетного удаления? У меня был некоторый успех с размещениемне удаляемый файлвdir1
, но успех кажется случайным.Я заметил, что если я делаю
dir1
корнем общего ресурса, то вышеуказанный риск исчезает. Если пользователь затем нажимает «удалить»,dir1
операция отклоняется, что идеально. Но наличиеdir1
,dir2
,dir3
и т. д. в качестве отдельных общих ресурсов плохо масштабируется. Я хочу, чтобы у пользователя была только одна точка доступа/myshare
. Но есть ли способ заставитьdir1
вести себя как общий ресурс (чтобы клиент мог просматривать его, но не удалять) и при этом все еще отображаться внутри/myshare
?
Было бы приемлемо решение, работающее только для клиентов проводника Windows.