Linux - Чи існує спосіб запобігти / захистити файл від видалення навіть root?


89

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

linux  files 

13
Створіть резервну копію, щоб ви могли відновити її ... Крім цього, це chattr +iможе допомогти, але зробить файл також лише для читання (і його можна замінити chattr -i), також ви можете спробувати захистити його за допомогою SELInux тощо.
Sven

43
Чи може root створити процес, який навіть root не може вбити?
Марк Габріель

4
@MarkGabriel Так. Вилкова бомба. :)
reirab


8
Адміністратор HW може прийти та вийняти диск, подрібнити його, спалити залишки та подати їх у хогз. Або, ще краще, якийсь програміст C (++) може викликати деяких носових демонів. Що б вам не було важливо, створіть резервну копію. Двічі.
Павло

Відповіді:


133

Так, ви можете змінити атрибути файлу лише для читання.

Команда така:

chattr +i filename

І відключити його:

chattr -i filename

Від man chattr:

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


11
Для зацікавлених еквівалент bsdchflags schg
Андрій Домашек

85
Зауважте, що користувач з кореневим доступом може скинути цей прапор і потім видалити файл. Це навряд чи трапиться випадково, але це не проти навмисного вилучення.
Грант

6
@ Гарант, не, якщо Securelevel встановлений досить високо. Процес завантаження встановлює рівень безпеки на 2 до того, як мережа буде ввімкнена, тому для скидання прапора необхідний доступ до локальної машини (але це означає, що файли, що використовуються в процесі завантаження до цього часу, також повинні бути незмінні).
Саймон Ріхтер

16
@Grant Якщо хтось хоче довести його до крайності, ви не можете перешкодити, щоб розділ було видалено або диск покладений у піч чи протони
занепали

2
@Itai Ganot man Я хотів би, щоб я прочитав це 4 дні тому. У мене було питання на іспиті, який я взяв = /
vfbsilva

84

Запишіть його на компакт-диск. Покладіть компакт-диск у привід CD-ROM та перейдіть до нього звідти.


15
+1 для роздуму над полем. І, afaik, він також використовувався раніше в деяких обставинах (чорний короб cdrom-накопичувач із компакт-диском, що перебуває в ньому, доставлений до місця призначення). Це може виявитися невідповідним, якщо хтось у будь-якому разі зможе відключити накопичувач.
Олексій Мацаріол

1
KISS Я люблю це! +1
MonkeyZeus

2
Я думаю, що це правильна відповідь на це питання. Зміна атрибуту файлу (chattr -i) не може запобігти шкідливим діям.
Бруно фон Париж

7
Цього дня повноформатна SD-карта у вбудованому картридері може бути кращим рішенням - меншим споживанням енергії, більш швидким доступом у багатьох випадках та довговічнішим у використанні без запису.
Кріс Н

3
@ jpmc26, отже, привід CD-ROM. Вони читаються / лише для читання.
Thorbjørn Ravn Andersen

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стислі і лише для читання. Для створення файлової системи потрібен спеціальний інструмент.
Зан Лінкс

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. Звичайно, це можна зробити і для каталогу.


6

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

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


11
Жорсткі посилання не захищають вміст файлу.
200_успіх

Однак вони забезпечать додатковий захист від DELETION, що було початковим питанням.
шашлик

2
@barbecue Якщо файл від’єднано від імені, на яке шукає додаток, не має значення, що вміст файлу існує під іншим іменем. Якщо все, що шукає файл із очікуваною назвою, файл все-таки видалено.
CVn

5

Інші відповіли на ваше запитання так, як ви його задали. Як @Sven згадував у коментарі, загальне рішення питання "Як зробити так, щоб я ніколи не втрачав файл?" полягає в створенні резервної копії файлу. Зробіть копію файлу і збережіть його в декількох місцях. Крім того, якщо файл є надзвичайно важливим і ваша компанія має політику щодо резервного копіювання важливих даних за допомогою сервісу резервного копіювання, ви можете розглянути можливість включення цього файлу в службу.


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, особливо якщо їм не довіряють, щоб не возитися з критичними файлами.
Джо Х.

Ах ... ну звичайно. :-) Але це не було суть питання ОП. ОП заявила, що є користувачі з кореневим доступом, які повинні бути захищені від випадкового видалення файлу.
Крейг

@Craig: це може бути не суть питання, але це суть проблеми (проблема XY?) ... але я поняття не маю , що вони роблять , як корінь, так що, якщо вони могли б використовувати УИП та / або обмежені привілеї судо. І вам слід перечитати питання, оскільки я не бачу, щоб Джеррі не згадував, що він намагається лише захиститись від ненавмисного видалення ("мені потрібно переконатися, що це не видаляється нічим"), і він дав лише одне спостереження, щоб я див. (що викликало мою відповідь).
Джо Х.


2

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

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

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

Існують потенційні негативні проблеми з його запуском з фізичного компакт-диска, включаючи продуктивність (CD-ROM-накопичувачі набагато, набагато повільніше, ніж жорсткі диски або SSD). Існує ймовірність того, що компакт-диск буде видалений добронамереною особою і замінений на інший диск, до якого вони потребують доступу. Існує ймовірність, щоб зловмисник просто вийняв диск і кинув його в мікрохвильову піч (або сміття), тим самим "видаливши" свій файл. Існує незручність мати спеціальний пристрій для компакт-дисків апаратного забезпечення саме для цього файлу та інших факторів.

Але ОП дала зрозуміти, що основний намір полягає в захисті від випадкового видалення, а не від зловмисних дій, і що файл (и), про які йде мова, резервне копіювання та відновлення у випадку аварії, але вкрай бажано, щоб файл ніколи не був бути випадково видаленим

Здається, що запуск файлу із змонтованого ISO-зображення задовольнив би цю вимогу.


1
Корінь все ще може видалити файл, маніпулюючи зображенням безпосередньо. Це просто звичайний файл, який, можливо, змонтується.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Як так? ISO 9660 за задумом є незмінним. Стороні, яка внесла ці зміни, доведеться видалити та замінити весь файл ISO. Не те, щоб вони не могли цього зробити. Але вони не змогли зайти і хірургічно видалити один файл без величезного досвіду, якщо навіть тоді. Набагато простіше було б вийняти фізичний компакт-диск з накопичувача і кинути його у смітник. ;-)
Крейг

Не потрібно бути складним - просто перепишіть файл зображення нулями.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Я визнаю це питання досить легко. Застереження полягає в тому, що це вимагатиме навмисного демонтажу зображення та його перезапису. Ретельний переслідувач якраз і зробив shredце. Але якщо ви не забороняєте фізичний доступ до машини, все одно здається, що простіше просто витягнути фізичний компакт-диск з накопичувача і закинути його у смітник, ніж демонтувати та перезаписати файл ISO, хоча це і просто. І ОП заявила, що важливий файл регулярно створюється резервне копіювання, тож це лише додатковий захід проти випадкових пошкоджень, а не проти зловмисних зловживань.
Крейг

Я вказав, як змінити образ ISO9660, навіть якщо він повинен бути незмінним. Моя думка полягає в тому, що якщо трохи взагалі можна записати, root може написати це.
Thorbjørn Ravn Andersen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.