- Как запретить удаление файла в Linux, даже для Root
- Как сделать каталог неизменяемым в Linux рекурсивно
- unixforum.org
- Запрет удаления / переименования папки (только на папку)
- Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- Re: Запрет удаления / переименования папки
- «Защита от дурака» или как запретить изменение/удаление важных папок
- Урок 17. Права доступа Linux к файлам и папкам
Как запретить удаление файла в Linux, даже для Root
Оригинал: How to Make File and Directory Undeletable, Even By Root in Linux
Автор: Aaron Kili
Дата публикации: 10 октября 2017 года
Перевод: А. Кривошей
Дата перевода: июль 2018 г.
В Unix-подобных операционных системах, включая Linux, root — это имя учетной записи или пользователя, который по умолчанию может изменять все каталоги и файлы в системе. В этой статье мы покажем, как сделать каталоги или файлы в Linux недоступными для удаления даже пользователем root.
Чтобы сделать файл неуязвимым для любого пользователя системы, включая root, вам необходимо сделать его неизменяемым с помощью команды chattr. Эта команда изменяет атрибуты файлов в файловой системе Linux.
Приведенная ниже команда делает файл /backups/passwd файл неизменяемым. Это означает, что файл нельзя изменить любым образом: его нельзя удалить или переименовать. Вы даже не можете создать ссылку на него, и никакие данные также не могут быть записаны в файл.
Обратите внимание, что вам нужны привилегии суперпользователя, чтобы установить или удалить этот атрибут:
Для просмотра атрибутов файла используется команда lsattr, как показано ниже:
Теперь попробуйте удалить неизменяемый файл, как от имени обычного пользователя, так и как root.
Как сделать каталог неизменяемым в Linux рекурсивно
Используя флаг -R, вы можете рекурсивно изменять атрибуты каталогов и их содержимого.
Чтобы снова изменить файл, используйте флаг -i, чтобы удалить вышеуказанный атрибут, как показано ниже.
Подробнее о команде chattr вы можете узнать из следующих статей на нашем сайте:
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
Запрет удаления / переименования папки (только на папку)
Модератор: Bizdelnick
Запрет удаления / переименования папки
Сообщение Domoffou » 22.07.2008 21:31
Всё, юзеры получили доступ и могут хулиганить. Включая удаление папки NODELETE
Стоит Ubuntu 8.04, ext3, поднята самба (думаю не от нее зависит, в т.ч. от версии линукса, поэтому пишу сюда).
Re: Запрет удаления / переименования папки
Сообщение nesk » 22.07.2008 21:33
Всё, юзеры получили доступ и могут хулиганить. Включая удаление папки NODELETE
Стоит Ubuntu 8.04, ext3, поднята самба (думаю не от нее зависит, в т.ч. от версии линукса, поэтому пишу сюда).
надо что бы у пользователя не было права на запись в родительский каталог.
если у пользователя нет права писать в /home он не сможет переименовать или удалить содержимое /home в частности NODELETE
Но root может всё
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
Re: Запрет удаления / переименования папки
Сообщение Domoffou » 22.07.2008 21:36
Re: Запрет удаления / переименования папки
Сообщение nesk » 22.07.2008 21:41
Рррр
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
Re: Запрет удаления / переименования папки
Сообщение murderdoll » 24.12.2008 23:04
Ну не знаю, вроде сетевая, работает в файловом режиме.
Вернёмся к нашему биту, тут интересная штука получается, мне он впервые стал известен как бит, установка которого на папку запрещает удаление файлов в этой папке всем, кроме владельца папки, вне зависимости от разрешений на папку. То есть будь там права на папку 777, мы делаем chmod +t и теперь никто, кроме владельца данной директории, не сможет удалить находящиеся в ней файлы, даже пользователь который файл создал, а владельцем папки не является. Суть в том что можно создать, можно изменить, но нельзя ничего удалять если ты не владелец каталога.
Таким образом, получаем следующее, т.к. 1цка файлы при подключении клиента создаёт, а при отключении удаляет, следовательно нужно чтобы она была запущена от имени владельца папки. Насколько я понимаю процесс, запущенный от имени конкретного пользователя получает те же права на файлы, что и пользователь от имени которого он запущен. Если вышеуказанное верно, то wine в котором крутится 1цка нужно пускать от имени юзера-владельца папки с базами. Допустим так, но подключения к базе идут как от клиентов wine+1C так и от виндовых тачек, как быть с ними?
Прошу прощения, если написал глупость, я пока только начинаю во всём этом разбираться.
Источник
«Защита от дурака» или как запретить изменение/удаление важных папок
Доброе время суток.
Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:
И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?
После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:
Для снятия атрибута необходимо использовать флаг -i.
Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:
Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).
Спасибо за внимание.
Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount —bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.
Источник
Урок 17. Права доступа Linux к файлам и папкам
В 3-м уроке была рассмотрена команда ls -l , а также краткое описание к выводу команды. В выводе команды также присутствует информация о правах доступа к данному файлу:
Права доступа разделены на 3 группы:
- владелец файла
- группа владельцев файла
- другие пользователи
Для указания уровня доступа к файлу или каталогу используются следующие атрибуты.
- r (read) — чтение файла разрешено, то есть можно просматривать его содержимое, открывать в текстовом редакторе.
- w (write) — запись файла разрешена, то есть можно его редактировать, переименовывать, удалять.
- x (execute) — исполнение файла разрешено. Это касается исполняемых файлов.
- r (read) — разрешено просматривать содержимое каталога, то есть можно воспользоваться командой ls и посмотреть какие файлы и каталоги содержаться в данном каталоге.
- w (write) — используется совместно с атрибутом x (execute). Позволяет удалять и переименовывать файлы в каталоге.
- x (execute) — при использовании совместно атрибутом r (read) позволяет увидеть атрибуты файла, то есть его размер, дату модификации, права доступа. Одним словом позволяет полноценно воспользоваться командой ls -l . При использовании совместно с атрибутом w (write) позволяет перейти в каталог командой cd , удалять и переименовывать файлы.
Рассмотрим вышесказанное на примерах.
У нас в системе имеются 2 пользователя: teacher (учитель) и student (студент). У каждого из них имеется свой домашний каталог, в котором они могут хранить свои файлы.Так как пользователь student не является владельцем каталога /home/teacher и не относится к группе его владельцев, то для него будут действовать права доступа для категории остальных пользователей.
Домашний каталог пользователя teacher имеет следующие права доступа:
Пользователь student хочет посмотреть какие файлы имеются в данном каталоге:
Доступа нет. Попробуем хотя бы перейти в этот каталог:
Снова нет доступа.
Пользователь teacher решил всем разрешить просмотр его файлов в каталоге:
Попробуем узнать что у него хранится:
Мы узнали имена файлов, но абсолютно ничего не знаем какие это файлы и их атрибуты. То есть атрибут r (read) каталога позволяет просматривать имена (только имена) файлов с помощью ls , но не выдает о них дополнительную информацию. Попробуем перейти в этот каталог:
И снова неудача. Попробуем установить права записи, то есть атрибут w (write):
Теперь попробуем выполнить все те же действия, что и до этого:
Как видно атрибут w (write) сам по себе не работает. Удалим этот атрибут и установим x (execute):
доступ к данному каталогу у нас имеется при наличии установленных прав на чтение и исполнение.
Попробуем теперь удалить или переименовать любой файл:
Операция запрещена, так как у нас для каталога teacher/ не установлен атрибут w (write).
Но ведь сами файлы в каталоге имеют полный доступ для всех остальных пользователей.. Почему мы ничего не можем сделать с данными файлами?
Все верно, файлы имеют полный доступ для всех, однако система прежде всего смотрит на то, какие права доступа у каталога, так как файлов может быть очень много и менять права доступа каждого из них довольно утомительно и легко можно допустить ошибку. Гораздо проще установить определенные права доступа на каталоги и перемещать соответствующие файлы в эти каталоги. Кроме того, операции по удалению и перемещению файлов регламентируются правами доступа данного каталога, а не файла.
Когда для каталога запрещена запись, то остальным пользователям запрещено следующее:
- удалять файлы из каталога
- перемещать/переименовывать файлы
- создавать жесткие ссылки
- создавать новые файлы и каталоги в данном каталоге
Однако данная политика не накладывает ограничения на редактирование и копирование файлов. Можно с легкостью отредактировать и сохранить файл. Кроме того, мы можем скопировать файл в свой каталог. Причем файл будет иметь совершенно иные атрибуты. Например, скопируем файл Worknotes.txt в каталог /home/student/:
Теперь у скопированного файла новый владелец и другие права доступа. Здесь данные операции регламентируется уже правами доступа самого файла.
А что можно делать с файлами, когда установлен атрибут x (execute)?
Можно делать следующее:
- просматривать атрибуты файлов (совместно с атрибутом r ) с помощью команды ls -l
- переходить в каталог командой cd
- запуск исполняемых файлов
- совместно с атрибутом w (write) можно удалять и перемещать файлы
Теперь установим атрибут w (write) для каталога /home/teacher/ и посмотрим, что произойдет:
Теперь можно делать абсолютно что угодно с файлами и каталогами.
То есть атрибут w (write) работает всегда в паре с x (execute)?
Все верно, но это в отношении каталогов. У файлов данные атрибуты независимы друг от друга.
А как быть, если пользователь student хочет предоставить доступ к своим файлам определенным пользователям и запретить остальным?
Для этого существует группа владельцев файла. Пользователю student достаточно поменять группу владельцев файла на teache r и предоставить соответствующие права, а всем остальным — запретить:
А как поменять группу?
С помощью команды chgrp [опции] группа файл .
Например, чтобы поменять группу владельцев файла Linux.txt на teacher введем chgrp teacher Linux.txt.
А если имеется много файлов, то как это сделать быстрее и проще?
Есть специальная опция -R ( —recursive ). Например, имеется каталог Homework/ с файлами:
Применим команду chgrp -R teacher Homework/ :
А можно поменять и самого владельца?
Конечно, существует команда chown [опции] владелец файл .
Однако в тех случаях, когда нам необходимо поменять сразу и группу и владельца, то приходится выполнять 2 команды и это не очень удобно. Поэтому команда chown позволяет менять одновременно и владельца и группу chown [опции] владелец:группа файл. Опция -R ( —recursive ) действительна и для данной команды.
А как можно менять сами права для группы владельцев и остальных пользователей?
Существуют 2 способа:
Используются следующие обозначения объектов, которым предоставляем права доступа:
Права меняются с помощью команды chmod [опции] права_доступа файл. Например, файл notes.txt имеет следующие права доступа:
Запретим остальным пользователям редактирование данного файла:
chmod o-w notes.txt
Теперь разрешим группе владельцев исполнение данного файла:
chmod g+x notes.txt
То есть мы указываем объект ( u , g или о ), а затем с помощью символов управления назначаем или удаляем соответствующие права.
А можно одновременно выполнить вышеуказанные действия в одной команде?
Конечно, достаточно выполнить chmod o-w,g+x notes.txt и результат будет тот же.
А можно одновременно в одной команде выполнить следующее:
- владельцу назначить rw-
- группе назначить r-x
- остальным назначить r— ?
Конечно можно. Для этого существует символ ” = ” : chmod u=rw,g=rx,o=r notes.txt.
А если нужно всем назначить одинаковые права, например r-x , то воспользуемся chmod a=rx notes.txt :
Существует и другой способ указать права доступа — с помощью восьмеричного представления. Не будем вдаваться в подробности булевы алгебры и двоично-восьмеричного преобразования. Просто запомним таблицу:
Источник