Запрет на удаление файлов linux

Обновлено: 07.07.2024

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

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

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

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

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

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

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

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

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

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

Но root может всё

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Здравствуйте, как можно помощью chmod запретить удаление и редактирование файлов в папке, но при этом оставить возможность загружать новые файлы всем пользователям?

  • Вопрос задан более трёх лет назад
  • 17354 просмотра

chmod тут не помощник: если есть права на запись в директорию, то от удаления не спасёт даже chmod 000.
Вам может помочь chattr +i на файл. Тогда даже рут не сможет удалить файл, пока не снимет этот аттрибут (chattr -i).

Если речь об FTP копайте в настройках сервера. Возможно там будет интересующая вас опция по запрету удаления. Ну или найдется «стандартное» решение в документации.

Ну изначально я планировал сделать одну команду в консоли, интересно что это посчитали большим велосипедом чем писать новый редактор и файловый менеджер или лепить костыли к старому.

хм, в windows это очень легко делается, простыми настройками прав доступа как папке.
неужели в линксе так сложно?

На самом деле если я имею право писать в файл, то запрет на его удаление это фейк. Я просто затру его нулями. Поэтому такого нет в стнадартных RWX правах. А вообще липкий бит.

Затереть то затрете, но вот удалить файл и права на доступ к этому файлу — не сможете. А значит кто-нибудь другой у кого есть права на запись в этот файл, но нет прав на запись в директорию сможет что-нибудь записать в этот файл.

chmod a+t на директорию спасут от удаления файла, загруженного другим пользователем (chattr +i не на всех ФС работает, в reiserfs, например, такого нет). Однако, если у файла будут права 666, все смогут поменять содержимое файла (хоть и не смогут удалить).

Сначала смените владельца для этих файлов через chown (например, на root'a). А затем поставьте на них chmod 744. Должно помочь

chmod 744 при наличии прав на запись в директорию не спасёт от удаления.

Даже если user попытается удалить файл, принадлежащий root'у?

Если не верите мне — попробуйте:

Посмотрите мануал по chmod, и как организована /tmp. Там есть какой-то флаг, который ставится на папку и разрешает удалять файлы только владельцу файла.

Т.е. права на папку /tmp к примеру содержат write для всех, но благодаря какому-то флагу при этом удалять чужие файлы нельзя.

А если у вас речь идет про доступ через FTP, есть какие-то опции в конфиге для этой цели.

Если речь о FTP, то это можно сделать на proftpd. Лимиты можно выставить на любую команду ftp для любого пользователя. Делал такую конфигурацию. Пользователи выкладывали файлы на ftp для рассмотрения модератором. После записи файла ничего с ним сделать нельзя. Конфигурационный файл потерялся годы назад, но там было несложно. Вот Тут, все команды FTP Тут.

qassarb


Нам необходимо сделать так, что бы клиент не смог удалить каталог inboundб но смог удалять файлы из него.
предлагаю следующее:

chmod 555 /home/user/ftp/test/
chmod 777 /home/user/ftp/test/*

как собственно это организовать, есть программа которая скачав и поработав с файлами убивает их. А хочеться что бы они оставались, у кого есть какие-то идет. Программа работает от рута.

работать от юзера + man chmod


к сожалению фс у меня reiser, а запускать от пользователя нельзя, нужен хоть какой-то еще способ, пусть и через большие костыли

если это обновление системы, то настрой кэширование пакетов.

Все остальные программы, работающие от рута и что-то качающие (кроме squid'а) -- не должны существовать :)


Кеширнвание происходит по умолчанию, например, в /var/cache/appt/archives/

в нормальных дистибутивах может и происходит кеширование но в сусе пакет качаеться сразу ставиться и мгновенно грохаеться ястом, и никаких опций что бы отключить удаление нету. как варианты расматриваю вытягиваение из кеша squid, или подсовывание вместо временной папки примонтированый фтп с разрешение аплода но не разрешение удалять, мож есть что-то полегче? у самбы или nfs есть такие опции?

и как в chmod можно отменить удаление, если стоит w то можно писать но можно и удалять


>и как в chmod можно отменить удаление, если стоит w то можно писать но можно и удалять

Ну, если убрать "w" после окрытия/создания файла, то удалить уже это файл не получится, но для рута это правило не пойдет.

Как еще один вариант решения вашей проблеммы можно рассмотреть создание ext3 через /dev/loop на файл. И скриптом раз в секунду смотреть там список файлов и всем выставлять нужный атрибут (append only ?).

Предлагаю такой алгоритм:
1. Создать пустой файл
dd if=/dev/zero of=./bigfile bs=1M cout=512

2. Смонтировать loopback-устройство:
losetup /dev/loop0 ./bigfile

3. Создать на нем ext3 систему:
mke2fs -b 4096 -j -O dir_index,sparse_super -T largefile /dev/loop0

4. Остановить демон и смонтировать его поверх директории кэша
mount -t ext3 /dev/loop0 /var/cache/_куда_там_дальше

5. Выставить этому каталогу атрибут (только добавление)
chattr +a /var/cache/_куда_там_дальше

6. Запустить демона и наслаждаться :-)

ЗЫ. Работает даже для рута, потому что рут может только снять атрибут, а обойти его нельзя.

ЗЗЫ. Атрибут "только добавление" выставленный на каталог позволяет создавать в нем новые файлы, но не удалять их (хотя файл можно усечь до нулевой длины, я думаю демон не настолько параноидальный).

за совет спасибо, сделал все так, оно создает фаил а дальше выскакивает ошибка и не пишет, файлы получаються по 0 байт, причем файлы *.rpm.new.zypp.vqU1fO тоесть полагаю что даже если его запишет то когда попробует переименовать,обламаеться. пробовал и так вручную файлы кидать, тоже самое, что характерно с фтп тоже ерунда, не хочет писать через curlftpfs, все монтируестья а при аплоде выдает ошибку, через обычный фтп клиент спокойно заливаеться

Ну раз на костыли согласен, то:

Ставь дебиан, убунту, лично я не вижу особых отличий кроме как отрицательных от ЗюЗе.

Кароче сноси непатрикоугодную сюсю!


Может легче покапаться в исходниках libzypp и закомментить строчку удаления файла?


Вообще, я когда был на сусе соорудил костыль - Apache+ModRewrite+скрипт скачаки с кешириванием.

Сильно зависит от ситуации.

Например, если там один-два файла, и есть момент, когда ты их видишь созданными, то сделай на них hard link. После этого оно сможет само всё туда записать и удалять сколько хочет. Либо просто переименуй, пока он открыт прогой.

А лучше, наверное, починить программу.


>Может легче покапаться в исходниках libzypp и закомментить строчку удаления файла?

не те сейчас пользователи, кто будет копаться в исходниках, если проще сменить дистрибутив :)

Топикстартеру. Попробуй smart (не забыть smart config --set remove-packages=false)

да копаться в исходниках это конечно круто, на счет смарта, пользовался, так же пользовался yum, но не все пакеты нормально ставаться, некторые просто непроходят зависимости, надо вручную разгребать и в правельной поочередности все ставить, яст в этом деле намного круче. делать хардлинки нету возможность так как если фаил 30-40 кб просто физически не успеваешь, фаил существует на винте не больше секунды. в общем разработчики яста сделали западло большое, как то неполюдски

Папки и файлы Linux

Хотя Gnu / Linux - очень безопасная операционная система, правда в том, что иногда случается так, что мы удаляем файлы по ошибке а потом уже трудно вернуться. Это может произойти и многое другое, если наш компьютер находится в общем доступе.

Далее мы расскажем вам, как этого избежать, благодаря программе под названием rm-protection, программе на Python, которая поможет нам избежать этих проблем и избежать проблем с внешними программами восстановления. Работа rm-защиты очень проста, так как она позволяет избежать случайного удаления любого файла в Gnu / Linux.

Сначала мы должны установить программу RM-Protection а в некоторых случаях нам нужно установить специальные плагины python, для этого мы открываем терминал и пишем следующее:

Arch Linux и производные

RedHat / OpenSUSE

Debian / Ubuntu / производные

Установка программы rm-защиты:

После установки программы нам нужно выбрать файлы или каталоги, которые мы хотим зашифровать, для этого нам нужно только написать следующее:

После нажатия Enter программа задаст нам секретный вопрос и ответ. После этого каждый раз, когда мы пытаемся удалить защищенный файл, операционная система будет задавать нам вопрос, который мы отметили ранее, и мы также должны ввести ответ, который мы ввели ранее, как мы его писали, иначе он выдаст ошибка и мы не сможем удалить архив. И хотя это кажется утомительным, мы можем сделать что-то вроде зашифруйте домашнюю папку и убедитесь, что наши файлы случайно не удалены.

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

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Любители Linux » GNU / Linux » Системное администрирование » Как защитить от случайного удаления файлов в Linux

Читайте также: