Название говорит само за себя. (Один из редких случаев, когда это действительно подходит .: P)
Здесь может сработать старый трюк со стороны 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
.