Перейти к содержанию

11.2 Управление правами доступа к файлам и каталогам (Managing File and Directory Permissions)

Управление владением — лишь часть того, что необходимо для контроля доступа к файлам и каталогам в файловой системе Linux. Владение только указывает, кому что принадлежит. Оно не определяет, что можно или нельзя делать с файлами и каталогами. Для этого необходимо настроить права доступа (permissions) и управлять ими. Вам нужно разобраться в следующем:

  • Как работают права доступа
  • Управление правами доступа из командной строки
  • Работа с правами доступа по умолчанию
  • Работа со специальными правами доступа

Начнём с рассмотрения принципов работы прав доступа.

Как работают права доступа (How Permissions Work)

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

Каждый файл или каталог в вашей файловой системе Linux хранит конкретные права доступа, назначенные ему. Эти права в совокупности составляют режим (mode) файла. Любой файл или каталог может иметь права доступа, указанные в таблице 11-1, в своём режиме.

Право доступа Символ Действие применительно к файлам Действие применительно к каталогам
Чтение (Read) r Позволяет пользователю открывать и просматривать файл. Не позволяет изменять или сохранять файл. Позволяет пользователю просматривать содержимое каталога.
Запись (Write) w Позволяет пользователю открывать, изменять и сохранять файл. Позволяет пользователю добавлять файлы в каталог или удалять их из него.
Выполнение (Execute) x Позволяет пользователю запускать исполняемый файл. Позволяет пользователю входить в каталог.

Таблица 11-1. Права доступа Linux

Эти права доступа назначаются каждому из трёх различных субъектов для каждого файла и каталога в файловой системе:

  • Владелец (Owner) — учётная запись пользователя, которая назначена владельцем файла или каталога. Права доступа, назначенные владельцу, применяются только к этой учётной записи.
  • Группа (Group) — группа, которой назначено право владения файлом или каталогом. Права доступа, назначенные группе, применяются ко всем учётным записям пользователей, являющихся членами этой группы.
  • Прочие (Others) — этот субъект охватывает всех остальных пользователей, успешно прошедших аутентификацию в системе. Права доступа, назначенные этому субъекту, применяются к этим учётным записям.

Имейте в виду, что права доступа являются аддитивными. Это означает, что одна учётная запись пользователя может получить права доступа, назначенные более чем одному субъекту. Например, предположим, что я назначаю права на чтение и запись для файла субъекту «Владелец», а право на выполнение — субъекту «Группа». Если ksanders является владельцем файла, users — группой, а ksanders является членом users, то ksanders получает как права, назначенные владельцу, так и права, назначенные группе. Её эффективные права доступа составят rwx!

Кроме того, будьте очень осторожны с тем, какие права доступа вы назначаете субъекту «Прочие». По существу, каждый пользователь системы принадлежит к субъекту «Прочие», поэтому любое право доступа, предоставленное «Прочим», назначается любому, кто успешно проходит аутентификацию в системе. В некоторых случаях это может быть очень удобно. Однако в других случаях это может повлечь серьёзные последствия! Прежде чем назначать права доступа, спросите себя: «Действительно ли я хочу, чтобы все имели такой доступ к этому файлу или каталогу?»

Для просмотра прав доступа, назначенных каждому из этих субъектов для любого файла или каталога в файловой системе, можно использовать команду ls -l. Рассмотрим следующий пример:

ksanders@openSUSE:~> ls –l
total 48
drwxr-xr-x 2 ksanders users 4096 Nov 25 17:30 bin
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Desktop
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Documents
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Downloads
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Music
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Pictures
-rw-r--r-- 1 ksanders users 123 Nov 25 18:36 Project_design.odt
-rw-r--r-- 1 ksanders users 104 Nov 25 18:36 Project_schedule.odt
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Public
drwxr-xr-x 2 ksanders users 4096 Nov 25 17:30 public_html
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Templates
drwxr-xr-x 2 ksanders users 4096 Nov 25 18:33 Videos

Первый отображаемый столбец представляет собой режим каждого файла и каталога. Первый символ обозначает тип файла: обычный файл (-), каталог (d), сокет (s), ссылка (l), именованный канал (p), блочное устройство (b) или символьное устройство (c). Как видно, Project_design.odt и Project_schedule.odt являются обычными файлами, тогда как Desktop — каталогом.

Следующие три символа — это права доступа, назначенные владельцу записи. Например, Project_schedule.odt имеет rw-, назначенное своему владельцу (учётной записи ksanders). Это означает, что ksanders имеет права на чтение и запись файла, но не на выполнение. Поскольку файл не является исполняемым, это право в любом случае не нужно. Если бы файл был исполняемым и право на выполнение было назначено, то вместо - в этой части режима появился бы символ x. Поскольку владелец имеет права на чтение и запись файла, ksanders может открывать файл, редактировать его и сохранять изменения.

Право доступа Значение
Чтение (Read) 4
Запись (Write) 2
Выполнение (Execute) 1

Таблица 11-2. Числовые значения прав доступа

Следующие три символа — это права доступа, назначенные группе-владельцу. В данном случае это группа users. Любой пользователь системы, являющийся членом группы users, получает доступ r-- к файлу Project_schedule.odt. Это означает, что у него есть право на чтение, позволяющее открыть файл и просмотреть его содержимое, но сохранять изменения в файле нельзя.

Последние три символа в режиме — это права доступа, назначенные субъекту «Прочие», то есть любому законно аутентифицированному пользователю системы, который не является владельцем и не является членом группы-владельца. В этом примере этим пользователям также назначены права r-- на файл Project_schedule.odt, снова предоставляя им доступ для чтения.

Прежде чем идти дальше, нужно знать, что права доступа для каждого субъекта могут быть представлены и в числовом виде. Это делается путём присвоения значения каждому праву доступа, как показано в таблице 11-2.

Используя эти значения, можно представить права доступа, назначенные владельцу, группе или прочим, одним числом. Просто сложите значения каждого права доступа. Например, предположим, что владельцу назначены права на чтение и запись для файла. Чтобы определить числовое значение этого назначения, просто сложите значения прав на чтение и запись (4 + 2 = 6). Нередко режим файла или каталога представляют тремя числами. Рассмотрим пример, показанный на рис. 11-2.

Рис. 11-2. Числовое представление прав доступа.

Рис. 11-2. Числовое представление прав доступа.

В этом примере связанный владелец файла имеет права на чтение и запись (6), группа-владелец имеет право на чтение (4), а прочие также имеют право на чтение (4). При использовании команды ls -l этот режим был бы представлен как -rw-r--r--.

Итак, что делать, если эти права доступа неверны? Для их изменения используется утилита chmod! Рассмотрим, как это делается.

Управление правами доступа из командной строки (Managing Permissions from the Command Line)

Подобно большинству других задач этой главы, изменять права доступа можно как с помощью графических инструментов, так и из командной строки. Например, используя файловый менеджер в среде рабочего стола GNOME, можно щёлкнуть правой кнопкой мыши на любом файле или каталоге и выбрать «Свойства | Права доступа». На экране появится окно, показанное на рис. 11-3.

Рис. 11-3. Установка прав доступа в файловом менеджере.

Рис. 11-3. Установка прав доступа в файловом менеджере.

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

Однако для экзамена LPIC-1/Linux+ необходимо уметь выполнять эту же задачу с помощью инструментов командной строки. Для изменения прав доступа используется команда chmod. Для этого необходимо либо быть владельцем файла, либо войти в систему как root. Все остальные пользователи не смогут этого сделать.

Для chmod можно использовать несколько различных вариантов синтаксиса. Первый — ввести chmod субъект=права имя_файла в командной строке. Вместо субъект подставьте u (от user) для владельца, g для группы и o для прочих. Вместо права подставьте r, w и/или x в соответствующей части команды. Например, предположим, что нужно изменить режим файла contacts.odt на -rw-rw-r-- (предоставив владельцу и группе права на чтение и запись, а прочим — только на чтение). Нужно ввести chmod u=rw,g=rw,o=r contacts.odt в командной строке (при условии, что файл находится в текущем каталоге). После этого режим корректируется с правами доступа, назначенными chmod, как показано ниже:

openSUSE:/home/ksanders # chmod u=rw,g=rw,o=r contacts.odt
openSUSE:/home/ksanders # ls -l contacts.odt
-rw-rw-r-- 1 ksanders users 0 Mar 18 08:02 contacts.odt

Также с помощью chmod можно включить или отключить конкретное право доступа, используя знаки + или -. Например, предположим, что нужно отключить право на запись, только что предоставленное группе для файла contacts.odt. Можно ввести chmod g-w contacts.odt в командной строке. После этого указанное право доступа отключается, как показано ниже:

openSUSE:/home/ksanders # chmod g-w contacts.odt
openSUSE:/home/ksanders # ls -l contacts.odt
-rw-r--r-- 1 ksanders users 0 Mar 18 08:02 contacts.odt

Чтобы снова включить право доступа, нужно ввести chmod g+w contacts.odt. Аналогично, вместо g можно подставить u или o для изменения прав доступа к файлу или каталогу для владельца или прочих.

Наконец, с командой chmod можно также использовать числовые права доступа. Этот вариант я использую наиболее часто. Можно изменить все три субъекта одновременно, используя всего три символа. Для этого нужно ввести chmod числовые_права имя_файла.

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

openSUSE:/home/ksanders # chmod 660 contacts.odt
openSUSE:/home/ksanders # ls -l contacts.odt
-rw-rw---- 1 ksanders users 0 Mar 18 08:02 contacts.odt

Совет

Параметр -R команды chmod позволяет рекурсивно изменять права доступа сразу для многих файлов.

Потренируемся в управлении правами доступа в следующем упражнении.

Упражнение 11-2. Управление правами доступа

В этом упражнении вы потренируетесь изменять права доступа из командной строки вашей системы Linux. Вы создадите проектный документ для гипотетической группы исследований и разработок и измените его права доступа для контроля доступа. Упражнение можно выполнить на виртуальной машине, прилагаемой к этой книге. Загрузите снимок 11-2 для получения предварительно настроенной среды.

Видео

Посмотрите видео к упражнению 11-2 — в нём показано, как выполнить эту задачу.

Выполните следующее:

  1. Убедитесь, что вы вошли в систему.
  2. При необходимости переключитесь на учётную запись root с помощью команды su - и пароля student.
  3. Перейдите в каталог /RandD, введя cd /RandD в командной строке.
  4. Создайте проектный документ для вашей группы и ограничьте доступ к нему, выполнив следующее:

    a. Создайте новый файл с именем design_doc.odt, введя touch design_doc.odt в командной строке.

    b. В командной строке введите ls -l. Обратите внимание, что учётная запись root и группа root являются владельцами нового файла.

    c. Измените владение файлом: назначьте его вашей учётной записи student и группе research с помощью команды chown.

    d. Снова введите ls -l в командной строке. Убедитесь, что владение файлом изменилось на вашу учётную запись student и группу research. Обратите внимание, что владелец имеет права rw- на файл, а группа — только r--.

    e. Предоставьте группе права rw-, введя chmod g+w design_doc.odt в командной строке.

    f. Снова введите ls -l в командной строке. Обратите внимание, что теперь владелец и группа имеют доступ к файлу для чтения/записи.

    g. Обратите внимание, что прочие имеют право на чтение файла. Этот документ должен быть конфиденциальным, поэтому удалите этот доступ, введя chmod 660 design_doc.odt в командной строке.

    h. Снова введите ls -l. Убедитесь, что прочие не имеют никаких прав доступа к этому файлу.

  5. Далее необходимо контролировать доступ к самому каталогу исследований с помощью прав доступа. Выполните следующее:

    a. Введите cd .. в командной строке.

    b. Введите ls -l в командной строке. Обратите внимание, что владелец имеет полный доступ к каталогу RandD, но у группы отсутствует право на запись в каталог. Также обратите внимание, что прочие могут читать содержимое каталога (r) и входить в него (x).

    c. Предоставьте группе полный доступ к каталогу и полностью лишите прочих доступа, введя chmod 770 RandD в командной строке.

    d. Введите ls -l в командной строке. Убедитесь, что владелец и группа имеют полный доступ, тогда как прочие не имеют никакого.

Далее рассмотрим, как работать с правами доступа по умолчанию.

Работа с правами доступа по умолчанию (Working with Default Permissions)

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

По умолчанию Linux назначает права rw-rw-rw- (666) каждому файлу при его создании в файловой системе. Также каждому создаваемому каталогу назначаются права rwxrwxrwx (777). Однако это не те права доступа, которые файлы или каталоги получают в действительности. Рассмотрим пример.

Предположим, что ksanders создаёт новый каталог revenue в своём домашнем каталоге и файл projections.odt в каталоге revenue. Исходя из того, что мы только что обсудили, каталог revenue должен иметь режим rwxrwxrwx, а файл projections.odt — режим rw-rw-rw-. Однако это не так, как показано ниже:

ksanders@openSUSE:~> ls –l
total 44
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:43 bin
-rw-rw---- 1 ksanders users    0 2011-03-18 08:02 contacts.odt
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Desktop
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Documents
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Downloads
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Music
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Pictures
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Public
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:43 public_html
drwxr-xr-x 2 ksanders users 4096 2011-03-18 11:06 revenue
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Templates
drwxr-xr-x 2 ksanders users 4096 2011-03-10 16:44 Videos
ksanders@openSUSE:~> ls -l r*
total 0
-rw-r--r-- 1 ksanders users 0 2011-03-18 11:06 projections.odt

Обратите внимание, что каталог revenue имеет режим rwxr-xr-x (755). Это означает, что владелец каталога имеет права на чтение, запись и выполнение каталога. Группа и прочие имеют права на чтение и выполнение каталога. Аналогично, обратите внимание, что файл projections.odt имеет режим rw-r--r-- (644). Владелец имеет права на чтение и запись, тогда как группа и прочие — только право на чтение.

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

Для повышения общей безопасности системы Linux использует переменную umask для автоматического удаления прав доступа из режима по умолчанию при каждом создании файла или каталога в файловой системе. Значение umask — трёхзначное число, как показано ниже (первый ноль не учитывается):

openSUSE:~ # umask
0022

Для большинства дистрибутивов Linux значение umask по умолчанию равно 022. Каждая цифра представляет числовое значение права доступа, которое нужно удалить. Первая цифра относится — как вы уже догадались — к владельцу, вторая — к группе, а последняя — к прочим. Поскольку для владельца указан 0, из режима файла или каталога не удаляются никакие права доступа. Однако поскольку для группы и прочих указана 2, право на запись удаляется из режима по умолчанию при каждом создании файла или каталога в файловой системе. Принцип работы umask показан на рис. 11-4.

Рис. 11-4. Принцип работы umask.

Рис. 11-4. Принцип работы umask.

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

Это можно сделать двумя способами. Во-первых, если нужно временно изменить umask, можно ввести umask значение в командной строке. Например, чтобы удалить право на выполнение, которое автоматически назначается прочим при создании нового каталога, можно ввести umask 023. В результате при создании из режима группы будет удалено право на запись (2), а из режима прочих — права на запись (2) и выполнение (1). Это фактически запретит кому-либо входить в новый каталог, кроме владельца каталога или членов группы-владельца. Это показано ниже:

openSUSE:~ # umask 023
openSUSE:~ # umask
0023
openSUSE:~ # mkdir /home/ksanders/temp
openSUSE:~ # ls –l /home/ksanders
...
drwxr-xr-x 2 ksanders users 4096 Mar 10 16:43 bin
-rw-rw---- 1 ksanders users     0 Mar 18 08:02 contacts.odt
drwxr-xr-x 2 ksanders users 4096 Mar 10 16:43 public_html
drwxr-xr-x 2 ksanders users 4096 Mar 18 11:06 revenue
drwxr-xr-- 2 root      root  4096 Mar 18 11:14 temp

Обратите внимание: поскольку значение umask было изменено, право на выполнение (x) было удалено из режима прочих при создании каталога temp.

Этот способ изменения umask прекрасно работает, однако он не является постоянным. После перезапуска системы umask вернётся к исходному значению. Это связано с тем, что значение umask автоматически устанавливается при каждой загрузке системы с помощью параметра umask в файле /etc/profile или файле /etc/login.defs, в зависимости от дистрибутива.

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

Далее рассмотрим специальные права доступа.

Работа со специальными правами доступа (Working with Special Permissions)

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

Право доступа Описание Действие применительно к файлам Действие применительно к каталогам
SUID Set User ID. Может применяться только к двоичным исполняемым файлам (не к сценариям оболочки). При запуске исполняемого файла с установленным SUID пользователь, запустивший файл, временно становится владельцем файла. Нет.
SGID Set Group ID. Может применяться к двоичным исполняемым файлам (не к сценариям оболочки). При запуске пользователем исполняемого файла с установленным SGID пользователь временно становится членом группы-владельца файла. При создании пользователем файла в каталоге с установленным SGID владельцем файла становится учётная запись пользователя (как обычно). Однако группа-владелец нового файла устанавливается равной группе-владельцу родительского каталога.
Sticky Bit Нет. При установке Sticky Bit для каталога пользователи могут удалять только те файлы внутри каталога, владельцами которых они являются, или файлы самого каталога. Это нейтрализует эффект от права на запись в каталог, которое в противном случае позволяло бы пользователю удалять файлы в каталоге, которым он не является владельцем.

Таблица 11-3. Специальные права доступа

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

  • SUID: 4
  • SGID: 2
  • Sticky Bit: 1

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

Например, предположим, что нужно применить права SUID и SGID к файлу runme, который должен быть доступен для чтения и выполнения владельцем и группой. Нужно ввести chmod 6554 runme в командной строке. Это указывает, что файлу назначены права SUID (4) и SGID (2) (в сумме 6 в первой цифре). Также это указывает, что владельцу и группе назначены права на чтение (4) и выполнение (1) (в сумме 5 во второй и третьей цифрах). Кроме того, это указывает, что прочим разрешено только читать (4) файл, но не изменять и не запускать его (в сумме 4 в последней цифре).

Потренируемся в управлении правами доступа по умолчанию и специальными правами доступа в следующем упражнении.

Упражнение 11-3. Управление правами доступа по умолчанию и специальными правами доступа

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

Видео

Посмотрите видео к упражнению 11-3 — в нём показано, как выполнить эту задачу.

Выполните следующее:

  1. Убедитесь, что вы вошли в систему.
  2. При необходимости переключитесь на учётную запись root с помощью команды su - и пароля student.
  3. Перейдите в каталог /RandD, введя cd /RandD в командной строке.
  4. Вам необходимо создать несколько документов для отдела исследований и разработок в каталоге RandD. Однако нужно убедиться, что эти документы защищены от посторонних глаз. Вспомните из предыдущего упражнения, что прочим автоматически предоставляется право на чтение файлов при их создании. Этого нельзя допустить: прочие не должны иметь вообще никакого доступа к создаваемым документам. Выполните следующее:

    a. Измените права доступа по умолчанию, введя umask 027 в командной строке.

    b. Проверьте значение umask, введя umask в командной строке. Должно отобразиться значение 0027.

    c. Создайте новый файл с именем schedule.odt, введя touch schedule.odt в командной строке.

    d. Введите ls -l в командной строке. Убедитесь, что владелец имеет права rw-, группа — r--, а прочие — ---.

  5. В предыдущем упражнении мы предоставили владельцу и группе права rwx на каталог RandD. Однако наличие права на запись в каталог позволяет любому члену группы исследований удалить любой файл в каталоге. Мы хотим настроить каталог так, чтобы пользователи группы исследований могли удалять только те файлы, владельцами которых они являются. Выполните следующее:

    a. В командной строке введите cd /.

    b. В командной строке добавьте разрешение Sticky Bit к каталогу RandD, введя chmod 1770 RandD.

    c. В командной строке введите ls -l. Обратите внимание, что к последней цифре части режима «Прочие» каталога RandD добавлен символ T. Это указывает на то, что sticky bit установлен:

    ```
    openSUSE:/ # ls –l
    total 105
    drwxrwx--T   2 tux         research   4096 Mar 18 11:25 RandD
    ...
    ```
    
  6. Поэкспериментируйте с новыми правами доступа, которые вы только что добавили, войдя в систему под разными учётными записями пользователей и проверив, что эти права доступа разрешают или запрещают.

  7. В упражнении 9-1 мы создали пользователя dtracy. Однако поскольку при создании не использовался параметр -m, у него нет домашнего каталога. Используя полученные знания, выполните следующее:

    a. Создайте соответствующий домашний каталог для dtracy в /home.

    b. Изучите другие домашние каталоги и определите, какие владение и права доступа должны быть назначены.

    c. Воспользуйтесь утилитами командной строки для установки владения и прав доступа для домашнего каталога dtracy.

    d. По завершении выполните pwck, чтобы убедиться, что учётная запись настроена правильно.

Закончим эту главу обсуждением дисковых квот.