Nov 26
Права доступа в системе Linux
Вадим Виниченко, Мэтт Уэлш
Пользователи и группы
Поскольку система 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.
Основные команды
Ниже перечислены важнейшие команды для решения задач, связанных с правами доступа. Для получения более подробной информации об этих командах обращайтесь к руководствам по ним.
- chmod Изменение прав доступа к файлу или каталогу.
- chown Изменение владельца файла.
- chgroup Изменение группы, которой принадлежит файл.
- umask Определение прав доступа по умолчанию для файлов, создаваемых пользователем.
[1] В этом разделе, если специально не оговорено иное, под пользователем понимается пользователь с точки зрения системы, т. е. зарегистрировавшийся в определённой учётной записи (работающий под определённым именем пользователя). Права доступа определяются именно для пользователей в указанном смысле. При этом один человек, работающий в системе, может регистрироваться под различными именами пользователя для выполнения различных действий. Наоборот, несколько человек, использующих одну и ту же учётную запись, для системы являются одним и тем же пользователем.[2] Строго говоря, за исключением суперпользователя (root), который может выполнять любые операции над любыми файлами в системе.