
KTNI_Kozlov_otvety / 30
.doc30. Назначение прав доступа на объекты.
Операционная система Linux является не только удобной, гибкой, многозадачной и многопользовательской средой, но также надежной и безопасной. В Linux принципиально реализованы два глобальных уровня безопасности.
Первый уровень безопасности связан с аккаунтом пользователя, т.е. с возможностью регистрации пользователя в операционной системе. Пользователь в текстовой или графической средах непосредственно на компьютере с системой или с удаленного терминала должен ввести свой login, а также пароль. Система сначала проверяет, существует ли пользователь с данным именем, и если такой действительно существует, то далее проверяет, он ли пользуется этой учетной записью, при помощи сверки пароля. При входе пользователя в систему подключается второй уровень безопасности.
Второй уровень безопасности связан с разграничением прав доступа разных пользователей к данным (объектам Linux – файлам, каталогам и т.д.) операционной системы.
Все файлы в системе можно условно разделить на две категории: файлы, которые использует сама система (бинарные исполняемые файлы, статические и динамические библиотеки и т.д.), и файлы, которые используют пользователи.
Напомним, что краткую или расширенную информацию о наличии файла или директории можно получить по команде ls. Выведем расширенную информацию о файле chanal1.plx .По этой команде отображается информация, приведенная на рис.2.
|
Рис.2. Расширенный вывод сведений с расшифровкой полей данных |
Рассмотрим полную информацию о файле по расширенному выводу команды ls с опцией –l слева направо. Информацией слева направо является набор прав доступа на объект, далее через пробел указывается, сколько раз встречаются в системе ссылки на этот объект, затем указывается владелец данного объекта, потом через пробел отображаются пользователи, которые могут пользоваться этим объектом, далее идет размер файла, затем дата создания или последней модификации объекта и, наконец, указывается название объекта.
При сокращенном выводе данных по команде ls указывается имя объекта.
Остановимся на перечисленных полях данных более подробно, уже справа налево.
Итак, объекту можно придавать либо имя, либо имя с расширением. Использование расширений в Linux является необязательным. К ним обращаются только для ассоциации файлов и исполняемых команд. При работе с файлами удаленно в командном интерпретаторе с помощью терминала, когда не используются мышь и пиктограммы Linux, расширения не нужны. Однако они могут быть полезными, если запускается даже удаленно какое-нибудь графическое приложение, которое по умолчанию запускает файлы с определенным расширением.
При создании файла или переносе его из других операционных систем в Linux отображается полная дата создания файла или, если файл был модифицирован, то дата последней модификации. Это очень удобно, так как имеется возможность контролировать последние изменения в файле.
Размер файла или каталога по умолчанию в ls указывается в байтах, однако вывод сведений о размере объекта в других программах и командах можно изменить.
Следующие два поля слева направо указывают владельца файла или каталога и группу пользователей, которые могут пользоваться этим объектом. На этих полях мы далее остановимся подробнее.
Следующее поле указывает суммарное количество ссылок в системе на этот объект. В Linux имеется возможность создавать мягкие и жесткие (твердые) ссылки. Если объект присутствует один и на него не ссылаются в системе, то в этом поле указывается цифра «1».
Наконец, последнее поле, которое мы рассматриваем, и оно же первое при чтении информации слева направо – права доступа на объект. На данном поле мы остановимся подробнее.
Права доступа на объект. Чтобы уберечь свои собственные файлы и каталоги, операционная система использует ограничения на них. Такие же ограничения используются на данные разных пользователей, чтобы один из пользователей не мог специально или случайно повредить данные другого пользователя. Кроме того, данные ограничения позволяют сохранить конфиденциальность информации пользователя. При этом ограничения доступа к данным разделяются на ограничение на чтение (read, символ «r»), ограничение на запись (write, символ «w») и ограничение на выполнение файла (execution, символ «x»), если он исполняемый. Комбинация прав доступа на объект указывается в следующей последовательности: r w x. Если хотя бы одно из прав у пользователя отсутствует, то на месте этого символа ставится прочерк .
Таким образом, операционная система не позволяет пользователю, не имеющему на это полномочий, читать, модифицировать объекты и запускать программы. Например, если пользователю разрешено только читать, а остальное запрещено, то последовательность будет такой: r-- , а если разрешено читать и запускать файл, но нельзя модифицировать, то такой: r-x и т.д, т.е. каждый пользователь обладает своими правами на каждый объект (рис.3).
|
Рис. 3. Символьное обозначение прав доступа на объект |
Однако для того, чтобы следить за работой операционной системы, назначать новых пользователей, запускать программы диагностики работы системы, контролировать работу процессов, состояние ресурсов системы и устанавливать приоритеты между пользователями, в операционной системе Linux назначается пользователь с неограниченными возможностями, который имеет учетную запись «root». Рут или, как его еще называют, суперюзер призван следить за работой пользователей и системы, вовремя перераспределять ресурсы системы в пользу тех пользователей, которым их явно не хватает при решении своих задач (по умолчанию приоритеты между пользователями равны), поэтому рут изначально имеет доступ или возможность создания полного доступа не только к своим данным, но также к данным других пользователей и системы.
Кроме указанных ограничений на чтение, запись и выполнение файлов, при доступе к данным Linux имеются и другие ограничения. Все пользователи в системе по уровню доступа к данным в Linux разделяются на три категории: владелец объекта (user), пользователи, входящие в группу, которой разрешен доступ к файлу (group), и другие сторонние пользователи (other), которые не имеют отношения к объекту Linux. В связи с этим полный набор прав доступа представляет собой последовательную комбинацию прав доступа всех трех категорий. При этом каждая из категорий представлена набором трех ограничений на объект: чтение (r), запись (w) и выполнение (x) (рис. 4).
|
Рис.4. Ограничения прав доступа на объекты файловой системы |
На рисунке владельцу разрешено читать и модифицировать файл, группе пользователей – только читать, другим пользователям - тоже только читать. Прочерк перед комбинациями говорит о том, что мы имеем дело с файлом, а не с ссылкой или категорией.
Если пользователь сам создает файлы или каталоги, он ими владеет, т.е. может ими распоряжаться. Например, он может повысить уровень доступа к ним (rwx), или передать их другим пользователям, или пользоваться ими совместно с другими пользователями. Таким образом, при доступе к этим объектам система безопасности Linux назначает этому пользователю и использует для него категорию создатель - user. По умолчанию пользователь, создавший файл, может его читать (просматривать) и модифицировать (изменять, редактировать), а также сделать его исполняемым. Создатель объекта имеет доступ к нему по первой категории прав (чтение, запись, выполнение).
При работе с общими проектами (файлами или каталогами) в Linux имеется возможность пользователям объединяться в группы (group). Это очень удобно, когда многим пользователям приходится работать (читать, изменять и выполнять) c одними и теми же файлами. При этом разрешить пользоваться созданным объектом группе пользователей (group) может как сам создатель этого объекта; (user), так и суперпользователь системы. Пользователи группы имеют одинаковые права на доступ к объекту Linux (файлу или каталогу). Пользователи группы имеют доступ к объекту по второй категории прав доступа (чтение, запись, выполнение).
Наконец, существует и третья категория прав, связанная с ограничениями доступа к объекту Linux – другой пользователь (other). Этот пользователь не является создателем объекта (user), он не входит в группу пользователей (group), которые используют этот объект в своих целях при работе. Пользователь other имеет доступ к объекту Linux по третьей категории прав (чтение, изменение, выполнение). При попытке доступа пользователя к объекту Linux система проверяет его на принадлежность к одной из трех категорий. Если пользователь является создателем объекта, то система разрешает ему получить доступ к объекту в соответствии с первой категорией прав (чтение, изменение, выполнение). Если пользователь не является создателем объекта, но находится в группе пользователей, которые могут пользоваться этим объектом, то система разрешает ему пользоваться этим объектом по второй категории прав доступа (чтение, модификация, выполнение). Наконец, если пользователь не является создателем (user) и не входит в группу пользователей (group), которым открыт доступ к объекту, т.е. является другим пользователем (other) для данного объекта, то система разрешает ему использовать объект по третьей категории прав доступа (чтение, изменение, выполнение). Один и тот же пользователь для разных данных Linux может принадлежать ко всем трем категориям.
Назначение прав доступа на объект. При создании файла и директории по умолчанию командный интерпретатор назначает права доступа: rw-rw-r-- - для файла и rwxrwxr-x – для директории. Если пользователь user23, который входит в группу пользователей group14, создает новый файл rrr67, то расширенная информация по команде ls будет следующей (для упрощения размер и дату создания файла мы опустим):
-rw-rw-r-- 1 user23 group14 rrr67
Информация по правам доступа гласит: пользователю user23 разрешено читать и модифицировать файл; группе, в которой он состоит, – тоже читать и модифицировать файл, остальным – только читать.
Однако такие права по умолчанию можно изменить, когда, например, нужно, чтобы пользователи, входящие в группу, больше не имели доступа к вашим файлам. Изменение прав доступа осуществляется с помощью команды chmod, после которой может быть указана опция, например опция –R, для рекурсивного (применимого ко всем объектам вложения) изменения прав для директории, далее через пробел новые права и опять через пробел название файла или директории. Назначать новые права на объект можно как «с нуля», т.е. независимо от предыдущих прав, так и модифицируя имеющиеся.
Назначение прав доступа «с нуля» (с помощью восьмеричного вида). Назначать права доступа «с нуля» можно с помощью восьмеричного вида путем последовательного указания трех цифр от 0 до 7, которые соответствуют каждой из категорий. Полная таблица соответствий прав доступа имеет вид табл.4
Таблица 4
Связи разных видов прав доступа
Восьмеричный вид
|
||||||||||||||||||||||||||||||||||||
|
С помощью восьмеричного вида удобно по одной цифре назначать права для каждой из категорий.
Важно отметить, что назначать права на объект Linux с помощью восьмеричного вида для всех трех категорий могут только владелец объекта и root. Пользователь в группе и остальные пользователи сделать этого не могут.
Выведем сведения о файле laba2.cmd, который находится в текущей директории:
[antonk@fargo laba2]$ ls -l laba2.cmd
-rw-r–r– 1 antonk user 1810 Apr 22 13:37 laba2.cmd
[antonk@fargo laba2]$
Как видно, данный объект доступен владельцу для чтения и записи, группе и остальным – только для чтения.
Назначим новые права доступа: владельцу – полные права, группе чтение и запись, остальным – никаких прав. В соответствии с табл.3.1, в восьмеричном виде установим 760 с помощью команды chmod (табл. 5).
Таблица 5 Операции с правами доступа к файлам и каталогам
|
[antonk@fargo laba2]$ chmod 760 laba2.cmd
[antonk@fargo laba2]$ ls -l laba2.cmd
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
[antonk@fargo laba2]$
С помощью команды chmod можно также рекурсивно назначать права на все объекты в папке.
Выйдем из папки, т.е. перейдем на уровень выше с помощью команды cd, назначим новые права на всю папку laba2. Войдем опять в папку и убедимся, что на все файлы установлены новые права 760:
[antonk@fargo laba2]$ cd ..
[antonk@fargo 111]$ ls -l
total 4
drwxr-xr-x 2 antonk user 4096 Jul 13 18:00 laba2
[antоnk@fargo 111]$ chmod -R 760 laba2/
[antоnk@fargo 111]$ ls -l
-rwxrw---- 2 antonk user 4096 Jul 13 18:00 laba2
[antonk@fargo 111]$ cd laba2/
[antonk@fargo laba2]$ ls -1 total 28
-rwxrw---- 1 antonk user 1079 Apr 22 13:37 channell.plx
-rwxrw---- 1 antonk user 1175 Apr 22 13:37 gauss2.plx
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
-rwxrw---- 1 antonk user 12352 Apr 22 13:37 laba2.log
[antonk@fargo laba2]$
Модификация имеющихся прав доступа (символьный вид). Когда требуется изменить уже имеющиеся права на объект, то также используют команду chmod, однако пользуются символьным способом. Например, если объект для владельца доступен для чтения, записи и выполнения, а вы – владелец и вам требуется убрать доступ на выполнение, то в символьном виде можно просто отнять права на выполнение, т.е. написать следующую команду, например, для файла laba2.log: сhmod u-x laba2.log, что означает убрать право для владельца (user, u) на выполнение (execution, x). Выполним сразу команду ls –l, затем поменяем права на файл laba2.log и опять выполним ls –l:
[antonk@fargo laba2]$ ls –l
total 28
-rwxrw---- 1 antonk user 1079 Apr 22 13:37 channell.plx
-rwxrw---- 1 antonk user 1175 Apr 22 13:37 gauss2.plx
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
-rwxrw---- 1 antonk user 12352 Apr 22 13:37 laba2.log
[antonk@fargo laba2]$ chmod u-x laba2.log
[antonk@fargo laba2]$ ls –l
total 28
-rwxrw---- 1 antonk user 1079 Apr 22 13:37 channell.plx
-rwxrw---- 1 antonk user 1175 Apr 22 13:37 gauss2.plx
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
-rw-rw---- 1 antonk user 12352 Apr 22 13:37 laba2.log
[antonk@fargo laba2]$
Из примера видно, что атрибуты файла laba2.log изменились с rwxrw---- на rw-rw---- . Иногда требуется поменять владельца файла или каталога, т.е. отдать файл или каталог другому пользователю. Это можно сделать при двух условиях: во-первых, должна быть создана регистрационная запись пользователя в системе, которому предназначается передача файла или каталога; во-вторых, передать файл или каталог может только суперпользователь системы. В следующем примере root передает файл laba2.cmd пользователю kras :
[antonk@fargo laba2]$ ls –l
total 28
-rwxrw---- 1 antonk user 1079 Apr 22 13:37 channell.plx
-rwxrw---- 1 antonk user 1175 Apr 22 13:37 gauss2.plx
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
-rwxrw---- 1 antonk user 12352 Apr 22 13:37 laba2.log
[antonk@fargo laba2]$ chmod u-x laba2.log
[antonk@fargo laba2]$ ls –l
total 28
-rwxrw---- 1 antonk user 1079 Apr 22 13:37 channell.plx
-rwxrw---- 1 antonk user 1175 Apr 22 13:37 gauss2.plx
-rwxrw---- 1 antonk user 1810 Apr 22 13:37 laba2.cmd
-rw-rw---- 1 antonk user 12352 Apr 22 13:37 laba2.log
[antonk@fargo laba2]$
Суперпользователь также может изменить группу пользователей для объекта c помощью команды chgrp. В следующем примере суперпользователь меняет для вышеуказанного файла текущую группу на группу kras с помощью команды chgrp:
chgrp kras laba2.cmd
Команда umask. С помощью команды chmod в восьмеричной или символьной системах можно поменять права доступа к объектам файловой системы, но только к уже существующим. Максимальные права доступа на файл и каталог для всех категорий пользователей равны: 666 (чтение и модификация) – на файл, 777 (полные права) – на категорию. Таким образом, если специальных разграничений не проводить, то на любые новые файл или директорию, созданные конкретным пользователем, доступ могут иметь все зарегистрированные пользователи в системе. Чтобы этого не произошло, в Linux применяется система маскирования прав доступа, т.е. с максимальных прав доступа при создании нового объекта снимаются «избыточные» права. К примеру, если пользователь хочет, чтобы его новые файлы создавались с правами 644 (чтение и запись – для пользователя, чтение - для остальных категорий), то с помощью маски требуется снять цифры 022 (666 – 644=022), а если владелец файла хочет полностью запретить доступ остальных пользователей к своему файлу, то значение маски должно быть 026 (666 –640 = 026).