Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как запретить изменение файла


«Защита от дурака» или как запретить изменение/удаление важных папок / Хабр

Доброе время суток.

Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:

/home/hostuser/vhosts/sitename.ru/{tmp,web,logs} 

И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?

После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:
chattr +i /home/hostuser/vhosts/sitename.ru 

Для снятия атрибута необходимо использовать флаг -i.

Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:

touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep 


Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).

Спасибо за внимание.

Обращаю внимание!

Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount --bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.

Как предотвратить изменение / удаление файла / папки в Linux?

Введение

Операционная система на базе Linux не имеет концепции «корзины» в отличие от операционных систем Windows. Поэтому в Linux, если мы удаляем файл или каталог, он обычно считается утерянным навсегда, если у нас нет резервной копии. Хотя существует несколько доступных методов восстановления удаленных данных из файловой системы Linux, эти методы требуют использования стороннего программного обеспечения и являются утомительными, не очень простыми и полными доказательствами.Возможно, лучший способ предотвратить случайное удаление или изменение файла или каталога - это полностью запретить их. В Linux эту функциональность можно реализовать с помощью флага неизменяемости. В этой статье мы объясним, что такое неизменяемый флаг, а затем продемонстрируем на практике, как он работает.

Что такое неизменяемый флаг?
Флаг неизменяемости - это атрибут расширенной файловой системы, который может быть установлен как для файлов, так и для каталогов.После установки неизменяемого флага файл или каталог нельзя изменить, переименовать или удалить без предварительного удаления неизменяемого флага. Неизменяемый флаг можно установить или сбросить с помощью команды chattr. Для установки флага неизменяемости требуются привилегии root.

Объяснение команды chattr:

Chattr (Изменить атрибут) - это утилита командной строки Linux, которая используется для установки / отмены определенных атрибутов файла в системе Linux для защиты от случайного удаления или изменения важных файлов и папок, даже если вы вошли в систему как пользователь root.

Вот описание команды chattr с ее справочной страницы:

 CHATTR (1) Руководство по основным командам CHATTR (1) НАЗВАНИЕ chattr - изменить атрибуты файла в файловой системе Linux ОБЗОР chattr [-RVf] [-v версия] [режим] файлы ... ОПИСАНИЕ chattr изменяет атрибуты файлов в файловой системе Linux. Формат символьного режима: + - = [aAcCdDeijsStTu]. Оператор '+' вызывает добавление выбранных атрибутов к существующим атрибутам файлов; '-' заставляет их удалить; а также Буквы 'aAcCdDeijsStTu' выбирают новые атрибуты для файлов: только добавление (a), без обновлений времени (A), сжатие (c), без копирования при записи (C), без дампа (d), синхронные обновления каталога (D), формат экстента (e), неизменяемый (i), журнал данных nalling (j), безопасное удаление (s), синхронные обновления (S), отсутствие слияния хвостов (t), вершина иерархии каталогов (T) и не удаляемый (u).Следующие атрибуты доступны только для чтения и могут быть перечислены lsattr (1), но не изменены chattr: ошибка сжатия (E), огромный файл (h), индексированный каталог (I), встроенные данные (N), сжатый необработанный доступ (X) и сжатый грязный файл (Z). Не все флаги поддерживаются или используются всеми файловыми системами; обратитесь к страницам руководства, относящимся к файловым системам, таким как btrfs (5), ext4 (5) и xfs (5) для получения дополнительных сведений о файловой системе. 

Ниже приведен список атрибутов, которые можно установить / отключить с помощью команды chattr:

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

  • Если доступ к файлу осуществляется с установленным атрибутом «A», его временная запись не обновляется.
  • Если файл изменен с установленным атрибутом «S», изменения синхронно обновляются на диске.
  • Файл установлен с атрибутом «a», может быть открыт только в режиме добавления для записи.
  • Файл установлен с атрибутом «i», не может быть изменен (неизменяемый). Означает, что нельзя переименовывать, создавать символические ссылки, выполнять, запрещать запись, только суперпользователь может сбросить атрибут.
  • Файл с атрибутом «j» установлен, вся его информация обновляется в журнале ext3 перед обновлением самого файла.
  • Файл установлен с атрибутом «t», без слияния хвостов.
  • Файл с атрибутом «d» больше не будет кандидатом на резервное копирование при запуске процесса дампа.
  • Когда файл с атрибутом «u» удаляется, его данные сохраняются. Это позволяет пользователю запрашивать его восстановление.

Синтаксис для использования команды chattr:
Ниже приведен синтаксис для использования команды chattr.

  chattr [оператор] [флаги] [имя файла]  

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

+: добавляет атрибут к существующему атрибуту файлов.
-: удаляет атрибут существующего атрибута файлов.
=: сохранить существующие атрибуты файлов.

Демонстрация
Теперь, когда мы ознакомились с тем, что такое неизменяемый флаг и как его можно установить, пришло время для практической демонстрации. Давайте создадим файл с именем no-del.txt, а затем проверьте, установлены ли у него какие-либо расширенные атрибуты с помощью команды lsattr.

  [root @ linuxnix ~] # touch no-del.txt   [root @ linuxnix ~] #   [root @ linuxnix ~] # lsattr no-del.txt   ---------------- no-del.txt   [root @ linuxnix ~] #  

Приведенный выше вывод показывает, что в настоящее время атрибуты расширенной файловой системы не установлены. Давайте добавим контент в файл.

  [root @ linuxnix ~] # echo "testing" >> no-del.txt   [root @ linuxnix ~] # cat no-del.txt   тестирование   [root @ linuxnix ~] #  

Теперь мы установим неизменяемый флаг для файла.

  [root @ linuxnix ~] # chattr + i no-del.txt   [root @ linuxnix ~] # lsattr no-del.txt   ---- я ----------- no-del.txt   [root @ linuxnix ~] #  

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

  [root @ linuxnix ~] # echo "testing" >> no-del.txt   -bash: no-del.txt: В доступе отказано   [root @ linuxnix ~] # rm no-del.txt   rm: удалить обычный файл «no-del.txt»? y   rm: невозможно удалить "no-del.txt": операция запрещена   [root @ linuxnix ~] #  

Как только мы сбросим флаг неизменяемости, мы сможем вносить изменения в файл.

  [root @ linuxnix ~] # chattr -i no-del.txt   [root @ linuxnix ~] # lsattr no-del.txt   ---------------- no-del.txt   [root @ linuxnix ~] # echo "testing" >> no-del.txt   [root @ linuxnix ~] # rm -f no-del.txt   [root @ linuxnix ~] #  
Заключение

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

Просмотры сообщений: 5763

Следующие две вкладки изменяют содержимое ниже.

Свою карьеру в ИТ начал в 2011 году системным администратором. С тех пор он работал с операционными системами HP-UX, Solaris и Linux, а также работал с решениями для обеспечения высокой доступности и виртуализации. Он проявляет большой интерес к сценариям оболочки, Python и Perl и изучает основы облака AWS, инструментов DevOps и методологий. Ему нравится делиться знаниями, полученными за эти годы, с остальной частью сообщества.

.

java - Как предотвратить изменение частного поля в классе?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

jquery - Как предотвратить изменение кода html / JavaScript

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

android - Java - методы предотвращения модификации кода

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также