Есть ли способ предотвратить удаление определенных файлов из пользовательского каталога?

42

Допустим, у пользователя есть Directory1 и он содержит File1 File2 CantBeDeletedFile Как сделать так, чтобы пользователю никогда не разрешили удалить CantBeDeletedFile ?

Если я поменяю владельца Directory1 и удаляю права на запись, пользователи не смогут удалить любой файл. Они также не смогут добавлять новые файлы и т. Д.

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

Более конкретное описание.

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

В настоящее время, если пользователь владеет каталогом, который содержит какой-либо файл. Он может удалить.

Если нет общего способа для всех * nix, это Linux и ext4 FS.

bakytn
источник

Ответы:

40

(Мне не нравится дом вторгающихся пользователей, я думаю, что им должно быть позволено делать то, что они хотят делать со своими домами ... но в любом случае ...)

Это должно работать на Linux (по крайней мере). Я предполагаю, userчто уже является членом группы user. Решение состоит в том, чтобы изменить владельца Directory1и установить бит закрепления в каталоге:

chown root:user Directory1
chmod 1775 Directory1

Тогда используйте:

chown root Directory1/CantBeDeletedFile

Теперь userне удастся удалить этот файл из-за залипания бита¹. Он userвсе еще может добавлять / удалять свои собственные файлы в Directory1. Но обратите внимание, что они не смогут удалить, Directory1потому что он никогда не будет очищен.

-
1. Если в каталоге включен бит закрепления, пользователи (кроме владельца) могут удалять только свои собственные файлы внутри каталога. Это используется в каталогах, /tmpчьи права доступа 1777= rwxrwxrwt.

Стефан Хименес
источник
Мне тоже не нравится, но пользователи новички в мире Linux. ЕСЛИ они удаляют
лаунчер по
Спасибо, это работает! Не уверен, как я буду действовать. С Chattr или таким образом. Если сделать на своем пути. Я все еще могу удалить каталог как корень. С верхним решением (chattr) даже root не может удалить папку.
Бакытн
@bakytn: это всего лишь мера предосторожности, или вы действительно позвонили в службу поддержки? Потому что большинство новичков, вероятно, будут слишком напуганы, чтобы связываться с файлами, которые они не знают.
Ли Райан
@ Ли Райан на 100% уверен, что они будут обращаться за поддержкой. Но да, в настоящее время это всего лишь предосторожность.
Бакытн
Рано или поздно учебные колеса должны оторваться ... и если они не научились ездить на велосипеде, авария будет чем-то, что можно увидеть. Я согласен с ответом, вероятно , дополненной withcopious он-лайн помощь и консервированных спам «Если вы„случайно“удален ThisDesktopFile, первый идти к ближайшей стене и биться головой трудно против него 3 раза (на удачу), а затем сделать cp /here/is/the/master/ThisDesktopFile $HOME. Подпись : BOfH "
vonbrand
63

Сделайте файл неизменным с iатрибутом.

chattr +i file.desktop

см. man chattrдля получения дополнительной информации.

Кит
источник
8
Я добавил это примечание, поскольку я не смог вывести его из упомянутой справочной страницы: chattrработает только на файловых системах ext2 / ext3 / ext4.
Манатворк
Это так круто! Это сработало! Спасибо, сэр! Элегантное решение, но есть одно ограничение. Даже root не может удалить эти файлы без предварительного изменения. Но это так здорово на самом деле. Не был уверен, какой ответ принять. Принято более общий способ, но менее быстрый
Bakytn
@manatwork, по крайней мере, также работает на XFS, я предполагаю, что некоторые другие файловые системы также поддерживают эти атрибуты.
Руслан
Чтобы «отменить» эту команду, просто сделайтеchattr -i file.desktop
GreenRaccoon23
1
Я только что проверил это на ZFS на Linux, и это сработало. Я хотел предотвратить удаление файла, используемого для указания программе резервного копирования baculaигнорировать папку.
drescherjm
2

Я не думаю, что есть способ предотвратить удаление отдельного файла с правами доступа к Unix-файлу, но я могу придумать обходной путь: написать демон, который заменяет его при удалении. inotify-toolsидеально подходит для такого рода вещей, если вы работаете в Linux.

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

Шон Дж. Гофф
источник
0

Простой

chmod -i filename

будет своего рода "защищать" этот файл от удаления.

rm filename
rm: remove write-protected regular file 'filename'?

Вы все еще можете удалить его, но, по крайней мере, вы должны быть достаточно уверены в том, что делаете.

fiatjaf
источник