Лекция №8

Лекция 8. Администрирование устройств (на примере запоминающих устройств).

Для упрощения администрирования устройств, несмотря на большое разнообразие соответствующего им периферийного оборудования и запоминающих устройств, в ASTRA LINUX SE заданы всего два их типа:

  • Символьные — любые периферийные и запоминающие устройства, обмен данными с которыми ведётся посимвольно (побайтно). К таким устройствам относятся, например, принтер, сканер, мышь, клавиатура, монитор;
  • Блочные — периферийные устройства, обмен данными с которыми ведётся блоками (последовательностями байт), размер которых зависит от устройства. Например, при хранении данных на жёстких дисках блоками являются секторы (каждый сектор имеет длину 512 байт).

В операционных системах семейства Linux и в том числе, и в ASTRA LINUX SE устройствам соответствуют файлы специального типа. Задание устройств файлами позволило не определять для них отдельных элементов МРОСЛ ДП-модели, а представлять их сущностями.

Презентация. Развитие семейства ДП-моделей логического управления доступом в компьютерных системах.

Уделим некоторое внимание файлов в операционных системах семейства Linux.

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

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

Виды файлов

Большинство файлов просто файлы, называемые обычными файлами; они содержат обычные данные, например, текстовые файлы, исполняемые файлы (или программы), файлы ввода или вывода программ и т.д.

В Linux существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:

  • обычный файл;
  • каталог;
  • специальный файл устройства;
  • именованный канал или FIFO;
  • символическая связь (ссылки);
  • сокет.

Обычный файл

Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, исполняемые программы и т. п.

Каталог

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

На рисунке 1. в качестве примера приведена структура каталога. По существу, каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер индексного дескриптора), а второе определяет имя файла.

Рисунок 1. Структура каталога.

Специальный файл устройства

Специальный файл устройства обеспечивает доступ к физическому устройству. В Linux различают символьные и блочные файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи, в специальный файл устройства.

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

FIFO (First-In-First-Out) или именованный канал

FIFO (First-In-First-Out) или именованный канал — это файл, используемый для передачи данных между процессами.

Связь

Как уже говорилось, метаданные файла не содержат ни имени файла, ни указателя на это имя. Записи в каталогах жестко связывают имена файлов с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе.

Cвязь имени файла с его данными называется жесткой связью. Например, с помощью команды ln мы можем создать еще одно имя (second) файла, на который указывает имя first (рис. 2).

Рисунок 2. Жесткая связь имен с данными файла.

inode файла можно вывести с помощью команды ls –i.

Вывести тип файла можно с помощью команды ls –l.

Опция -l команды ls отображает тип файла, на что указывает первый символ в каждой выводимой строке:

Расшифровка типа файла по первому символу:

  • d — Директория
  • l — Ссылка
  • c — Специальный файл
  • s — Сокет
  • p — Именованный канал
  • b — Блочное устройство

Расшифровка типа файла по цвету:

  • Синий — каталоги
  • Красный — сжатые архивы
  • Белый — текстовые файлы
  • Розовый — изображения
  • Голубой — ссылки
  • Желтый — устройства
  • Зеленый — исполняемые файлы

В метаданных файлов устройств размещается два параметра, используемых ядром ASTRA LINUX SE для задания драйверов устройства:

  • major number — указывает подсистеме ввода-вывода ядра ASTRA LINUX SE на драйвер класса устройств (например, всех жёстких дисков или всех сетевых карт);
  • minor number — указывает подсистеме ввода-вывода ядра ASTRA LINUX SE на драйвер конкретного устройства.

Рисунок 3. Вывод inode файлов, блочного устройства /dev/sda и символьного устройства /dev/tty1.

На рис. 3 показан вывода команды ls -l для файлов устройств /dev/sda (файл, соответствующий интерфейсу контроллера SCSI) и /dev/tty1 (файл, соответствующий первому виртуальному терминалу). При этом первый файл является блочным устройством (через интерфейс SCSI данные передаются блоками — секторами), а второй файл символьным устройством (виртуальная консоль обрабатывает входные данные побайтно).

Очевидно, что для драйверов файловой системы ASTRA LINUX SE и подсистемы безопасности PARSEC файлы устройств представляют собой обычные файловые объекты, к которым применимы как стандартные вызовы по работе с файлами, так и функции назначения им уровней конфиденциальности.

Рисунок 4. Вывод уровней конфиденциальности файлов устройств /dev/sda и /dev/tty1 с помощью команды pdp-ls –М.

На рис.4 представлен вывод команды pdp-ls -М, которая является аналогом команды ls с расширенными функциями отображения меток конфиденциальности файлов и каталогов.

Синтаксис команды pdp-ls.
pdp-ls [опции] [имя файла]

Команда pdp-ls выводит аналогично стандартной команде ls информацию о файлах (по умолчанию — о текущем каталоге). Опции можно изучить в описании команды man pdp-ls.

При этом для файлов символьных (файл /dev/tty1) и блочных (файл /dev/sda) устройств могут быть назначены уровни конфиденциальности и целостности, а также заданы неиерархические категории. Благодаря такому использованию контекста безопасности, для файлов устройств можно задать правила мандатного управления доступом и контроля целостности как для других сущностей ASTRA LINUX SE.

Именование файлов запоминающих устройств в большинстве случаев стандартизовано для всех версий ОС семейства Linux. Важной особенностью ядра ASTRA LINUX SE является то, что запоминающие устройства с интерфейсами АТА (IDE), SATA (eSATA) и USB подключаются к нему не напрямую, а опосредованно, через драйвер запоминающих устройств с интерфейсом SCSI (рис. 5). Связано это с тем, что реализация системы команд интерфейса SCSI существует как поверх интерфейсов ATA/SATA (называется АТАPI — АТА Packet Interface), так и поверх протокола USB (называется MSD Mass Storage Device). Они позволяют подключать в ASTRA LINUX SE любые АТА, SATA и USB запоминающие устройства, не разрабатывая для них собственного протокола обмена, а используя имеющийся в системе драйвер интерфейса SCSI.

Этим устройствам в каталоге /dev соответствуют файлы устройств с именем вида sd* при этом если подключены жёсткие диски, имеющие логическую структуру, то в таком имени будет цифра. Такое именование файлов устройств соответствует стандарту POSIX.

Администратор ASTRA LINUX SE с использованием параметров устройств (major number и minor number) имеет возможность создавать или модифицировать файлы устройств, применительно к конкретному перечню устройств, имеющихся на компьютере.

Однако подобный подход является не совсем удобным в современных условиях, когда разнообразие типов и число конкретных реализаций устройств существенно возросло. Поэтому в версиях ОС семейства Linux с ядром 2.6.x и выше используется специальная система динамического именования устройств — udev, которая использует непосредственно идентификационную информацию самих устройств, а не их абстрактные параметры (major number и minor number).

Рисунок 5. Схема подключения АТА (IDE), SATA и USB устройств

Такую, например, как серийный номер устройства, его положение в SATA-интерфейсе или канале РАТА-шины. Сочетание этой идентификационной информации устройств (и, соответственно, их дисковых разделов) является уникальным, что позволяет динамически формировать уникальные имена для каждого устройства.

Для получения этой идентификационной информации система udev обращается к sysfs — виртуальной файловой системе, экспортирующей на пользовательский уровень из ядра ASTRA LINUX SE данные о имеющихся в системе устройствах и драйверах. Эти данные могут быть получены администратором с помощью графической утилиты «Менеджер устройств» меню «Системные» главного меню (рис. 6).

Система udev обеспечивает все необходимые средства для динамического создания и удаления файлов устройств и символических ссылок в каталоге /dev, её управление осуществляется командой udevadm. При этом система udev позволяет администратору ASTRA LINUX SE изменять порядок её работы, например, путем разработки собственных сценариев интерпретатора bash. Благодаря udev в каталоге /dev находятся файлы только тех устройств, которые в настоящий момент подключены к системе. Если устройство отключается от системы — файл устройства, связанный с ним, удаляется.

Рисунок 6. Окно графической утилиты «Менеджер устройств»

Рисунок 7. Пример сценария инициализации демона udevd

Функциональные возможности системы udev реализуются демоном (системным процессом, работающим в фоновом режиме без непосредственного взаимодействия с пользователем) udevd, порядок старта которого в ASTRA LINUX SE указан в сценарии /etc/init.d/udev (рис. 7). Дополнительные параметры для этого демона могут быть указаны в конфигурационном файле /etc/udev/udev.conf.

Каждому устройству в ASTRA LINUX SE демон udevd присваивает уникальный идентификатор UUID (Universally Unique Identifier). Его использование ядром ASTRA LINUX SE (драйверами устройств) позволяет сделать независимым обработку обращений к устройству от текущих параметров его подключения. Это, например, удобно для переносных устройств вида eSATA жёстких дисков, USB-дисков, интерфейс подключения которых может меняться.

Для получения используемых системой udev идентификаторов и параметров блочных устройств администратор может использовать команду blkid, которая без параметров выведет данные файла /etc/blkid. tab (рис. 8), который обновляется при каждой загрузке ASTRA LINUX SE.

Рисунок 8. Пример вывода команды blkid

В ходе динамического именования устройств система udev также может выполнять ряд дополнительных действий, которые могут быть описаны в виде правил системы udev (udev rules), хранящихся в файлах с расширением .rules в каталоге /etc/udev/rules.d. При этом одному устройству может соответствовать больше одного правила, что позволяет как задавать для каждого устройства разные альтернативные имена, так и определять разные дополнительные действия, ассоциированные с этими именами. Система udev, обнаружив соответствующий устройству файл правил, будет продолжать просматривать каталог /etc/ udev/rules, d в поисках других файлов правил, в которых указан UUID этого устройства.

Благодаря возможности автоматического формирования файлов правил системой udev подсистема безопасности PARSEC в ASTRA LINUX SE реализует следующие дополнительные функции по работе с устройствами:

• регистрация устройств в локальной базе учёта (в случае автономной рабочей станции) или базе учёта, хранящейся в базе учёта контроллера домена ALD (в случае клиента домена ALD);

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

В случае локальной регистрации устройств база учёта создаётся в конфигурационном файле /etc/parsec/PDAC/devices.cfg. Для каждого из зарегистрированных устройств формируется отдельная секция, ограниченная блоком вида «{..}» (рис. 9).

Рисунок 9. Пример формата секции базы учёта устройств подсистемы безопасности PARSEC (на примере регистрации USB Flash памяти)

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

Рисунок 10. Назначение дискреционных прав доступа к устройству flashdisk1

Задание дискреционных права доступа выполняется с использованием графической утилиты «Управление политикой безопасности» (fly-admin-smc) в разделе «Общие».

Рисунок 11. Назначение мандатных уровней конфиденциальности и неиерархических категорий для устройства flashdisk1.

Задание мандатных уровней конфиденциальности и неиерархических категорий выполняется с использованием графической утилиты «Управление политикой безопасности» (fly-admin-smc) в разделе «МРД».

На основе данных из базы учёта устройств подсистема безопасности PARSEC автоматически генерирует файлы правил системы udev, соответствующие учтённым устройствам, в состав которых наряду с базовыми соответствиями (matches) и действиями (actions) добавлено соответствие ENV{IDSERIAL}, включающее действия OWNER, GROUP и MACLABEL, связанные с управлением доступом к устройству. Пример формата такого правила следующий:

ENV{IDSERIAL} == «GenencJJSBJFlash_ Disk-00000000000135-0:0», OWNER= «user-server-14″, GROUP =»users» MACLABEL= «l:0:r-xr-x»

Поскольку в процессе учёта устройства его идентификатор UUID ассоциируется с идентификационными данными учётной записи пользователя, для блочных устройств, требующих выполнения операции монтирования имеющихся на них файловых систем, в ASTRA LINUX SE используется модификация стандартной утилиты mount, допускающей выполнение монтирования не только процессам от имени учётной записи администратора системы, но и имени непривилегированного пользователя, зарегистрированного в текущем сеансе. При этом точкой монтирования файловой системы будет соответствующий каталог в каталоге /home/ user/media данного пользователя, для которой будут применяться соответствующие уровни конфиденциальности и целостности, заданные ключом maclabel в секции, соответствующей устройству в базе учета (в файле devices, cfg).

Для обеспечения такого способа монтирования файловых систем в конфигурационном файле /etc/fstab включены соответствующие записи с ключами owner и group для следующих видов блочных устройств:

• учтённые съёмные устройства для локально зарегистрированных учётных записей пользователей;

• учтённые съёмные устройства для учётных записей пользователей домена ALD;

• файловые системы FAT32, NTFS и EXTFS, расположенные в разделах учтённых несъемных блочных устройств;

• файловые системы UDF и ISO9660, расположенные на учтённых оптических дисках.

Примером записи в файле /etc/fstab для учтённых съёмных устройств локально зарегистрированных пользователей является следующая запись:

/dev/s* /home/*/media/* auto owner, group, noauto, noexec, iocharset = utf8, defaults 0 0.

Таким образом, управление доступом к устройствам в ASTRA LINUX SE может осуществляться способами традиционными для ОС семейства Linux и с применением возможностей, реализованных в ASTRA LINUX SE мандатного управления доступом и контроля целостности.