У меня есть некоторая папка ~/foo
, которую я хотел бы защитить от случайного удаления, то есть я хотел бы защитить ее от удаления с помощью rm -r ~/foo
или rmdir ~/foo
.
Я понял, что это можно сделать с помощью chmod a-w ~/foo
или chattr -i ~/foo
, но это имеет тот недостаток, что вы не можете ничего изменить внутри этой папки. Однако я бы хотел иметь возможность создавать/перемещать/удалять файлы и папки внутри ~/foo
.
Возможно ли это как-то сделать?
Создайте скрытый файл внутри папки и выполните ( .foo
в качестве примера) как «root»:
touch ~/foo/.foo
chattr +i ~/foo/.foo
Теперь вы можете удалить все файлы, кроме .foo
в этом каталог, и каталог не может быть удален другим пользователем. Тем не менее, вы все равно можете переместить каталог, и вы можете остановить это с помощью липкого бита ...
sudo chmod +t ~/foo
И это должно решить вашу проблему. НО я согласен: создание резервной копии всегда лучший вариант. Несколько более сложный вариант: поместить наблюдателя за каталогами в ~ / foo
и создать резервную копию с меткой времени для каждого файла, к которому он обращается, и до того, как он будет изменен в каталоге, недоступном для пользователей, было бы более безопасным методом.
Я бы посоветовал добавить следующие "safetynets" в ваш .bashrc (или файл конфигурации для другой оболочки), чтобы предотвратить наиболее очевидные ошибки.
Запрашивать подтверждение перед рекурсивным удалением 3 или более файлов или любого каталога. Также предотвращает рекурсивное удаление /
: (параметр -I
менее навязчив, чем -i
, который запрашивает каждый файл, но все же предотвращает большинство ошибок одним запросом подтверждения)
alias rm='rm -I --preserve-root'
Запретить рекурсивное изменение разрешений и прав собственности на /
: (не ваш вопрос, но все же хорошая функция безопасности для включения)
alias chmod='chmod --preserve-root'
alias chown='chown --preserve-root'
alias chgrp='chgrp --preserve-root'