Linux защита от удаления файла

sticky бит

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

Это дополнительная опция настройки прав доступа к файлам в Linux, sticky даёт возможности и расширяет возможности, которые при настройке уровня доступа представляют утилиты chmod и chown.

sticky бит, запрет удаления файла в Linux системах

Установить бит на файл или каталог можно при помощь chmod

Во втором случае сохранятся существующие атрибуты, в первом — они перезапишутся стандартными 644.

sticky запрещает удаление файла всем кроме его владельца и суперпользователя. Другие пользователи системы, даже если они входят в группу владельца, удалить файл не смогут.

Если бит установить на каталог — аналогичные правила будут распространяться на все его содержимое.

sticky устанавливается владельцем файла, им же снимается. Бит остается до снятия или до удаления файла, для которого он добавлен.

Установленный бит защитит файл в том числе от действий суперпользователя. root не сможет удалить файл, но сможет снять запрещающий это действие бит.

Пример добавления sticky бита

Создаёт тестовый файл, для которого будем выставлять и проверять права доступа.

При создании файл получает стандартные для Linux систем права доступа:

sticky бит

Владелец файла и группа владельца — admin, для владельца и группы есть доступ на чтение файла и на запись в него. Для всех остальных пользователей есть право на чтение файла.

Существующие права характеризуются значением 664 для утилиты chmod:

rw: read (4) + write (2) r: read (4)

Добавляем специальный бит

Права позволяют всем из группы пользователя писать в файл или удалять его.

-rw-rw-r-T 1 admin admin 0 Mar 23 16:55 /tmp/test

Переключимся на пользователя root

Затем добавим пользователя backup в группу admin

Теперь став пользователем backup попробуем удалить файл

rm: cannot remove ‘test’: Operation not permitted

От имени суперпользователя удаляем sticky бит

Теперь файл можно будет удалить.

Читайте про suid/suid и наследование процессом прав доступа, а также про добавление пользователей в группу sudo и настройку возможности выполнения команд с правами суперпользователя без запроса пароля.

Читайте также:  Users on linux server

Источник

5 команд chattr, чтобы сделать важные файлы НЕИЗМЕНИМЫМИ (неизменяемыми) в Linux

chattr (Change Attribute) — это утилита командной строки Linux, которая используется для установки/отмены определенных атрибутов файла в системе Linux для защиты от случайного удаления или изменения важных файлов и папок, даже если вы вошли в систему. в качестве пользователя root.

В родных файловых системах Linux, т. е. ext2, ext3, ext4, btrfs и т. д., поддерживаются все флаги, хотя все флаги не будут поддерживаться для всех неродных ФС. Нельзя удалить или изменить файл/папку после того, как атрибуты установлены с помощью команды chattr, даже если у вас есть полные права доступа к ней.

Это очень полезно для установки атрибутов в системных файлах, таких как файлы passwd и shadow, в которых содержится информация о пользователе.

Синтаксис чата
# chattr [operator] [flags] [filename]
Атрибуты и флаги

Ниже приведен список общих атрибутов и связанных с ними флагов, которые можно установить/снять с помощью команды chattr.

  1. Если доступ к файлу осуществляется с установленным атрибутом A, его запись atime не обновляется.
  2. Если файл изменен с установленным атрибутом S, изменения синхронно обновляются на диске.
  3. Файл имеет атрибут a, его можно открыть только в режиме добавления для записи.
  4. Файл установлен с атрибутом ‘i’, не может быть изменен (неизменяемый). Означает, что нельзя переименовывать, создавать символические ссылки, выполнять, запрещать запись, только суперпользователь может отменить установку атрибута.
  5. Файл с атрибутом ‘j’ установлен, вся его информация обновляется в журнале ext3 перед обновлением в самом файле.
  6. Файл установлен с атрибутом t, без слияния хвостов.
  7. Файл с атрибутом ‘d’ больше не будет кандидатом на резервное копирование при запуске процесса создания дампа.
  8. Когда файл с атрибутом «u» удаляется, его данные сохраняются. Это позволяет пользователю запросить его восстановление.
Оператор
  1. + : добавляет атрибут к существующему атрибуту файлов.
  2. : удаляет атрибут существующего атрибута файлов.
  3. = : сохранить существующие атрибуты файлов.

Здесь мы собираемся продемонстрировать некоторые примеры команд chattr для установки/снятия атрибутов для файла и папки.

1. Как добавить атрибуты к файлам для защиты от удаления

Для демонстрации мы использовали папку demo и файл important_file.conf соответственно. Перед настройкой атрибутов убедитесь, что для существующих файлов установлены какие-либо атрибуты с помощью команды «ls -l». Вы видели результаты? В настоящее время атрибуты не установлены.

[ tecmint]# ls -l total 0 drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo -rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf

Чтобы установить атрибут, мы используем знак +, а для отмены используем знак с командой chattr. Итак, давайте установим неизменяемый бит для файлов с флагами +i, чтобы никто не мог удалить файл, даже если пользователь root не имеет прав на его удаление.

[ tecmint]# chattr +i demo/ [ tecmint]# chattr +i important_file.conf

Примечание. Неизменяемый бит +i может быть установлен только пользователем с правами суперпользователя (т. е. root) или пользователем с привилегиями sudo. устанавливать.

Читайте также:  Users management in linux

После установки неизменяемого бита давайте проверим атрибут с помощью команды «lsattr».

[ tecmint]# lsattr ----i----------- ./demo ----i----------- ./important_file.conf

Теперь попытался принудительно удалить, переименовать или изменить разрешения, но это не разрешено, пишет «Операция не разрешена».

[ tecmint]# rm -rf demo/ rm: cannot remove âdemo/â: Operation not permitted
[ tecmint]# mv demo/ demo_alter mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[ tecmint]# chmod 755 important_file.conf chmod: changing permissions of âimportant_file.confâ: Operation not permitted

2. Как отключить атрибут в файлах

В приведенном выше примере мы видели, как установить атрибут для защиты и предотвращения случайного удаления файлов, здесь, в этом примере, мы увидим, как сбросить (сбросить атрибут) разрешения и позволить сделать файлы изменяемыми или изменяемыми с помощью -i флаг.

[ tecmint]# chattr -i demo/ important_file.conf

После сброса разрешений проверьте неизменность файлов с помощью команды «lsattr».

[ tecmint]# lsattr ---------------- ./demo ---------------- ./important_file.conf

В приведенных выше результатах вы видите, что флаг «-i» удален, это означает, что вы можете безопасно удалить все файлы и папки, находящиеся в папке tecmint.

[ tecmint]# rm -rf * [ tecmint]# ls -l total 0

3. Как защитить файлы /etc/passwd и /etc/shadow

Установка неизменяемого атрибута для файлов /etc/passwd или /etc/shadow защищает их от случайного удаления или изменения, а также отключает создание учетной записи пользователя.

[ tecmint]# chattr +i /etc/passwd [ tecmint]# chattr +i /etc/shadow

Теперь попробуйте создать нового системного пользователя, вы получите сообщение об ошибке ‘cannot open /etc/passwd‘.

[ tecmint]# useradd tecmint useradd: cannot open /etc/passwd

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

4. Добавить данные без изменения существующих данных в файле

Предположим, вы хотите разрешить всем просто добавлять данные в файл без изменения или модификации уже введенных данных, вы можете использовать атрибут «a» следующим образом.

[ tecmint]# chattr +a example.txt [ tecmint]# lsattr example.txt -----a---------- example.txt

После установки режима добавления файл может быть открыт для записи данных только в режиме добавления. Вы можете отключить атрибут добавления следующим образом.

[ tecmint]# chattr -a example.txt

Теперь попробуйте заменить уже существующий контент в файле example.txt, вы получите сообщение об ошибке «Операция не разрешена».

[ tecmint]# echo "replace contain on file." > example.txt -bash: example.txt: Operation not permitted

Теперь попробуйте добавить новый контент в существующий файл example.txt и проверьте его.

[ tecmint]# echo "replace contain on file." >> example.txt
[ tecmint]# cat example.txt Here is the example to test 'a' attribute mean append only. replace contain on file.

5. Как защитить каталоги

Чтобы защитить весь каталог и его файлы, мы используем переключатель «-R» (рекурсивно) с флагом «+i» вместе с полным путем к папке.

[ tecmint]# chattr -R +i myfolder

После установки рекурсивного атрибута попробуйте удалить папку и ее файлы.

[ tecmint]# rm -rf myfolder/ rm: cannot remove 'myfolder/': Operation not permitted

Чтобы отменить разрешение, мы используем тот же переключатель «-R» (рекурсивно) с флагом «-i» вместе с полным путем к папке.

[ tecmint]# chattr -R -i myfolder

Вот и все! Чтобы узнать больше об атрибутах, флагах и параметрах команды chattr, используйте справочные страницы.

Читайте также:  Linux discord демонстрация экрана со звуком

Источник

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

Допустим, есть такая файловая система 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, обратной командой.

Источник

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