Здесь может сработать старый трюк со стороны Linux:
mkdir StayingAlive
sudo touch StayingAlive/.CantTouchThis
sudo chattr +i StayingAlive/.CantTouchThis
Ключевым моментом здесь является неизменяемый атрибут на .CantTouchThis
(вам, вероятно, понадобится более серьезное имя , например .rootfile
). Этот атрибут предотвращает удаление (или даже изменение) файла - даже root не может удалить его без предварительного удаления атрибута. Этот файл предотвратит очистку каталога и, следовательно, предотвратит его удаление.
Когда я делал это в прошлом, я обычно также менял владельца папки и предоставлял пользователю доступ через бит setgid (g + s) - хотя доводы, лежащие в основе этого, сейчас ускользают от меня
sudo chown root.user StayingAlive
sudo chmod g+sw StayingAlive
Чтобы удалить каталог, он должен быть пустым, и у вас должны быть права на запись для его родительского элемента.
Таким образом, вы можете либо предотвратить опустошение каталога, как предлагается STW, либо убедиться, что у пользователя нет прав на запись в родительском каталоге, который он не может удалить.
Если у вас есть каталог с именем / foo / bar
и файл с именем / foo / bar / file
, пользователь с правами записи в / foo / bar
может удалить файл. Но разрешения на запись в / foo / bar
не означают разрешения на удаление / foo / bar
, для удаления потребуются разрешения на запись в / foo
.