Как заблокировать файл от удаления, но сделать его доступным для записи?

33

Я хочу сделать файл заблокированным от удаления, но все же быть доступным для записи. Как мне это сделать?

Данный файл представляет собой том Truecrypt в виде файла на сетевом ресурсе NAS SMB, поэтому я не хочу его случайно удалять.

therobyouknow
источник
1
Это невозможно. Запись нулей равносильна удалению.
Soandos
@ Soandos - я не согласен, я боюсь. Поскольку запись в него нулей по-прежнему означает, что файл существует, но полон нулей. Действительно, есть команды Linux для создания «разреженного» файла, заполненного нулями.
therobyouknow

Ответы:

34

Для Windows:

  1. Запретить «Удалить» разрешение на файл.
  2. Удалите или запретите разрешение «Удалить дочерние элементы» в родительском каталоге.

Для Unix (включая OS X):

  1. Удалите разрешение «Запись» в родительском каталоге.

Обратите внимание, что это только предотвратит удаление (удаление) файла, но ничего не сделает против случайного усечения или перезаписи с мусором. Если файл доступен для записи, вы можете записать в него что угодно, точка.

Кроме того, права доступа к файлам практически невозможно преобразовать между операционными системами. Если NAS работает под управлением Linux и вы пытаетесь установить разрешения изнутри Windows, конечный результат может отличаться от ожидаемого.

grawity
источник
Думаю, лучший ответ я получу. +1 и спасибо. Да, NAS - это Lacie 2big, работающая под управлением Linux на ARM.
therobyouknow
1
На самом деле вам не нужно запрещать удаление, просто удалите удаление из существующих записей контроля доступа (ACE). (Отрицание ACE усложняет ситуацию, обычно это не очень хороший курс в долгосрочной перспективе.)
Ричард
2
@Richard: AFAIK, удаление требует полного отключения наследования ACL для этого файла, что в итоге делает его еще более сложным.
Гравитация
Я согласен с Grawity. Разрешение «Запретить удаление» - это путь. Если разрешение на доступ к общему ресурсу настроено на изменение, запрет будет по- прежнему блокировать удаление, а оставление пустым позволит удалять.
Surfasb
26

В Linux вы можете создать жесткую ссылку на него. Затем вы можете написать и «удалить» его, но вы будете только удалять ссылку в вашем каталоге. Другая жесткая ссылка будет по-прежнему указывать на содержимое файла, поэтому он все равно не будет удален.

В мире Unix вы не «удаляете» файлы. Вы просто уменьшаете количество жестких ссылок на него. Когда ничто иное не указывает на это, пространство считается свободным и может использоваться ...

woliveirajr
источник
2
Отличная идея. Не знаю, может ли @Rob создавать жесткие ссылки на своем NAS, но может ли это очень умное решение.
CarlF
1
+1 Я мог бы это в комбинации с принятым ответом, если это возможно. или отдельно, если нет. +1 за нестандартное мышление, как сказано. Однако рассматриваемая доля Linux - это диск NAS, который не уверен, какие консольные средства доступны, это встроенная или частично встроенная форма Linux. +1 все еще, хотя, поскольку это могло бы помочь другим людям, у которых есть обычный рабочий стол linux или компьютер, выступающий в качестве общего ресурса.
therobyouknow
2
Эта же техника должна работать с NTFS.
Ротсор
+1 RBerteig и +1 CarlF за поддержку решения woliveirajr.
therobyouknow
12

Резервные копии. Вы не можете реально защитить записываемый файл от повреждения, даже если вы можете от удаления. Поддерживайте это ежедневно.

CarlF
источник
4
+1. Делайте это независимо от того, какие другие ремни и подвески применяются.
RBerteig
+1 CarlF и +1 RBerteig. Полностью согласен. Все файлы также копируются на оптические носители (DVD-R, + R, + R DL и Blu-Ray 25 ГБ и DL 50 ГБ). Я также могу рассмотреть второй жесткий диск.
therobyouknow
Я должен добавить, у меня есть резервные копии файлов внутри тома truecrypt, который является файлом контейнера. Не истинно криптованный том.
therobyouknow
0

В дополнение к предыдущим ответам я хотел бы взглянуть на selinux. Там вы можете определить довольно детальные ограничения.

Нильс Бажес
источник
0

В коровьей файловой системе, такой как btrfs, вы можете добиться этого, используя subvolumes + snapshots или cp с параметром --reflink = всегда, что приведет к тому, что вы получите столько файлов, сколько захотите, и которые будут занимать столько же места, сколько один + некоторые накладные расходы (но без безумного количества копий или снимков, особенно в сочетании с крошечными размерами файлов, это не должно быть заметно), пока они не будут изменены, и в этом случае только части, которые были изменены, сохраняются отдельно, а остальная часть остается общей. Затем установите разрешения для каждого отдельно (для достижения того, что вы хотите, просто регулярно делайте снимок или копию с разрешениями только для чтения) (и при желании монтируйте его как ro или не все, если это снимок и если это файл, используйте chattr + i (пользователи могут не пишите и не изменяйте файл, даже если у вас есть права на запись) на одну копию, если вы параноик).

orange_juice6000
источник
0

В «стандартной» UNIX, кажется, невозможно защитить один файл от удаления, если каталог доступен для записи. Интуитивно понятно, что очистка защиты w от битов режима с помощью 'chmod' должна защищать от удаления, но ЭТО НЕ СЛУЧАЙ. Точно так же в AFS вы не можете защитить отдельные файлы от удаления, поскольку записи ACL (в которых отсутствует или запрещается соответствующее разрешение 'd'), применяются только к каталогу в целом.

Клаус Энгельхардт
источник