Редактирование файла без разрешения на перезапись

Редактирование файла без разрешения на перезапись

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

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

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

решение1

Поскольку все пакеты будут пытаться полностью переопределить файл конфигурации, вы можете перевести файл в режим «только добавление» следующим образом:

chattr +a bb

Таким образом, вы не можете удалить/обрезать файл, а только добавить его.

Но в этом случае вы остановите обновление системы менеджером пакетов.

Если вы просто не хотите, чтобы менеджер пакетов перезаписывал ваши настроенные файлы, вы можете заблокировать пакет. В Debian/Ubuntu это можно сделать так:

echo package-name hold | dpkg --set-selections

Таким образом, этот пакет не будет обновлен, ваши файлы сохранятся.

решение2

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

решение3

Прежде всего, сделайте tar важных файлов пакета. Затем обновитесь. После установки новой версии распакуйте сохранениев другом каталоге, и сравните файлы, которые вы отредактировали, с файлами из нового пакета. Таким образом вы увидите, нет ли в новых файлах важных вещей, которые нужно добавить/изменить (т. е. разработчики также могли внести изменения в файлы, которые вы отредактировали, и эти изменения тоже следует сохранить. Вы не можете просто заменить файлы из нового пакета своими старыми правками, не проверив сначала, не содержат ли эти новые файлы новой важной информации).

решение4

Как root выполните:

chattr +i foo.txt

Тогда попробуйте:

vim foo.txt

измените файл в vim и попробуйте сохранить его.

Примером использования является chattr +i /etc/resolv.conf, чтобы ваша надоедливая служба сетевого менеджера не перезаписала его каким-нибудь плохим файлом, полученным от неправильно настроенного домашнего/офисного маршрутизатора.

Вы можете отменить это с помощью:

chattr -i foo.txt

В модели файловой системы Linux это лучшее, что можно сделать. Другого решения нет.

Связанный контент