Как запретить пользователям удалять каталог?

9

Я попробовал "chattr + i DIRNAME", это здорово, но я не могу создавать файлы в DIR после chattr. Что еще нужно, чтобы пользователи не могли удалить Каталог?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

ОБНОВЛЕНИЕ: важно только удаление каталога, поэтому мне все еще нужно удалить файлы в нем

Гаско Питер
источник
Посмотрите на /tmpи /var/tmp. Хотя каждый пользователь может создавать файлы там, он / она может удалять только свои собственные файлы / каталоги, но не каталог itselv.
Нильс

Ответы:

3

Так что же не так с простым chown / chmod ?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

Хорошо, позвольте мне сказать вам, что не так с этим: каждый пользователь имеет все права доступа к каждому файлу в questionкаталоге из-за 777разрешений. Лучше

  • создать новую группу groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • добавьте пользователей, которые должны иметь доступ к файлам, в новую группу: usermod -G group user

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

jippie
источник
2
Это также зависит от того, где находится этот каталог. Если кто-либо из группы вопросов имеет права rwx на каталог, содержащий каталог вопросов, он сможет удалить его.
Laurentiu Roescu
Добавьте дополнительный, sudo chmod o+t ..чтобы установить tфлаг в родительском каталоге. tФлаг запретит , чтобы удалить файл , который не принадлежит пользователю. tобычно используется, /tmpчтобы сделать именно это. Пользователь А не может удалить файлы, принадлежащие Пользователю Б.
Джиппи
Или еще раз просто поместите правильное владение битами разрешения на каталог.
Джиппи
Это не работает в док-контейнерах. :(
Кирби
13

Создайте файл ".protected" и сделайте как root

chattr +i .protected

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

Магнус
источник
Просто и эффективно. Отличный ответ.
Вуг
Это не работает в док-контейнерах. :(
Кирби
1
Чтобы удалить его, используйте "chattr -i [имя файла]", чтобы удалить неизменный атрибут.
Emeraldhieu
3
chattr +a

должен сделать работу. Вы можете создавать файлы внутри, но вы не сможете их удалить.

Laurentiu Roescu
источник
я обновил вопрос
Гаско Петр