Автор Тема: Как запретить удалять каталог [Решено].  (Прочитано 1823 раз)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Нужно запретить удалять каталог ISO по пути.
~/Общая\ папка/ISO
При этом общая группа пользователей и все остальные должны иметь возможность записи и удаления внутри каталога, но не должны иметь прав на удаление (переименование) каталога ISO.

Пробовал варианты с chmod, однако если группе дать права 7, то они и каталог могут удалять.
Делал вариант с битом sticky.
chmod 1777 ISO
В теории если владелец ISO это root то никто кроме него эту папку удалить не может. Однако у меня получилось, что группа имеющая права 7 и остальные с 7 могут удалять ISO. Может не то делаю...

Пробовал вариант с
chattr +i ISO
Был бы он идеален, но почему-то распространяется и на содержимое каталога.
Сразу скажу, что изменение уровня вложенности и перемещения ISO не выход.
« Последнее редактирование: 05.10.2016 17:54:46 от Koi »

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
Re: Как запретить удалять каталог.
« Ответ #1 : 03.10.2016 18:02:24 »
От удаление защита простая - внутри ISO бросить скрытый файл с immutable атрибутом.

С переименованием сложнее, этот фокус не работает.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Как запретить удалять каталог.
« Ответ #2 : 03.10.2016 18:07:25 »
Где-то так?
$ mkdir -p ~/Общая\ папка/ISO
$ ls -l ~/|grep 'Общая\ папка'
drwxr-xr-x  3 user user     4096 окт  3 18:01 Общая папка
$ chmod ugo-w ~/Общая\ папка
$ ls -l ~/|grep 'Общая\ папка'
dr-xr-xr-x  3 user user     4096 окт  3 18:01 Общая папка
$ rm -rf ~/Общая\ папка/ISO
rm: невозможно удалить «/home/user/Общая папка/ISO»: Отказано в доступе
$ touch ~/Общая\ папка/ISO/1.txt
$ ls -l ~/Общая\ папка/ISO/1.txt
-rw-r--r-- 1 user user 0 окт  3 18:03 /home/user/Общая папка/ISO/1.txt
$ ls -l ~/Общая\ папка|grep ISO
drwxr-xr-x 2 user user 4096 окт  3 18:03 ISO

Аналогично и с immutable
$ ls -l ~/Общая\ папка|grep ISO
drwxr-xr-x 2 user user 4096 окт  3 18:18 ISO
$ ls -l ~/|grep Общая\ папка
drwxr-xr-x  3 user user     4096 окт  3 18:01 Общая папка
$ lsattr -d ~/Общая\ папка
----i--------e-- /home/user/Общая папка
$ rm -rf ~/Общая\ папка/ISO
rm: невозможно удалить «/home/user/Общая папка/ISO»: Отказано в доступе
$ touch ~/Общая\ папка/ISO/2.txt
$ ls ~/Общая\ папка/ISO/2.txt
/home/user/Общая папка/ISO/2.txt
« Последнее редактирование: 03.10.2016 18:30:01 от Speccyfighter »

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
Re: Как запретить удалять каталог.
« Ответ #3 : 03.10.2016 18:13:39 »
ну а вместо защиты от переименования можно повесить костыль, типа incron - при изменениях в верхнего уровня каталогах проверять что происходит и если переименовали - переименовывать обратно в ISO ;)

Но вообще мне кажется что здесь явно проблема с постановкой задачи, не ложится оно на стандартную модель доступа в UNIX.

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Re: Как запретить удалять каталог.
« Ответ #4 : 03.10.2016 19:57:12 »
chmod ugo-w
Аналогично и с immutable
В этом загвоздка и заключается, нужно запретить не удалять только ISO и разрешить в ней нормально работать. Если наложить ограничение на каталог выше то в самом Общая\ папка становится нельзя работать.
Но вообще мне кажется что здесь явно проблема с постановкой задачи, не ложится оно на стандартную модель доступа в UNIX.
Возможно. Пока смотрю мануалы какие инструменты еще есть. Самое обидное делал те же настройки в вин8, надо было только в свойствах тыркнуть не удалять.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 145
    • Email
Re: Как запретить удалять каталог.
« Ответ #5 : 03.10.2016 19:59:06 »
ACL посмотрите.
http://samag.ru/archive/article/582
Сноси Винду, переходи на Линукс ! :)

Оффлайн stanukih

  • Завсегдатай
  • *
  • Сообщений: 560
Re: Как запретить удалять каталог.
« Ответ #6 : 03.10.2016 20:43:14 »
А если выделить раздел и монтировать его как iso. Вроде тогда ни переименовать  ни удалить получится.

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Re: Как запретить удалять каталог.
« Ответ #7 : 03.10.2016 22:01:42 »
ACL посмотрите.
http://samag.ru/archive/article/582
Уже дерзаю, он у нас оказывает по умолчанию стоит, только включить надо в fstab.
Сделал наследуемые маски и проблема решилась. Только описание брал отсюда. ACL отличная вещь не знал о ней раньше.
А если выделить раздел и монтировать его как iso. Вроде тогда ни переименовать  ни удалить получится.
Была такая мысль, но отложил, мне кажется это костыль.
« Последнее редактирование: 03.10.2016 22:03:43 от Koi »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
Re: Как запретить удалять каталог.
« Ответ #8 : 04.10.2016 12:10:57 »
Решение нашёл следующее.
1. chattr +i ISO
2. mount --bind каталог ISO
Придётся смонтировать в ISO другой каталог, в который пользователи будут иметь права на запись.

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Re: Как запретить удалять каталог.
« Ответ #9 : 04.10.2016 17:28:56 »
chattr +i ISO блокирует и работу с файлами в ISO.
Если его применить на "Общая папка" то в ней станет нельзя нормально работать.

У меня нашлось два варианта. Использование ACL по умолчанию для директории тогда созданные новые файлы и папки создаются не с правами папки а с правами default. Шикарная вещь.
Но можно было и проще. Я выше в постах уже писал, что пробовал бит sticky, не сразу допёр что он не работает на папку к которой применён, а только на наследуемые объекты внутри. То есть я выставил
chmod 1777 Общая\ папка
Владельцем ISO поставил рут и права 777. Получилось в обоих каталогах можно делать что захочется (со своим), но удалить ISO может только рут.