- Как запретить удалять нужные файлы, но разрешить создавать/изменять/удалять прочие файлы?
- «Защита от дурака» или как запретить изменение/удаление важных папок
- unixforum.org
- Запрет удаления / переименования папки (только на папку)
- Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
Как запретить удалять нужные файлы, но разрешить создавать/изменять/удалять прочие файлы?
Допустим, есть такая файловая система 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, обратной командой.
«Защита от дурака» или как запретить изменение/удаление важных папок
Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 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. С помощью этой связки можно настроить защиту от намеренного изменения структуры.
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, поднята самба (думаю не от нее зависит, в т.ч. от версии линукса, поэтому пишу сюда).
надо что бы у пользователя не было права на запись в родительский каталог.
если у пользователя нет права писать в /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
Re: Запрет удаления / переименования папки
Сообщение murderdoll » 24.12.2008 23:04
Что-то мне кажется, что ваша версия одинцэ — не сетевая и на работу нескольким юзерам с одной базой не рассчитана.
Если же таки сетевая, то согласитесь, что запрет на rw доступ к файлам вторым пользователем после создания их первым — это как раз и есть то, для чего предназначен стики бит (-t)
Хотите извращений — применяйте acl
Ну не знаю, вроде сетевая, работает в файловом режиме.
Вернёмся к нашему биту, тут интересная штука получается, мне он впервые стал известен как бит, установка которого на папку запрещает удаление файлов в этой папке всем, кроме владельца папки, вне зависимости от разрешений на папку. То есть будь там права на папку 777, мы делаем chmod +t и теперь никто, кроме владельца данной директории, не сможет удалить находящиеся в ней файлы, даже пользователь который файл создал, а владельцем папки не является. Суть в том что можно создать, можно изменить, но нельзя ничего удалять если ты не владелец каталога.
Таким образом, получаем следующее, т.к. 1цка файлы при подключении клиента создаёт, а при отключении удаляет, следовательно нужно чтобы она была запущена от имени владельца папки. Насколько я понимаю процесс, запущенный от имени конкретного пользователя получает те же права на файлы, что и пользователь от имени которого он запущен. Если вышеуказанное верно, то wine в котором крутится 1цка нужно пускать от имени юзера-владельца папки с базами. Допустим так, но подключения к базе идут как от клиентов wine+1C так и от виндовых тачек, как быть с ними?
Прошу прощения, если написал глупость, я пока только начинаю во всём этом разбираться.