Бит чтения для всех типов файлов имеет одно и то же значение: он позволяет читать содержимое файла (получать листинг каталога командой ls).
Бит записи также имеет одно и то же значение: он позволяет писать в этот файл, включая и перезапись содержимого. Если у пользователя отсутствует право доступа на запись в каталоге, где находится данный файл, то пользователь не сможет этот файл удалить, а также пользователь не сможет создавать и удалять в нем файлы.
Если для некоторого файла установлен бит выполнения, то файл может выполняться как команда. В случае установки этого бита для каталога этот каталог можно сделать текущим (перейти в него, например, командой cd), но это не означает, что возможно выполнение находящихся в нем файлов.
Установленный бит SUID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Установленный бит SGID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) группы-владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Следует еще раз отметить, что с каждым процессом UNIX связаны два идентификатора: пользователя, от имени которого был создан этот процесс, и группы, к которой принадлежит данный пользователь. Эти идентификаторы носят название реальных идентификаторов пользователя: Real User ID, RUID и реальных идентификаторов группы: Real Group ID, RGID. Однако при проверке прав доступа к файлу используются не эти идентификаторы, а так называемые эффективные идентификаторы пользователя: Effective User ID, EUID и эффективные идентификаторы группы: Effective Group ID, EGID.
Введение эффективных идентификаторов позволяет процессу выступать в некоторых случаях от имени пользователя или группы, отличных от тех, которые ему достались при рождении. В исходном состоянии эффективные идентификаторы совпадают с реальными. Чтобы реализовать смену прав кроме перечисленных ранее прав доступа, файл имеет два признака разрешения смены идентификатора – Set User ID on execution (SUID) и Set Group ID on execution (SGID), которые разрешают смену идентификаторов пользователя и группы при выполнении данного файла. Их существование обусловлено тем, что некоторые программы требуют для своей работы привилегий пользователя root. Например, команда passwd (находится /usr/bin/passwd), с помощью которой пользователь меняет свой пароль, обращается к файлу, принадлежащему суперпользователю /etc/passwd, поэтому у нее установлен бит SUID. Она модифицирует файл строго определенным пользователем образом и завершается.
Если бит SGID установлен для каталога, то создаваемые в нем файлы будут принимать идентификатор группы каталога, а не группы, в которую входит владелец файла. Это упрощает пользователям, принадлежащих к одной группе, совместный доступ к каталогу.
Применение прав доступа SUID и SGID чревато опасными последствиями – при некорректном завершении программы, запущенной обычным пользователем и получившей права пользователя root, возможна ситуация, когда права root останутся у этого пользователя. Если нужны привилегированные права, то лучше пользоваться программой sudo (su) – смены текущего пользователя.
Для расчета прав доступа необходимо сложить восьмеричные значения всех необходимых установленных битов. В результате получится четырехзначное восьмеричное число. Если старший разряд имеет значение 0, его можно не указывать.
Например, если необходимо задать права доступа на чтение, запись и выполнение для владельца, на чтение и выполнение для группы и на выполнение для всех остальных пользователей, получаем следующее восьмеричное значение:
Чтение для владельца:
|
0400
|
Запись для владельца:
|
0200
|
Выполнение для владельца:
|
0100
|
Чтение для группы:
|
0040
|
Выполнение для группы:
|
0010
|
Выполнение для прочих:
|
0001
|
Сумма:
|
0751
|
Итак, соответствующие права доступа – 751. В длинном листинге эти права будут представлены в виде "-rwxr-x--x" (при "сложении" буквы с дефисом в символьном представлении остается буква). Полное право доступа всех задается числом 777 (111 111 111). Наиболее часто используется маска 644 (110 100 100), разрешающая чтение и модификацию файла для владельца, и только чтение для других пользователей.
Для установки (изменения) прав доступа к файлу используется команда chmod. Права доступа к файлу может изменять или устанавливать только его владелец или пользователь root. Права доступа могут задаваться как абсолютным значением (восьмеричным числом, расчет которого выполняется в соответствии с табл. 4), так и относительным изменением прав при помощи специальных символов.
4.4.3. Структура логической файловой системы UNIX
Использование общепринятых имен основных файлов и структуры каталогов существенно облегчает работу в операционной системе, ее администрирование и повышает переносимость. Типичная структура и назначение каталогов логической файловой системы UNIX представлена в табл. 5.
|
Таблица 5
|
Назначение основных каталогов логической файловой системы UNIX
|
Каталог
|
Назначение каталога
|
/
|
Корневой каталог. Является основой любой файловой системы UNIX. Все остальные каталоги и файлы располагаются в рамках структуры, порожденной корневым каталогом (в нем и в его подкаталогах), независимо от их физического местонахождения. Для корневого каталога обязательно должна создаваться отдельная физическая файловая система, а сам он является точкой ее монтирования
|
/bin
|
Основные программы для работы в системе пользователей.
|
/boot
|
Ядро и фильтры для его загрузки
|
/dev
|
Файлы устройств
|
/etc
|
Каталог для конфигурационных файлов. Может иметь подкаталоги для различных компонентов и служб. Конфигурационные файлы в UNIX – обычные текстовые
|
/home
|
Начальные каталоги пользователей
|
/lib
|
Библиотеки и компоненты языка С
|
/lost+found
|
Восстановленные после аварийного размонтирования части файловой системы
|
/mnt
/media
|
Точка монтирования для файловых систем на съемных носителях или дополнительных дисках. Может содержать подкаталоги для отдельных типов носителей, например, cdrom или floppy. Может быть пустым
|
/proc
|
Образы всех выполняющихся процессов (по номерам)
|
/root
|
Начальный каталог суперпользователя
|
/sbin
|
Команды загрузки и восстановления системы
|
/tmp
|
Временные файлы, удаляемые при перезагрузке
|
/var
|
Системные данные и конфигурационные файлы (файловой системы, например файлов журналов системы)
|
/usr
|
Иерархия дополнительных файлов и программ
|
Специальные файлы обычно находятся в каталоге /dev. Стандартные имена основных устройств представлены в табл 6.
|
Таблица 6
|
Стандартные имена основных специальных файлов в каталоге /dev
|
Файл
|
Устройство
|
tty N
|
Консоль
|
mouse
|
Мышь
|
ttyS N
|
Последовательный порт (tty0 – COM1)
|
lp N
|
Параллельный порт
|
hdx N
|
IDE жесткий диск (hda – Primary Master, … hdd – Secondary Slave),
N – раздел (1-4 – первичные разделы, с 5 – логические диски в расширенном разделе)
|
sdx N
|
SCSI жесткий диск
|
fd 0
|
Первый дисковод (А)
|
eth N
|
Сетевая плата N
|
Если возле файла слева имеется символ +, то данное устройство блочного типа, если символ –, то устройство символьного типа.
4.4.4. Физические файловые системы UNIX
Физическая файловая система формирует структуру хранения данных на физическом носителе, в первую очередь – на жестком диске. Следует еще раз напомнить, что важной отличительной особенностью построения файловых систем UNIX является то, что каждый файл (в том числе каталог и устройство ввода-вывода) имеет персональный индексный дескриптор и может иметь несколько имен – ссылок на этот индексный дескриптор.
Рассмотрим общую структуру файловых систем UNIX на примере ufs. В расположении файловой системы на диске следует выделить 4 области:
загрузочный блок;
-
суперблок, который содержит самую общую информацию о файловой системе:
размер файловой системы;
размер области индексных дескрипторов;
число индексных дескрипторов;
список свободных индексных дескрипторов (битовая карта индексных дескрипторов);
список свободных блоков (кластеров) (битовая карта блоков);
также другую административную информацию;
область индексных дескрипторов, в которой порядок расположения индексных дескрипторов соответствует их номерам.
область данных, в которой расположены как обычные файлы, так и файлы-каталоги, в том числе и корневой каталог; специальные файлы (ассоциированные с устройствами ввода-вывода) представлены в файловой системе только записями в соответствующих каталогах и индексными дескрипторами специального формата, но места в области данных не занимают.
Каждый индексный дескриптор имеет номер, который одновременно является уникальным именем файла в файловой системе и выделяется файлу из числа свободных номеров при создании файла на диске. Запись о файле в каталоге состоит всего из двух полей: символьного имени файла и номера индексного дескриптора.
Следовательно, один номер индексного дескриптора (т. е. один реальный файл) может соответствовать различным символьным именам этого файла. Файл удаляется из системы и его дескриптор освобождается лишь после удаления его последнего символьного имени.
Индексный дескриптор файла содержит следующие данные о файле:
идентификатор владельца файла;
тип файла (обычный, каталог, специальный, символьная связь);
временные характеристики: время последней модификации файла и т. п.;
число ссылок на данный индексный дескриптор, равный количеству псевдонимов (символьных имен) файла;
адресная информация – расположение частей файла по блокам (кластерам) в области данных диска;
размер файла в байтах.
Данные файла размещаются на диске блоками (так принято называть кластеры в UNIX). Обычно размер блока 1-8 Кбайт. Для номера блока выделяется 32 бита. Увеличение размера блока повышает быстродействие файловой системы, уменьшает фрагментированность диска, но менее экономно расходует дисковое пространство.
Для хранения адресной информации в индексном дескрипторе стандартно выделяется 15 полей (по 32 бита).
Если размер файла меньше или равен 12 блокам (при максимальном размере блока 8 Кбайт размер файла до 98 Кбайт), то номера этих блоков непосредственно перечисляются в первых 12 полях.
Если размер файла превышает 12 блоков (размер файла от 98 Кбайт до 12 Мбайт), то 13-е поле содержит адрес блока, в котором могут быть расположены номера следующих блоков файла.
Если размер файла больше 2060 блоков, то используется 14-е поле, в котором находится номер блока, содержащего до 2048 номеров блоков (при размере блока 8 Кбайт), каждый из которых хранит 2048 номеров блоков данных файла (объем файла может быть до 3×1010 байт).
Аналогично, но уже с тройной иерархией используется 15-е поле, что позволяет адресовать блоки (кластеры) в файлах размером до 7×1013 байт.
Файл в каталоге – это элемент в каталоге, относящийся к одному файлу и называемый связью. Файлы существуют независимо от каталогов. А связи в каталогах указывают на дескрипторы реальных файлов. Можно сказать, что каталог – это список индексных дескрипторов файлов.
В журнализируемой файловой системе после того, как транзакция (изменение) записана, она может быть выполнена повторно, что предотвращает возникновение ошибок и несогласованностей в файловой системе и необходимость запуска программы проверки файловой системы fsck. Тем самым уменьшается время перезагрузки в случае сбоя или некорректной остановки системы.
Журнал выделяется из свободных блоков файловой системы и обычно имеет размер порядка 1 Мбайта на каждый 1 Гбайт файловой системы. Журнал сбрасывается по мере заполнения, после синхронизации структуры файловой системы с диском.
Различные версии ОС UNIX поддерживают разные реализации журнализируемых файловых систем. Это, например, файловая система ufs (Solaris), vxfs (Solaris, UnixWare), RaisorFS и ext3 (Linux), jfs (AIX и Linux) и др. Некоторые файловые системы позволяют включать и отключать журнализацию (ufs, ext2/ext3). Естественно, журнализация несколько замедляет работу файловой системы, но в большинстве случаев гарантирует целостность данных.
Создается файловая система на указанное устройство (необходимо указать специальное символьное устройство) командой mkfs. Файловая система создается на основе указанных в командной строке типа файловой системы (ТипФС), специфических_опций и операндов, которые зависят от конкретного типа создаваемой файловой системы. Их можно посмотреть на соответствующей странице справочного руководства (например, man mkfs).
Для проверки файловой системы и исправления ошибок служит программа fsck, которая ищет и, автоматически или в интерактивном режиме, исправляет противоречия в файловых системах. Если файловая система находится в несогласованном состоянии, которое нельзя однозначно исправить, у пользователя спрашивают подтверждения перед попыткой выполнить каждое исправление. Следует иметь в виду, что некоторые исправления приводят к определенным потерям данных. Объем и серьезность потери данных можно определить по диагностическому сообщению. Стандартным действием при каждом исправлении является ожидание от пользователя утвердительного (yes) или отрицательного (no) ответа.
При использовании fsck файловая система должна быть неактивной (размонтирована или смонтирована только для чтения). Если это невозможно, необходимо обеспечить, чтобы машина находилась в состоянии покоя (без работающих пользователей) и чтобы сразу после завершения команды она была перезагружена, если исправляется критическая файловая система, например, корневая.
Для работы команде fsck необходимо указывать специальное символьное устройство.
Корневая файловая система обычно проверяется при запуске автоматически. Система при запуске может автоматически проверять и другие физические файловые системы, для которых в таблице стандартных файловых систем указана необходимость такой проверки. Эта проверка может вестись параллельно, путем запуска отдельного процесса fsck для каждой проверяемой файловой системы с одним и тем же порядковым номером проверки. Параллельно имеет смысл проверять файловые системы, расположенные на разных физических дисках.
4.4.5. Монтирование и демонтирование физических файловых систем
Физические файловые системы, кроме корневой (/), считаются съемными (removable) в том смысле, что они могут быть как доступны для пользователей, так и не доступны. Команда mount уведомляет систему, что блочное устройство или удаленный ресурс доступны для пользователей в точке монтирования, которая уже должна существовать; точка монтирования становится именем корня вновь смонтированного устройства или ресурса. Говорят, что эта команда монтирует или подключает физическую файловую систему или ресурс к общей логической файловой системе.
Монтирование других файловых систем к корневой файловой системе может осуществляться командой mount:
|