Поскольку система Linux
с самого начала разрабатывалась
как многопользовательская, в ней предусмотрен такой
механизм, как права доступа к файлам и каталогам. Он позволяет
разграничить полномочия пользователей, работающих в системе. В
частности, права доступа позволяют отдельным пользователям иметь
“личные” файлы и каталоги. Например, если
пользователь[1] ivanov
создал в своём домашнем каталоге файлы, то он является
владельцем этих файлов и может определить права доступа к ним
для себя и остальных пользователей. Он может, например,
полностью закрыть доступ к своим файлам для остальных
пользователей, или разрешить им читать свои файлы, запретив
изменять и исполнять их.
Правильная настройка прав доступа позволяет повысить
надёжность системы, защитив от изменения или удаления важные
системные файлы. Наконец, поскольку внешние устройства с точки
зрения Linux
также являются объектами файловой системы, механизм
прав доступа можно применять и для управления доступом к
устройствам.
“Пользователями” системы Linux
, выполняющими
различные действия с файлами и каталогами, являются на самом
деле вовсе не люди, а программы, выполняемые в системе —
процессы. Одна из
таких программ — командная оболочка, которая считывает
команды пользователя из командной строки и передаёт их системе
на выполнение. Каждая программа
(процесс) выполняется от имени определённого пользователя. Её
возможности работы с файлами и каталогами определяются правами
доступа, заданными для этого пользователя.
С целью оптимальной настройки прав доступа для ряда
программ-серверов в системе созданы системные пользователи
(учётные записи), от имени которых работают эти программы.
Например, в системе ALT Linux веб-сервер
(Apache) выполняется от имени пользователя apache
, а ftp-сервер — от
имени пользователя ftp
. Такие учётные записи не
предназначены для работы людей-пользователей.
У любого файла в системе есть владелец — один из пользователей. Однако каждый файл одновременно принадлежит и некоторой группе пользователей системы. Каждый пользователь может входить в любое количество групп, и в каждую группу может входить любое количество пользователей из числа определённых в системе.
Когда в системе создаётся новый пользователь, он добавляется
по крайней мере в одну группу. В системе Linux
при создании
новой учётной записи создаётся специальная группа, имя которой
совпадает с именем нового пользователя, и пользователь
включается в эту группу. В дальнейшем администратор может
добавить пользователя к другим группам.
Механизм групп может применяться для организации совместного
доступа нескольких пользователей к определённым ресурсам.
Например, на сервере организации для каждого проекта может быть
создана отдельная группа, в которую войдут учётные записи (имена
пользователей) сотрудников, работающих над этим проектом. При
этом файлы, относящиеся к проекту, могут принадлежать этой
группе и быть доступными для её членов. В системе также
определено несколько групп (например, bin
), которые
используются для управления доступом системных программ к
различным ресурсам. Как правило, членами этих групп являются
системные пользователи, пользователи-люди не включаются
в такие группы.
В некоторых дистрибутивах Linux
(в т. ч. в
дистрибутивах ALT Linux)
с помощью групп могут быть предоставлены права, необходимые для
выполнения определённых пользовательских задач. Например, чтобы пользователь
получил возможность собирать пакеты RPM, его следует включить в
группу rpm
, чтобы предоставить возможность записи дисков
CD-R/RW, пользователя нужно включить в группу cdwriter
и т. д.
Права доступа определяются по отношению к трём типам действий: чтение, запись и исполнение. Эти права доступа могут быть предоставлены трём классам пользователей: владельцу файла (пользователю), группе, которой принадлежит файл, а также всем остальным пользователям, не входящим в эту группу. Право на чтение даёт пользователю возможность читать содержимое файла или, если такой доступ разрешён к каталогам, просматривать содержимое каталога (используя команду ls). Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Наконец, право на исполнение позволяет пользователю запускать файл как программу или сценарий командной оболочки (разумеется, это действие имеет смысл лишь в том случае, если файл является программой или сценарием). Для каталогов право на исполнение имеет особый смысл — оно позволяет сделать данный каталог текущим, т. е. “перейти” в него, например, командой cd.
Чтобы получить информацию о правах доступа, используйте
команду ls с ключом -l
. При
этом будет выведена подробная информация о файлах и каталогах, в
которой будут, среди прочего, отражены права доступа. Рассмотрим
следующий пример:
/home/ivanov/docs# ls -l report1303 -rw-r--r-- 1 ivanov users 505 Mar 13 19:05 report1303
Первое поле в этой строке (-rw-r--r--
)
отражает права доступа к файлу. Третье поле указывает на
владельца файла (ivanov
), четвёртое поле
указывает на группу, которая владеет этим файлом
(users
). Последнее поле — это имя файла
(report1303
). Другие поля описаны в
документации к команде ls.
Данный файл является собственностью пользователя ivanov
и группы users
. Последовательность
-rw-r--r--
показывает права доступа для
пользователя — владельца файла, пользователей —
членов группы-владельца, а также для всех остальных
пользователей.
Первый символ из этого ряда (-
)
обозначает тип файла. Символ -
означает, что
это — обычный файл, который не является каталогом (в этом
случае первым символом было бы d
) или
псевдофайлом устройства (было бы c
или
b
). Следующие три символа
(rw-
) представляют собой права доступа,
предоставленные владельцу ivanov
. Символ
r
— сокращение от read (англ. читать),
а w
— сокращение от write (англ.
писать). Таким образом, ivanov
имеет право на чтение и
запись (изменение) файла report1303
.
После символа w
мог бы стоять символ
x
, означающий наличие прав на исполнение
(англ. execute, исполнять) файла. Однако символ
-
, стоящий здесь вместо x
,
указывает, что ivanov
не имеет права на исполнение этого файла. Это разумно, так как
файл report1303
не является программой. В
то же время, пользователь, зарегистрировавшийся в системе как
ivanov
, при желании
может предоставить себе право на исполнение данного файла,
поскольку является его владельцем. Для изменения прав доступа к
файлу или каталогу используется команда
chmod.
Следующие три символа (r--
) отражают
права доступа группы к файлу. Группой-собственником файла в
нашем примере является группа users
. Поскольку здесь
присутствует только символ r
, все
пользователи из группы users
могут читать этот файл,
но не могут изменять или исполнять его.
Наконец, последние три символа (это опять
r--
) показывают права доступа к этому
файлу всех других пользователей, помимо собственника файла и
пользователей из группы users
. Так как здесь указан
только символ r
, эти пользователи тоже могут читать
файл
Вот ещё несколько примеров:
-rwxr-x--x
Пользователь-владелец файла может читать файл, изменять и исполнять его; пользователи, члены группы-владельца могут читать и исполнять файл, но не изменять его; все остальные пользователи могут лишь запускать файл на выполнение.
-rw-------
Только владелец файла может читать и изменять его.
-rwxrwxrwx
Все пользователи могут читать файл, изменять его и запускать на выполнение.
----------
Никто, включая самого владельца файла, не имеет прав на его чтение, запись или выполнение[2]. Хотя такая ситуация вряд ли имеет практический смысл, с точки зрения системы она является вполне корректной. Разумеется, владелец файла может в любой момент изменить права доступа к нему.
Возможность доступа к файлу зависит также от прав доступа к
каталогу, в котором находится файл. Например, даже если права
доступа к файлу установлены как -rwxrwxrwx
,
другие пользователи не могут получить доступ к файлу, пока они
не имеют прав на исполнение для каталога, в котором находится
файл. Другими словами, чтобы воспользоваться имеющимися у вас
правами доступа к файлу, вы должны иметь право на исполнение для
всех каталогов вдоль пути к файлу.
Установка и поддержание оптимальных прав доступа является одной из важнейших задач системного администратора. Права должны быть достаточными для нормальной работы пользователей и программ, но не большими, чем необходимо для такой работы. Дистрибутивы ALT Linux обладают продуманной системой прав (предопределённые группы, псевдопользователи для различных программ-серверов, права доступа для системных файлов и каталогов). Прежде чем вносить существенные изменения в эту систему, целесообразно понять её логику и выяснить, нет ли другого способа достичь нужной цели.
Поскольку программы, исполняемые от имени суперпользователя
(root
), могут совершать любые действия с любыми файлами и
каталогами, их выполнение может нанести системе серьёзный ущерб.
Это может быть как следствием уязвимостей или ошибок в
программах, так и результатом ошибочных действий самого
пользователя. Поэтому работа с правами суперпользователя требует
особой осторожности. Чтобы уменьшить связанные с этим риски,
разработчики дистрибутивов ALT Linux рекомендуют для выполнения
задач, требующих таких прав, использовать утилиту
sudo.
Ниже перечислены важнейшие команды для решения задач, связанных с правами доступа. Для получения более подробной информации об этих командах обращайтесь к руководствам по ним.
Изменение прав доступа к файлу или каталогу.
Изменение владельца файла.
Изменение группы, которой принадлежит файл.
Определение прав доступа по умолчанию для файлов, создаваемых пользователем.
[1] В этом разделе, если специально не оговорено иное, под пользователем понимается пользователь с точки зрения системы, т. е. зарегистрировавшийся в определённой учётной записи (работающий под определённым именем пользователя). Права доступа определяются именно для пользователей в указанном смысле. При этом один человек, работающий в системе, может регистрироваться под различными именами пользователя для выполнения различных действий. Наоборот, несколько человек, использующих одну и ту же учётную запись, для системы являются одним и тем же пользователем.
[2] Строго говоря, за исключением суперпользователя (root), который может выполнять любые операции над любыми файлами в системе.