Как изменить атрибуты файла в linux
Перейти к содержимому

Как изменить атрибуты файла в linux

  • автор:

Атрибуты файлов в Linux

У каждого файла имеется определённый набор свойств в файловой системе. Например, это права доступа, владелец, имя, метки времени. В Linux каждый файл имеет довольно много свойств, например, права доступа устанавливаются трижды (для владельца, группы и всех прочих), метки времени также бывают трёх разных видов (время создание, доступа и изменения).

Часть свойств файлов в текущей директории можно посмотреть командой:

Пример свойств одного из файлов:

При этом свойства файла не нужно путать с метаданными. Метаданные — это та информация, которая хранится в самом файле независимо от файловой системы. А свойства файла специфичны для файловой системы и могут быть потеряны, например, при переносе файла из файловой системы EXT4 в NTFS некоторые свойства файла (например, права доступа или метки времени) будут потеряны по той причине, что файловая система NTFS их не поддерживает.

Смотрите также:

  • Как удалить метаданные файла на Linux
  • mat2: новая версия программы для удаления метаданных

Пользователи Linux обычно в курсе режимов доступа к файлам, подробнее о них смотрите в статье «Азы работы в командной строке Linux (часть 6)». Но файлам и директориям могут быть установлены атрибуты, о которы помнят далеко не все пользователи. Именно файловым атрибутам, а также утилитам для установления и считывания файловых атрибутов посвящена данная статья.

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

Список файловых атрибутов в Linux

Различают следующие виды расширенных атрибутов.

a

Файл с установленным атрибутом «a» можно открыть только в режиме добавления для записи. Только суперпользователь или процесс, обладающий возможностью CAP_LINUX_IMMUTABLE, может установить или очистить этот атрибут.

A

При доступе к файлу с установленным атрибутом «A» его запись atime не изменяется. Это позволяет избежать определённого количества дисковых операций ввода-вывода для портативных систем.

c

Файл с установленным атрибутом «c» автоматически сжимается на диске ядром. При чтении из этого файла возвращаются несжатые данные. Запись в этот файл сжимает данные перед их сохранением на диске. Примечание: обязательно прочтите об ошибках и ограничениях в конце этого раздела. (Примечание: для btrfs: если установлен флаг «c», то нельзя установить флаг «C». Также конфликтует с параметром монтирования btrfs «nodatasum»)

C

Файл с установленным атрибутом «C» не подлежит обновлению «копирование при записи». Этот флаг поддерживается только в файловых системах, которые выполняют копирование при записи. (Примечание: для btrfs флаг «C» должен быть установлен для новых или пустых файлов. Если он установлен для файла, который уже имеет блоки данных, он не определён, когда блоки, назначенные файлу, будут полностью стабильными. Если для каталога установлен флаг «C», он не повлияет на каталог, но для новых файлов, созданных в этом каталоге, будет установлен атрибут No_COW. Если установлен флаг «C», то флаг «c» не может быть установлен. установленный.)

d

Файл с установленным атрибутом «d» не является кандидатом для резервного копирования при запуске программы dump.

D

При изменении каталога с установленным атрибутом «D» изменения синхронно записываются на диск; это эквивалентно опции монтирования dirsync, применяемой к подмножеству файлов.

e

Атрибут «e» указывает, что файл использует экстенты для отображения блоков на диске. Его нельзя удалить с помощью chattr.

E

Файл, каталог или символическая ссылка с установленным атрибутом «E» зашифрованы файловой системой. Этот атрибут нельзя установить или сбросить с помощью chattr, хотя он может быть отображён с помощью lsattr.

F

Директория с установленным атрибутом «F» указывает, что все поиски путей внутри этого каталога выполняются без учёта регистра. Этот атрибут можно изменить только в пустых каталогах в файловых системах с включённой функцией casefold.

i

Файл с атрибутом «i» не может быть изменён: его нельзя удалить или переименовать, нельзя создать ссылку на этот файл, большую часть метаданных файла нельзя изменить, и файл нельзя открыть в режиме записи. Только суперпользователь или процесс, обладающий возможностью CAP_LINUX_IMMUTABLE, может установить или очистить этот атрибут.

I

Атрибут «I» используется кодом htree, чтобы указать, что каталог индексируется с использованием хешированных деревьев. Его нельзя установить или очистить с помощью chattr, хотя его можно отобразить с помощью lsattr.

j

Файл с атрибутом «j» имеет все данные, записанные в журнал ext3 или ext4 перед записью в сам файл, если файловая система смонтирована с параметрами «data=ordered» или «data=writeback» и файловая система имеет журнал. Если файловая система смонтирована с параметром «data=journal», все данные файла уже занесены в журнал, и этот атрибут не действует. Только суперпользователь или процесс, обладающий возможностью CAP_SYS_RESOURCE, может установить или очистить этот атрибут.

m

Файл с атрибутом «m» исключается из сжатия в файловых системах, которые поддерживают сжатие файлов.

N

Файл с установленным атрибутом «N» указывает, что файл содержит данные, хранящиеся внутри самого inode. Его нельзя установить или очистить с помощью chattr, хотя его можно отобразить с помощью lsattr.

P

Директория с установленным атрибутом «P» будет обеспечивать иерархическую структуру для идентификаторов проектов. Это означает, что файлы и каталоги, созданные в директории, будут наследовать идентификатор проекта каталога, операции переименования ограничены, поэтому, когда файл или каталог перемещается в другой каталог, идентификаторы проекта должны совпадать. Кроме того, жёсткая ссылка на файл может быть создана только в том случае, если идентификатор проекта для файла и целевой каталог совпадают.

s

Когда файл с установленным атрибутом «s» удаляется, его блоки обнуляются и записываются обратно на диск. Примечание: обязательно прочтите об ошибках и ограничениях в конце этого раздела.

S

При изменении файла с установленным атрибутом «S» изменения синхронно записываются на диск; это эквивалентно опции монтирования «sync», применяемой к подмножеству файлов.

t

Файл с атрибутом «t» не будет иметь фрагмент частичного блока в конце файла, объединённого с другими файлами (для тех файловых систем, которые поддерживают объединение хвостов).

Это необходимо для таких приложений, как LILO, которые читают файловую систему напрямую и не понимают файлы с хвостовым слиянием. Примечание. На момент написания этой статьи файловые системы ext2, ext3 и ext4 не поддерживают слияние хвостов.

T

Директория с атрибутом «T» будет считаться вершиной иерархии каталогов для целей распределителя блоков Орлова. Это подсказка распределителю блоков, используемому ext3 и ext4, что подкаталоги в этом каталоге не связаны и, следовательно, должны быть разделены для целей распределения. Например, очень хорошая идея установить атрибут «T» в каталоге /home, чтобы /home/john и /home/mary были помещены в отдельные группы блоков. Для каталогов, где этот атрибут не установлен, распределитель блоков Орлова будет пытаться сгруппировать подкаталоги ближе друг к другу, где это возможно.

u

Когда файл с установленным атрибутом «u» удаляется, его содержимое сохраняется. Это позволяет пользователю запрашивать его восстановление. Примечание: обязательно прочтите об ошибках и ограничениях в конце этого раздел.

x

Атрибут «x» может быть установлен для каталога или файла. Если атрибут установлен в существующем каталоге, он будет унаследован всеми файлами и подкаталогами, которые впоследствии будут созданы в каталоге. Если существующий каталог содержал некоторые файлы и подкаталоги, изменение атрибута в родительском каталоге не изменяет атрибуты этих файлов и подкаталогов.

V

Для файла с установленным атрибутом «V» включена функция проверки подлинности. Он не может быть записан, и файловая система будет автоматически проверять все данные, считанные из неё, по криптографическому хешу, который покрывает всё содержимое файла, например через дерево Меркла. Это позволяет эффективно аутентифицировать файл. Этот атрибут нельзя установить или сбросить с помощью chattr, хотя он может быть отображён с помощью lsattr.

Можно ещё вспомнить липкий бит (sticky bit), суть которого в том, что файл с данным битом может удалить только тот пользователь, который является владельцем файла. Липкий бит устанавливается с помощью программы chmod:

Но к рассматриваемым файловым параметрам липкий бит не имеет отношения.

Ошибки и ограничения

Атрибуты «c», «s» и «u» не поддерживаются файловыми системами ext2, ext3 и ext4, как это реализовано в текущих основных ядрах Linux. Установка атрибутов «a» и «i» не повлияет на возможность записи в уже существующие файловые дескрипторы.

Параметр «j» полезен только для файловых систем ext3 и ext4.

Параметр «D» полезен только в ядре Linux 2.5.19 и новее.

chattr — программа для установки и изменения файловых атрибутов

chattr изменяет атрибуты файлов в файловой системе Linux.

Формат символьного режима: +-=[aAcCdDeFijmPsStTux].

Оператор «+» вызывает добавление выбранных атрибутов к существующим атрибутам файлов; «» заставляет их удалить; и «=» делает их единственными атрибутами файлов.

Буквы «aAcCdDeFijmPsStTux» выбирают новые атрибуты для файлов:

  • только добавление (a),
  • без обновлений времени (A),
  • сжатие (c),
  • без копирования при записи (C),
  • без дампа (d),
  • синхронные обновления каталогов (D),
  • формат экстента (e),
  • поиск в каталогах без учёта регистра (F),
  • неизменяемый (i),
  • ведение журнала данных (j),
  • без сжатия (m),
  • иерархия проекта (P),
  • безопасное удаление (s),
  • синхронные обновления (S),
  • без слияния хвостов (t),
  • вершина иерархии каталогов (T),
  • возможность восстановления после удаления (u)
  • и прямой доступ к файлам (x).

Следующие атрибуты доступны только для чтения и могут быть перечислены lsattr, но не могут быть изменены chattr:

  • зашифрованный (E),
  • индексированный каталог (I),
  • встроенные данные (N)
  • и достоверность (V).

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

Следующая команда сделает файл test.txt заблокированным для удаления, изменения, перемещения (i):

Причём даже добавление sudo к командам удаления и перемещения не поможет, этот файл будет невозможно изменить и удалить до тех пор, пока не будет удалён атрибут «i».

Смотрите также: Что такое sudo

Следующая команда удаляет атрибут «i»:

Если в качестве цели изменения параметров вы выбрали директории, то опция -R сделает так, что атрибуты будут рекурсивно изменены и для содержимого директорий.

chattr является частью пакета e2fsprogs и доступна по адресу http://e2fsprogs.sourceforge.net, хотя в большинстве дистрибутивов Linux этот пакет уже предустановлен по умолчанию.

lsattr — программа для показа атрибутов файлов в файловой системе Linux

lsattr перечисляет атрибуты файлов в файловой системе Linux.

Для просмотра файловых атрибутов укажите имя файлов:

-R

Рекурсивный список атрибутов директорий и их содержимого.

-a

Перечислить все файлы в каталогах, включая файлы, начинающиеся с «.».

-d

Список каталогов как и других файлов, а не их содержимое.

-l

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

Изменение атрибутов (флагов) на файлах в Unix/Linux

Изменение атрибутов (флагов) на файлах в Unix/Linux

Сейчас расскажу как можно изменить атрибуты на файлы в Unix\Linux и приведу готовые примеры в своей статье «Изменение атрибутов (флагов) на файлах в Unix/Linux».

1. chattr

chattr — изменяет атрибуты файлов на файловых системах ext2fs, ext3, ext4 и частично на других файловых системах Linux.

Формат символьного режима: +-=[acdeijstuACDST].

«+» обозначает добавление указанных атрибутов к существующим;
«-» обозначает их снятие;
«=» обозначает установку только этих атрибутов файлам.

Символы «acdeijstuACDST» указывают на новые атрибуты файлов, некоторые атрибуты может назначить только суперпользователь (root):

  • Не обновлять время последнего доступа к файлу atime (A)
  • Использовать синхронное обновление (S)
  • Использовать синхронное обновление каталогов (D)
  • Только добавление к файлу (a)
  • Сжатый (c)
  • Не архивировать (d)
  • Неизменяемый (i)
  • Безопасное удаление (s)
  • Вершина иерархического дерева (T)
  • Запрет слияния в конце файла (t)
  • Неудаляемый (u)
  • Нет копирования при записи (C)
  • Журналирование данных (j)
  • extent format (e)

2. lsattr

Формат символьного режима:

  • Огромный файл (h),
  • Ошибки сжатия (E),
  • Индексированный каталог (I),
  • Сжатие прямого доступа(X),
  • Сжатый грязный файл (Z).

Опции
-R

Рекурсивное изменение атрибутов каталогов и их содержимого.

-V

Вывод на экран с выводом chattr и показать версию программы.

-f

Запретить большинство сообщений об ошибках.

-v

Вывести версию программы.

-d

Вывести все атрибуты для всех каталогах.

-a

Вывести все атрибуты для всех файлов.

Linux

В Linux есть утилита chattr, она может выставлять нужные флаги на файлы и папки, но все изменения проводить может только пользователь root.

Выставляем флаг который нельзя удалить (может только root):

Просмотр всех флагов для папок и файлов:

Чтобы убирать флаги i,u для всех файлов в папке:

Проверим стоит ли права, после применения команды:

Я сбросил все атрибуты в 000, нужно дял файлов теперь выставить нормальные (это 644), для этого используем:

И нужно поменять владельца сайта ( у меня кто-то сменил на пользователя root, видимо нашли уязвимость и проделали этот трюк для своих нужд), по этому, исправляем:

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

Если нужно больше информации о командах chattr или lsattr, то читаем мануал:

Разрешаем ядру автоматически сжимать или разжимать файл:

Игнорируем данный файл когда используем команды dump:

Запрешаем изменение бинарников:

Удалим атрибут ‘s’ с файла, но он после этого будет заполнен нулями и перезаписан на
диск:

Только добавление данных (append-only), удаление и переименование запрещено (Предотвращаем модификацию лога злоумышленником):

Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости:

Удостовериться что все изменения файла сразу будут записаны на диск:

FreeBSD/OpenBSD

В *BSD, данной функцией обладает утилита chflags. Приведу несколько примеров использования данной программы на freeBSD.

Чтобы выставить неудаляемый флаг (в отличии от ext это может НЕ только root):

Чтобы убрать флаг:

Обо всем возможностях можно узнать в:

Утилита chattr (lsattr) входят в пакет утилит — e2fsprogs (иногда называемая e2fs programs) — это набор программ для поддержания файловых систем (ext2, ext3 и ext4).

Что входит в данный пакет утилиты e2fsprogs:

  1. badblocks — используется для поиска плохих блоков;
  2. chattr — изменяет атрибуты файлов на файловой системе ext2fs;
  3. debugfs — используется для ручного просмотра и изменения внутренней структуры файловой системы;
  4. dumpe2fs — печатает superblock and block group information;
  5. e2fsck — fsck-программа, проверяющая и корректирующая несоответствия;
  6. e2image — записывает критические данные файловой системы в файл;
  7. e2label — используется для просмотра и изменения метки файловой системы;
  8. lsattr — печатает список атрибутов файловой системы;
  9. mke2fs — используется для создания файловых систем ext2, ext3 и ext4;
  10. mklost+found — создаёт каталог lost+found и выделяет для него блоки дискового пространства;
  11. resize2fs — используется для изменения пространства, выделенного под файловые системы ext2, ext3 and ext4;
  12. tune2fs — используется для модифицирования параметров файловой системы.
  13. Многие из этих утилит основаны на библиотеке libext2fs.

Тема «Изменение атрибутов (флагов) на файлах в Unix/Linux» завершена.

3 thoughts on “ Изменение атрибутов (флагов) на файлах в Unix/Linux ”

Спасибо за статью, а можно вопрос?

Вот вывод команды ls
-rwxrwxrwx+ 1 user User 304227 окт 5 09:18 Копия Агентское

Что означает «+» после «rwxrwxrwx» ? Нигде не могу найти информации

Это расширенный атрибут, который устанавливается:

На MacOS:
# chmod -R +a «group:Your_Group_Name allow read,write,append,readattr,writeattr,readextattr,writeextattr» /Path/to/dir
# chmod -R +a «user:Your_User_Name allow read,write,append,readattr,writeattr,readextattr,writeextattr» /Path/to/dir

На Linux:
$ setfacl -m u:Your_User_Name:rw,u:some_user:r,g::r,m::rw /Path/to/dir

Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости
# chattr +u my_test_file

А где файл будет сохранен? как его найти?

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Всем привет. Это перевод статьи из книги RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300.

От себя: Надеюсь статья будет полезна не только начинающим, но и поможет более опытным администраторам упорядочить свои знания.

image

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

Статья начинается с обзора основных понятий, после чего обсуждаются специальные разрешения (Special permissions) и списки контроля доступа (ACL). В конце этой статьи рассматривается настройка прав доступа по умолчанию через umask, а также управление расширенными атрибутами пользователя.

Управление владением файлами

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

Отображение владельца файла или каталога

В Linux у каждого файла и каждого каталога есть два владельца: пользователь и группа.

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

Это происходит в следующем порядке:

  1. Оболочка проверяет, являетесь ли вы владельцем файла, к которому вы хотите получить доступ. Если вы являетесь этим владельцем, вы получаете разрешения и оболочка прекращает проверку.
  2. Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.
  3. Если вы не являетесь ни пользователем, ни владельцем группы, вы получаете права других пользователей (Other).

С помощью команды ls вы можете отобразить владельца файлов в данном каталоге. Иногда может оказаться полезным получить список всех файлов в системе, в которых в качестве владельца указан данный пользователь или группа. Для этого вы можете использовать find. Аргумент find -user может быть использован для этой цели. Например, следующая команда показывает все файлы, у которых в качестве владельца указан пользователь linda:

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

Например, следующая команда ищет все файлы, принадлежащие группе users:

Изменение владельца

Чтобы применить соответствующие разрешения, первое, что нужно учитывать, это владение. Для этого есть команда chown. Синтаксис этой команды несложен для понимания:

Например, следующая команда меняет владельца каталога /home/account на пользователя linda:

Команда chown имеет несколько опций, одна из которых особенно полезна: -R. Вы можете догадаться, что она делает, потому что эта опция доступна и для многих других команд. Это позволяет вам рекурсивно устанавливать владельца, что позволяет вам установить владельца текущего каталога и всего, что находится ниже. Следующая команда меняет владельца для каталога /home и всего, что находится под ним, на пользователя lisa:

Сейчас владельцы выглядят так:

Теперь пользователь lisa стал владельцем каталога account:

Изменение владельца группы

Есть два способа изменить владение группой. Вы можете сделать это, используя chown, но есть специальная команда с именем chgrp, которая выполняет эту работу. Если вы хотите использовать команду chown, используйте . или : перед названием группы.

Следующая команда изменяет какого-либо владельца группы /home/account на группу account:

Вы можете использовать chown для изменения владельца пользователя и/или группы несколькими способами. Вот несколько примеров:

  • chown lisa myfile1 устанавливает пользователя lisa владельцем файла myfile1.
  • chown lisa.sales myfile устанавливает пользователя lisa владельцем файла myfile, а так же устанавливает группу sales владельцем этого же файла.
  • chown lisa:sales myfile то же самое, что и предыдущая команда.
  • chown .sales myfile устанавливает группу sales владельцем файла myfile без изменения владельца пользователя.
  • chown :sales myfile то же самое, что и предыдущая команда.

Как и в случае с chown, вы можете использовать опцию -R с chgrp, а также рекурсивно менять владельца группы.

Понимание владельца по умолчанию

Вы могли заметить, что когда пользователь создает файл, применяется владение по умолчанию.
Пользователь, который создает файл, автоматически становится владельцем этого файла, а основная группа этого пользователя автоматически становится владельцем этого файла. Обычно это группа, которая указана в файле /etc/passwd в качестве основной группы пользователя. Однако если пользователь является членом нескольких групп, он может изменить эффективную основную группу.

Чтобы показать текущую эффективную первичную группу, пользователь может использовать команду groups:

Если текущий пользователь linda хочет изменить эффективную первичную группу, он будет использовать команду newgrp, за которой следует имя группы, которую он хочет установить в качестве новой эффективной первичной группы. После использования команды newgrp первичная группа будет активна, пока пользователь не введет команду exit или не выйдет из системы.

Ниже показано, как пользователь lisa использует эту команду, что бы первичной группой стала группа sales:

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

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

Управление основными правами

Система разрешений Linux была изобретена в 1970-х годах. Поскольку вычислительные потребности были ограничены в те годы, базовая система разрешений была довольно ограничена. Эта система разрешений использует три разрешения, которые можно применять к файлам и каталогам. В этом разделе вы узнаете, как использовать и изменять эти разрешения.

Понимание прав на чтение, запись и выполнение

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

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

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

Как вы, вероятно, можете догадаться, разрешение на запись, если оно применяется к файлу, позволяет записывать в файл. Иначе говоря, позволяет изменять содержимое существующих файлов. Однако он не позволяет создавать или удалять новые файлы или изменять права доступа к файлу. Для этого вам нужно дать разрешение на запись каталогу, где вы хотите создать файл. В каталогах это разрешение также позволяет создавать и удалять новые подкаталоги.

Разрешение на выполнение — это то, что вам нужно для выполнения файла. Оно никогда не будет установлено по умолчанию, что делает Linux практически полностью невосприимчивым к вирусам. Только кто-то с правами записи на каталог может применять разрешение на выполнение.

Ниже обобщается использование основных разрешений:

Использование chmod

Для управления правами используется команда chmod. При использовании chmod вы можете устанавливать разрешения для пользователя (user), группы (group) и других (other). Вы можете использовать эту команду в двух режимах: относительный режим и абсолютный режим. В абсолютном режиме три цифры используются для установки основных разрешений.

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

Когда вы используете chmod таким способом, все текущие разрешения заменяются установленными вами разрешениями.

Если вы хотите изменить разрешения относительно текущих разрешений, вы можете использовать chmod в относительном режиме. При использовании chmod в относительном режиме вы работаете с тремя индикаторами, чтобы указать, что вы хотите сделать:

  1. Сначала вы указываете, для кого вы хотите изменить разрешения. Для этого вы можете выбрать между пользователем (u), группой (g) и другими (o).
  2. Затем вы используете оператор для добавления или удаления разрешений из текущего режима или устанавливаете их абсолютно.
  3. В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.

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

При использовании chmod -R o+rx /data вы устанавливаете разрешение на выполнение для всех каталогов, а также для файлов в каталоге /data. Чтобы установить разрешение на выполнение только для каталогов, а не для файлов, используйте chmod -R o+ rX /data.

Верхний регистр X гарантирует, что файлы не получат разрешение на выполнение, если файл уже не установил разрешение на выполнение для некоторых объектов. Это делает X более разумным способом работы с разрешениями на выполнение; это позволит избежать установки этого разрешения на файлы, где оно не требуется.

Расширенные права

Помимо основных разрешений, о которых вы только что прочитали, в Linux также есть набор расширенных разрешений. Это не те разрешения, которые вы устанавливаете по умолчанию, но иногда они предоставляют полезное дополнение. В этом разделе вы узнаете, что они из себя представляют и как их настроить.

Понимание расширенных прав SUID, GUID и sticky bit

Есть три продвинутых разрешения. Первое из них — это разрешение на установку идентификатора пользователя (SUID). В некоторых особых случаях вы можете применить это разрешение к исполняемым файлам. По умолчанию пользователь, запускающий исполняемый файл, запускает этот файл со своими собственными разрешениями.

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

Рассмотрим, например, ситуацию, когда пользователю необходимо сменить пароль. Для этого пользователь должен записать свой новый пароль в файл /etc/shadow. Однако этот файл недоступен для записи пользователям, не имеющим прав доступа root:

Разрешение SUID предлагает решение этой проблемы. В утилите /usr/bin/passwd это разрешение применяется по умолчанию. Это означает, что при смене пароля пользователь временно получает права root, что позволяет ему записывать в файл /etc/shadow. Вы можете видеть разрешение SUID с ls -l как s в позиции, где обычно вы ожидаете увидеть x для пользовательских разрешений:

Разрешение SUID может выглядеть полезным (и в некоторых случаях так оно и есть), но в то же время оно потенциально опасно. При неправильном применении вы можете случайно раздать права доступа root. Поэтому я рекомендую использовать его только с максимальной осторожностью.

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

Второе специальное разрешение — это идентификатор группы (SGID). Это разрешение имеет два эффекта. При применении к исполняемому файлу, он дает пользователю, который исполняет файл, разрешения владельца группы этого файла. Таким образом, SGID может выполнить более или менее то же самое, что SUID. Однако для этой цели SGID практически не используется.

Как и в случае с разрешением SUID, SGID применяется к некоторым системным файлам в качестве настройки по умолчанию.

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

Это не всегда очень полезно, особенно потому, что у пользователей Red Hat/CentOS в качестве основной группы задана группа с тем же именем, что и у пользователя, и из которых пользователь является единственным участником. Таким образом, по умолчанию файлы, которые создает пользователь, будут групповыми для общего доступа.

Представьте себе ситуацию, когда пользователи linda и lori работают в бухгалтерии и являются членами группы account. По умолчанию эти пользователи являются членами частной группы, единственным членом которой они являются. Однако оба пользователя являются членами группы account, но также и в качестве параметра вторичной группы.

Ситуация по умолчанию состоит в том, что когда любой из этих пользователей создает файл, основная группа становится владельцем. Поэтому по умолчанию linda не может получить доступ к файлам, созданным lori, и наоборот. Однако, если вы создаете общий каталог группы (скажем, /groups/account) и убедитесь, что разрешение SGID применено к этому каталогу и что учет группы установлен как владелец группы для этого каталога, все файлы, созданные в этом каталоге и во всех его подкаталогах, также получают account группы как владельца группы по умолчанию.

По этой причине разрешение SGID является очень полезным разрешением для установки в каталогах общих групп.

Разрешение SGID показывается в выводе ls -ld как s в позиции, где вы обычно находите разрешение на выполнение группы:

Третий из специальных разрешений — sticky bit. Это разрешение полезно для защиты файлов от случайного удаления в среде, где несколько пользователей имеют права на запись в один и тот же каталог. Если применяется закрепленный sticky bit, пользователь может удалить файл, только если он является пользователем-владельцем файла или каталога, в котором содержится файл. По этой причине он применяется в качестве разрешения по умолчанию для каталога /tmp и может быть полезен также для каталогов общих групп.

Без sticky bit, если пользователь может создавать файлы в каталоге, он также может удалять файлы из этого каталога. В общедоступной групповой среде это может раздражать. Представьте себе пользователей linda и lori, которые оба имеют права на запись в каталог /data/account и получают эти разрешения благодаря участию в группе account. Поэтому linda может удалять файлы, созданные lori, и наоборот.

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

  • Пользователь является владельцем файла;
  • Пользователь является владельцем каталога, в котором находится файл.

Применение расширенных прав

Чтобы применить SUID, SGID и sticky bit, вы также можете использовать chmod. SUID имеет числовое значение 4, SGID имеет числовое значение 2, а sticky bit имеет числовое значение 1.

Если вы хотите применить эти разрешения, вам нужно добавить четырехзначный аргумент в chmod, первая цифра которого относится к специальным разрешениям. Следующая строка, например, добавит разрешение SGID на каталог и установит rwx для пользователя и rx для группы и других:

Это довольно непрактично, если вам нужно посмотреть текущие права доступа, которые установлены, прежде чем работать с chmod в абсолютном режиме. (Вы рискуете перезаписать разрешения, если вы этого не сделаете.) Поэтому я рекомендую работать в относительном режиме, если вам нужно применить какое-либо из специальных разрешений:

  1. Для SUID используйте chmod u+s.
  2. Для SGID используйте chmod g+s.
  3. Для sticky bit используйте chmod +t, а затем имя файла или каталога, для которого вы хотите установить разрешения.

Пример работы со специальными правами

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

  1. Откройте терминал, в котором вы являетесь пользователем linda. Создать пользователя можно командой useradd linda, добавить пароль passwd linda.
  2. Создайте в корне каталог /data и подкаталог /data/sales командой mkdir -p /data/sales. Выполните cd /data/sales, чтобы перейти в каталог sales. Выполните touch linda1 и touch linda2, чтобы создать два пустых файла, владельцем которых является linda.
  3. Выполните su — lisa для переключения текущего пользователя на пользователя lisa, который также является членом группы sales.
  4. Выполните cd /data/sales и из этого каталога выполните ls -l. Вы увидите два файла, которые были созданы пользователем linda и принадлежат группе linda. Выполните rm -f linda*. Это удалит оба файла.
  5. Выполните touch lisa1 и touch lisa2, чтобы создать два файла, которые принадлежат пользователю lisa.
  6. Выполните su — для повышения ваших привилегий до уровня root.
  7. Выполните chmod g+s,o+t /data/sales, чтобы установить бит идентификатора группы (GUID), а также sticky bit в каталоге общей группы.
  8. Выполните su — linda. Затем выполните touch linda3 и touch linda4. Теперь вы должны увидеть, что два созданных вами файла принадлежат группе sales, которая является владельцем группы каталога /data/sales.
  9. Выполните rm -rf lisa*. Sticky bit предотвращает удаление этих файлов от имени пользователя linda, поскольку вы не являетесь владельцем этих файлов. Обратите внимание, что если пользователь linda является владельцем каталога /data/sales, он в любом случае может удалить эти файлы!

Управление ACL (setfacl, getfacl) в Linux

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

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

Понимание ACL

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

Утилита tar не поддерживает ACL. Чтобы убедиться, что настройки ACL не будут потеряны при создании резервной копии, используйте star вместо tar. star работает с теми же параметрами, что и tar; он просто добавляет поддержку настроек ACL.

Вы также можете создать резервную копию ACL с помощью getfacl, которую можно восстановить с помощью команды setfacl. Чтобы создать резервную копию, используйте getfacl -R /directory > file.acls. Чтобы восстановить настройки из файла резервной копии, используйте setfacl —restore=file.acl.

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

Подготовка файловой системы для ACL

Перед началом работы с ACL может потребоваться подготовить файловую систему для поддержки ACL. Поскольку метаданные файловой системы необходимо расширять, не всегда есть поддержка по умолчанию для ACL в файловой системе. Если при настройке списков ACL для файловой системы вы получаете сообщение «operation not supported», возможно, в вашей файловой системе отсутствует поддержка ACL.

Чтобы это исправить, вам нужно добавить опцию acl mount в файле /etc/fstab, чтобы файловая система была смонтирована с поддержкой ACL по умолчанию.

Изменение и просмотр настроек ACL с помощью setfacl и getfacl

Чтобы установить ACL, вам нужна команда setfacl. Чтобы увидеть текущие настройки ACL, вам нужен getfacl. Команда ls -l не показывает никаких существующих ACL; он просто показывает + после списка разрешений, который указывает, что списки ACL применяются и к файлу.

Перед настройкой списков ACL всегда полезно показать текущие настройки ACL с помощью getfacl. Ниже на примере вы можете увидеть текущие права доступа, как показано с помощью ls -ld, а также как показано с getfacl. Если вы посмотрите достаточно внимательно, вы увидите, что показанная информация точно такая же.

В результате выполнения команды getfacl ниже видно, что разрешения показаны для трех разных объектов: пользователя, группы и других. Теперь давайте добавим ACL, чтобы дать права на чтение и выполнение и группе sales. Команда для этого setfacl -m g:sales:rx /dir. В этой команде -m указывает, что текущие настройки ACL необходимо изменить. После этого g:sales:rx сообщает команде установить ACL для чтения и выполнения (rx) для группы (g) sales. Ниже вы можете увидеть, как выглядит команда, а также вывод команды getfacl после изменения текущих настроек ACL.

Теперь, когда вы понимаете, как установить групповой ACL, легко понять ACL для пользователей и других пользователей. Например, команда setfacl -m u:linda:rwx /data дает разрешения пользователю linda в каталоге /data, не делая его владельцем и не изменяя назначение текущего владельца.

Команда setfacl имеет много возможностей и опций. Один вариант особенно важен, параметр -R. Если используется, опция делает настройку ACL для всех файлов и подкаталогов, которые в настоящее время существуют в каталоге, где вы устанавливаете ACL. Рекомендуется всегда использовать эту опцию при изменении списков ACL для существующих каталогов.

Работа с ACL по умолчанию

Одним из преимуществ использования списков ACL является то, что вы можете давать разрешения нескольким пользователям или группам в каталоге. Еще одним преимуществом является то, что вы можете включить наследование, работая с ACL по умолчанию.

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

Это важно знать. Если вы хотите использовать ACL для настройки доступа нескольких пользователей или групп к одному и тому же каталогу, вы должны установить ACL дважды. Сначала используйте setfacl -R -m, чтобы изменить ACL для текущих файлов. Затем используйте setfacl -m d:, чтобы позаботиться обо всех новых элементах, которые также будут созданы.

Чтобы установить ACL по умолчанию, вам просто нужно добавить опцию d после опции -m (порядок имеет значение!). Поэтому используйте setfacl -m d:g:sales:rx /data, если вы хотите, чтобы группа sales имела доступ на чтение и выполнение всего, что когда-либо будет создано в каталоге /data.

При использовании списков ACL по умолчанию также может быть полезно установить ACL для других. Обычно это не имеет особого смысла, потому что вы также можете изменить разрешения для других, используя chmod. Однако, что вы не можете сделать с помощью chmod, это указать права, которые должны быть предоставлены другим пользователям для каждого нового файла, который когда-либо будет создан. Если вы хотите, чтобы другие не получали никаких разрешений на что-либо, созданное в /data, например, используйте setfacl -m d:o::- /data.

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

Пример управления расширенными правами с использованием ACL

В этом примере вы продолжите работу с каталогами /data/account и /data/sales, которые вы создали ранее. В предыдущих примерах вы гарантировали, что группа sales имеет разрешения на /data/sales, а группа account имеет разрешения на /data/account.

Сначала убедитесь, что группа account получает разрешения на чтение в каталоге /data/sales, а группа sales получает разрешения на чтение в каталоге /data/account.

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

  1. Откройте терминал.
  2. Выполните setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
  3. Выполните getfacl, чтобы убедиться, что права доступа были установлены так, как вы хотели.
  4. Выполните setfacl -m d:g:account:rwx,g:sales:rx /data/sales, чтобы установить ACL по умолчанию для каталога sales.
  5. Добавьте ACL по умолчанию для каталога /data/account, используя setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Выполните touch /data/sales/newfile и выполните getfacl /data/sales/newfile для проверки текущих разрешений.

Установка прав по умолчанию с помощью umask

Выше вы узнали, как работать с ACL по умолчанию. Если вы не используете ACL, есть параметр оболочки, который определяет права по умолчанию, которые вы получите: umask (обратная маска). В этом разделе вы узнаете, как изменить разрешения по умолчанию с помощью umask.

Вы, наверное, заметили, что при создании нового файла устанавливаются некоторые разрешения по умолчанию. Эти разрешения определяются настройкой umask. Этот параметр оболочки применяется ко всем пользователям при входе в систему. В параметре umask используется числовое значение, которое вычитается из максимальных разрешений, которые могут быть автоматически установлены для файла; максимальная настройка для файлов — 666, а для каталогов — 777.

Однако некоторые исключения относятся к этому правилу. Вы можете найти полный обзор настроек umask в таблице внизу.

Из цифр, используемых в umask, как и в случае числовых аргументов для команды chmod, первая цифра относится к разрешениям пользователя, вторая цифра относится к разрешениям группы, а последняя относится к разрешениям по умолчанию, установленным для других. Значение umask по умолчанию 022 дает 644 для всех новых файлов и 755 для всех новых каталогов, созданных на вашем сервере.

Полный обзор всех числовых значений umask и их результатов в таблице ниже.

Простой способ увидеть, как работает параметр umask, выглядит следующим образом: начните с разрешений по умолчанию для файла, установленного на 666, и вычтите umask, чтобы получить действующие разрешения. Сделайте то же самое для каталога и его разрешений по умолчанию 777.

Есть два способа изменить настройку umask: для всех пользователей и для отдельных пользователей. Если вы хотите установить umask для всех пользователей, вы должны убедиться, что параметр umask учитывается при запуске файлов среды оболочки, как указано в /etc/profile. Правильный подход — создать сценарий оболочки с именем umask.sh в каталоге /etc/profile.d и указать umask, который вы хотите использовать в этом сценарии оболочки. Если в этом файле изменяется umask, он применяется ко всем пользователям после входа на сервер.

Альтернативой настройке umask через /etc/profile и связанные файлы, где он применяется ко всем пользователям, входящим в систему, является изменение настроек umask в файле с именем .profile, который создается в домашнем каталоге каждого пользователя.

Настройки, примененные в этом файле, применяются только для отдельного пользователя; следовательно, это хороший метод, если вам нужно больше детализации. Мне лично нравится эта функция, чтобы изменить значение umask по умолчанию для пользователя root на 027, тогда как обычные пользователи работают с umask по умолчанию 022.

Работа с расширенными атрибутами пользователя

Это заключительный раздел о правах в Linux.

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

Как и в случае с ACL, для атрибутов файла может потребоваться включить параметр mount.

Это опция user_xattr. Если вы получаете сообщение «operation not supported» при работе с расширенными атрибутами пользователя, обязательно установите параметр mount в файле /etc/fstab.

Многие атрибуты задокументированы. Некоторые атрибуты доступны, но еще не реализованы. Не используйте их; они ничего вам не принесут.

Ниже приведены наиболее полезные атрибуты, которые вы можете применить:

A Этот атрибут гарантирует, что время доступа к файлу файла не изменяется.
Обычно каждый раз, когда файл открывается, время доступа к файлу должно быть записано в метаданные файла. Это отрицательно влияет на производительность; поэтому для файлов, к которым осуществляется регулярный доступ, атрибут A можно использовать для отключения этой функции.

a Этот атрибут позволяет добавлять, но не удалять файл.

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

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

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

I Этот атрибут включает индексирование для каталога, в котором он включен. Это обеспечивает более быстрый доступ к файлам для примитивных файловых систем, таких как Ext3, которые не используют базу данных B-tree для быстрого доступа к файлам.

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

j Этот атрибут гарантирует, что в файловой системе ext3 файл сначала записывается в журнал, а затем — в блоки данных на жестком диске.

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

u Этот атрибут сохраняет информацию об удалении. Это позволяет разрабатывать утилиту, которая работает с этой информацией для спасения удаленных файлов.

Если вы хотите применить атрибуты, вы можете использовать команду chattr. Например, используйте chattr +s somefile, чтобы применить атрибуты к somefile. Нужно удалить атрибут? Тогда используйте chattr -s somefile, и он будет удален. Чтобы получить обзор всех атрибутов, которые в настоящее время применяются, используйте команду lsattr.

Резюме

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

Если вам понравился этот перевод, то прошу написать об этом в комментариях. Будет больше мотивации делать полезные переводы.

В статье исправил некоторые опечатки и грамматические ошибки. Уменьшил некоторые громоздкие абзацы на более мелкие для удобства восприятия.

Вместо «Только кто-то с административными правами на каталог может применять разрешение на выполнение.» исправил на «Только кто-то с правами записи на каталог может применять разрешение на выполнение.», что будет более правильным.

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

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

File permissions and attributes (Русский)

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

Просмотр разрешений

Чтобы посмотреть разрешения (или права файла), используйте команду ls с опцией -l для просмотра содержимого каталога, например:

Здесь мы должны сосредоточиться на первом столбце. Например, обратив внимания на значение drwxrwxrwx+ , каждый символ которого объясняется в следующих таблицах:

d rwx rwx rwx +
Обозначет тип файла, технически не относится к разрешениям. Смотрите типы файлов (UNIX) для ознакомления со всеми возможными значениями. Разрешения, которые имеет владелец к файлу (объяснения ниже). Разрешения, которые имеет группа к файлу (объяснения ниже). Разрешения, которые имеют все остальные пользователи к файлу (объяснения ниже). Одиночный символ, который указывает на применение альтернативного метода доступа. Пробел указывает на отсутствие альтернативного метода доступа. Символ . обозначает файл с контекстом безопасности, но без другого альтернативного метода доступа. Файл с любой другой комбинацией альтернативных методов доступа помечается символом + , например в случае Access Control Lists (Русский).

Каждая из трёх триад разрешений ( rwx в примере выше) может состоять из следующих символов:

Символ Влияние на файлы Влияние на директории
Разрешение на чтение (первый символ) Файл не может быть прочитан. Содержимое каталога не может быть показано.
r Файл можно прочитать. Содержимое каталога может быть показано.
Разрешение на запись (второй символ) Файл не может быть изменён. Содержимое каталога не может быть изменено.
w Файл может быть изменён. Содержимое каталога может быть изменено (создание новых файлов или папок; переименовывание и удаление существующих файлов или папок); дополнительно требуется разрешение на выполнение, в противном случае, это разрешение не действует.
Разрешение на выполнение (третий символ) Файл не может быть выполнен. Каталог не может быть доступен с помощью cd.
x Файл может быть выполнен. Доступ к каталогу можно получить с помощью cd. Это единственный бит, который на практике можно считать «наследуемым» от каталогов-предков; фактически, если какой-либо каталог в пути не имеет установленного бита x , конечный файл или каталог также оказывается недоступен независимо от его разрешений; подробнее смотрите path_resolution(7) .
s Показывает установленный suid бит: в триаде пользователя — setuid; в триаде группы — setgid; в триаде остальных не встречается; также подразумевает, что установлен бит x .
S То же, что и s , но бит x не установлен; редко встречается у обычных файлов, бесполезен для каталогов.
t Sticky bit; встречается только в триаде остальных; также подразумевает, что установлен бит x .
T То же, что и t , но бит x не установлен; редко встречается у обычных файлов.

Смотрите info Coreutils -n «Mode Structure» и chmod(1) для более подробной информации.

Примеры

Давайте посмотрим несколько примеров для лучшего понимания:

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

Archie имеет полный доступ, за исключением создания, переименовывания и удаления файлов. Он может просматривать список файлов и (если позволяют разрешения к файлам) может получить доступ к существующему файлу в Документах.

Archie не может выполнить ls в Документах, но если он знает имя существующего файла, то он может просмотреть, переименовать и удалить или (если позволяют разрешения) получить доступ к нему. Также он может создавать новые файлы.

Archie может только (если позволяют разрешения файла) получить доступ к тем файлам в Документах, о которых он знает. Он не может просмотреть уже существующие файлы или создавать, переименовывать и удалить любой из них.

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

Давайте посмотрим на другой пример, на этот раз файл, а не каталог:

Здесь мы видим первой буквой не d , а — . Таким образом мы знаем, что это файл, а не директория. Благодаря разрешению rw- владелец может читать и писать, но не выполнять. Может показаться странным, что у владельца нет всех трёх разрешений, но разрешение x не требуется, так как это файл текста/данных, который может быть прочитан текстовым редактором, например Gedit, EMACS или программным обеспечением подобно R, а не исполнятся самим файлом (если он содержит что-то вроде программного кода на Python, то тогда подобное вполне возможно). Для группы установлены права доступа r— , поэтому у группы есть возможность читать файл, но не записывать и не редактировать его — фактически это установка чего-либо только для чтения. Мы видим, что подобные разрешения применимы и ко всем остальным пользователям.

Изменение разрешений

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

Текстовый метод

Для изменения прав доступа — или режима доступа — к файлу используйте команду chmod в терминале. Ниже приведена общая структура команды:

Где кто — любая из нескольких букв, каждая из которых обозначает, кому дано разрешение. Они следующие:

  • u (user): пользователь, который является владельцем файла.
  • g (group): группа пользователей, которой принадлежит этот файл.
  • o (other): другие пользователи, то есть все остальные.
  • a (all): все сразу; используйте вместо ugo .

Права доступа обозначаются так же, как описано в разделе #Просмотр разрешений ( r , w и x ).

Теперь посмотрите на некоторые примеры использования этой команды. Предположим, вы захотели сильно защитить каталог Документы и отказать всем, кроме себя, в разрешении на чтение, запись и выполнение (или, в данном случае, поиск/просмотр) внутри него:

До: drwxr-xr-x 6 archie users 4096 июл 5 17:37 Документы

После: drwx—— 6 archie users 4096 июл 6 17:32 Документы

Здесь, поскольку вы хотите отказать в разрешениях, вы не ставите никаких букв после = , где будут введены разрешения. Из этого видно, что только разрешения владельца — это rwx , а все остальные разрешения — это — .

Это можно восстановить с помощью:

До: drwx—— 6 archie users 4096 июл 6 17:32 Документы

После: drwxr-xr-x 6 archie users 4096 июл 6 17:32 Документы

В следующем примере вы предоставляете права на чтение и выполнение группе и другим пользователям, поэтому вы ставите следующие буквы для этих прав ( r и x ) после = , не оставляя пробелов.

Вы можете упростить это поместив более одной буквы кто в одну и ту же команду, например:

Рассмотрим ещё один пример: предположим, вы хотите изменить файл foobar так, чтобы у вас были разрешения на чтение и запись, а коллеги из группы users , которые могут совместно работать с файлом foobar , также могли читать и записывать файл, а все остальные пользователи могли только читать его:

До: -rw-r—r— 1 archie users 5120 июн 27 08:28 foobar

После: -rw-rw-r— 1 archie users 5120 июн 27 08:28 foobar

Это точно такой же пример, как и первый, но с файлом, а не каталогом, и вы предоставляете разрешение на запись (просто для того, чтобы привести пример предоставления каждого разрешения).

Сокращения для текстового метода

Команда chmod позволяет добавлять и вычитать разрешения из существующих, используя + или — вместо = . Это отличается от описанных выше команд, которые по сути переписывают разрешения (например, чтобы изменить разрешения с r— на rw- , вам всё равно нужно указать r и w после = в вызове команды chmod. Если вы пропустите r , то = перезапишет разрешения и таким образом удалит разрешение r . Использование + и — позволяет избежать этого, добавляя или отнимая текущий набор разрешений).

Давайте попробуем применить + и — на предыдущем примере добавления разрешений на запись в группу:

До: -rw-r—r— 1 archie users 5120 июн 27 08:28 foobar

После: -rw-rw-r— 1 archie users 5120 июн 27 08:28 foobar

Ещё пример, который запрещает запись абсолютно всем (a):

До: -rw-rw-r— 1 archie users 5120 июн 27 08:28 foobar

После: -r—r—r— 1 archie users 5120 июн 27 08:28 foobar

Также есть специальный режим X : это не настоящий файловый режим, но он часто используется вместе с опцией -R , чтобы добавить бит выполнения только каталогам, но оставить его нетронутым у файлов. Типичный пример использования:

Копирование разрешений

С помощью chmod можно взять разрешения у одного класса, например владельца, и выставить те же разрешения группе или даже всем. Для этого вместо r , w или x после = поставьте нужную вам букву кто. Например:

До: -rw-r—r— 1 archie users 5120 июн 27 08:28 foobar

После: -rw-rw-r— 1 archie users 5120 июн 27 08:28 foobar

Эта команда по сути означает «изменить разрешения группы ( g= ), чтобы они были такими же, как у владельца ( =u )». Обратите внимание, что вы не можете скопировать одновременно несколько разрешений или добавить новые, то есть такая команда:

Числовой метод

Команда chmod позволяет задавать разрешения в виде чисел.

Использование чисел — это ещё один метод, который позволяет редактировать разрешения одновременно для владельца, группы и остальных, а также биты setuid, setgid и sticky. Основная структура такова:

где xxx это три цифры, каждое их которых может иметь значение от 0 до 7. Первая цифра задаёт разрешения для владельца, вторая — для группы, а третья — для всех остальных.

Права r , w и x соответствуют следующим числам:

Чтобы объединить нужные права в одно трёхзначное число, нужно суммировать соответствующие значения. Например, если вы хотите предоставить владельцу каталога права на чтение, запись и выполнение, а группе и всем остальным — только права на чтение и выполнение, то числовые значения будут выглядеть следующим образом:

  • Владелец: rwx =4+2+1=7
  • Группа: r-x =4+0+1=5
  • Остальные: r-x =4+0+1=5

Это эквивалентно следующим двум командам:

Чтобы посмотреть текущие права в числовом виде, можно использовать команду stat(1) :

где %a задаёт числовой формат вывода.

Большинство каталогов имеют значение 755 , которое разрешает чтение, запись и выполнение для владельца, но запрещает запись для всех остальных, а файлы обычно имеют значение 644 , разрешающее чтение и запись для владельца, но только чтение для всех остальных; так как большинство файлов не являются исполняемыми, то бит выполнения x у них не установлен.

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

До: -rw-r—r— 1 archie users 5120 июн 27 08:28 foobar

После: -rw-rw-r— 1 archie users 5120 июн 27 08:28 foobar

Для исполняемого файла вы могли бы задать 774 , если бы вы хотели предоставить разрешение на исполнение владельцу и группе. Если бы вы хотели, чтобы у всех было разрешение только на чтение, число было бы 444 . Если рассматривать r как 4, w как 2 и x как 1, то это, вероятно, самый простой способ вычислить числовые значения для использования chmod xxx путь , но существует также двоичный метод, при котором каждое разрешение рассматривается как двоичное число, а затем они объединяются в обычное десятичное число. Этот способ немного более запутанный, но для полноты картины он здесь приведён.

Рассмотрим такой набор разрешений:

Если вы пропишите 1 на месте каждого выданного разрешения и 0 на месте отсутствующих разрешений, получится такое двоичное число:

Затем можно преобразовать двоичные числа:

Итоговое значение получается 775.

Допустим, мы хотим удалить разрешение на запись из группы:

Итоговое значение будет равно 755, и вы можете использовать команду chmod 755 имяфайла , чтобы снять разрешение на запись. Обратите внимание, что вы получите одно и то же трёхзначное число независимо от того, какой метод вы используете. Используете ли вы текст или цифры, зависит от личных предпочтений и скорости набора текста. Если вы хотите вернуть файлу или каталогу права по умолчанию, например, разрешение на чтение и запись (и выполнение) для владельца, но запретить запись для всех остальных, может быть быстрее использовать chmod 755/644 имяфайла . Однако если вы меняете разрешения на что-то нестандартное, проще и быстрее использовать текстовый метод, а не выполнять преобразование в числа, в процессе которого можно случайно ошибиться. Для пользователя, который использует chmod изредка, вероятно, нет существенной разницы в скорости использования обоих методов.

Вы также можете использовать числовой метод для установки битов setuid , setgid и sticky , используя четыре цифры.

Например, chmod 2777 имяфайла выдаст всем права на чтение/запись/выполнение и включит бит setgid .

Массовое изменение разрешений

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

Чтобы выставить разрешения 755 только каталогам:

Чтобы выставить разрешения 644 только файлам в каталоге:

Изменение владельца

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

Рассмотрим следующий пример: создание нового раздела с помощью GParted для резервного копирования данных. Gparted делает всё это от имени root, поэтому по умолчанию всё принадлежит root. Всё это хорошо, но обычные пользователи не смогут записать данные в смонтированный раздел.

В данном примере устройством в /dev владеет root, как и каталогом для монтирования ( /media/Backup ). Чтобы изменить владельца каталога, можно сделать следующее:

До: drwxr-xr-x 5 root root 4096 июл 6 16:01 Backup

После: drwxr-xr-x 5 archie root 4096 июл 6 16:01 Backup

Теперь новый владелец archie может записывать данные в этот раздел без изменения разрешений (потому что изначально уже стояли права rwx , разрешающие запись владельцу).

  • chown всегда сбрасывает биты setuid и setgid.
  • Обычные пользователи не могут использовать chown для «передачи» файлов, которыми они владеют, другому пользователю.

Списки управления доступом

Списки управления доступом (Access Control Lists, ACL) предоставляют дополнительный, более гибкий механизм разрешений для файловых систем, позволяя устанавливать разрешения для любого пользователя или группы на любой файл.

Umask

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

Атрибуты файла

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

Пакет e2fsprogs содержит программы lsattr(1) и chattr(1) , которые позволяют просмотреть и изменить атрибуты файла соответственно.

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

  • a — append only: Файл может быть открыт только для добавления.
  • c — compressed: Включить сжатие на уровне файловой системы для файла.
  • i — immutable: Не может быть изменён, удалён или переименован. Может быть установлен только пользователем root.
  • j — data journaling: Использовать журнал для записи данных файла так же, как и метаданных.
  • m — no compression: Отключить сжатие на уровне файловой системы для файла.
  • A — no atime update: Время получения доступа к файлу не будет обновляться.
  • C — no copy on write: Отключение copy-on-write на поддерживающих это файловых системах.

Полный список атрибутов и подробную информацию о них можно прочитать в chattr(1) .

Пример установки атрибута immutable:

Для снятия атрибута замените + на — .

Расширенные атрибуты

Расширенные атрибуты (Extended attributes) — это пары ключ-значение, привязанные к файлу или каталогу. Существует четыре их класса: security, system, trusted и user.

Расширенные атрибуты используются для Capabilities.

Пользовательские расширенные атрибуты

Класс user может использоваться для хранения дополнительной информации о файле. Пример создания атрибута:

Просмотр имеющихся атрибутов:

Сохранение расширенных атрибутов

  1. mv без предупреждения убирает расширенные атрибуты, если целевая файловая система их не поддерживает.

Чтобы сохранить расширенные атрибуты в текстовых редакторах, настройте их на усечение (truncate) файлов при сохранении вместо использования rename(2) .[1]

Советы и рекомендации

Preserve root

Используйте флаг —preserve-root , чтобы предотвратить рекурсивное выполнение chmod на / . Это поможет, например, предотвратить удаление бита выполнения во всей системе и тем самым сломать систему. Чтобы использовать этот флаг всегда, пропишите его в псевдониме. Смотрите также [2].

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *