Сделай Сам Свою Работу на 5

Структура файловой системы UNIX

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

Рис. 1.4. Типичная файловая система UNIX

Приведем краткое описание основных каталогов.

Корневой каталог

Корневой каталог "/" является основой любой файловой системы UNIX. Все остальные файлы и каталоги располагаются в рамках структуры, по-

рожденной корневым каталогом, независимо от их физического местона­хождения.

Bin

В каталоге /bin находятся наиболее часто употребляемые команды и ути­литы системы, как правило, общего пользования.

Dev

Каталог /dev содержит специальные файлы устройств, являющиеся интер­фейсом доступа к периферийным устройствам.

Каталог /dev может содержать несколько подкаталогов, группирующих специальные файлы устройств одного типа. Например, каталог /dev/dsk содержит специальные файлы устройств для доступа к гибким и жестким дискам системы.

Etc

В этом каталоге находятся системные конфигурационные файлы и многие утилиты администрирования. Среди наиболее важных файлов — скрипты инициализации системы. Эти скрипты хранятся в каталогах /etc/rcO.d, /etc/rcl.d, /etc/rc2.d и т. д, соответствующих уровням выполнения системы (run level), и управляются скриптами /etc/rcO, /etc/rcl, /etc/rc2 и т. д. Во многих версиях BSD UNIX указанные каталоги отсутствуют, и загрузка сис­темы управляется скриптами /etc/reboot, /etc/re и /etc/rc.local. В UNIX ветви System V здесь находится подкаталог default, где хранятся параметры по умолчанию многих команд (например, /etc/default/su содержит парамет­ры для команды su(lM)). В UNIX System V большинство исполняемых фай­лов перемещены в каталог /sbin или /usr/sbin.

Lib

В каталоге /lib находятся библиотечные файлы языка С и других языков программирования. Стандартные названия библиотечных файлов имеют вид libx.a (или libx.so), где х — это один или более символов, определяю­щих содержимое библиотеки. Например, стандартная библиотека С назы­вается libc.a, библиотека системы X Window System имеет имя libXll.a. Часть библиотечных файлов также находится в каталоге /usr/lib.



2.7.6. /lost+found

Каталог "потерянных" файлов. Ошибки целостности файловой системы, возникающие при неправильном останове UNIX или аппаратных сбоях, могут привести к появлению т. н. "безымянных" файлов — структура и содержимое файла являются правильными, однако для него отсутствует имя в каком-либо из каталогов. Программы проверки и восстановления фай­ловой системы помещают такие файлы в каталог /lost+found под системными числовыми именами. Мы коснемся вопроса имен файлов далее в этой главе и, более подробно, в главе 4.

Mnt

Стандартный каталог для временного связывания (монтирования) физиче­ских файловых систем к корневой для получения единого дерева логиче­ской файловой системы. Обычно содержимое каталога /mnt пусто, по­скольку при монтировании он перекрывается связанной файловой систе­мой. Более подробно процесс монтирования и относящиеся к нему струк­туры данных ядра мы рассмотрим в главе 4.

/и или /home

Общеупотребительный каталог для размещения домашних каталогов пользо­вателей. Например, имя домашнего каталога пользователя andrei будет, ско­рее всего, называться /home/andrei или /u/andrei. В более ранних версиях UNIX домашние каталоги пользователей размещались в каталоге /usr.

Usr

В этом каталоге находятся подкаталоги различных сервисных подсистем — системы печати, электронной почты и т. д. (/usr/spool), исполняемые фай­лы утилит UNIX (/usr/bin), дополнительные программы, используемые на данном компьютере (/usr/local), файлы заголовков (/usr/include), элек­тронные справочники (/usr/man)H т. д.

Var

В UNIX System V этот каталог является заменителем каталога /usr/spool, используемого для хранения временных файлов различных сервисных под­систем — системы печати, электронной почты и т. д.

Tmp

Каталог хранения временных файлов, необходимых для работы различных подсистем UNIX. Обычно этот каталог открыт на запись для всех пользо­вателей системы.

Владельцы файлов

Файлы в UNIX имеют двух владельцев: пользователя (user owner) и группу (group owner). Важной особенностью является то, что владелец-пользователь может не являться членом группы, владеющей файлом. Группой называется определенный список пользователей системы. Пользователь системы может быть членом нескольких групп, одна из которых является первичной (primary), ос­тальные — дополнительными (supplementary).

дает большую гибкость в организации доступа к файлам. Совместное пользование файлами можно организовать практически для любого соста­ва пользователей, создав соответствующую группу и установив для нее права на требуемые файлы. При этом для того чтобы некий пользователь получил доступ к этим файлам, достаточно включить его в группу-владельца, и наоборот — исключение из группы автоматически изменяет для пользователя права доступа к файлам.

Для определения владельцев файла достаточно посмотреть подробный листинг команды Is -l. Третья и четвертая колонки содержат имена вла­дельца-пользователя и владельца-группы, соответственно:

1 234 56 78

-rw-r—г— 1 andy group 235520 Dec 22 19:13 pride. tar

-rw-rwr— 1 andy student 3450 Nov 12 19:13 exams. quest

Владельцем-пользователем вновь созданного файла является пользователь, который создал файл. Порядок назначения владельца-группы зависит от конкретной версии UNIX. Например, в SCO UNIX владельцем-группой является первичная группа пользователя, создавшего файл, а в Digital UNIX владелец-группа наследуется от владельца группы — каталога, в ко­тором создается файл4.

Для изменения владельца файла используется команда chown(l). В качестве параметров команда принимает имя владельца-пользователя и список фай­лов, для которых требуется изменить данный атрибут. Например, следующая команда установит пользователя sergey владельцем файлов client.c и server.c:

$ chown sergey client.с server.с

Изменение владельца-группы производится командой chgrp(l). Как и chown(l), в качестве параметров команда принимает имя владельца-группы и список файлов, для которых требуется изменить данный атрибут. На­пример, для установки группы staff в качестве владельца всех файлов текущего каталога, необходимо задать следующую команду:

$ chgrp staff *

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

1. Идентификатор владельца-пользователя файла (UID) устанавливается равным EUID процесса, создающего файл (т. е. вызвавшего функцию ореn(2) или creat(2)).

1. Идентификатор владельца-группы файла (group ID) устанавливается равным

а) EGID процесса (для версии System V);

б) GID каталога, в котором файл создается (для версии BSD).

Большинство систем, использующих наследование System V, позволяют также устанавли­вать наследование группового владельца в стиле BSD. Это достигается установкой флага SGID на каталог. Более подробно об этом см. раздел "Дополнительные атрибуты" далее в этой главе.

 

Владение файлом определяет тот набор операций, который пользователь может совершить с файлом. Часть из них, такие как изменение прав дос­тупа или владельца файла (табл. 1.1), может осуществлять только владелец (или суперпользователь), другие операции, такие как чтение, запись и за­пуск на выполнение (для исполняемых файлов) дополнительно контроли­руются правами доступа.

Таблица 1.1. Операции изменения владельцев файла

 

Операция Команда Имеет право выполнять
  в системе BSD 4.x в системе SVR4
Изменение владель­ца-пользователя Изменение владель­ца-группы chown(1) chgrp(1) суперпользователь суперпользователь владелец файла владелец файла только для группы, к которой сам принадлежит (в со­ответствии с POSIX)

Права доступа к файлу

В операционной системе UNIX существуют три базовых класса доступа к файлу, в каждом из которых установлены соответствующие права доступа:

User access (u) Для владельца-пользователя файла

Group access (g) Для членов группы, являющейся владельцем файла

Other access (о) Для остальных пользователей (кроме суперпользователя)

UNIX поддерживает три типа прав доступа для каждого класса: на чтение (read, обозначается символом г), на запись (write, обозначается символом w) и на выполнение (execute, обозначается символом х).

С помощью команды Is -l можно получить список прав доступа к файлу:

-rw-r--r-- 1 andy group

drwxr-xr-- 2 andy group

-rwxr-xr-- 1 andy group

-rw-r—r— 1 andy group

Права доступа листинга отображаются в первой колонке (за исключением первого символа, обозначающего тип файла). Наличие права доступа обо­значается соответствующим символом, а отсутствие — символом '-'. Рас­смотрим, например, права доступа к файлу a.Ollt.

 

Тип файла Права владельца-пользователя Права владельца-группы Права остальных пользователей

 

Права доступа могут быть изменены только владельцем файла или суперпользователем (superuser) — администратором системы. Для этого исполь­зуется команда chmod(l). Ниже приведен общий формат этой команды.

В качестве аргументов команда принимает указание классов доступа ('и' — владелец-пользователь, 'g' — владелец-группа, 'о' — остальные пользовате­ли, 'а' — все классы пользователей), права доступа ('г' — чтение, V — за­пись и Y — выполнение) и операцию, которую необходимо произвести ('+' — добавить, '-' — удалить и '=' — присвоить) для списка файлов/ilel, file2и т. д. Например, команда

$ chmod g-wx ownf ile

лишит членов группы-владельца файла ownfile права на запись и выполнение этого файла

 

В одной команде можно задавать различные права для нескольких классов доступа, разделив их запятыми.

Приведем еще несколько примеров:

$ chmod a+w text

$ chmod go=r text

$ chmod g+x-w runme

Последний пример демонстрирует достаточно сложную установку прав доступа. Вы можете установить сразу все девять прав доступа, используя числовую форму команды chmod(l):

$ chmod 754 *

Число определяется следующим образом: нужно представить права доступа в двоичном виде (0 — отсутствие соответствующего права, 1 — его нали­чие) и каждую триаду, соответствующую классу доступа, в свою очередь преобразовать в десятичное число.

 

Владелец Группа Остальные
Г W X Г — х Г -
10 1 10 0

Таким образом, приведенный пример эквивалентен следующей символь­ной форме chmod(l):

$ chmod u=rwx, g=rx, o=r *

Значение прав доступа различно для разных типов файлов. Для файлов опе­рации, которые можно производить, следуют из самих названий прав досту­па. Например, чтобы просмотреть содержимое файла командой cat(l), поль­зователь должен иметь право на чтение (г). Редактирование файла, т. е. его изменение, предусматривает наличие права на запись (w). Наконец, для того чтобы запустить некоторую программу на выполнение, вы должны иметь соответствующее право (х). Исполняемый файл может быть как скомпилированной программой, так и скриптом командного интерпретатора shell. В последнем случае вам также понадобится право на чтение, поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла. Все сказанное, за исключением, пожалуй, права на выполнение, имеющего смысл лишь для обычных файлов и ката­логов, справедливо и для других типов файлов: специальных файлов уст­ройств, именованных каналов, и сокетов. Например, чтобы иметь возможность распечатать документ, вы должны иметь право на запись в специальный файл устройства, связанный с принтером5. Для каталогов эти права имеют другой смысл, а для символических связей они вообще не использу­ются, поскольку контролируются целевым файлом.

Права доступа для каталогов не столь очевидны. Это в первую очередь связано с тем, что система трактует операции чтения и записи для ката­логов отлично от остальных файлов. Право чтения каталога позволяет вам получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды Is -Г), системе придется "загля­нуть" в метаданные файлов, что требует права на выполнения для катало­га. Право на выполнения также потребуется для каталога, в который вы захотите перейти (т. е. сделать его текущим) с помощью команды cd (]). Это же право нужно иметь для доступа ко всем каталогам на пути к ука­занному. Например, если вы установите право на выполнения для всех пользователей в одном из своих подкаталогов, он все равно останется не­доступным, пока ваш домашний каталог не будет иметь такого же права.

Права г и х действуют независимо, право х для каталога не требует наличия права г, и наоборот. Комбинацией этих двух прав можно добиться интересных эффектов, например, создания "темных" каталогов, файлы которых доступны только в случае, если пользователь заранее знает их имена, поскольку получение списка файлов таких каталогов запрещено. Данный прием, кстати, используется при создании общедоступных архивов в сети (FTP-серверов), когда некоторые разделы архива могут использоваться только "посвященными", знающими о наличии того или иного файла в каталоге. Приведем пример создания "темного" каталога.

$ pwd Где мы находимся?

/home/andrei

$ mkdir darkroom Создадим каталог

$ Is - 1 Получим его атрибуты

-rwxr--r-- 2 andy group 65 Dec 22 19:13 darkroom

$ chmod a-r+x darkroom

Превратим его в "темный" каталог $ Is — 1 Получим его атрибуты

--wx--x--x 2 andy group 65 Dec 22 19:13 darkroom

$ cp filel darkroom Поместим в каталог darkroom некоторый файл

$ cd darkroom Перейдем в этот каталог

$ Is -1 darkroom Попытаемся получить листинг каталога

##permission denied Увы...

$ cat filel Тем не менее, заранее зная имя файла (filel), можно работать с ним (например, прочитать, если есть соответствующее право доступа)

Особого внимания требует право на запись для каталога. Создание и удаление файлов в каталоге требуют изменения его содержимого, и, следовательно, права на запись в этот каталог. Самое важное, что при этом не учитываются права доступа для самого файла. То есть для того, чтобы удалить не­который файл из каталога, не обязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл. Имейте в виду, что право на запись в каталог дает большие полномочия, и предоставляйте это право с осторожностью. Правда, существует способ несколько обезопасить себя в случае, когда необходимо предоставить право на запись другим пользователям, — установка флага Sticky bit на каталог. Но об этом мы поговорим чуть позже.

В табл. 1.2 приведены примеры некоторых действий над файлами и минимальные права доступа, необходимые для выполнения этих операций.

Таблица 1.2. Примеры прав доступа

 

 

Команда Смысл действия Минимальные права доступа
для обычного файла для каталога, содержащего файл
cd /u/andrei Перейти в каталог /u/andrei X
Is /u/andrei/* . с Вывести все файлы с суффиксом .с это­го каталога   г
Is -s /u/andrei/*.с Вывести дополни­тельную информа­цию об этих файлах (размер)   гх
cat report.txt Вывести на экран содержимое файла report.txt г X
cat >> report.txt Добавить данные в файл report.txt W X
runme.sh Выполнить про­грамму runme X X
runme Выполнить скрипт командного интер­претатора runme.sh гх X
rm runme Удалить файл runme в текущем каталоге XW

Итак, для выполнения операции над файлом имеют значение класс доступа, к которому вы принадлежите, и права доступа, установленные для этого класса. Поскольку для каждого класса устанавливаются отдельные права доступа, всего определено 9 прав доступа, по 3 на каждый класс.

Операционная система производит проверку прав доступа при создании, открытии (для чтения или записи), запуске на выполнение или удалении файла. При этом выполняются следующие проверки:

1. Если операция запрашивается суперпользователем, доступ разрешается. Никакие дополнительные проверки не производятся. Это позволя-

ет администратору иметь неограниченный доступ ко всей файловой системе.

2. Если операция запрашивается владельцем файла, то:

а) если требуемое право доступа определено (например, при операции чтения файла установлено право на чтение для владельцапользователя данного файла), доступ разрешается,

б) в противном случае доступ запрещается.

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

а) если требуемое право доступа определено, доступ разрешается,

б) в противном случае доступ запрещается.

4. Если требуемое право доступа для прочих пользователей (other) установлено, доступ разрешается, в противном случае доступ запрещается.

Система проводит проверки в указанной последовательности. Например, если пользователь является владельцем файла, то доступ определяется ис­ключительно из прав владельца-пользователя, права владельца-группы не проверяются, даже если пользователь является членом владельца-группы. Чтобы проиллюстрировать это, рассмотрим следующее:

rw-r— 2 andy group 65 Dec 22 19:13 filel

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



©2015- 2017 stydopedia.ru Все материалы защищены законодательством РФ.