Linux запретить удаление папки

Как запретить удалять нужные файлы, но разрешить создавать/изменять/удалять прочие файлы?

Допустим, есть такая файловая система ext4 с точкой монтирования /ILYA, в которой находится файловое хранилище, и как пример, абсолютный путь к одному из файлов.

/ILYA/Music/W.A.S.P/1984 - W.A.S.P/01 - I wanna be somebody.flac 
p='/ILYA' && sudo chown -R root:root "$p" && sudo chmod -R =r,u+w,+X "$p" && chown user "$p" 
p='/ILYA' && sudo chown -R root:root "$p" && sudo chmod -R =r,u+w,+X,+t "$p" && chown user "$p" 

Но это вообще ничего не изменило.

Подскажите, как решить эту задачу, или что я недосмотрел, или, хотя бы, куда мне копать?

Основная моя ошибка была в том, что я считал атрибуты chmod =r,u+w,+X,+t и a=trX,u+w эквивалентными на основании того, что =r было эквивалентно a=r . Запись с a= и короче, и красивее, и понятнее, а главное выполняет то, что от неё требуется. (Сбросить все привилегии и заново установить для всех пользователей стикибит, чтение, и если это директория, то и выполнение, а для владельца, по мимо этого, ещё установить запись)

И так моя задаче решается такой командой, к сожалению, без find не обойтись.

p='/ILYA' && sudo chown -R user:users "$p" && sudo chmod -R a-t,g-w "$p" 

А также, в случае, если нужно запретить удалять даже root-у, тогда нужно использовать chattr + find только на файлы, пропуская директории.

В этом случае эти файлы, причём уже совершенно не важно кто ими владеет, не сможет удалить даже root, пока root не снимет атрибут i , j, обратной командой.

Источник

unixforum.org

Запрет удаления / переименования папки (только на папку)

Запрет удаления / переименования папки

Сообщение Domoffou » 22.07.2008 21:31

Здравствуйте.
Можно ли запретить переименование определенной папки или ее удаление, оставив при этом возможность другим юзерам работать с ней полностью (удалять, копировать, вставлять содержимое)?
По идее, хоть все смогли бы полностью ее очистить, но нельзя переименовать или удалить.
Что сделал я:
1. создал папку:

chown nobody /home/NODELETE

Всё, юзеры получили доступ и могут хулиганить. Включая удаление папки NODELETE

Стоит Ubuntu 8.04, ext3, поднята самба (думаю не от нее зависит, в т.ч. от версии линукса, поэтому пишу сюда).

nesk Сообщения: 2268 Статус: Линукссаксовец ОС: MS Windows XP Home SP3 Контактная информация:

Re: Запрет удаления / переименования папки

Сообщение nesk » 22.07.2008 21:33

Здравствуйте.
Можно ли запретить переименование определенной папки или ее удаление, оставив при этом возможность другим юзерам работать с ней полностью (удалять, копировать, вставлять содержимое)?
По идее, хоть все смогли бы полностью ее очистить, но нельзя переименовать или удалить.
Что сделал я:
1. создал папку:

chown nobody /home/NODELETE

Всё, юзеры получили доступ и могут хулиганить. Включая удаление папки NODELETE

Стоит Ubuntu 8.04, ext3, поднята самба (думаю не от нее зависит, в т.ч. от версии линукса, поэтому пишу сюда).

Читайте также:  Hp laserjet pro mfp m125ra драйвер linux

надо что бы у пользователя не было права на запись в родительский каталог.
если у пользователя нет права писать в /home он не сможет переименовать или удалить содержимое /home в частности NODELETE

Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

Re: Запрет удаления / переименования папки

Сообщение Domoffou » 22.07.2008 21:36

надо что бы у пользователя не было права на запись в родительский каталог.
если у пользователя нет права писать в /home он не сможет переименовать или удалить содержимое /home в частности NODELETE
Но root может всё

Т.е. поставить chmod на /home?
Или chown на /home?
ПРоблема вся в том, что юзер должен иметь возможность создавать подпапки внутри NODELETE и удалять их соответственно,
т.е. полный доступ вверх от папки NODELETE.
а рут на то и рут что он рут

nesk Сообщения: 2268 Статус: Линукссаксовец ОС: MS Windows XP Home SP3 Контактная информация:

Re: Запрет удаления / переименования папки

Сообщение nesk » 22.07.2008 21:41

надо что бы у пользователя не было права на запись в родительский каталог.
если у пользователя нет права писать в /home он не сможет переименовать или удалить содержимое /home в частности NODELETE
Но root может всё

Т.е. поставить chmod на /home?
Или chown на /home?
ПРоблема вся в том, что юзер должен иметь возможность создавать подпапки внутри NODELETE и удалять их соответственно,
т.е. полный доступ вверх от папки NODELETE.

Рррр
555 для /home
777 для NODELETE

и развлекайтесь
отсутствии права на запись в родительский никак не повлияет на запись в дочерний.

Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

Re: Запрет удаления / переименования папки

Сообщение Domoffou » 22.07.2008 21:43

555 для /home
777 для /NODELETE

и развлекайтесь
отсутствии права на запись в родительский никак не повлияет на запись в дочерний.

оОо, большое спасибо! Обязательно попробую, а то всю голову сломал насчет прав для папки, а на верхний уровень ограничения не догадался наложить.

Re: Запрет удаления / переименования папки

Сообщение murderdoll » 22.12.2008 23:46

На днях встала подобная проблема, chmod +t оказалось неплохим решением для папки с музыкой и видео, а вот базы 1Ски на такие провокации не поддаются. При обращении клиента к базе создаются несколько служебных файлов, которые удаляются при отключении клиента (если к базе больше никто не подключён), так вот, если влепить chmod +t на папку с базами, то посыпятся ошибки блокировки служебных файлов 1Ски уже при попытке подключения 2-го пользователя. Решения пока не найдено, не хватило сегодня времени, но чувствую, что оно существует. Может, кто-либо из участников форума сталкивался с подобной ситуацией и может поделиться решением?

P.S. Бит t запрещает удаление папки (и её содержимого) всем пользователям (даже если права на паку стоят 777), кроме владельца данного каталога.

Re: Запрет удаления / переименования папки

Сообщение Frank » 23.12.2008 10:26

Что-то мне кажется, что ваша версия одинцэ — не сетевая и на работу нескольким юзерам с одной базой не рассчитана.
Если же таки сетевая, то согласитесь, что запрет на rw доступ к файлам вторым пользователем после создания их первым — это как раз и есть то, для чего предназначен стики бит (-t)
Хотите извращений — применяйте acl

Читайте также:  Активировать виртуальную среду python linux

Re: Запрет удаления / переименования папки

Сообщение murderdoll » 24.12.2008 23:04

Что-то мне кажется, что ваша версия одинцэ — не сетевая и на работу нескольким юзерам с одной базой не рассчитана.
Если же таки сетевая, то согласитесь, что запрет на rw доступ к файлам вторым пользователем после создания их первым — это как раз и есть то, для чего предназначен стики бит (-t)
Хотите извращений — применяйте acl

Ну не знаю, вроде сетевая, работает в файловом режиме.

Вернёмся к нашему биту, тут интересная штука получается, мне он впервые стал известен как бит, установка которого на папку запрещает удаление файлов в этой папке всем, кроме владельца папки, вне зависимости от разрешений на папку. То есть будь там права на папку 777, мы делаем chmod +t и теперь никто, кроме владельца данной директории, не сможет удалить находящиеся в ней файлы, даже пользователь который файл создал, а владельцем папки не является. Суть в том что можно создать, можно изменить, но нельзя ничего удалять если ты не владелец каталога.
Таким образом, получаем следующее, т.к. 1цка файлы при подключении клиента создаёт, а при отключении удаляет, следовательно нужно чтобы она была запущена от имени владельца папки. Насколько я понимаю процесс, запущенный от имени конкретного пользователя получает те же права на файлы, что и пользователь от имени которого он запущен. Если вышеуказанное верно, то wine в котором крутится 1цка нужно пускать от имени юзера-владельца папки с базами. Допустим так, но подключения к базе идут как от клиентов wine+1C так и от виндовых тачек, как быть с ними?

Прошу прощения, если написал глупость, я пока только начинаю во всём этом разбираться.

Источник

ROSAForum

Надо сделать папку удаляемой только от рут, а внутри нее разрешить запись и удаление т.д. всем. Как это реализовать?

Пробовал chmod, но если дать права на записи группе или пользователю 777, то они тогда и основную папка могут удалять.
Пытался дать папке владельца рут и ставить 1 бит 1777, в теории основную папку не должны удалять други пользователи, но если у них права 77 они могут это делать.
Нашел вариант с chattr +i, но команда слишком тотальна и запрещает создавать файлы внутри.

VictorR2007 Сообщения: 7075 Зарегистрирован: 12 сен 2011, 13:00 Operating system: ROSA 2023.1 Откуда: Северодвинск

Re: Как запретить удалять папку.

Сообщение VictorR2007 » 03 окт 2016, 09:57

Если речь о случайном удалении, то можно использовать такой вариант.
Чтобы избежать удаления основной папки, можно переместить её куда-нибудь подальше в иерархии каталогов.
А для пользователей создать в старом её расположении символическую ссылку на эту папку.
Если случайно удалят, всегда можно создать новую ссылку.
Я однажды случайно удалил каталог mirror с локальными репами размером в 250 Гб,
и пришлось скачивать новое зеркало.
Теперь использую символическую ссылку, и уже случайно удалял её.
Так что создание символической ссылки помогло.
От злонамеренного удаления это не спасёт, если вредитель достаточно грамотный.

Читайте также:  Touch screen and linux

admsasha Сообщения: 278 Зарегистрирован: 25 ноя 2011, 17:54 Operating system: ROSA Контактная информация:

Re: Как запретить удалять папку.

Сообщение admsasha » 03 окт 2016, 11:37

Создаешь папку от root (755), в ней создаешь еще одну папку от root (777). Всё. Удалить не можешь, создать во второй папке можешь что угодно.

Lyis Сообщения: 13 Зарегистрирован: 01 окт 2016, 21:43 Operating system: ROSA Fresh R10 kde5

Re: Как запретить удалять папку.

Сообщение Lyis » 03 окт 2016, 16:29

Re: Как запретить удалять папку.

Сообщение notauser » 04 окт 2016, 22:27

Интересно зачем сохранять саму папку? Это конечно можно «смонтировав» папку саму в себя с ключом —bind

su mount --bind папка папка

Источник

«Защита от дурака» или как запретить изменение/удаление важных папок

Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:

/home/hostuser/vhosts/sitename.ru/

И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?

После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:

chattr +i /home/hostuser/vhosts/sitename.ru 

Для снятия атрибута необходимо использовать флаг -i.

Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:

touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep 

Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).

Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount —bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.

Источник

Оцените статью
Adblock
detector