Linux - есть ли способ предотвратить / защитить файл от удаления даже пользователем root?

89

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


источник
13
Сделайте резервную копию, чтобы вы могли ее восстановить ... Кроме того, это chattr +iможет помочь, но сделает файл доступным только для чтения (и может быть перезаписан chattr -i), также вы можете попытаться защитить его с помощью SELInux и т. Д.
Sven
43
Может ли root создать процесс, который даже root не может убить?
Марк Габриэль
4
@MarkGabriel Да. Вилочная бомба. :)
Рейраб
8
Администратор HW может прийти и вынуть диск, порезать его, сжечь остатки и скормить их. Или, что лучше, некоторые программисты на C (++) могут вызывать некоторых носовых демонов. Все, что важно для вас, поддержите это. Дважды.
Павел

Ответы:

133

Да, вы можете изменить атрибуты файла только для чтения.

Команда:

chattr +i filename

И чтобы отключить это:

chattr -i filename

От man chattr:

Файл с iатрибутом не может быть изменен: его нельзя удалить или переименовать, нельзя создать ссылку на этот файл и данные не могут быть записаны в файл. Только суперпользователь или процесс, обладающий CAP_LINUX_IMMUTABLEвозможностью, может установить или очистить этот атрибут.

Итай Ганот
источник
11
Для интересующихся, BSD эквивалентchflags schg
Эндрю Домашек
85
Обратите внимание, что пользователь с root-доступом может снять этот флаг и затем удалить файл. Это вряд ли произойдет случайно, но это не защищает от преднамеренного удаления.
Грант
6
@ Грант, если уровень безопасности установлен достаточно высоко. Процесс загрузки устанавливает уровень защиты 2, прежде чем сеть будет включена, поэтому для сброса флага требуется доступ с локального компьютера (но это означает, что файлы, используемые в процессе загрузки до этого времени, также должны быть неизменяемыми).
Саймон Рихтер
16
@ Грант Если кто-то хочет довести это до крайности, вы не можете предотвратить удаление раздела или попадание диска в печь или распад протонов через 10 ^ 30 лет ...
Хаген фон Айцен
2
@Itai Ganot человек Я хотел бы прочитать это 4 дня назад. У меня был вопрос на экзамене, который я взял = /
vfbsilva
84

Запишите это на CD. Вставьте компакт-диск в привод CD-ROM и получите к нему доступ оттуда.

Турбьерн Равн Андерсен
источник
15
+1 за нестандартное мышление. И, на самом деле, он также использовался ранее в некоторых обстоятельствах (черный диск cdrom с компакт-диском в нем доставлен к месту назначения). В любом случае это может быть нецелесообразно, если кто-то может отключить диск.
Алекс Маццариоль
1
ПОЦЕЛУЙ Я люблю это! +1
MonkeyZeus
2
Я думаю, что это правильный ответ на этот вопрос. Изменение атрибута файла (chattr -i) не может предотвратить вредоносные действия.
Бруно фон Париж
7
В наши дни полноразмерная SD-карта во встроенном кард-ридере может быть лучшим решением - более низкое энергопотребление, более быстрый доступ во многих случаях и более долговечный при использовании без записи.
Крис Х
3
@ jpmc26 отсюда привод CD-ROM. Это только для чтения.
Турбьёрн Равн Андерсен
29
  1. Создайте образ файловой системы.
  2. Смонтировать образ.
  3. Скопируйте файл в смонтированный образ.
  4. Размонтируйте изображение и установите его только для чтения.
  5. Теперь вы не можете удалить его.

Пример:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system
Кен А
источник
3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Каз Вулф
3
Принимая это немного дальше, вы можете использовать squashfsили cramfsкоторые являются сжатыми и только для чтения. Для сборки файловой системы нужен специальный инструмент.
Zan Lynx
7

Linux имеет так называемый привязывать монтаж варианта , который является довольно мощным и полезной особенностью , чтобы узнать :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

- здесь выполняется привязка файла к себе (да, вы можете сделать это в Linux), затем он монтируется в режиме R / O. Конечно, это можно сделать и с каталогом.

poige
источник
6

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

Таким образом, даже если им удастся переопределить защиту вашего chattr, данные останутся, и вы сможете легко восстановить их там, где их ищет ваше приложение.

Андрей
источник
11
Жесткие ссылки не будут защищать содержимое файла.
200_success
Однако они обеспечат дополнительную защиту от DELETION, которая была первоначальным вопросом.
Барбекю
2
@ barbecue Если файл не связан с именем, по которому его ищет приложение, не имеет значения, что содержимое файла существует под другим именем. Для всего, что ищет файл с ожидаемым именем, файл все еще был удален.
CVN
5

Другие ответили на ваш вопрос, как вы его задали. Как отметил @Sven в комментарии, общее решение вопроса: «Как мне убедиться, что я никогда не потеряю файл?» это создать резервную копию файла. Сделайте копию файла и сохраните его в нескольких местах. Кроме того, если файл чрезвычайно важен и у вашей компании есть политика резервного копирования важных данных с помощью службы резервного копирования, вы можете проверить, включен ли этот файл в службу.

Kevin
источник
2
Ну, конечно, файл регулярно копируется, я просто хотел еще один уровень защиты от пользователей, которые иногда работают на коробке с правами пользователя root.
5

На Линуксе неизменен флаг поддерживается только на некоторых типах файловой системы (большинство из них , как родных ext4, xfs, btrfs...)

В файловых системах, где это не поддерживается, другой вариант - привязать файл к себе в режиме только для чтения. Это должно быть сделано в два этапа:

mount --bind file file
mount -o remount,bind,ro file

Это должно быть сделано при каждой загрузке, например, через /etc/fstab.

сЧ
источник
Я надеюсь, что кто-нибудь umountснова получит файл с правами на запись
whoan
3

В комментарии к ответу Кевина Джерри упоминает:

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

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

Все предложения по использованию устройства, доступного только для чтения, имеют одну и ту же проблему - это делает вас PITA для внесения законных изменений, когда это необходимо. В случае блокируемого диска, такого как SD-карта, вы сталкиваетесь с проблемой внезапной уязвимости, когда вы разблокируете ее, чтобы внести изменения.

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

Мы используем это для наших веб-серверов, так что успешный эксплойт против веб-сервера не сможет вставлять или изменять какие-либо файлы, которые сервер затем будет возвращать обратно, или изменять конфигурацию.

Обратите внимание, что это может быть обойдено так же, как и все связанные с точкой монтирования:

  • Сделайте копию защищенного каталога
  • Размонтировать каталог
  • Переместите копию на место монтирования или вставьте в нее символическую ссылку, если на этом монтировании недостаточно места.
Джо Х.
источник
Почему «действительно очень плохая идея» - регулярно создавать резервные копии важных файлов, а также прилагать усилия для защиты оригинала от случайного удаления? Из исходного вопроса ОП и из комментария ОП к ответу, на который вы ссылались, ясно, что проблема заключается не в злонамеренной деятельности, а в случайной / некомпетентной деятельности.
Крейг
1
@Craig: плохая идея иметь много пользователей с root, особенно если им не доверяют не связываться с критическими файлами.
Джо Х.
Ах ... ну, конечно. :-) Но это не суть вопроса ОП. OP утверждал , что есть пользователи с правами суперпользователя , которые должны быть защищены от случайного удаления файла.
Крейг
@Craig: это может быть не суть вопроса, но это суть проблемы (проблема XY?) ... но я понятия не имею , что они делают , как корень, так что, если они могли бы использовать УИП и / или ограниченные привилегии sudo. И вам следует перечитать вопрос, так как я не вижу упоминания Джерри, что он только пытается защитить от непреднамеренного удаления («мне нужно убедиться, что это не удаление вообще»), и он дал только одно продолжение, которое я увидеть (что вызвало мой ответ).
Джо Х.
2

Почему бы не создать образ ISO 9660, который предназначен только для чтения?

Смонтируйте ISO-образ, и он будет выглядеть как CD-ROM, но с производительностью жесткого диска, а файлы на смонтированном образе будут столь же безопасны для удаления, как и файлы на физическом CD-ROM.

Идея записи конфиденциального файла на компакт-диск и запуска его с компакт-диска интересна, если предположить, что установка неизменяемого бита в файле не считается достаточной.

Есть потенциальные негативные проблемы с запуском его с физического CD, в том числе с производительностью (приводы CD-ROM намного, намного медленнее, чем жесткие диски или твердотельные накопители). Существует вероятность того, что CD-ROM будет удален благонамеренным человеком и заменен другим диском, к которому им необходим доступ. Существует вероятность того, что злоумышленник просто вытащит диск и выбросит его в микроволновую печь (или корзину), тем самым «удалив» ваш файл. Есть неудобство необходимости иметь выделенный аппаратный привод CD-ROM только для этого одного файла, и другие факторы.

Но ОП ясно дал понять, что основной целью является защита от случайного удаления, а не от злонамеренных действий, и что рассматриваемый файл (ы) резервируется и может быть восстановлен в случае аварии, но крайне желательно, чтобы файл никогда не был быть случайно удаленным.

Кажется, что запуск файла из смонтированного ISO-образа удовлетворяет требованию.

Craig
источник
1
Root все еще может удалить файл, напрямую управляя изображением. Это просто обычный файл, который монтируется.
Торбьерн Равн Андерсен
@ ThorbjørnRavnAndersen Как это? ISO 9660 по конструкции является неизменным. Сторона, вносящая это изменение, должна будет удалить и заменить весь файл ISO. Не то чтобы они не могли этого сделать. Но они не могли войти и хирургически удалить один файл без огромного опыта, если даже тогда. Было бы намного проще вынуть физический CD-ROM из привода и выбросить его в мусорный контейнер. ;-)
Крейг,
Не нужно быть сложным - просто замените файл изображения нулями.
Турбьёрн Равн Андерсен
@ ThorbjørnRavnAndersen Я согласен с этим достаточно легко. Предостережение заключается в том, что для этого потребуется намеренно демонтировать изображение и перезаписать его. Тщательный преступник был бы только shredв этом пункте. Но если вы не отказываете в физическом доступе к машине, все равно кажется, что проще просто извлечь физический компакт-диск из привода и выбросить его в мусорную корзину, чем размонтировать и перезаписать файл ISO, хотя любой из них прост. И ОП заявляет, что резервное копирование важного файла осуществляется на регулярной основе, так что это всего лишь дополнительная мера против случайного повреждения, а не против злонамеренного вреда.
Крейг
Я указал, как изменить образ ISO9660, даже если он должен быть неизменным. Моя точка зрения заключается в том, что если бит вообще доступен для записи, root может написать его.
Турбьерн Равн Андерсен