Алексей Стахнов - Linux
Модификаторы прав доступа
Как у любого правила, в жесткой системе прав доступа существуют свои исключения. Это так называемые дополнительные атрибуты файла:
• Sticky bit (Save Text Attribute) – «липкий» бит;
• SUID (Set User ID) – установка идентификатора пользователя;
• SGID – установка идентификатора группы.
Рассмотрим эти атрибуты подробнее.
• Sticky bit для файлов. В современных операционных системах потерял свое значение.
Sticky bit для каталогов. Если sticky bit установлен для каталога, то пользователь, несмотря на то, что ему разрешена запись в этот каталог, может удалять только те файлы, владельцем которых он является или к которым ему явно заданы права записи.
• SUID для файлов. Если установлены права доступа SUID и файл исполняемый, то файл при запуске на выполнение получает не права пользователя, запустившего его, а права владельца файла. Такие фокусы используются для того, чтобы пользователь мог работать с некоторыми системными файлами, владельцем которых является некий привилегированный пользователь. К примеру, для того, чтобы пользователь мог самостоятельно изменить свой пароль при помощи утилиты passwd, у этой утилиты (владельцем которой является пользователь root) должен быть установлен бит SUID, поскольку она работает с файлами (/etc/passwd), модификацию которых имеет право производить только пользователь root.
• SGID для файлов. Если установлены права доступа SGID, то это аналогично установке бита SUID, только вместо владельца файла используется группа владельца.
SGID для каталогов. В случае установки SGID для каталога файлы, содержащиеся в этом каталоге, будут иметь установки группы такие же, как у каталога.
Узнать о том, какие дополнительные права доступа к файлам и каталогам установлены, можно, используя команду is. Ниже приведен результат выполнения Is -l
-r-s–х–х 1 root root 13536 Июл 12 2000 passwd
Как видно из прав доступа, у этого файла установлен SUID-бит (буква s в списке прав доступа).
Файловые системы
Файловая система – это методы и структуры данных, которые используются операционной системой для хранения файлов на диске или в его разделе.
Перед тем как раздел или диск могут быть использованы для размещения файловой системы, она должна быть инициализирована, а требуемые служебные данные перенесены на этот раздел или диск. Этот процесс называется созданием файловой системы (иногда его еще называют форматированием, что в принципе неверно).
Основными понятиями в файловой структуре Linux (и в большинстве операционных систем UNIX-семейства) являются:
• суперблок;
• индексный дескриптор (inode);
• блок данных;
• блок каталога;
• косвенный блок;
• файл.
Подробную информацию см. в разд. «Физическая структура Ext2».
Типы файловых систем
Linux поддерживает большое количество типов файловых систем. Наиболее важные из них приведены ниже.
• Minix – старейшая файловая система, ограниченная в своих возможностях (у файлов отсутствуют некоторые временные параметры, длина имени файла ограничена 30-ю символами) и доступных объемах (максимум 64 Мбайт на одну файловую систему).
• Xia – модифицированная версия системы minix, в которой увеличена максимальная длина имени файла и размер файловой системы.
• Ext – предыдущая версия системы Ext2. В настоящее время практически не используется.
• Ext2 – наиболее богатая функциональными возможностями файловая система Linux. На данный момент является самой популярной системой. Разработана с учетом совместимости с последующими версиями.
• Ext3 – модернизация файловой системы Ext2. Помимо некоторых функциональных расширений является журналируемой. Пока широкого распространения не получила. Конкурирующая журналируемая файловая система – ReiserFS.
• VFS – виртуальная файловая система. По сути – эмулятор-прослойка между реальной файловой системой (MS-DOS, Ext2, xia и т. д.) и ядром операционной системы Linux.
• Ргос – псевдо-файловая система, в которой посредством обычных файловых операций предоставляется доступ к некоторым параметрам и функциям ядра операционной системы.
• ReiserFS – журналируемая файловая система. Наиболее используемая среди журналируемых файловых систем для Linux.
В операционную систему Linux для обеспечения обмена файлами с другими операционными системами включена поддержка некоторых файловых систем. Однако их функциональные возможности могут быть значительно ограничены по сравнению с возможностями, обычно предоставляемыми файловыми системами UNIX.
• msdos – обеспечивается совместимость с системой MS-DOS.
• umsdos – расширяет возможности драйвера файловой системы MS-DOS для Linux таким образом, что в Linux появляется возможность работы с именами файлов нестандартной длины, просмотра прав доступа к файлу, ссылок, имени пользователя, которому принадлежит файл, а также оперирования с файлами устройств. Это позволяет использовать (эмулировать) файловую систему Linux на файловой системе MS-DOS.
• iso9660 – стандартная файловая система для CD-ROM.
• xenix – файловая система Xenix.
• sysv – файловая система System V (версия для х86).
• hpfs – доступ "только для чтения" к разделам HPFS.
• nfs – сетевая файловая система, обеспечивающая разделение одной файловой системы между несколькими компьютерами для предоставления доступа к ее файлам со всех машин.
В табл. 4.1 содержится общая информация о функциональных возможностях, предоставляемых различными файловыми системами.
Таблица 4.1. Сравнение файловых системУстановка файловой системы
Файловая система устанавливается при помощи команды mkfs. Для каждого типа файловой системы существует своя версия этой программы. Команда mkfs запускает требуемую программу в зависимости от типа файловой системы.
Параметры командной строки, передаваемые mkfs, слегка различаются для разных типов файловых систем. Полное описание параметров командной строки mkfs можно найти в соответствующем разделе man (справочной системы программы). С помощью параметров командной строки можно задать тип создаваемой файловой системы, произвести верификацию диска и маркировку сбойных блоков или получить список сбойных блоков из текстового файла.
Монтирование и демонтирование файловой системы
Для нормальной работы операционной системы ядро каким-то образом должно получить параметры файловых систем, используемых во время работы, и определенным образом настроить специальные таблицы. Для этого существует, по крайней мере, два способа:
1. Каким-то образом один раз получить тип и параметры файловой системы и использовать их все время.
2. Получать их каждый раз при обращении к файловой системе.
У обоих вариантов имеются свои плюсы и минусы. Плюсы первого варианта – уменьшаются затраты времени на определение файловой системы и инициализацию таблиц ядра операционной системы. Минусы – невозможно "на ходу" заменить одно устройство (носитель информации) на другое (к примеру, диск Zip 100 на Zip250), поскольку в таблицах ядра зафиксированы емкость носителя, емкость кластеров, используемые блоки и тому подобная информация. Плюсы и минусы второго варианта прямо противоположны первому – возможно "на ходу" заменить устройство (носитель информации), большие затраты времени на определение файловой системы и инициализацию таблиц ядра операционной системы. К тому же, во втором варианте намного труднее достичь надежности хранения данных.
Поэтому большинство операционных систем (не только UNIX) в явной или неявной форме используют первый вариант взаимодействия с файловой системой. Для этого в Linux используются операция «монтирования» и обратная ей «демонтирования» файловой системы. Подробную информацию см. в гл. 5.
Поскольку в операционной системе Linux используется единое связанное дерево каталогов, то, в отличие от DOS/Windows, не существует такого понятия файловой системы, как диск. Все дисковые устройства (файловые системы) интегрируются в дереве каталогов в так называемые точки монтирования, в качестве которых выступают обычные каталоги. Причем, если до монтирования в этом каталоге содержались какие-то файлы, то они становятся недоступны до тех пор, пока вы не смонтируете эту файловую систему. Для операции монтирования/демонтирования используются две команды mount и umount.
Команда mount принимает несколько параметров, из которых обязательными являются всего два. Первый их них – файл устройства, соответствующий диску или разделу, на котором расположена файловая система, или его псевдоним (к примеру – CD-ROM, floppy). Вторым параметром является имя каталога, к которому будет монтироваться система. Например, mount /dev/hda1 /mnt.
Помимо обязательных параметров можно задавать тип монтируемой файловой системы (при отсутствии этого параметра команда пытается самостоятельно определить ее тип), режим доступа, используемую в именах файлов кодировку и некоторые другие параметры.