Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Проще попросить прощения...

Оригинал: It's Easier to Ask Forgiveness...
Автор: Shawn Powers
Дата публикации: 7 мая 2015 г.
Перевод: А.Панин
Дата перевода: 1 августа 2015 г.

Проще попросить прощения...

...чем разобраться с механизмом прав доступа к элементам файловой системы в Linux! Хотя, если говорить откровенно, это не совсем так. Механизм прав доступа к элементам файловой системы в Linux является прямолинейным и элегантным и после того, как вы разберетесь с принципом его работы, вы удивитесь простоте его использования. Восьмеричная нотация выглядит немного необычной, но вы поймете, что даже ее использование имеет смысл тогда, когда разберетесь с причинами ее существования.

Пользователи и группы:

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

Каждый файл имеет владельца и группу владельцев. Если вы выполните команду ls -l, вы обнаружите имена владельцев и групп владельцев всех файлов и директорий из вашей текущей директории. Механизм прав доступа POSIX позволяет вам управлять возможностью чтения, записи и исполнения для пользователя, группы пользователей и третьей группы пользователей, а именно "остальных пользователей". Благодаря использованию трех перечисленных вариантов доступа к элементам файловой системы и трех перечисленных групп пользователей имеется возможность создания относительно сложных правил, указывающих на то, "кто и что может делать" с каждым из элементов файловой системы.

На Рисунке 1 показан пример строки из листинга файлов. Я разделил отдельные секции и прокомментировал назначение каждого из полей. Обратите внимание на то, что в первом поле обычно используется либо значение "d", либо значение "-"; первое значение используется для директорий, второе - для обычных файлов. В случае файлов назначение прав доступа очевидно. В том случае, если установлен бит чтения ("read"), пользователь (все сказанное справедливо и в отношении секций групп пользователей или остальных пользователей) может читать содержимое файла. В том случае, если установлен бит записи ("write") данные могут быть записаны в файл, а если установлен бит исполнения ("execute") - файл может быть исполнен. Биты исполнения обычно устанавливаются для бинарных файлов или файлов сценариев, которые вы желаете непосредственно исполнять.

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

Рисунок 1. Пример строки из листинга файлов

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

Изменение прав доступа:

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

chmod u+rw,g-r,o+rwx file.txt

Разумеется, данный пример является достаточно сложным, поэтому давайте разберемся с каждым из параметров. Буквенные символы, расположенные перед символами + и -, указывают на область применения изменений прав доступа, а именно символ u используется для указания на права доступа пользователя (user), символ g - на права доступа группы пользователей (group), а символ o - на права доступа остальных пользователей (other). После этого вы указываете необходимую операцию, а именно добавление или удаление битов прав доступа (с помощью символов + и - соответственно). Указание всех трех областей применения изменений прав доступа не является необходимым, причем допускается объединение идентификаторов этих областей аналогичным образом:

chmod ugo+rw file.txt

Также допускается отбрасывание символа, указывающего на область применения изменений прав доступа "ugo" в том случае, если вы хотите одновременно изменить права доступа для пользователя, группы пользователей и остальных пользователей. Следовательно, следующие команды предназначены для выполнения одного и того же действия:

chmod ugo-rw file.txt
chmod -rw file.txt
chmod u-rw,g-rw,o-rw file.txt

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

Восьмеричная нотация:

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

Числовые значения для каждого из битов прав доступа

Рисунок 2. Числовые значения для каждого из битов прав доступа

Формирование значений прав доступа

Рисунок 3. Формирование значений прав доступа

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

chmod ug+rw,ug-x,o+r,o-wx file.txt
chmod 662 file.txt

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

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

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