Как сделать файл неизменяемым
Предположим вы хотите защитить некоторые важные файлы в Linux. При чем они должны быть защищены не только от перезаписи но и от случайного или преднамеренного удаления и перемещения. Предотвратить перезапись или изменение битов доступа к файлов можно с помощью стандартных утилит chmod и chown, но это не идеальное решение, так как у суперпользователя по прежнему остается полный доступ. Но есть еще одно решение. Это команда chattr.
Эта утилита позволяет устанавливать и отключать атрибуты файлов, на уровне файловой системы не зависимо от стандартных (чтение, запись, выполнение). Для просмотра текущих аттрибутов можно использовать lsattr. Изначально атрибуты управляемые chattr и lsattr поддерживались только файловыми системами семейства ext (ext2,ext3,ext4). но теперь эта возможность доступна и в других популярных файловых системах таких как XFS, Btrfs, ReiserFS, и т д.
Синтаксис и опции chattr
Утилиты chattr и lsattr входят в пакет e2fsprogs и предустановлены во всех современных дистрибутивах. Базовый синтаксис chattr выглядит следующим образом:
$ chattr опции [оператор] [атрибуты] файлы
Вот основные опции утилиты, которые вы можете использовать:
Оператор может принимать значения:
- + - включить выбранные атрибуты;
- - - отключить выбранные атрибуты;
- = - оставить значение атрибута таким, каким оно было у файла.
Вот некоторые доступные атрибуты:
- a - файл может быть открыт только в режиме добавления;
- A - не обновлять время перезаписи;
- c - автоматически сжимать при записи на диск;
- C - отключить копирование при записи;
- D - работает только для папки, когда установлен, все изменения синхронно записываются на диск сразу же;
- e - использовать extent'ы блоков для хранения файла;
- i - сделать неизменяемым;
- j - все данные перед записью в файл будут записаны в журнал;
- s - безопасное удаление с последующей перезаписью нулями;
- S - синхронное обновление, изменения файлов с этим атрибутом будут сразу же записаны на диск;
- t - файлы с этим атрибутом не будут хранится в отдельных блоках;
- u - содержимое файлов с этим атрибутом не будет удалено при удалении самого файла и потом может быть восстановлено.
А теперь давайте перейдем к примерам работы с утилитой chattr и сделаем файл неизменяемым.
Примеры использования chattr
Давайте сначала посмотрим текущие атрибуты файла /etc/passwd:
Для того чтобы сделать файл неизменяемым вам надо установить атрибут i. Например, защитим от записи тот же файл /etc/passwd:
sudo chattr +i /etc/passwd
Заметьте, нужно иметь права суперпользователя для установки и удаления атрибутов. Теперь проверим установился ли атрибут:
Теперь файл неизменяемый, и ни один пользователь не сможет его изменить. И более того, даже суперпользователь не сможет модифицировать, перезаписать или удалить этот файл. Перед тем как что либо делать с этим файлом нужно отключить атрибут.
Для отключения любого из атрибутов chattr используйте оператор минус (-):
sudo chattr -i /etc/passwd
Если вы хотите сделать все файлы в каталоге неизменяемыми используйте опцию -R:
sudo chattr -R +i /etc/
Еще один полезный атрибут только добавлять (a), который позволяет только добавлять информацию в файл, без возможности перезаписи. Он может понадобится, например, если вы не хотите чтобы кто-либо мог очистить журнал. Он устанавливается аналогично атрибуту i:
sudo chattr +a /var/log/syslog
Обратите внимание, если вы скопируете файл для которого настроены определенные атрибуты, на новый файл они распространятся не будут.
Выводы
В этой инструкции я показал как использовать команды управления дополнительными атрибутами файлов chattr и lsattr для защиты от случайной перезаписи или удаления. Не забывайте что вы не можете использовать chattr как меру безопасности так как атрибуты легко изменить. Один из способов решения этой проблемы - ограничить доступ к самой утилите chattr. Для получения более подробной информацию смотрите man страницу команды.
Если контракты, разные формы, в которых нужно заполнить только отдельные поля, являются частью вашего ежедневного рабочего процесса, вы знаете, как это неприятно, когда люди изменяют части документа или формы, которые им не следует трогать. К счастью, в Microsoft Word есть инструмент разработчика, который позволяет защищать текст в документе, в то же время позволяя людям заполнять специально предназначенные для этого поля.
Итак, мы сделаем документ, в котором можно заполнять специально предназначенные для этого поля, но нельзя основное содержимое документов или надписи поясняющие значение полей.
Защита части текста Word от редактирования
После того, как документ готов, пришло время добавить к нему некоторые элементы управления и защиты. Для начала нужно перейти на вкладку «Разработчик». Word не отображает это на ленте по умолчанию, поэтому давайте исправим это.
Нажмите «Файл».
В самом низу меню выберите «Опции».
На левой панели меню «Параметры» выберите «Настроить ленту».
Справа установите флажок «Разработчик», который вы найдёте в разделе «Настроить ленту», и нажмите «ОК».
Теперь вы заметите вкладку «Разработчик» между вкладками «Вид» и «Настройка». Идём дальше и переключаемся на вкладку «Разработчик».
Оказавшись там, найдите группу «Элементы управления», где вы увидите несколько параметров управления содержимым для расширенного или простого текста, изображений, комбинированных блоков, раскрывающихся списков, средств выбора даты, флажков или элементов управления стандартными блоками.
Давайте применим это на практике. В разделе подписи нашего шаблона мы вставим средство выбора даты и расширенное текстовое поле, чтобы, соответственно, можно было удобно заполнить дату и имя.
Сначала наведите курсор на область, в которую вы хотите вставить указатель даты. Мы собираемся разместить наш здесь:
Затем на вкладке «Разработчик» выберите «Элемент управления содержимым "выбор даты"» (это значок календаря).
Теперь вы увидите окно. Нажмите на стрелку и выберите дату из всплывающего календаря.
Далее, давайте удалим строки рядом с «Я,» и заменим их на расширенное текстовое поле. Как только строки будут удалены, поместите точку вставки туда, где должно быть вписано имя:
Вернувшись на вкладку «Разработчик», нажмите кнопку «Элемент управления содержимым "форматированный текст"»
Ваше текстовое поле теперь появится. Повторите шаги для следующих строк, где должны быть вписаны последующие данные.
Как видите, теперь у вас есть заполняемые разделы для текста и даты. На моём скриншоте это выглядит не очень красиво, поскольку это всего лишь пример, но при достаточной усидчивости можно подготовить красивый, профессионально выглядящий документ.
Обратите внимание, что переключившись в «Режим конструктора»
вы можете отредактировать надпись заполнителя:
Либо вы можете выбирать определённые элементы управления в обычном режиме и нажимать кнопку «Свойства». В результате откроется окно, в котором вы сможете отредактировать все свойства выбранного элемента. Свойства Элемент управления содержимым "форматированный текст":
Свойства окна для выбора даты:
Кроме рассмотренных полей ввода текста и выбора даты, имеются некоторые другие, например, можно вставить выпадающий список, в котором у пользователя будет возможность выбрать один из предложенных вариантов. Также имеется чек-бокс, где можно поставить или снять галочку.
Чтобы сделать документ недоступным для редактирования, сначала выделите весь текст в документе, нажав Ctrl+a. Как только весь текст выделен, нажмите «Ограничить редактирование» в группе «Защитить» на вкладке «Разработчик».
Откроется дополнительная вкладка с настройками. Выберите «2. Ограничение на редактирование» и поставьте галочку в «Разрешить только указанный способ редактирования документа»:
В выпадающем списке выберите «Ввод данных в поля формы»:
И наконец нажмите на кнопку «Да, включить защиту».
Чтобы дать вашему документу дополнительный уровень защиты, вам будет предложено создать пароль. Это совершенно необязательно. Если вы решите сделать это, введите пароль и нажмите «ОК». В противном случае просто нажмите «Отмена».
Windows не показывает расширения файлов по умолчанию, но вы можете изменить одну настройку и сделать так, чтобы Windows 7, 8 или 10 всегда показывала вам полное расширение каждого файла.
Почему вам следует показывать расширения файлов
Каждый файл имеет расширение, которое сообщает Windows, какой это тип файла. Расширения файлов обычно состоят из трёх или четырёх букв, но могут быть и длиннее. Например, документы Word имеют расширение .doc или .docx. Если у вас есть файл с именем Example.docx, Windows знает, что это документ Word, и откроет его с помощью Microsoft Word.
Есть много разных расширений файлов. Например, аудиофайлы могут иметь расширение, такое как .mp3, .aac, .wma, .flac, .ogg, или многие другие варианты, в зависимости от того, какой это тип аудиофайла.
Настройка Windows для отображения расширений файлов полезна для безопасности. Например, расширение файла .exe является одним из многих расширений файлов, которые Windows запускает как программу. Если вы не видите расширение файла, сложно сразу определить, является ли это программой, безопасным документом или медиафайлом.
Например, у вас может быть файл с именем «документ» со значком установленной программы чтения PDF-файлов. Если расширения файлов скрыты, невозможно быстро определить, является ли это подлинным PDF-документом или на самом деле вредоносная программа, использующая значок программы для чтения PDF-файлов в качестве маскировки. Если бы у вас была Windows, настроенная на отображение расширений файлов, вы могли бы увидеть, является ли это безопасным документом с именем «document.pdf» или опасным файлом с именем, например «document.exe». Вы можете посмотреть окно свойств файла для получения дополнительной информации, но вам не нужно этого делать, если вы включили расширения файлов.
Как показать расширения файлов в Windows 8 и 10
Этот параметр легко доступен в проводнике в Windows 8 и 10.
На ленте проводника щёлкните вкладку «Вид». В разделе «Показать или скрыть» поставьте галочку «Расширения имен файлов», чтобы включить или выключить расширения файлов. Проводник будет помнить этот параметр, пока вы не отключите его в будущем.
Как показать расширения файлов в Windows 7
Этот параметр немного более скрыт в Windows 7, где он запрятан в окне параметров папки.
Это окно параметров также доступно в Windows 8 и 10 — на панели инструментов «Вид» просто нажмите кнопку «Параметры». Но быстрее включать и выключать расширения файлов с помощью ленты.
Это окно также доступно через Панель управления в любой версии Windows. Перейдите в Панель управления → Оформление и персонализация → Параметры папки. В Windows 8 и 10 он называется «Параметры Проводника».
Я хочу иметь возможность создавать файл, распространять его среди конечных пользователей, но не позволять им вносить изменения в файл.
Теперь, очевидно, я не могу никому помешать изменить файл, поэтому мой подход состоит в том, чтобы обнаружить и отклонить файл, если он был изменен.
Я намерен создать соленый хеш содержимого файла и добавить его в файл. При чтении хэш проверяется перед чтением остальной части файла. Обратной стороной этого является то, что я должен распределить фиксированную «соль» в исполняемом файле, который читает файл. Очевидно, я могу до некоторой степени это запутать, но это все еще кажется слабым звеном.
Есть ли лучшие подходы к решению такого рода проблем?
Вы хотите добавить к своему документу цифровую подпись. Это область, которая широко изучена. Короче говоря, вы можете с достаточной степенью уверенности убедиться, что файл не был изменен, но вы не можете предотвратить вмешательство пользователя в него.
(Сравнение с музыкальной индустрией не совсем уместно, поскольку они хотят помешать людям также копировать файл, что является гораздо более сложной проблемой.)
Даже решение на стороне сервера можно обойти, перехватывая трафик. Итак, вам нужно объединить их и использовать SSL. А затем они просто пропатчили двоичный файл, как указано выше, и все готово. Затем вы применяете различные меры для обфускации вашего двоичного файла, а ваши пользователи используют дизассемблер, такой как IDA PRO.
На вашем месте я бы задавал себе вопрос: «Если я вступлю в гонку вооружений с моими пользователями, выиграю ли я?». Если ответ отрицательный, я не буду тратить зря время.
Что касается вашего беспокойства по поводу распространения хэша . Хорошая практика состоит в том, чтобы сделать хеш и зашифровать его с помощью пары закрытый-открытый ключ. И вам нужно только раздать открытый ключ. Таким образом, они смогут прочитать его, но не смогут изменить или создать новый.
Я предлагаю использовать цифровую подпись, как предлагает JesperE. Процесс стандартный, вы найдете множество примеров, демонстрирующих его.
Даже если пользователи исправляют свои собственные двоичные файлы, чтобы гарантировать, что их отредактированная копия файла работает правильно, отредактированная копия все равно не будет работать на машинах без исправлений. Какова цель предотвращения этого редактирования?
Кстати, пользователи менее склонны редактировать двоичные файлы, чем простые текстовые файлы. Кроме того, пользователи менее склонны чувствовать раздражение, если вы передадите им двоичный файл, чем если вы передадите им текстовый файл с контрольной суммой, предполагая, что у них есть законная причина желать его редактировать, и они могут, посмотрев на файл, сказать, что это было бы легко сделать, если бы вы не добавили контрольную сумму или что-то еще.
В зависимости от того, какой файл вы хотите защитить, вы можете использовать какой-нибудь инструмент управления документами. В Adobe PDF есть инструменты для этого. Более того, если вы размещаете свое приложение на сервере приложений или веб-сервере, пользователи не могут получить доступ к коду и изменить его. Таким образом, у вас может быть база данных хэшей на стороне сервера, файлов, которые вы хотите защитить.
Конечно, защита хороша лишь в зависимости от того, сколько времени и усилий ваши пользователи захотят (или могут) вложить в нарушение защиты.
Это то, для чего нужны хэши md5 и CRC, и поэтому вы проверяете загруженные файлы из Интернета по их файлу md5, чтобы убедиться, что он не был взломан в пути.
В любом случае, я думаю, что Родди использует C ++, поэтому я могу порекомендовать Boost :: CRC очень быстро и с небольшими накладными расходами, вам также не нужно шифровать файл таким образом
Читайте также: