Чи можливо створити файл, який має повний дозвіл для всіх, але його неможливо видалити?


15

Без використання судо, бажано?


2
Боже, корінь, в чому різниця? ars.userfriendly.org/cartoons/?id=19981111 Як практична справа, мрія авторів про зловмисне програмне забезпечення, який навіть корінь після цього не міг видалити.
Дан вигадує Firelight

Я погоджуюся, що форматування @DanNeely Plus - це також форма видалення файлу;)
Rinzwind

Відповіді:


3

Спробуйте:

chattr +i filename

Це, однак, зробить файл, який не може бути відновлений навіть rootкористувачем - використовувати обережно.


5
при touch test && chattr +i testйого виконанні викидає помилку; chattr: Operation not permitted while setting flags on test. Вам sudoдля цього потрібно . Поруч із цим: ще можна видалити файл: sudo chattr -i test && rm testпрацює.
Rinzwind

23

Ні, це неможливо. Звичайним користувачам неможливо видалити файл: обов'язково.

  1. Вам потрібно sudoбуде запобігти видаленню файлів користувачам. Ваш адміністратор-завжди зможе видалити файл.

  2. sudo chattr +i testможе запобігти видаленню, але вимагає sudo. Простий sudo chattr -i testдозволяє видалити файл. Жоден інший користувач, крім адміністратора, не може використовувати chattr.

І ... просто перезавантаження та перехід у режим порятунку дозволить цій людині мати змогу видалити цей файл. Це було б ризиком для безпеки, якби був метод, який ніколи не зможе видалити файл.


8

Це трохи неочищено, але це близько - якщо ви видалите доступ для запису в каталог, файли всередині нього не можуть бути видалені. І це не вимагає, sudoякщо ви володієте ним:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

Таким чином, ви можете встановити дозволи на сам файл, як вам захочеться.

Також, як зазначає @Rinzwind, навколо цього, безумовно, існує багато способів.


Це схоже саме на те, що хотіла ОП. (Хоча чому вони цього хотіли, я не впевнений.) Користувачі можуть читати, змінювати та запускати файли, але не можуть від’єднати (видалити) їх.
Eliah Kagan

8

Щоб видалити файл, вам потрібен дозвіл на запис у всіх каталогах, до яких файл пов’язаний. Щоб від’єднати його від однієї директорії, вам потрібно дозволити на запис до цього каталогу.

Якщо ви даєте дозвіл на запис (або навіть право власності) на файл, але не в каталог або каталоги, до яких файл пов'язаний, цей файл не можна видалити.

Найкращим способом досягти цього було б прив’язати цей файл до каталогу, який належить root, і який ніхто не може записувати. Ви можете зробити так, щоб він належав вам, а це означало б, що і ви, і root могли видалити його.

Це все ще дозволить іншим користувачам зв’язати цей файл з іншими каталогами та від’єднати його звідти згодом, але вони все одно не зможуть видалити файл, оскільки вони зможуть від’єднати його від вашого власного каталогу.

Зауважте, що для того, щоб повноцінно працювати, дозвіл на запис кожного компонента шляху до файлу повинен був контролюватися. Оскільки, наприклад, якщо файл є, /a/b/the-fileі ви /a/bне можете його записувати ніким, але всі мають доступ до запису /a, вони можуть перейменувати /a/bщось інше і відтворити своє власне /a/bі створити /a/b/the-fileтам свій власний .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.