Права доступа в системе Linux
Несколько слов о том, зачем вообще возникла необходимость в механизме прав доступа. Все дело в том, что операционная система Linux с самого начала разрабатывалась как многопользовательская система, в которой работает не один, а несколько пользователей. Для того, чтобы была возможность разграничить полномочия пользователей, работающих в системе, в ней и предусмотрен упомянутый механизм.
Правильная настройка прав доступа позволяет повысить надёжность системы, защитив от изменения или удаления важные системные файлы. Наконец, поскольку внешние устройства с точки зрения Linux также являются объектами файловой системы, механизм прав доступа можно применять и для управления доступом к устройствам.
С помощью прав доступа отдельные пользователи могут иметь свои «личные» файлы и каталоги. К примеру, если пользователь niko создал в своём домашнем каталоге файлы (каталог /home/kolyar/..), то он является владельцем этих файлов и может определить права доступа к ним для себя и остальных пользователей. Он может, например, полностью закрыть доступ к своим файлам для остальных пользователей или групп пользователей, или разрешить им читать свои файлы (read), запретив изменять (write) и исполнять их (execute).Однако в большинстве случаев другим пользователям разрешается по умолчанию читать ваши файлы, но не изменять и не удалять их.
У любого файла в *nix-подобных системах (к каковой Linux также относиться) есть владелец - один из пользователей. Помимо этого, каждый файл одновременно принадлежит и некоторой группе пользователей системы. Каждый пользователь имеет возможность входить в любое количество групп, и в каждую группу может входить любое количество пользователей из числа определённых в системе.
Также помимо учётных записей, которые используют люди для работы с системой, в Linux предусмотрены учётные записи для т. н. системных пользователей: с точки зрения системы это такие же пользователи, которые могут быть владельцами файлов, однако эти учётные записи используются только для работы некоторых программ-серверов. Например, стандартный системный пользователь mail используется программами доставки почты.
При создании в системе новой учетной записи (иными словами нового пользователя), он добавляется по крайней мере в одну группу. Как правило, группы нужны для совместного доступа нескольких пользователей к определённым ресурсам. Например, на сервере организации для каждого проекта может быть создана отдельная группа, в которую войдут учётные записи (имена пользователей) сотрудников, работающих над этим проектом.
При этом файлы, относящиеся к проекту, могут принадлежать этой группе и быть доступными для её членов. В системе также определено несколько групп (например, bin), которые используются для управления доступом системных программ к различным ресурсам. Как правило, членами этих групп являются системные пользователи (администраторы), простоые пользователи не включаются в такие группы.
Виды прав доступа
Теперь рассмотрим, какие бывают права доступа. Они определяются по отношению к трём типам действий: чтение, запись и исполнение. Эти права доступа могут быть предоставлены трём классам пользователей: владельцу файла (пользователю), группе, которой принадлежит файл, а также всем остальным пользователям, не входящим в эту группу. Разделение на права подразумевает совершение строго определенных действий над файлами и директориями. Так, право на чтение даёт пользователю возможность читать содержимое файла или, если такой доступ разрешён к каталогам, просматривать содержимое каталога (используя команду ls). Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Наконец, право на исполнение позволяет пользователю запускать файл как программу или сценарий командной оболочки (разумеется, это действие имеет смысл лишь в том случае, если файл является программой или сценарием). Владение правами на исполнение для каталога позволяет перейти (командой cd) в этот каталог.
Чтобы получить информацию о правах доступа, необходимо воспользоваться командой ls с ключом -l. В результате будет выведена подробная информация о файлах и каталогах, в которой будут, среди прочего, отражены и права доступа. Рассмотрим следующий пример:
/home/niko/books# ls -l nochnoj_dozor
-rw-r--r-- 1 niko users 505 May 19 12:10 nochnoj_dozor
|
Во второй строке приведен результат выполенния команды /home/niko/books# ls -l nochnoj_dozor. Первое поле в этой строке (-rw-r--r--) отражает права доступа к файлу. Третье поле указывает на владельца файла (niko), четвёртое поле указывает на группу, которая владеет этим файлом (users). Последнее поле — это имя файла (nochnoj_dozor). Другие поля описаны в документации к команде ls.
А теперь более подробно. Данный файл является собственностью пользователя niko и группы users. Последовательность -rw-r--r-- показывает права доступа для пользователя — владельца файла, пользователей — членов группы-владельца, а также для всех остальных пользователей.
Первый символ из этого ряда (-) обозначает тип файла. Символ "-" означает, что это - обычный файл, а не каталог (в этом случае первым символом было бы d) или псевдофайл устройства. Следующие три символа (rw-) представляют собой права доступа, предоставленные владельцу niko. Символ r - сокращение от read (англ. читать), а w — сокращение от write (англ. писать). Таким образом, niko имеет право на чтение и запись (модификацию) файла nochnoj_dozor.
После символа w может стоять символ x, который означает наличие прав на исполнение (англ. execute, исполнять) файла. Однако символ "-", стоящий здесь вместо x, указывает, что niko не имеет права на исполнение этого файла. Это разумно, так как файл nochnoj_dozor не является программой (в данном случае это текстовый файл). В то же время, пользователь, зарегистрировавшийся в системе как niko, при желании может предоставить себе право на исполнение данного файла, поскольку является его владельцем. Для изменения прав доступа к файлу или каталогу используется команда chmod.
Следующие три символа (r--) отражают права доступа группы к файлу. Группой-собственником файла в нашем примере является группа users. Поскольку здесь присутствует только символ r, все пользователи из группы users могут читать этот файл, но не могут изменять или исполнять его.
Наконец, последние три символа (это опять r--) информируют нам о правах, которые есть на доступ к этому файлу всех других пользователей, помимо собственника файла и пользователей из группы users. Так как здесь указан только символ r, эти пользователи тоже могут читать файл
Вот ещё несколько примеров:
-rwxr-x--x
Пользователь-владелец файла может читать файл, изменять и исполнять его; пользователи, члены группы-владельца могут читать и исполнять файл, но не изменять его; все остальные пользователи могут лишь запускать файл на выполнение.
-rw-------
Только владелец файла может читать и изменять его.
-rwxrwxrwx
Все пользователи могут читать файл, изменять его и запускать на выполнение.
----------
Никто, включая самого владельца файла, не имеет прав на его чтение, запись или выполнение. Строго говоря, за исключением лишь суперпользователя (root), который может выполнять любые операции над любыми файлами в системе. Хотя такая ситуация вряд ли имеет практический смысл, с точки зрения системы она является вполне корректной. Разумеется, владелец файла может в любой момент изменить права доступа к нему.
Далее хочу сделать важное замечание. Дело в том, что возможность доступа к файлу зависит также и от прав доступа к каталогу, в котором находится файл. Например, даже если права доступа к файлу установлены как -rwxrwxrwx, другие пользователи не могут получить доступ к файлу, пока они не имеют прав на исполнение для каталога, в котором находится файл. Другими словами, чтобы воспользоваться имеющимися у вас правами доступа к файлу, вы должны иметь право на исполнение для всех каталогов вдоль пути к файлу.
Чем дальше, тем интереснее :) В операционной системе Linux «пользователями», которые выполняют различные действия с файлами и каталогами, являются на самом деле вовсе не люди, а программы, выполняемые в системе — процессы. Ярким примером может быть та же командная оболочка, которая считывает команды пользователя из командной строки и передаёт их системе на выполнение. Архитектура системы такова, что каждая ее программа (процесс) выполняется от имени определённого пользователя. Её возможности работы с файлами и каталогами определяются исходя из прав доступа, определёнными для этого пользователя.
Права доступа и администрирование системы
Особо отмечу, что установка и поддержание оптимальных прав доступа является одной из важнейших задач системного администратора. Права должны быть достаточными для нормальной работы пользователей и программ, но не большими, чем необходимо для такой работы. При установке прав доступа необходимо придерживаться принципа "запрещено все, что не разрешено".
Поскольку программы, исполняемые от имени суперпользователя (root), могут совершать любые действия с любыми файлами и каталогами, их выполнение может нанести системе серьёзный ущерб. Это может быть как следствием уязвимостей или ошибок в программах, так и результатом ошибочных действий самого пользователя. Поэтому работа с правами суперпользователя требует особой осторожности и советую не раздавать их "налево-направо".
Основные команды
chmod
изменение прав доступа к файлу или каталогу.
Синтаксис команды chmod:
chmod {a,u,g,o}{+,-}{r,w,x} filenames
Сначала после имени команды вы ставите один или несколько из следующих символов: a (сокращение от "all" -- все), u (сокращение от "user" -- пользователь), g (сокращение от "group" -- группа), или o (сокращение от "other" -- прочие). Затем вы точно определяете, добавляете ли вы права (+) или убираете (-). Наконец, вы пишете один или несколько символов из следующего набора: r ("read" -- чтение), w ("write" -- запись), x ("execute" -- исполнение).
А вот пример работы с комадной chmod в консоли:
chown
изменение владельца файла.
chgroup
изменение группы, которой принадлежит файл.
umask
определение прав доступа по умолчанию для файлов, создаваемых пользователем.
Если у кого-нибудь возникнет необходимость в использовании последних трех команд, то оперативно получить по ним справку поможет команда man (сокращение от "manual"). Формат ее вызова простой:
/home/niko# man ls
и на экран будет выведена экранная документация для команды ls.
На этом спешу раскланяться и пожелать успехов в освоении одновременно непростой и интересной системы, какой на данный момент является Linux.
Автор: Александр Кузьмицкий
Источник: www.codeguru.com.ua
|