Вы здесь

Linux. Часть II. Базовая информация о Linux (А. А. Стахнов, 2002)

Часть II

Базовая информация о Linux

Глава 3

Работа в сети. Основные понятия

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

Модели сетевых взаимодействий

Как и любая сложная система, сеть должна опираться на стандарты, без которых невозможно нормальное ее функционирование. За последние двадцать лет было создано множество концепций сетевых взаимодействий, однако наибольшее распространение получили всего две:

• модель взаимодействия открытых систем (OSI);

• модель сетевого взаимодействия TCP/IP.

Терминология

Для облегчения понимания содержимого этой главы приведем основные термины (табл. 3.1).

Таблица 3.1. Базовые сетевые термины

Модель взаимодействия открытых систем (OSI)

Еще в 1983 году Международная организация по стандартизации (International Organization for Standardization, ISO) разработала стандарт взаимодействия открытых систем (Open System Interconnection, OSI).

В результате получилась семиуровневая модель:

1. Физический уровень (Physical Level).

2. Уровень данных (Data Link Level).

3. Сетевой уровень (Network Level).

4. Транспортный уровень (Transport Level).

5. Уровень сессии (Session Level).

6. Уровень представления (Presentation Level).

7. Уровень приложения (Application Level).

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

Каждый уровень модели OSI решает свои задачи, использует сервисы, предоставляемые предыдущим уровнем и, в свою очередь, предоставляет сервисы следующему уровню. Согласно этой модели, уровни не могут перескакивать через соседей, например, транспортный уровень не может непосредственно пользоваться сервисом физического уровня, он обязан пройти по цепочке: Сетевой уровень → Уровень данных → Физический уровень. В табл. 3.2 приведено описание уровней сетевой модели OSI.

Таблица 3.2.
Уровни сетевой модели OSI

На каждом уровне блоки информации имеют собственное название (табл. 3.3).

Таблица 3.3.
Название блока информации в модели

Несмотря на то что OSI является международным стандартом и на его основе правительство США выпустило спецификации GOSIP (Government Open Systems Interconnection Profile, Государственный регламент взаимодействия открытых систем), у производителей программного обеспечения стандарт OSI широкой поддержки не получил. Это объясняется несколькими причинами:

• на длительное время растянувшаяся процедура принятия стандарта;

• его «оторванность» от реалий;

• наличие большого числа уровней трудно для реализации и приводит к потере производительности;

• широчайшее распространение протокола TCP/IP и нежелание потребителей отказываться от него.

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

Модель сетевого взаимодействия TCP/IP

Архитектура семейства протоколов TCP/IP (Transmission Control Protocol / Internet Protocol, протокол управления передачей / интернет-протокол) основана на представлении, что коммуникационная инфраструктура содержит три вида объектов: процессы, хосты и сети.

Основываясь на этих трех объектах, разработчики выбрали четырехуровневую модель:

1. Уровень сетевого интерфейса (Network interface layer).

2. Уровень межсетевого интерфейса – интернета[1] (Internet layer).

3. Транспортный уровень (Host-to-host Layer).

4. Уровень приложений/процессов (Application/process layer).

Сопоставление сетевых моделей OSI и TCP/IP

Нетрудно заметить, что модель TCP/IP отличается от модели OSI. В табл. 3.4 показано соответствие модели TCP/IP и модели OSI.

Таблица 3.4.
Соответствие модели TCP/IP и модели OSI

Как видно из таблицы, уровень сетевого интерфейса сетевой модели TCP/IP соответствует сразу двум уровням сетевой модели OSI, а уровень приложений сетевой модели TCP/IP – трем уровням сетевой модели OSI.

Сетевые протоколы

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

Семейство протоколов TCP/IP

Семейство протоколов TCP/IP включает следующие протоколы:

• межсетевой протокол (Internet Protocol – IP, протокол интернета) – соответствует уровню интернет-модели TCP/IP. Отвечает за передачу данных с одного хоста на другой;

• межсетевой протокол управления сообщениями (Internet Control Message Protocol, ICMP) – отвечает за низкоуровневую поддержку протокола IP, включая подтверждение получения сообщения, сообщения об ошибках и многое другое;

• протокол преобразования адресов (Address Resolution Protocol, ARP) – выполняет преобразование логических сетевых адресов в аппаратные МАС-адреса (Media Access Control). Соответствует уровню сетевого интерфейса;

• протокол пользовательских датаграмм (User Datagram Protocol, UDP) – обеспечивает пересылку данных без проверки с помощью протокола IP;

• протокол управления передачей (Transmission Control Protocol, TCP) – обеспечивает пересылку данных (с созданием сессии и проверкой передачи данных) с помощью протокола IP;

• множество протоколов уровня приложений (FTP, Telnet, IMAP, SMTP и др.).

Схема протоколов семейства TCP/IP представлена в табл. 3.5.

Таблица 3.5.
Схема семейства протоколов TCP/IP

Протоколы межсетевого уровня (интернет)

Протоколы межсетевого уровня (интернет) являются базовыми протоколами в семействе протоколов TCP/IP. Это протоколы TCP/IP, ARP/RARP и ICMP.

Протокол IP

Первоначальный стандарт IP разработан в конце 1970-х годов и не был рассчитан на огромное количество хостов, которое сейчас находится в Интернете. Поэтому в настоящее время утвержден новый стандарт IP (в литературе часто старый стандарт встречается как IPv4, а новый – как IPv6). Однако массового применения он пока не нашел из-за огромного количества программных и аппаратных средств, не способных работать с IPv6, поэтому мы здесь будем рассматривать, в основном, протокол IPv4.

Формат пакета IPv4

Пакет IP состоит из заголовка и поля данных. Заголовок пакета имеет следующие поля:

• поле Номер версии (VERS) указывает версию протокола IP. Сейчас повсеместно используется версия 4 и готовится переход на версию 6;

• поле Длина заголовка (HLEN) пакета IP. Занимает 4 бита и указывает значение длины заголовка, измеренное в 32-битовых словах. Обычно заголовок имеет длину в 20 байт (пять 32-битовых слов), но при увеличении объема служебной информации эта длина может быть увеличена за счет использования дополнительных байтов в поле Резерв (IP OPTIONS);

• поле Тип сервиса (SERVICE TYPE) занимает 1 байт и задает приоритетность пакета и вид критерия выбора маршрута. Первые три бита этого поля образуют подполе приоритета пакета (PRECEDENCE). Приоритет может иметь значения от 0 (нормальный пакет) до 7 (пакет управляющей информации). Поле Тип сервиса содержит также три бита, определяющие критерий выбора маршрута. Установленный бит D (delay) говорит о том, что маршрут должен выбираться для минимизации задержки доставки данного пакета, бит Т – для максимизации пропускной способности, а бит R – для максимизации надежности доставки;

• поле Общая длина (TOTAL LENGTH) занимает 2 байта и указывает общую длину пакета с учетом заголовка и поля данных;

• поле Идентификатор пакета (IDENTIFICATION) занимает 2 байта и используется для распознавания пакетов, образовавшихся путем фрагментации исходного пакета. Все фрагменты должны иметь одинаковое значение этого поля;

• поле Флаги (FLAGS) занимает 3 бита, оно указывает на возможность фрагментации пакета (установленный бит Do not Fragment, DF – запрещает маршрутизатору фрагментировать данный пакет), а также на то, является ли данный пакет промежуточным или последним фрагментом исходного пакета (установленный бит More Fragments, MF – говорит о том, что пакет переносит промежуточный фрагмент);

• поле Смещение фрагмента (FRAGMENT OFFSET) занимает 13 битов, оно используется для указания в байтах смещения поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке/разборке фрагментов пакетов при передачах их между сетями с различными величинами максимальной длины пакета;

• поле Время жизни (TIME ТО LIVE) занимает 1 байт и указывает предельный срок, в течение которого пакет может перемещаться по сети. Время жизни данного пакета измеряется в секундах и задается источником передачи средствами протокола IP. На шлюзах и в других узлах сети по истечении каждой секунды из текущего времени жизни вычитается единица, единица вычитается также при каждой транзитной передаче (даже если не прошла секунда). По истечении времени жизни пакет аннулируется;

• поле Идентификатор протокола верхнего уровня (PROTOCOL) занимает 1 байт и указывает, какому протоколу верхнего уровня принадлежит пакет (например, это могут быть протоколы TCP, UDP или RIP);

• поле Контрольная сумма (HEADER CHECKSUM) занимает 2 байта, она рассчитывается по всему заголовку;

• поля Адрес источника (SOURCE IP ADDRESS) и Адрес назначения (DESTINATION IP ADDRESS) имеют одинаковую длину – 32 бита и одинаковую структуру;

• поле Резерв (IP OPTIONS) является необязательным и используется обычно только при отладке сети. Это поле состоит из нескольких подполей, каждое из которых может быть одного из восьми предопределенных типов. Так как число подпол ей может быть произвольным, то в конце поля Резерв должно быть добавлено несколько байтов для выравнивания заголовка пакета по 32-битной границе.

Максимальная длина поля данных пакета ограничена разрядностью поля, определяющего эту величину, и составляет 65 535 байтов, однако при передаче по сетям различного типа длина пакета выбирается с учетом максимальной длины пакета протокола нижнего уровня, несущего IP-пакеты. В большинстве типов локальных и глобальных сетей определяется такое понятие, как максимальный размер поля данных кадра, в который должен разместить свой пакет протокол IP. Эту величину обычно называют максимальной единицей транспортировки – MTU (Maximum Transfer Unit). К примеру, сети Ethernet имеют значение MTU, равное 1500 байтов, сети FDDI – 4096 байтов.

IP-маршрутизаторы не собирают фрагменты пакетов в более крупные пакеты, даже если на пути встречается сеть, допускающая такое укрупнение. Это связано с тем, что отдельные фрагменты сообщения могут перемещаться в интерсети по различным маршрутам.

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

Протокол IPv6

Основные причины, из-за которых разрабатывался IPv6:

• протокол IPv4 разрабатывался в конце 1970-х годов с учетом существовавшей на тот момент сетевой инфраструктуры и аппаратного обеспечения. С того времени производительность массовых компьютеров увеличилась в десятки раз, и во столько же увеличилась пропускная способность сетей;

• появление приложений, использующих Интернет для передачи данных в реальном времени (звук, видео). Эти приложения чувствительны к задержкам передачи пакетов, т. к. такие задержки приводят к искажению передаваемых в реальном времени речевых сообщений и видеоизображений. Особенностью этих приложений является передача очень больших объемов информации. Однако в IPv4 не предусмотрено специального механизма резервирования полосы пропускания или механизма приоритетов;

• бурное развитие сети Интернет. Наиболее очевидным следствием такого развития стало почти полное истощение адресного пространства Интернета, определяемого полем адреса IP в четыре байта. Конечно, были разработаны механизмы компенсации нехватки адресов, однако это не решает проблему.

Основным предложением по модернизации протокола IP является предложение, разработанное группой IETF (Internet Engineering Task Force, группа решения задач межсетевого взаимодействия). В предложении IETF протокол IPv6 оставляет неизменными основные принципы IPv4. К ним относятся датаграммный метод работы, фрагментация пакетов, разрешение отправителю задавать максимальное число хопов (хоп – количество пересылок пакета от одного сетевого интерфейса к другому, иногда называется временем жизни пакета) для своих пакетов. Однако, в деталях реализации протокола IPv6 имеются существенные отличия от IPv4. Эти отличия коротко можно описать следующим образом:

• использование более длинных адресов. Новый размер адреса – наиболее заметное отличие IPv6 от IPv4. Версия 6 использует 128-битные адреса (16 байтов);

• гибкий формат заголовка. Вместо заголовка с фиксированными полями фиксированного размера (за исключением поля Резерв), IPv6 использует базовый заголовок фиксированного формата плюс набор необязательных заголовков различного формата;

• поддержка резервирования пропускной способности;

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

Адресация в IPv6

Адреса в IPv6 имеют длину 128 битов или 16 байтов. Версия 6 обобщает специальные типы адресов версии 4 в следующих типах адресов:

• Unicast – индивидуальный адрес. Определяет отдельный узел – компьютер или порт маршрутизатора. Пакет должен быть доставлен узлу по кратчайшему маршруту;

• Cluster – адрес кластера. Обозначает группу узлов, которые имеют общий адресный префикс (например, присоединенных к одной физической сети). Пакет должен быть маршрутизирован группе узлов по кратчайшему пути, а затем доставлен только одному из членов группы (например, ближайшему узлу);

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

Как и в версии IPv4, адреса в версии IPv6 делятся на классы, в зависимости от значения нескольких старших битов адреса.

Большая часть классов зарезервирована для будущего применения. Наиболее интересным для практического использования является класс, предназначенный для провайдеров услуг Интернета, названный Provider-Assigned Unicast.

Для обеспечения совместимости со схемой адресации версии IPv4, в версии IPv6 имеется класс адресов, имеющих 0000 0000 в старших битах адреса. Младшие 4 байта адреса этого класса должны содержать адрес IPv4. Маршрутизаторы, поддерживающие обе версии адресов, должны обеспечивать трансляцию при передаче пакета из сети, поддерживающей адресацию IPv4, в сеть, поддерживающую адресацию IPv6, и наоборот.

Сетевые пакеты

Как уже упоминалось, информация по сети передается определенными порциями – пакетами. Причем, на каждом уровне пакет имеет свой размер и структуру. В результате в пакет нижнего уровня вкладывается пакет следующего уровня и т. д. Так же понятно, что чем более высокого уровня пакет, тем меньше информации он может содержать в себе. Размеры пакетов ограничиваются как особенностями аппаратуры, так и требованиями протоколов.

Маршрутизация пакетов

Маршрутизация – механизм передачи пакетов между сетями. При маршрутизации пакетов решается задача, как за наименьшее время, по кратчайшему пути, с минимальной стоимостью доставить пакет. Как правило, в совокупности решить эту задачу не представляется возможным. Поэтому протоколы маршрутизации пакетов должны иметь возможность задавать различные правила и стратегии маршрутизации. К примеру, доставить пакет с максимальной скоростью или с минимальной стоимостью.

Протоколы маршрутизации

Протоколы маршрутизации классифицируются как протокол внутреннего шлюза (Interior Gateway Protocol, IGP) или протокол внешнего шлюза (Exterior Gateway Protocol, EGP).

Протокол внутреннего шлюза управляет маршрутизацией в пределах сети или группы сетей одного владельца, носящей название "автономная система". Внутри автономных систем имеется только список сетей, входящих в автономную систему, и известны точки взаимодействия с внешним миром.

Протокол внешнего шлюза отвечает за маршрутизацию между автономными системами.

На сегодняшний день широко используются следующие протоколы маршрутизации:

• RIP (Routing Information Protocol) – протокол данных маршрутизации. Устаревший протокол. Тем не менее, достаточно широко распространен благодаря утилите routed, которая является стандартной программой для операционных систем UNIX-семейства;

• OSPF (Open Shortest Path First) – протокол выбора кратчайшего пути. Протокол промышленного уровня. Рассчитан на крупные сети со сложной топологией. Более гибок, чем протокол RIP, однако по сравнению с ним сложнее в администрировании;

• IGRP (Interior Gateway Routing Protocol) – протокол маршрутизации внутреннего шлюза. Используется маршрутизаторами CISCO. По всей видимости, скоро сойдет со сцены;

• EGP (Exterior Gateway Protocol) – протокол внешнего шлюза. Старый протокол времен зарождения Интернета. Практически вытеснен протоколом BGP;

• BGP (Border Gateway Protocol) – протокол граничного шлюза. Протокол, в отличие от EGP, поддерживает сложную топологию сети. Имеет возможность широкой настройки стратегии маршрутизации;

• DVMRP (Vector Multicast Routing Protocol) – протокол групповой маршрутизации по вектору расстояния;

• RIP, OSPF и IGRP – внутренние протоколы; EGP и BGP – внешние протоколы.

Адресация в TCP/IP

Каждый компьютер в сети IP имеет адреса трех уровней:

1. Локальный адрес узла, определяемый технологией (например, Ethernet), с помощью которой построена отдельная сеть, в которую входит данный узел. Для узлов, входящих в локальные сети – это МАС-адрес (Media Access Control) сетевого адаптера. МАС-адреса назначаются производителями оборудования и являются (теоретически) уникальными адресами, т. к. управляются централизованно, однако большинство производителей Ethernet-карт предоставляют утилиту для переназначения МАС-адреса. Для всех существующих технологий локальных сетей МАС-адрес имеет 6-байтовый формат: старшие 3 байта – идентификатор фирмы-производителя, а младшие 3 байта назначаются уникальным образом самим производителем.

IP-adpec, состоящий из 4 байтов (стандарт IPv4) или 16 байтов (стандарт IPv6). Этот адрес используется на сетевом уровне. Он назначается администратором во время конфигурирования сети. IP-адрес состоит из двух частей: номера сети и номера узла. Номер сети может быть выбран администратором произвольно либо назначен по рекомендации специального подразделения Интернета (Network Information Center, NIC), если сеть должна работать как составная часть Интернета.

• Символьный идентификатор-имя, например, tosser.mail.ru. Этот адрес назначается администратором и состоит из нескольких частей, например, имени машины, имени фирмы, имени домена. Такой идентификатор-имя используется на прикладном уровне, например, в протоколе FTP.

IP-адрес состоит из двух частей: сетевой части и адреса хоста. На основании сетевой части адреса принимается решение о сетевой маршрутизации. Адрес хоста однозначно определяет сетевое устройство, которое, в большинстве случаев, совпадает с хостом (как обычно, не обойтись без исключений – некоторые компьютеры имеют несколько IP-адресов). Стандартно IP-адреса записываются как десятичные числа (по одному на каждый байт адреса), разделенные точками. К примеру, 192.168.44.2. Однако не все сетевые адреса могут использоваться для назначения их компьютерам. Исключениями являются адреса 0.0.0.0, 127.0.0.1, 255.255.255.255 и некоторые другие. Существует несколько классов сетевых адресов (табл. 3.6).

Таблица 3.6.
Распределение сетевых адресов по классам сетей

* В колонке «Формат» буквы С обозначают сетевую часть адреса, а буквы М – его компьютерную часть.


Выделением IP-адресов занимается служба регистрации информационного центра InterNIC, но если необходимо получить 4–5 IP-адресов, то их вполне может предоставить любой интернет-провайдер. Однако не все адреса предназначены для доступа из Интернета. Существует группа адресов, предназначенных для использования только в локальных сетях. Вот эти адреса:

• 10.0.0.0-10.255.255.255

• 172.16.0.0-172.31.255.255

• 192.168.0.0-192.168.255.255

Как можно видеть, это адреса классов А, В и С соответственно.

Несколько IP-адресов имеют специальное значение:

• адрес, в котором сетевая часть содержит нули, соответствует хосту в локальной сети. Например, 0.0.0.145 соответствует рабочей станции 145 в локальной сети, а адрес 0.0.0.0 – текущему хосту;

• сеть с адресом 127.Х.Х.Х – является фиктивной сетью, не имеющей никаких аппаратных сетевых интерфейсов и состоящей только из локального компьютера. Адрес 127.0.0.1 всегда обозначает текущую машину и имеет символическое имя localhost;

• адрес, содержащий в какой-либо части число 255, обозначает широковещательный адрес. Например, пакет, посланный по адресу 192.168.3.255, будет отослан всем компьютерам в сети 192.168.3, а пакет, посланный по адресу 255.255.255.255, отправится по всем компьютерам Интернета.

Символьные имена Интернета имеют следующую структуру:

Имя_компьютера.домен3уровня.домен2уровня.домен1уровня

Например: www.rambler.ru, www.yahoo.com, www.fklan.com.ua.

Домены первого уровня стандартизированы и состоят из двух или трех букв латинского алфавита. Правда, в последнее время вводятся домены первого уровня, состоящие из более чем трех букв, но пока массового распространения они не получили. Как правило, домен первого уровня может иметь имя типа com, org, net, mil или двухсимвольного названия страны, за которой закреплен домен: ru – Россия, иа – Украина, uk – Великобритания. Относительно имени домена второго уровня строгих правил нет. Для доменов первого уровня типа com домен второго уровня имеет имя компании или фирмы. Для домена страны правило именования несколько другие. В частности, для России имя домена второго уровня определяется покупателем -k примеру, exler.ru, а для Украины имя домена второго уровня – это либо название областного центра (odessa.ua), либо имя типа com, org, net, mil. Похожая ситуация наблюдается и в других странах – Швеция, Франция, Германия имена доменов второго уровня жестко не закрепляют, а Великобритания, Тайвань, Япония – закрепляют.

Протокол адресации ARP/RARP

Не смотря на то, что адресация IP-пакетов осуществляется при помощи IP-адресов, при передаче данных с компьютера на компьютер необходимо использовать аппаратные МАС-адреса (конечно, кроме тех случаев, когда используется соединение типа «точка-точка»). Для определения соответствия аппаратных МАС-адресов IP-адресам служит протокол ARP (Address Resolution Protocol) – протокол преобразования адресов. Он применяется в сетях любых типов, использующих широковещательный режим. ARP можно применять только в пределах одной сети. Однако это не мешает передавать пакет через несколько сетей, просто при прохождении пакетом маршрутизатора, он определяет новый МАС-адрес приемника. Каждый компьютер в сети создает кэш ARP, который содержит последние запросы.

Иногда аппаратные адреса необходимо транслировать в IP-адреса. Для этого используется протокол RARP (Reverse Address Resolution Protocol, обратный протокол преобразования адресов).

Протокол ICMP

Протокол ICMP – межсетевой протокол управления сообщениями (Internet Control Message Protocol) отвечает за низкоуровневую поддержку протокола IP, включая подтверждение получения сообщения, сообщения об ошибках и многое другое. В какой-то мере может использоваться для маршрутизации пакетов.

Протоколы транспортного уровня

Протоколы транспортного уровня базируются на протоколе IP. Существуют два протокола транспортного уровня – TCP и UDP. Эти протоколы обеспечивают передачу данных с заданными характеристиками между источником и приемником данных. Эти протоколы вводят новый уровень адресации, так называемый номер порта (port number), который определяет, какому процессу на хосте передаются данные. Номера портов занимают два байта. Существует список соответствия номеров портов приложениям, определенный в RFC1700 (Request For Comments, запрос для пояснений. Данные документы описывают стандарты протоколов Интернета и их взаимодействия). Некоторые зарезервированные порты приведены в табл. 3.7.

Таблица 3.7.
Сервисы и закрепленные за ними порты

Протокол TCP

Протокол TCP поддерживает надежную передачу данных с предварительным установлением связи между источником и приемником информации. На базе этого протокола реализована большая часть протоколов уровня приложений.

Протокол TCP имеет следующие характеристики, обуславливающие его широкое использование:

• перед началом передачи данных протокол создает канал между источником и приемником информации путем передачи запроса на начало сеанса и получение ответа. По окончании передачи данных сеанс должен быть явно завершен путем передачи соответствующего запроса;

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

• возможность управления потоком данных;

• возможность доставки экстренных данных.

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

Протокол UDP

Протокол UDP обеспечивает логический канал между источником и приемником данных без предварительного установления связи. То есть пакеты, передаваемые по протоколу UDP, не зависят друг от друга, и никакого подтверждения доставки пакета протоколом не предусматривается. Это сильно напоминает бросание бутылки с запиской в море – авось дойдет. Поэтому программы, использующие этот протокол, должны сами организовывать проверку факта доставки информации. Однако благодаря своей простоте протокол UDP может при нормальных условиях передать гораздо больше информации, чем парный ему протокол TCP.

В качестве примера приведем несколько приложений, использующих протокол U DP:

• сервер DNS;

• программы, использующие протокол синхронизации времени NTP;

• программы, использующие протокол удаленной загрузки ВООТР.

Для всех перечисленных программ предполагается, что в случае утери пакета необходимые действия (повторная посылка пакета, выдача сообщения и тому подобные действия) осуществляются самими программами. В случае необходимости гарантированной доставки данных используется протокол TCP.

Протоколы уровня приложений

Последний, четвертый уровень – уровень приложений. К сожалению, почти каждый разработчик программ, использующих протокол уровня приложения, изобретает свой протокол или модифицирует уже существующие. Однако существует некий костяк протоколов, описанный в соответствующих RFC. В зависимости от используемого протокола транспортного уровня протоколы уровня приложений либо полагаются на надежную доставку данных (протокол TCP), либо придумывают свой способ контроля достоверности данных (при использовании протокола UDP). Большая часть протоколов уровня приложений в качестве команд используют обычные английские слова (к примеру, протокол SMTP, HTTP), что значительно упрощает отладку приложений.

Протокол FTP

Протокол передачи файлов. Используется для организации и приема файлов. Позволяет просматривать каталоги и файлы, переименовывать их, удалять и т. п. При пересылке файлов контролирует их целостность. Существует «младший брат» протокола FTP – TFTP, который намного проще в реализации, и, в основном, используется для загрузки информации на бездисковые рабочие станции.

Протокол SMTP

Простой протокол передачи почтовых сообщений. Позволяет работать с электронной почтой. Благодаря тому, что все команды – обычные английские слова, можно с помощью программы telnet подключиться на 25-й порт (SMTP) и передавать соответствующие команды с консоли.

Протокол Telnet

Протокол предназначен для удаленного доступа в систему. К примеру, можно с домашнего компьютера через Интернет зайти на рабочий компьютер и выполнять на нем любые команды (запускать программы, редактировать файлы и т. п.). Используется, в основном, для удаленного администрирования системы. Считается небезопасным с для операционной системы, т. к. при входе в систему логин (имя пользователя) и пароль передаются в открытом виде. Повсеместно заменяется на протокол SSH.

Сетевая файловая система NFS

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

Протокол IPX

IPX (Internet Packet Exchange) – протокол обмена пакетами между сетями, разработан фирмой Novell для своего программного продукта NetWare. Однако начиная с четвертой версии своей операционной системы, фирма Novell стала внедрять поддержку протокола TCP/IP, а в пятой версии протокол TCP/IP стал практически «родным» для NetWare. Тем не менее, протокол IPX еще достаточно широко используется.

Протокол IPX произошел от протокола межсетевых датаграмм IDP (Internet Datagram Protocol), разработанного в научно-исследовательском центре Xerox. Протокол IPX реализует механизм сокетов с негарантированной доставкой датаграмм. Поверх протокола IPX могут функционировать большое количество протоколов, в том числе:

• протокол данных маршрутизации RIP;

• протокол обмена нумерованными пакетами SPX (Sequenced Packet Exchange), гарантированная доставка;

• протокол Echo;

• протокол сообщений об ошибках;

• протокол обмена пакетами PEP (Packet Exchange Protocol);

• протокол сервисных объявлений SAP (Service Advertisement Protocol).

Существует программное обеспечение под Linux (Mars), выполняющее функции сервера NetWare, и программное обеспечение, выступающее клиентом для серверов NetWare. Также есть программное обеспечение под Linux, позволяющее маршрутизировать пакеты IPX.

Протокол AppleTalk

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

Протокол NetBIOS

Протокол, используемый фирмой Microsoft в своих продуктах.

Протокол DECnet

Группа сетевых продуктов фирмы DEC. Поддержка в операционной системе Linux этого протокола существует. Однако маловероятно, что вы столкнетесь с этим протоколом.

Стандарты в Интернете

Стандарты Интернета описаны в документах, известных как RFC (Request For Comments). В табл. 3.8 приведены некоторые стандарты.

Таблица 3.8.
Список основных стандартов Интернета

Ссылки

www.rfc-editor.org – сайт, посвященный RFC.

• Man-страница (встроенная страница помощи) arp – программы, работающей с ARP-таблицей.

Глава 4

Идеология файловой системы

Одним из столпов операционной системы является файловая система. От ее архитектуры, возможностей, надежности во многом зависит работоспособность операционной системы. Помимо продуманной «родной» файловой системы крайне желательно, чтобы была возможность также работать с другими наиболее распространенными файловыми системами (например, FAT 16/FAT 32). В этой главе мы подробно рассмотрим, что нам предлагает Linux.

История развития файловых систем Linux

Первоначально Linux разрабатывался как расширение операционной системы Minix, и было вполне логично взять от предшественника все, что можно, поскольку такое решение позволяло достаточно быстро пройти этап проектирования (ведь все уже и так разработано, надо было только создать соответствующий программный код). На тот момент (начало 1990-х, компьютеры на базе 386-го процессора считались мощными, в порядке вещей был жесткий диск емкостью 120 Мбайт) файловая система Minix была достаточно эффективна. Однако ее архитектурные ограничения (адреса блоков 16-битные, что ставит предел максимального объема файловой системы в 64 Мбайт, каталоги содержат записи с ограниченным размером, имя файла не должно превышать 14 символов) очень скоро вынудили разработчиков задуматься об альтернативной файловой системе. Была разработана «Extended File System» (Ext FS – расширенная файловая система), затем ее сменила в качестве стандартной «Second Extended File System» (Ext2FS – вторая расширенная файловая система). Сегодня практически завершена разработка следующей версии файловой системы Ext3 – с поддержкой журналирования. Существуют также и другие журналируемые файловые системы: ReiserFS (стандарт de-facto журналируемых файловых систем для серверов на базе Linux) и JFS от фирмы IBM. По всей видимости, в ближайший год будет произведен полный перевод Linux на журналируемую файловую систему. Пока же большинство системных администраторов используют файловую систему ReiserFS. Однако достаточно много аналитиков преде казывают большую вероятность использования системы JFS. Аргументы в ее пользу достаточно весомы: имя IBM, отлаженность, хорошая масштабируемость и надежность. Посмотрим, кто победит.

Файл

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

Типы файлов

Поскольку понятие файла применяется к достаточно разнородным вещам (файл как таковой, физические устройства, каталоги и т. п.), поневоле возникает разделение файлов на типы. В Linux существует шесть типов файлов:

• файл;

• каталог;

• файл устройства;

• канал (FIFO, PIPE);

• ссылка (link).

• сокет (Socket).

Файл

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

Каталог

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

Файл устройства

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

Символьный файл устройства используется для небуферизированного обмена данными с устройством – байт за байтом.

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

Канал

Файлы этого типа используются для связи между процессами для передачи данных.

Ссылки

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

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

Сокет

Сокеты предназначены для взаимодействия между процессами. Часто используются для доступа к сети TCP/IP.

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

Файлы в Linux имеют трех владельцев – собственно владельца, группу и прочих пользователей. Существует только один владелец, любое количество членов группы и все остальные, которые не входят в группу. Привилегия владения – одно из ключевых понятий в системе защиты операционной системы Linux.

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

Как правило, права доступа к файлу изменяются от максимальных у владельца файла до минимальных (вплоть до полного отсутствия) у всех остальных. Устанавливать и изменять права доступа к файлу или каталогу могут только два пользователя – владелец файла и администратор системы (пользователь root). Изменить права доступа к файлу можно утилитой chmod.

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

Права доступа к файлу или к каталогу описываются тремя восьмеричными цифрами, самая левая из этой тройки – права владельца, средняя – права группы, правая – права всех остальных. Каждая из этих восьмеричных цифр представляет собой битовую маску из трех битов. Эти биты отвечают за права на (слева направо) чтение, запись и исполнение файла или каталога. Если установлена единица – доступ разрешен, если ноль – запрещен. Таким образом, права доступа к файлу, описанные цифрой 644, означают, что владелец может писать и читать файл, группа и остальные пользователи – только читать.

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

• Чтение:

– возможность просмотра содержимого файла;

– возможность чтения каталога.

• Запись:

– возможность добавить или изменить файл;

– возможность удалять или перемещать файлы в каталоге.

• Выполнение:

– возможность запуска программы;

– возможность поиска в каталоге в комбинации с правом чтения.

Узнать о том, какие права доступа установлены к файлам и каталогам, можно, используя команду ls. Ниже приведен результат выполнения команды Is -l

В первой колонке представлены права доступа к файлу, во второй – количество жестких ссылок, в третьей – имя владельца файла, в четвертой – название группы владельца файла, в пятой – дата создания и в шестой – имя файла или каталога. В первой строке листинга вы видите ссылку на test (буква 1 в правах доступа обозначает, что это не файл, а ссылка). В последней строке листинга вы видите каталог t (буква d в правах доступа обозначает, что это каталог (directory), а не файл). Остальные строки листинга – файлы. В правах доступа вы видите десять символов. Первый слева – тип файла (файл, ссылка, каталог и т. п.). Следующие три символа – права доступа владельца файла: rwx – чтение, запись, исполняемость файла. Следующие символы, соответственно, права доступа группы и права доступа прочих.

Модификаторы прав доступа

Как у любого правила, в жесткой системе прав доступа существуют свои исключения. Это так называемые дополнительные атрибуты файла:

• 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.

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

Существует специальный файл /etc/fstab, содержащий список файловых систем и их параметры монтирования. Этот файл используется ядром операционной системы при ее старте. Ядро пытается смонтировать файловые системы, описанные в этом файле, с соответствующими параметрами монтирования.

После того как отпала необходимость в использовании файловой системы, ее можно демонтировать. Чаще всего это необходимо при работе с дискетами или дисками CD-ROM (один диск необходимо заменить на другой). Для демонтирования используется команда umount. В качестве параметра указывается файл устройства или точка монтирования. Например, umount /dev/hda1 или umount /mnt/floppy.

По окончании работы со сменным носителем информации его обязательно необходимо отмонтировать. Поскольку ядро Linux осуществляет «отложенную» запись на диск, то к тому моменту, когда вы извлечете из дисковода дискету без отмонтирования, информация еще может быть не записана на диск из системного буфера.

Для выполнения операций монтирования и демонтирования требуется наличие прав доступа root. Но при работе на своем персональном компьютере это усложняет процедуру. Есть несколько вариантов решения такой проблемы:

• в KDE или GNOME обычному пользователю можно монтировать CD-ROM и дисковод;

• осуществить временный вход в систему пользователем root, монтировать/демонтировать диск и немедленно выйти;

• применить программу sudo, позволяющую пользователям, для которых это разрешено, использовать команду mount;

• применить пакет mtools, используемый для работы с файловой системой MS-DOS;

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

Поддержка работоспособности файловых систем

Даже самая надежная файловая система не обладает стопроцентной надежностью. Рано или поздно целостность файловой системы нарушается. Это может произойти от некорректного завершения работы системы (нажата кнопка Reset, перебои в электропитании) или повреждения носителя информации. Для проверки и восстановления целостности файловой системы используется команда fsck. Она при загрузке системы запускается автоматически, поэтому возможные неполадки будут обнаружены (и может быть исправлены) перед использованием файловой системы.

Полная проверка файловой системы на современных жестких дисках может занять достаточно большое время, поэтому существуют некоторые способы избежать таких проверок. В файловой системе Ext2 существует специальный флаг, расположенный в суперблоке, который используется для выявления корректности демонтирования файловой системы при последнем выключении системы. Так же можно принудительно отключить проверку файловой системы, создав файл /etc/fastboot.

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

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

Команда fsck должна использоваться только для демонтированных систем (за исключением корневой файловой системы, которая проверяется смонтированной в режиме read-only), т. к. при ее работе используется прямой доступ к диску, и информация о внесении каких-либо изменений в файловую систему может быть недоступна операционной системе, что, обычно, приводит к нарушению ее работы.

Так же рекомендуется использовать утилиту badblocks. При ее выполнении выводится список номеров найденных на диске поврежденных блоков. Этот список может быть использован программой fsck для внесения изменений в структуру файловой системы.

Виртуальная файловая система (VFS)

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

Принцип функционирования

Ядро системы Linux содержит в себе программный код-посредник, выполняющий функции виртуальной файловой системы. Этот код обрабатывает запросы к файлам и вызывает необходимые функции соответствующей файловой системы для выполнения операции ввода/вывода. Такой механизм работы с файлами используется для упрощения объединения и использования нескольких типов файловых систем.

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

Структура VFS

Виртуальная файловая система содержит набор функций, которые должна поддерживать любая файловая система (создание, удаление, модификация файла, каталога и тому подобные действия). Этот интерфейс состоит из функций, которые оперируют тремя типами объектов: файловые системы, индексные дескрипторы и открытые файлы.

Виртуальная файловая система использует таблицу, в которой во время компиляции ядра сохраняется информация о всех типах поддерживаемых файловых систем. Запись в таблице содержит тип файловой системы и указатель на соответствующую функцию монтирования файловой системы. При монтировании файловой системы эта функция возвращает виртуальной файловой системе дескриптор, который используется в дальнейшем в операциях ввода/вывода.

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

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

Файловая система Ext2

Файловая система Ext2 (The Second Extended File System, вторая расширенная файловая система) была разработана с целью устранения ошибок, обнаруженных в предыдущей системе Ext (Extended File System), и снятия некоторых ее ограничений.

Стандартные возможности Ext2

Файловая система Ext2 поддерживает стандартные типы файлов UNIX:

• файлы;

• каталоги;

• файлы устройств;

• символические ссылки.

Ext2 может управлять файловыми системами, установленными на очень больших дисковых разделах. Система поддерживает имена файлов большой длины – до 255 символов. Ext2 резервирует некоторое количество блоков для пользователя root, что позволяет системному администратору избежать нехватки объема жесткого диска при его заполнении другими пользователями.

Дополнительные возможности Ext2

В файловой системе Ext2 может использоваться синхронная модификация данных. Она применяется для достижения высокой плотности записи информации, но одновременно приводит к ухудшению производительности.

Ext2 позволяет при создании файловой системы выбрать размер логического блока. Он может быть определен в 1024, 2048 или 4096 байтов. Организация блоков большого объема приводит к ускорению операций чтения/записи, но при этом дисковое пространство используется нерационально.

Ext2 позволяет применять ускоренные символические ссылки. В этом случае блоки данных файловой системы не используются. Имя файла назначения хранится не в блоке данных, а в самом индексном дескрипторе. Такая структура позволяет сохранить дисковое пространство и ускорить обработку символических ссылок. Максимальная длина имени файла в ускоренной ссылке равна 60 символам.

Ext2 использует отдельное поле в суперблоке для индикации состояния файловой системы. Если файловая система смонтирована в режиме read/write, то ее состояние устанавливается как Not Clean. Если же она демонтирована или смонтирована заново в режиме read-only, то ее состояние устанавливается в Clean. Во время загрузки операционной системы и проверки состояния файловой системы эта информация используется для определения необходимости такой проверки. Ядро также помещает в это поле некоторые ошибки. При определении ядром какого-либо несоответствия файловая система помечается как Erroneous.

Длительное отсутствие проверки может привести к проблемам функционирования файловой системы, поэтому Ext2 включает в себя два метода для организации принудительной проверки. В суперблоке содержится счетчик монтирования системы. Этот счетчик увеличивается каждый раз, когда система монтируется в режиме read/write. Если его значение достигает максимального значения (оно также хранится в суперблоке), то запускается программа проверки файловой системы, даже если ее состояние является Clean. В суперблоке также хранится последнее время проверки, и максимальный интервал между проверками. При превышении этого интервала также запускается программа проверки файловой системы.

В системе Ext2 имеются утилиты для ее настройки. Так, программа tune2fs используется для определения порядка действий при обнаружении ошибки. Может быть выполнено одно из трех следующих действий:

• продолжение выполнения;

• монтирование файловой системы заново в режиме read-only;

• перезагрузка системы для проверки файловой системы.

Кроме того, эта программа позволяет задать:

• максимальное значение числа монтирований файловой системы;

• максимальный интервал между проверками файловой системы;

• количество логических блоков, зарезервированных для пользователя root.

Физическая структура Ext2

Как и во многих файловых системах, в Ext2 существует загрузочная область. На первичном разделе (primary, в терминологии программы Fdisk фирмы Microsoft) она содержит загрузочную запись – фрагмент кода, который инициирует процесс загрузки операционной системы при запуске. Все остальное пространство раздела делится на блоки стандартного размера. Блок может иметь размер 1, 2 или 4 Кбайт. Блок является минимальной логической единицей дискового пространства (в других операционных системах такой блок называют кластером). Выделение места файлам осуществляется целыми блоками.

Блоки, в свою очередь, объединяются в группы блоков. Каждая группа блоков имеет одинаковое строение. Рассмотрим подробнее их структуру (рис. 4.1).

Рис. 4.1. Структура группы блоков


Суперблок (Superblock) Описание группы блоков (Group Descriptors) Битовая карта блока (Block Bitmap) Битовая карта индексного дескриптора (Inode Bitmap) Таблица индексных дескрипторов (Inode Table) Блоки данных

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

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

• SHORT – короткое целое – 1 байт;

• USHORT – беззнаковое короткое целое – 1 байт;

• LONG – длинное целое – 4 байта;

• ULONG – беззнаковое длинное целое – 4 байта.

Структура суперблока приведена в приложении I (табл. П1.1).

После суперблока следует являющееся массивом описание группы блоков (Group Descriptors). Структура описания группы блоков приведена в приложении I (табл. П1.2).

Битовая карта блоков (Block Bitmap) – это структура, каждый бит которой показывает, отведен ли соответствующий ему блок какому-либо файлу. Если бит равен 1, то блок занят. Эта карта служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл.

Битовая карта индексных дескрипторов (Inode Bitmap) выполняет аналогичную функцию по отношению к таблице индексных дескрипторов – показывает, какие дескрипторы заняты.

Индексные дескрипторы файлов

Индексные дескрипторы файлов содержат информацию о файлах группы блоков. Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером – индексом файла. Отсюда следует, что число файлов, которые могут быть созданы в файловой системе, ограничено числом индексных дескрипторов. Структура индексного дескриптора файла приведена в приложении 1 (табл. П1.3).

Поле типа и прав доступа к файлу (i_mode) представляет собой слово, каждый бит которого служит флагом. Список флагов, описывающих тип и права доступа к файлу, приведен в приложении 1 (табл. П1.4).

Некоторые индексные дескрипторы используются файловой системой в специальных целях. Описание специальных индексных дескрипторов приведено в приложении 1 (табл. П1.5).

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

Система адресации данных

Система адресации данных позволяет находить нужный файл среди блоков на диске. В Ext2 система адресации реализуется полем i_block индексного дескриптора файла.

Поле i_block в индексном дескрипторе файла представляет собой массив из 15 адресов блоков. Первые 12 адресов в этом массиве (EXT2 NDIR BLOCKS [12]) представляют собой прямые ссылки на номера блоков, в которых хранятся данные из файла. Следующий адрес в этом массиве является косвенной ссылкой (адресом блока), в котором хранится список адресов следующих блоков с данными из этого файла. Следующий адрес в поле i_block индексного дескриптора указывает на блок двойной косвенной адресации (double indirect block). Этот блок содержит список адресов блоков, которые, в свою очередь, содержат списки адресов следующих блоков данных того файла, который задается индексным дескриптором.

Последний адрес в поле i_block индексного дескриптора задает адрес блока тройной косвенной адресации, т. е. блока со списком адресов блоков, которые являются блоками двойной косвенной адресации.

Оптимизация производительности

Файловая система Ext2 при операциях ввода/вывода использует буферизацию данных. При считывании блока информации ядро выдает запрос операции ввода/вывода на несколько расположенных рядом блоков. Такие oneрации сильно ускоряют извлечение данных при последовательном считывании файлов.

При занесении данных в файл файловая система Ext2, записывая новый блок, заранее размещает рядом до 8 смежных блоков. Такой метод позволяет размещать файлы в смежных блоках, что ускоряет их чтение и дает возможность достичь высокой производительности системы.

Средства управления файловой системы Ext2

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

• mke2fs – применяется для установки дискового раздела, содержащего пустую файловую систему Ext2;

• tune2fs – используется для настройки параметров файловой системы;

• e2fsck – предназначена для устранения несоответствий в файловой системе;

• ext2ed – применяется для правки файловой системы;

• debugfs – предназначена для определения и установки состояния файловой системы.

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

Если e2fsck находит блоки данных, номера которых содержатся более чем в одном дескрипторе, то запускаются проходы с IB по 1D для устранения несоответствия: либо путем увеличения разделяемых блоков, либо удалением одного или более дескрипторов.

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

В третьем проходе проверяются связи каталогов. Программа e2fsck проверяет пути каждого каталога по направлению к корневому. В этом же проходе проверяется запись ".." для каждого каталога. Все каталоги, не имеющие связи с корневым каталогом, помещаются в каталог /lost+found.

В четвертом проходе e2fsck проверяет счетчики ссылок для каждого индексного дескриптора. Все неудаленные файлы с нулевым счетчиком ссылок также помещаются в каталог /lost+found.

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

Журналируемые файловые системы

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

В журналируемых файловых системах для решения этой проблемы применяют транзакции, которые хорошо известны всем программистам баз данных. Идея транзакции достаточно проста – существует набор связанных операций, называемых транзакцией, и эта группа операций является атомарной (неделимой). Таким образом, транзакция является успешной (завершенной) в том случае, если все операции, составляющие транзакцию, завершились успешно. Но это еще не все. Система ведет журнал, в котором отражаются все действия с данными и все изменения данных протоколируются. В случае сбоя на основании журнала можно вернуть систему в безошибочное состояние.

Основное отличие транзакций из области баз данных от транзакций, применяемых в журналируемых файловых системах, состоит в том, что в базах данных в журнале сохраняются изменяемые данные и вся управляющая информация, а в файловых системах – только мета-данные: индексные дескрипторы изменяемых файлов, битовые карты распределения свободных блоков и свободных индексных дескрипторов.

Файловая система Ext3

По большому счету, файловая система Ext3 не является новой файловой системой. Это похоже на ситуацию с файловой системой FAT 16/FAT 32 – они совместимы, но проблема решена экстенсивным путем. Было необходимо срочно создать журналируемую файловую систему. Если начинать с нуля – долго и накладно, тогда сделали для Ext2 несколько десятков специальных функций и назвали все это Ext3 – получился непонятный гибрид.

Вроде бы добавились журналирующие функции – но не в том объеме, в каком хотелось. И узкие места Ext2 остались: оптимизация использования дискового пространства, ограничение на размер файла и т. п. Пока же общественность (fido7.ru.linux) более склоняется к использованию других журналируемых файловых систем.

Файловая система ReiserFS

Кроме проблемы быстрого восстановления после сбоев, в файловой системе Ext2 имеется еще несколько нерешенных проблем. Из самых основных – нерациональное использование дискового пространства, ограничение на размер файла, неоптимальный поиск.

Поскольку в файловой системе используется простой связный список, то время поиска информации линейно зависит от длины списка. Таким образом, чем длиннее список (к примеру, файлов в каталоге), тем дольше идет поиск необходимого элемента.

В системе ReiserFS применяются так называемые "сбалансированные деревья" или "B+Trees", время поиска в которых пропорционально не количеству объектов, а логарифму этого числа. В сбалансированном дереве все ветви имеют одинаковую длину. ReiserFS использует сбалансированные деревья для хранения всех объектов файловой системы: файлов в каталогах, данных о свободных блоках и т. д. Это позволяет существенно повысить производительность обращения к дискам.

Кроме того, система ReiserFS является журналируемой, т. е. в ней решена проблема быстрого восстановления после сбоев. Решена в ReiserFS и проблема с ограничением на размер файла. По всей видимости, именно эта файловая журналируемая система в ближайшее время станет стандартом de-facto для многих дистрибутивов Linux.

Ссылки

e2fsprogs.sourceforge.net – утилиты файловой системы Ext2.

ftp.uk.linux.org/pub/linux/sct/fs/ji's/ – код и документация Ext3.

www.atni.csiro.au/~rgooch/linux/docs/vfs.txt – обзор виртуальной файловой системы.

www.osp.ru/pcworld/2000/02/064.htm – Виктор Хименко. Файлы, файлы, файлы. Обзор файловых систем.

www.linux-ve.chat.ru – виртуальная библиотека Linux.

Глава 5

Дерево каталогов Linux

Эта глава полностью посвящена структуре и размещению каталогов и файлов в Linux. Поскольку для различных дистрибутивов структура может слегка отличаться, для определенности будем рассматривать дистрибутив Red Hat 7.1.

Для того чтобы ориентироваться в Linux, необходимо хорошо представлять себе структуру и размещение каталогов и файлов. Эти параметры для UNIX и Linux описаны в документе "Filesystem Hierarchy Standard – Version 2.2 final", Filesystem Hierarchy Standard Group, edited by Rusty Russell and Daniel Quinlan, редакция от May 23, 2001. Дальнейший текст в основном базируется на этом документе.

Все файлы можно разделить по двум признакам – доступность (shareable, разделяемость) на сетевом уровне и изменяемость/неизменность содержимого.

Соответственно, для каждого признака можно ввести свои понятия:

разделяемые данные – те, которые могут использовать несколько хостов одновременно, т. е. данные, доступные для других хостов через сеть;

неразделяемые данные – как правило, специфичные для каждого хоста, недоступные через сеть для других хостов;

статические данные – включают системные файлы, библиотеки, документацию и другое, что не изменяется без вмешательства администратора;

динамические (переменные) данные – все то, что может изменяться пользователем.

Эти признаки взаимно ортогональны, в табл. 5.1 приведены некоторые каталоги, соответствующие этим признакам.

Таблица 5.1.
Признаки данных и каталоги

Как видно из таблицы, каталог /usr – статический разделяемый, а каталог /var/lock – динамический неразделяемый. По этим признакам можно распределить все каталоги в файловой системе, о чем и будет упоминаться в соответствующих разделах. Однако такое четкое распределение не всегда наблюдается в современных UNIX-системах. Как правило, эта проблема возникает из-за поддержки совместимости со старым программным обеспечением. Каталоги, не удовлетворяющие четкому разделению, будут упомянуты особо.

Иерархия каталогов Linux

В табл. 5.2 приведена иерархия каталогов первого уровня.

Таблица 5.2.
Каталоги первого уровня операционной системы Linux

Рассмотрим подробнее иерархию каталогов.

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

Точка монтирования всей файловой системы. Играет исключительно важную роль в процессе «жизнедеятельности» операционной системы. Для загрузки системы необходимо, чтобы в корневом разделе (корневой раздел в Linux – это аналог диска С: для DOS/Windows – только на него возможно установить операционную систему. И корневой раздел является точкой монтирования корневого каталога) находились утилиты и конфигурационные файлы, необходимые для монтирования других файловых систем. Кроме того, в корневой файловой системе должны присутствовать утилиты, необходимые для создания, восстановления или ремонта файловых систем, а также для административного восстановления (backup) системы с ленты, CD-ROM, дискет и тому подобных носителей. Каталоги /usr, /opt, /var спроектированы так, что они могут размещаться на файловых системах, отличных от корневой. В дистрибутиве Slackware в корневом каталоге по умолчанию находится ядро операционной системы (что на больших винчестерах иногда вызывало определенные проблемы), в дистрибутиве Red Hat ядро операционной системы перенесено в каталог /boot.

Имеется несколько причин, по которым корневую файловую систему рекомендуется делать минимально возможного размера:

• это позволяет монтировать файловую систему с очень маленьких носителей информации (например дискет);

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

• у маленького по объему корневого каталога меньше вероятность пострадать при крахе системы.

Каталог /bin

Содержит важные исполняемые файлы, которые используются всеми (в том числе и администратором системы) пользователями. Кроме того, в каталоге /bin должны находиться исполняемые файлы, необходимые для функционирования системы в однопользовательском режиме (single mode). Он также может содержать исполняемые файлы, которые напрямую используются в скриптах. Каталог /bin не должен содержать подкаталогов. Исполняемые файлы, от которых напрямую не зависит функционирование системы, рекомендуется размещать во вторичной иерархии – в каталоге /usr/bin.

Таким образом, в каталоге /bin должны находиться следующие файлы или символические ссылки на команды:

• cat – утилита, выдающая на стандартное устройство вывода объединенные файлы;

• chgrp – утилита, позволяющая изменить группу владельца файла;

• chmod – утилита, изменяющая права доступа к файлу;

• chown – утилита, изменяющая владельца и группу файла;

• ср – утилита, позволяющая копировать файлы и каталоги;

• date – утилита, позволяющая вывести или установить системные дату и время;

• dd – утилита, позволяющая конвертировать и копировать файл;

• df – утилита, показывающая использование дискового пространства;

• dmesg – утилита, выводящая или управляющая буфером сообщения ядра;

• echo – утилита, отображающая строку текста;

• false – утилита возвращает значение "Не успешно" (unsuccessfully);

• hostname – утилита, показывающая или устанавливающая имя хоста;

• kill – утилита, посылающая управляющие сигналы процессам;

• In – утилита, создающая линки (связи, ссылки) между файлами;

• login – утилита, начинающая сессию в системе;

• Is – утилита, показывающая содержимое каталога;

• mkdir – утилита, позволяющая создавать каталог;

• mknod – утилита, создающая блочные или символьные специальные файлы;

• more – утилита, позволяющая просматривать текстовые файлы постранично;

• mount – утилита, монтирующая файловую систему;

• mv – утилита, перемещающая или переименовывающая файлы;

• ps – утилита, показывающая статус процессов;

• pwd – утилита, выводящая имя текущего рабочего каталога;

• rm – утилита, удаляющая файлы или каталоги;

• rmdir – утилита, удаляющая пустой каталог;

• sed – редактор;

• setserial – программа настройки последовательных портов;

• sh – командная оболочка Bourne;

• sty – утилита, изменяющая и выводящая установки терминальной линии;

• su – утилита, изменяющая пользовательский идентификатор (user ID);

• sync – утилита, сбрасывающая (flush) буферы файловой системы;

• true – утилита возвращает значение «Успешно» (successfully);

• umount – утилита, размонтирующая файловые системы;

• uname – утилита, выводящая системную информацию.

Если в системе не используется утилита sh, то sh должна быть ссылкой на используемую системой командную оболочку.

Если установлены соответствующие пакеты, в каталоге /bin могут присутствовать следующие программы или символические ссылки:

• csh – командная оболочка С shell;

• ed – редактор;

• tar – архивная утилита;

• cpio – архивная утилита;

• gzip – утилита архивации файлов GNU;

• gunzip – утилита разархивации файлов GNU;

• zcat – утилита разархивации файлов GNU;

• netstat – утилита сетевой статистики;

• ping – ICMP-сетевая утилита.

Каталог /boot

Содержит все, что требуется для процесса загрузки, исключая файлы конфигурации. В каталоге /boot находятся данные, используемые ядром до того, как оно начинает исполнять программы пользовательского режима (user-mode). В этом же каталоге может находиться сохраненный сектор master boot и другие специфичные данные. Конфигурационные файлы загрузчика находятся в каталоге /etc. Ядро операционной системы, как было сказано выше, должно находиться или в корневом каталоге (дистрибутив Slackware), или в каталоге /boot (дистрибутив Red Hat). В некоторых случаях приходится создавать отдельный раздел /boot, находящийся до 1024 цилиндра. Как правило, это зависит от версии загрузчика и от BIOS компьютера. Таким образом, в каталоге /boot версии Linux Red Hat 7.1 должны находиться следующие файлы или символические ссылки на команды:


boot.0300

boot.b

chain.b

kernel.h®

kernel.h-2.4.3

map

message

module-info@

module-info-2.4.2–2

os2_d.b

System.map@

System.map-2.4.2-2

vmlinux-2.4.2–2*

vmlinuz®

vmlinuz-2.4.2–2.

Каталог /dev

Содержит файлы устройств или специальные файлы. Создание в каталоге /dev файлов устройств осуществляется с помощью предназначенной для этого утилиты makedev, находящейся в нем же. Также в этом каталоге может находиться утилита makedev.local, предназначенная для создания локальных устройств. Все устройства и специальные файлы описываются в документе Linux Allocated Devices, который поставляется вместе с исходным кодом ядра (см. также соответствующую справочную документацию).

Каталог /etc

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

Замечание

Везде, где далее упоминается "… должны присутствовать в каталоге /etc", надо учитывать, что соответствующие файлы и каталоги появляются в /etc только в том случае, если соответствующие программы установлены в системе.

В каталоге /etc также должны присутствовать следующие каталоги:

• /cron.d – конфигурация сгоп;

• /cron.daily – ежедневно выполняемые операции сгоп и anacron;

• /cron.hourly – ежечасно выполняемые операции сгоп и anacron;

• /cron.monthly – ежемесячно выполняемые операции сгоп и anacron;

• /cron.weekly – еженедельно выполняемые операции сгоп и anacron;

• /default – в этом каталоге находятся файлы, используемые пакетом shadow при создании новой учетной записи пользователя в системе;

• /gnome – в этом каталоге содержится разнообразная конфигурационная информация, касающаяся графической системы GNOME и ее приложений. Информацию о конфигурации GNOME и ее приложений смотрите в руководстве пользователя GNOME;

• /kde – в этом каталоге содержится разнообразная конфигурационная информация, касающаяся графической системы KDE и ее приложений. Информацию о конфигурации KDE и ее приложений смотрите в руководстве пользователя KDE;

• /locale – настройки локали;

• /opt – в этом каталоге хранятся конфигурационные файлы для пакетов, устанавливаемых в каталоге /opt. Для каждого пакета создается (точно так же, как и в /opt) свой каталог, с точно таким же именем, как и в /opt, в котором содержатся конфигурационные файлы для этого пакета;

• /ррр – в этом каталоге находятся конфигурационные файлы и скрипты, необходимые для функционирования демона pppd. В частности, здесь находятся скрипты, поднимающие и опускающие РРР-интерфейс с поддержкой IPv4 и IPv6, скрипты аутентификации и конфигурационные файлы;

• /rc.d – каталог скриптов, используемых при старте системы;

• samba – этом каталоге находятся конфигурационные файлы для сервера Samba. Список файлов, которые обычно содержатся в этом каталоге:

– lmhosts – содержит список хостов и соответствующих им адресов;

– smbpasswd – содержит пароли пользователей сервера Samba;

– smbusers – файл, предназначенный для хранения конфигурационных файлов пользователей, которым разрешен доступ к ресурсам Samba;

– smb.conf – главный конфигурационный файл сервера;

• /sgml – содержит конфигурации для SGML и XML;

• /skel – содержит конфигурационные файлы для вновь создаваемых пользователей. В этом каталоге хранятся конфигурационные файлы пользователя, которые при создании нового пользователя в системе копируются в его домашний каталог. Это очень удобно с точки зрения системного администратора – один раз настроив окружение пользователя, мы для вновь созданных пользователей получаем уже готовое окружение. Мы можем определить язык, раскладку клавиатуры, палитру, редактор по умолчанию, графическую оболочку и многое-многое другое. Не следует думать, что этим мы ограничиваем пользователя – наоборот – он получает настроенное рабочее место. Если ему что-то не подходит – он может внести необходимые ему изменения в свои конфигурационные файлы. Таким образом, мы получаем с одной стороны – единообразие, а с другой – возможности для индивидуализации рабочего места.

Обычно в этом каталоге находятся следующие файлы:


.bashrc

.bash_profile

.bash_logout

.inputrc

.less

.xinitrc

.Xdefaults


Однако ничто не мешает удалить или, наоборот, добавить файлы в этот каталог;

• /sysconfig – каталог, содержащий файлы системной конфигурации;

• /X11 – содержит конфигурационные файлы для X Window System;

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

• aliases – этот файл определяет для программы доставки почтовых сообщений, куда посылать письма, приходящие на адрес псевдопользователей. Большей частью они перенаправляются пользователю root;

• anacrontab – конфигурационный файл для программы anacron. В этом файле задаются периодичность выполнения команд (ежедневно, еженедельно, ежемесячно) и каталоги, в которых содержатся исполняемые модули (как правило – скрипты).

Программа anacron использует те же каталоги с исполняемыми модулями, что и сгоп. Однако программа anacron применяется в системах, которые не предназначены для постоянного функционирования (24 часа в сутки). Программа просматривает список задач и запускает текущие в списке или просроченные;

• at.allow – с помощью этого файла задается список пользователей, которым разрешено пользоваться командой at;

• at.deny – с помощью этого файла задается список пользователей, которым запрещено пользоваться командой at;

• bashrc – конфигурационный файл, определяющий поведение bash. Как правило, не требует ручного вмешательства;

• cron.allow – с помощью этого файла задается список пользователей, которым разрешено пользоваться демоном сгоп;

• cron.deny – с помощью этого файла задается список пользователей, которым запрещено пользоваться демоном сгоп;

• crontab – конфигурационный файл для программы сгоп. В этом файле задаются периодичность выполнения команд (ежечасно, ежедневно, еженедельно, ежемесячно) и каталоги, в которых содержатся исполняемые модули (как правило – скрипты);

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

• cron.allow – программа сгоп может разрешать или запрещать конкретным пользователем свое использование. Для разрешения конкретным пользователям использования программы сгоп необходимо вписать имена соответствующих пользователей в файл cron.allow;

• cron.deny – конфигурационный файл для программы сгоп, с помощью которого можно запретить использование программы сгоп конкретным пользователям или всем пользователям кроме тех, которые записаны в файле cron.allow;

• dir_colors – этот файл определяет, каким цветом будет выводить на экран файлы команда is. Для разных типов файлов можно определить свой цвет;

• exports – файл, содержащий управление доступом к файловой системе NFS;

• fstab – файл, содержащий таблицу, в которой определены монтируемые устройства (файлы драйверов), соответствующие им точки монтирования, тип файловой системы и параметры монтирования. Пример файла fstab приведен ниже:

• ftpusers – конфигурационный файл FTP-демона, содержащий список пользователей FTP с их правами доступа;

• gateways – файл, содержащий список шлюзов (gateways) для демона маршрутизации routed;

• gettydefs – файл, содержащий терминальные установки, используемые getty;

• group – в этом файле содержатся пользователи и группы, членами которых они являются. Файл состоит из строк, в каждой строке – 4 поля:

– имя пользователя;

– пароль;

– GUID – числовой идентификатор группы;

– список имен групп, к которым принадлежит пользователь.

Пример файла group приведен ниже:

root:х:0:root

bin:х:1:root,bin,daemon

daemon:x:2:root,bin,daemon

sys:x:3:root,bin,adm

adm:x:4:root,adm,daemon

wheel:x:10:root

mail:x:12:mail

news:x:13:news

nobody:x:99:

users:x:100:

slocate:x:21:

floppy:х:19:

utmp:х:22:

mysql:х:27:

alst:х:500:


• gshadow – содержимое этого файла напоминает содержимое файла group.

root:::root

bin:::root,bin,daemon

daemon:::root,bin,daemon

sys:::root,bin, adm

adm:::root,adm,daemon

disk:::root

lp:::daemon,lp

mem:::

kmem:::

wheel:::root

utmp:x::

mailnull:x::

mysql:x::

alst:!::


• host.conf – конфигурационный файл, который определяет порядок разрешения символического имени хоста в IP-адресе. Обычно содержимое этого файла имеет вид:

order hosts,bind

• hostname – в этом файле содержится (обычно) имя хоста. Текущее имя хоста можно посмотреть с помощью команды hostname;

• hosts – содержимое этого файла используется для определения пары IP-адрес – символическое имя хоста. Очень рекомендуется, чтобы в этом файле была следующая запись:

127.0.0.1localhost.localdomain localhost

Замечание

Если она отсутствует – возникнут проблемы, связанные с сетью (в частности, возможно зависание программы sendmail).

• hosts.allow – файл, определяющий, каким хостам разрешено подключаться к системе;

• hosts.deny – файл, определяющий, каким хостам запрещено подключаться к системе;

• hosts.equiv – файл, содержащий список доверенных хостов для rlogin, rsh, rep;

• hosts.lpd – файл, содержащий список доверенных хостов для lpd;

• inetd.conf – конфигурационный файл для демона inetd;

• inittab – конфигурационный файл для процесса init. Этот файл описывает, как процесс init должен настроить операционную систему в соответствующем уровне исполнения. Более подробную информацию см. в гл. 6.

• issue – в этом файле содержится сообщение, выдаваемое системой до приглашения "login:".

Для дистрибутива Red Hat Linux 7.2 этот файл содержит следующее сообщение:


Red Hat Linux release 7.2 (Enigma)

Kernel \r on an \m


• ld.so.conf – файл, содержащий список каталогов для поиска разделяемых библиотек;

• lilo.conf – конфигурационный файл для загрузчика lilo. Более подробную информацию об этом конфигурационном файле вы можете прочитать в справочных страницах man.

Внимание!

После внесения изменений в файл lilo.conf необходимо выполнить команду lilo. В противном случае внесенные в конфигурационный файл изменения не воспримутся загрузчиком.

Пример файла lilo.conf приведен ниже:


prompt

timeout=50

default=DOS

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

message=/boot/message

lba32

image=/boot/vmlinuz-2.4.7-10 label=linux

initrd=/boot/initrd-2.4.7-10.img

read-only

root=/dev/hda7

other=/dev/hda2

optional

label=DOS


• localtime – бинарный файл, определяющий временную зону компьютера, правила перехода на летнее/зимнее время и другую информацию, связанную с местной временной зоной. Обычно берется один из файлов, находящихся в каталоге /usr/share/zoneinfo/, и копируется в каталог /etc с именем localtime. В том случае, если для вас не существует готового файла localtime, его можно создать с помощью утилиты zic;

• man.config – конфигурационный файл, содержащий настройки для справочных страниц man;

• modules.conf – файл, используемый операционной системой для загрузки по требованию программ некоторых модулей ядра. Обычно используется для модулей звуковых карт и плат TV-тюнеров, или в том случае, если в системе установлено несколько сетевых плат;

• motd – сообщение, выдаваемое системой после входа пользователя в систему;

• mtab – файл, содержащий динамическую информацию о файловых системах;

• mtools.conf – конфигурационный файл для mtools;

• networks – файл, содержащий статическую информацию о сетевых именах;

• passwd – файл содержит информацию обо всех пользователях системы, в том числе и псевдопользователях, которые необходимы для правильного функционирования некоторых сервисов. Типичный файл passwd имеет следующий вид:


root:х:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nolog

news:x:9:13:news:/var/spool/news:

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:х:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

mailnull:x:47:47::/var/spool/mqueue:/dev/null

rpm:x:37:37::/var/lib/rpm:/bin/bash

xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false

ntp:x:38:38::/etc/ntp:/sbin/nologin

rpc:x:32:32:Portmapper RPC user:/:/bin/false

gdm:x:42:42::/var/gdm:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

nscd:x:28:28:NSCD Daemon:/:/bin/false

ident:x:98:98:pident user:/:/sbin/nologin

radvd:x:75:75:radvd user:/:/bin/false

apache:x:4 8:4 8:Apache:/var/www:/bin/false

squid:x:23:23::/var/spool/squid:/dev/nul1

pcap:x:77:77::/var/arpwatch:/bin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

vasya:x:500:500::/home/vasya:/bin/bash


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

– имя пользователя;

– пароль пользователя; в современных системах не используется (стоит символ х). Для хранения пароля используется файл shadow;

– UID – числовой идентификатор пользователя;

– GID – числовой идентификатор группы пользователя;

– поле описания пользователя (телефон, адрес и т. п.). Обычно не используется;

– домашний каталог пользователя;

– командный интерпретатор, используемый пользователем.

Никто, кроме пользователя root, не имеет доступа на запись в файл passwd. Таким образом, если вам необходимо запретить пользователю регистрироваться в системе, можно назначить ему командный интерпретатор /sbin/nologin или /dev/null. Другой способ – отредактировать пароль (смотри shadow).

• printcap – база совместимых принтеров для lpd;

• profile – общесистемный конфигурационный файл для оболочки sh. Все настройки, добавленные в этот файл, отражаются на переменные окружения вашей системы;

• protocols – файл, содержащий список IP-протоколов;

• resolv.conf – конфигурационный файл Resolver;

• грс – файл, содержащий RPC-список протоколов;

• securetty – управление доступом к консоли для администратора (root);

• sendmail.cf – конфигурационный файл программы sendmail – программы передачи почтовых сообщений;

• services – файл, содержащий имена портов для сетевых сервисов. Описание сервиса представляет собой строку, которая содержит четыре поля:

– имя сервиса;

– номер порта/протокол;

– псевдонимы;

– комментарии.

Пример записи в файле services:

• shadow – файл паролей, по структуре напоминающий passwd. Содержит полный список пользователей системы. Интересны первые два поля – имя пользователя и хэш пароля. Алгоритм создания хэша пароля работает таким образом, что никогда первым символом хэша не может быть символ *. Таким образом, для того, чтобы запретить пользователю вход в систему, достаточно первым символом пароля поставить символ *.

Пример файла shadow:

• shells – файл, содержащий пути для установленных командных оболочек;

• sysctl.conf – файл конфигурации ядра операционной системы. Позволяет производить настройку различных свойств ядра – сетевых и не только.

Пример файла sysctl.conf:


# Disables packet forwarding

net.ipv4.ip_forward = 0

# Enables source route verification

net.ipv4.conf.default.rp_filter = 1

# Disables the magic-sysrq key

kernel.sysrq = 0


• syslog.conf – конфигурационный файл для демона syslogd.

/etc/rc.d – инициализационные скрипты системы

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

• /init.d – каталог содержит управляющие скрипты для загружаемых при старте операционной системы сервисов;

• /rcO.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на нулевой уровень выполнения;

• /rcl.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на первый уровень выполнения;

• /rc2.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на второй уровень выполнения;

• /rc3.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на третий уровень выполнения;

• /rc4.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на четвертый уровень выполнения;

• /rc5.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на пятый уровень выполнения;

• /rc6.d – каталог содержит скрипты, отвечающие за запуск и остановку сервисов при переходе на шестой уровень выполнения;

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

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

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

/etc/rc.d/init.d – управляющие скрипты для сервисов

Каталог содержит управляющие скрипты для сервисов, которые выполняются (или могут выполняться) при старте системы или при переходе с одного уровня выполнения на другой.

Если соответствующие сервисы установлены, в этом каталоге находятся следующие файлы:


anacron

apmd

arpwatch

atd

autofs

crond

functions

gpm

halt

httpd

identd

ipchains

iptables

isdn

kdcrotate

keytable

killall

kudzu

lpd

netfs

network

nfs

nfslock

nscd

portmap

pppoe

random

awdevices

rhnsd

rstatd

rusersd

rwalld

rwhod

send mail

single

snmpd

sshd

syslog

tux

windows

xfs

xinetd

ypbind

ppasswdd

ypserv


/etc/rc.d/rc0.d … rc6.d – каталоги для соответствующего уровня выполнения

Эти каталоги содержат стартовые и стоповые скрипты сервисов, используемых операционной системой при переходе в нужный уровень выполнения. К примеру, каталог /rc3.d конкретного компьютера может содержать следующие файлы:


К03rhnsd

K15httpd

K20nfs

K20rstatd

K20rusersd

K20rwalld

K20rwhod

K34yppasswdd

K45arpwatch

K50snmpd

K50tux

K65identd

K73ypbind

K74nscd

K74ypserv

S05kudzu

S08ipchains

S08iptables

S10network

S12syslog

S13portmap

S14nfslock

S17keytable

S20random

S25netfs

S26apmd

S28autofs

S40atd

S55sshd

S56rawdevices

S56xinetd

S60lpd

S80isdn

S80pppoe

S80sendmail

S85gpm

S90crond

S90xfs

S95anacron

S99local

S99windows/etc/sysconfig – конфигурационные файлы для процессов

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

В частности, в нем находятся следующие файлы и каталоги:

• /etc/sysconfig/apm-scripts – в этом каталоге находятся скрипты, относящиеся к демону apmd, предназначенному для управления питанием системы. Чаще всего используется в системах, установленных на ноутбуках;

• /etc/sysconfig/cbq – каталог для конфигурирования программы cbq – так называемого траффик-шейпера. Принцип действия – искусственно ограничивает полосу пропускания сетевого устройства с заданной шириной канала;

• /etc/sysconfig/console – каталог для конфигурирования консоли. В частности, /etc/sysconfig/console/default.kmap – файл раскладки клавиатуры по умолчанию;

• /etc/sysconfig/network/ – каталог хранит различные настройки сети, а также скрипты, отвечающие за старт и останов сетевой подсистемы;

• /etc/sysconfig/clock – файл используется для конфигурирования системных часов (временная зона, формат хранения времени, переход на летнее/зимнее время и т. п.);

• /etc/sysconfig/il8n/ – каталог содержит файлы, связанные с локализацией системы, в частности, шрифты.

В самом каталоге /sysconfig находятся следующие файлы:

• apmd – этот файл отвечает за конфигурацию демона управления электропитанием;

• arpwatch – файл, отвечающий за конфигурацию программы arpwatch;

• clock – файл, отвечающий за конфигурацию часовой зоны и некоторых других параметров. Например:


ZONE="Europe/Kiev"

UTC=false

ARC=false


Как видно из примера, системные часы не используют универсальное представление времени, а система находится в Киевском часовом поясе (Гринвич + 2 часа);

• gpm – файл предназначен для конфигурирования gpm – программы, осуществляющей поддержку мыши в консоли;

• harddisks – этот файл предназначен для тонкой настройки производительности жестких дисков. Так же смотрите описание программы hdparm;

• hwconf – этот файл содержит базу обнаруженных и сконфигурированных устройств программой kudzu. Например:


-

class: OTHER

bus: PCI

detached: 0

driver: agpgart

desc: "Intel Corporation|82815 815 Chipset Host Bridge and Memory Controller Hub"

vendorld: 8086

device1d: 1130

subVendorld: 8086

subDeviceld: 1130

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: unknown

desc: "Intel Corporation|unknown device 8086:1131"

vendorld: 8086

device1d: 1131

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: unknown

desc: "Intel Corporation|82820 820 (Camino 2) Chipset PCI"

vendorld: 8086

device1d: 244e

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: i810-tco

desc: "Intel Corporation|82820 820 (Camino 2) Chipset ISA Bridge (ICH2)"

vendorld: 8086

device1d: 2440

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: unknown

desc: "Intel Corporation|82820 820 (Camino 2) Chipset IDE U100"

vendorld: 8086

device1d: 244b

subVendorld: 8086

subDeviceld: 244b

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: unknown

desc: "Intel Corporation|82820 820 (Camino 2) Chipset SMBus"

vendorld: 8086

device1d: 2443

subVendorld: 8086

subDeviceld: 244b

pciType: 1

class: OTHER

bus: PCI

detached: 0

driver: btaudio

desc: "Brooktree Corporation|Bt878"

vendorld: 109e

device1d: 0878

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: OTHER

bus: USB

detached: 0

driver: unknown

desc: "USB UHCI Root Hub"

usbclass: 9

usbsubclass: 0

usbprotocol: 0

usbbus: 1

usblevel: 0

usbport: 0

vendorld: 0000

device1d: 0000

productrevision: unknown

class: OTHER

bus: USB

detached: 0

driver: unknown

desc: "USB UHCI Root Hub"

usbclass: 9

usbsubclass: 0

usbprotocol: 0

usbbus: 2

usblevel: 0

usbport: 0

vendorld: 0000

device1d: 0000

productrevision: unknown

class: MOUSE

bus: PSAUX

detached: 0

device: psaux

driver: generic3ps/2

desc: "Generic 3 Button Mouse (PS/2)"

class: AUDIO

bus: PCI

detached: 0

driver: i810_audio

desc: "Intel Corporation182801BA/BAM (ICH2) AC 97 Audio Controller"

vendorld: 8086

device1d: 2445

subVendorld: 11d4

subDeviceld: 5360

pciType: 1

class: CDROM

bus: IDE

detached: 0

device: hdc

driver: ignore

desc: "SONY CD-ROM CDU4821"

class: VIDEO

bus: PCI

detached: 0

driver: Card: NVIDIA GeForce 2 MX (generic)

desc: "nVidia Corporation|NV11"

vendorld: 10de

device1d: 0110

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: FLOPPY

bus: MISC

detached: 0

device: fd0

driver: unknown

desc: "3.5" 1.44MB floppy drive"

class: HD

bus: IDE

detached: 0

device: hda

driver: ignore

desc: "FUJITSU MPG3409AT E"

physical: 79428/16/63

logical: 4983/255/63

class: CAPTURE

bus: PCI

detached: 0

driver: bttv

desc: "Brooktree Corporation|Bt878"

vendorld: 109e

device1d: 036е

subVendorld: 0000

subDeviceld: 0000

pciType: 1

class: USB

bus: PCI

detached: 0

driver: usb-uhci

desc: "Intel Corporation|82820 820 (Camino 2) Chipset USB (Hub A)"

vendorld: 8086

device1d: 2442

subVendorld: 8086

subDeviceld: 244b

pciType: 1

class: USB

bus: PCI

detached: 0

driver: usb-uhci

desc: "Intel Corporation|82820 820 (Camino 2) Chipset USB (Hub B)"

vendorld: 8086

device1d: 2444

subVendorld: 8086

subDeviceld: 244b

pciType: 1

class: MODEM

bus: SERIAL

detached: 1

device: ttyS0

driver: ignore

desc: "IDC|5620 IDC 5614BXL VR PnP"

pnpmfr: IDC

pnpmodel: 5620

pnpcompat: *PNPC107

pnpdesc: IDC 5614BXL VR PnP


• i18n – файл, отвечающий за локализацию системы. Название расшифровывается как internationalization – между i и n восемнадцать букв. Пример:


LANG="ru_RU.коi8r"

SUPPORTED="ru_RU.koi8r:ru_RU:ru"

SYSFONT="cyr-sun16"

SYSFONTACM="коi8-u"


В примере определено, что у нас русская локаль с кодировкой KOI8-R, использующая шрифт cyr-sunl6;

• identd – конфигурационный файл демона identd, реализующего поддержку протокола идентификации пользователя;

• keyboard – этот файл, находящийся в каталоге /etc/sysconfig, отвечает за конфигурирование клавиатуры. Пример файла keyboard приведен ниже.

Для настройки клавиатуры (раскладки и скорости повтора) необходимо произвести следующие операции:

– определиться с раскладкой клавиатуры (описания раскладки клавиатуры находятся в каталоге /usr/lib/kbd/keytables/ в файлах с расширением map);

– внести изменения в файл keyboard таким образом, чтобы он содержал строку: KEYTABLE="/usr/lib/kbd/keytabies/zzz.map", где zzz – имя расклад ки клавиатуры;

– для настройки скорости повтора нажатия и время задержки необходимо добавить следующую строку в файл /etc/rc.d/rc.sysinit или, если у вас Caldera, к /etc/rc.d/rc.boot: /sbin/kbdrate -s -r 16 -d 500 – где -r 16 – количество символов, a -d 500 – задержка в миллисекундах.

Пример стандартного файла:


KEYBOARDTYPE="pc"

КЕYTABLE="ru"


• kudzu – файл, отвечающий за поведение программы kudzu при перезапуске системы – как она будет себя вести при обнаружении нового оборудования;

• mouse – этот файл определяет параметры мыши, эмуляцию нажатия третьей кнопки и файл устройства. Пример файла mouse:


MOUSETYPE="imps2"

XMOUSETYPE=" imps/2"

FULLNAME="Microsoft IntelliMouse (PS/2)"

XEMU3=no

DEVICE=/dev/mouse


• sendmail – файл, определяющий как стартует программа sendmail и через сколько времени отправляется почтовая очередь;

• squid – этот файл отвечает за настройки программы squid;

• syslog – этот файл отвечает за настройку демона syslog;

• xinetd – этот файл отвечает за настройку демона xinetd, который в Linux заменяет inetd.

/etc/X11 – конфигурационные файлы для X Window System

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

• Xconfig – конфигурационный файл для ранних версий XFree86;

• XF86Config – конфигурационный файл для XFree86 версии 3 и 4;

• Xmodmap – глобальный файл клавиатурных раскладок X11.

/etc/sgml – конфигурационные файлы для SGML и XML

Каталог содержит базовые конфигурационные файлы для определения параметров высокого уровня для SGML или XML. Файлы с именами *.conf обозначают базовые конфигурационные файлы. Файлы с именами *.cat – DTD-специфичные централизированные каталоги, содержащие руководства по всем остальным каталогам.

Каталог /home – пользовательские домашние каталоги

В каталоге находятся домашние каталоги пользователей. Как правило, каждый пользователь каталога в небольшой системе имеет свой домашний каталог, и имя домашнего совпадает с именем (login) пользователя. Например, у пользователя frozzy домашний каталог – /home/frozzy. Типичное содержимое каталога пользователя, только что зарегистрированного в системе, включает следующие файлы и каталоги:

/cedit

/Desktop

/.dia

/.gimp-1.2

/.gnome

/.gnome-desktop

/.gnome_private

/.gnp

/kde

/.mc

/.netscape

/nsmail

/.sawfish

.bash_history

.bash_logout

.bash_profile

.bashrc

.ICEauthority

.screenrc


Как можно видеть, это, в основном, конфигурационные файлы программ, установленных в операционной системе.

Каталог /lib – важные разделяемые библиотеки и модули ядра

Каталог содержит разделяемые библиотеки, необходимые для загрузки системы и запуска команд в корневой файловой системе, т. е. только для файлов, находящихся в каталоге /bin и /sbin. По меньшей мере одна из групп файлов должна находиться в каталоге /lib:

• libc.so.* – динамически подключаемая (линкуемая) библиотека С;

• Id* – линкер/загрузчик (linker/loader) времени выполнения.

Следующие каталоги также должны находится в каталоге /lib:

• /modules – загружаемые модули ядра;

• /security – модули РАМ.

Каталог /lost+found

Каталог, который обязательно должен присутствовать на каждом разделе. (Если, к примеру, винчестер разбит на три раздела, которые монтируются в /, /home, /var, то в корневой файловой системе, в катал ore /home и в каталоге /var будет присутствовать /lost+found.) Назначение этого каталога достаточно очевидно – при аварийных ситуациях возможна потеря информации. Специальная утилита chkfsk восстанавливает (если, конечно, это возможно) утерянную информацию. Однако иногда невозможно достоверно определить принадлежность восстановленных данных какому-нибудь определенному файлу. В этом случае восстановленные данные помещаются в каталог /lost+found.

Каталог /misc – точка монтирования автоматически монтируемых устройств

Каталог предназначен для использования в качестве точки монтирования дискет и CD-ROM программой automount.

Каталог /mnt – точка монтирования для временно монтируемой файловой системы

Каталог предназначен для того, чтобы системный администратор мог временно монтировать файловую систему (например, дискету или CD-ROM). В различных дистрибутивах Linux в каталоге /mnt могут находиться каталоги, являющиеся точками монтирования дискет, разделов жесткого диска, CD-ROM и т. п. Например, в только что установленном Red Hat 7.1 в каталоге /mnt находятся каталоги /cdrom и /floppy, которые являются точками монтирования для CD-ROM и дискет. Если в каталоге /mnt находятся какие-то файлы и к каталогу /mnt монтируется некий раздел, то файлы, находящиеся в каталоге /mnt, становятся недоступны до тех пор, пока не размонтируют раздел, подмонтированный к /mnt.

Каталог /opt – дополнительные программные пакеты

Каталог зарезервирован для инсталляции дополнительного программного обеспечения. Пакет, который устанавливается в каталог /opt, должен хранить свои неизменяемые файлы в каталоге /орt/<имя_пакета>, где <имя_пакета> – имя устанавливаемого пакета. Структура поддерева каталогов в каталоге <имя_пакета>:

• /bin;

• /doc;

• /lib;

• /man

И т. д.

Исполняемые модули надо размещать в каталоге /bin, а если пакет включает в себя документацию, ее надо сохранить в каталоге /doc. При наличии страниц справочной системы, размещать их в /орt/<имя_пакета>/man и использовать подструктуру каталогов, как в /usr/share/man. Специфичные для конкретного пакета библиотеки размещаются в /орt/<имя_пакета>/lib и т. д. Файлы пакета, которые могут изменяться, должны быть установлены в каталоге /var/opt. Хост-специфичные конфигурационные файлы должны быть установлены в /etc/opt.

Каталог /proc – точка монтирования виртуальной файловой системы procfs

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

Структура каталогов в /proc:

• /1 – подкаталог процесса, имя каталога соответствует номеру PID-процесса;

• /2;

• /3;

• /4;

• /5;

• /6;

• /7;

• /384;

• /389;

• /403;

• /418;

• /490;

• /5196;

• /bus – каталог содержит специфичную информацию, касающуюся шин (PCI, ISA);

• /driver – здесь сгруппированы различные драйверы;

• /fs – каталог содержит параметры файловых систем;

• /ide – каталог содержит информацию о IDE-подсистеме;

• /irq – маски для управления аппаратными прерываниями;

• /net – сетевая информация;

• /sys – системная информация;

• /sysvipc – информация о SysVIPC-ресурсах (msg, sem, shm);

• /tty – информация о TTY-драйверах;

• apm – расширенная информация управлением питанием;

• cmdline – командная строка ядра операционной системы;

• cpuinfo – информация о микропроцессоре;

• devices – доступные устройства (блочные и символьные);

• dma – используемые каналы DMA;

• execdomains – используемые домены;

• fb – Frame Buffer-устройства;

• filesystems – поддерживаемые файловые системы;

• interrupts – используемые прерывания;

• iomem – карта памяти;

• ioports – используемые порты ввода/вывода;

• isapnp – информация о ISA-устройствах;

• kcore – образ ядра операционной системы;

• kmsg – сообщения ядра;

• ksyms – таблица символов ядра;

• loadavg – средняя загрузка за последние 1, 5 и 15 минут;

• locks – «защелки» ядра;

• mdstat– файл, сообщающий о конфигурации RAID-массива системы;

• meminfo – информация о памяти;

• misc – различная информация, не попавшая не в одну из категорий;

• modules – список загруженных модулей;

• mounts – смонтированные файловые системы;

• mtrr – управление использованием памяти;

• partitions – список разделов, известных системе;

• pci – устаревшая информация о PCI-шине (см. /proc/bus/pci/);

• its – часы реального времени;

• scsi – информация о SCSI-устройствах;

• self – символическая ссылка к каталогу процесса, пытающегося получить информацию из /proc;

• slabinfo – информация о Slab;

• stat – разнообразная статистика;

• swaps – использование разделов и файлов подкачки;

• uptime – время работы системы без перезагрузки;

• version – версия ядра;

• video – BTTV-информация о видеоресурсах.

/proc/№процесса_PID-процесса

Каталог имеет имя, соответствующее номеру PID-процесса. Каждый процесс в системе имеет соответствующий ему каталог в /proc. В этом каталоге обязательно находятся следующие файлы:

• cmdline – файл, содержащий аргументы командной строки процесса;

• cpu – текущий и последний использовавшийся микропроцессор (только для мультипроцессорных систем);

• /cwd – ссылка на текущий рабочий каталог;

• environ – содержит значения переменных окружения;

• ехе – ссылка на исполняемый файл этого процесса;

• /fd – каталог, содержащий все файловые дескрипторы данного процесса;

• maps – карты памяти исполняемых и библиотечных файлов;

• mem – память, занятая этим процессом;

• /root – ссылка на корневой каталог этого процесса;

• stat – статус процесса;

• statm – информация об использовании процессом памяти;

• status – статус процесса в форме, воспринимаемой человеком.

/proc/ide – IDE-устройства, установленные в системе

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

/proc/net – сетевая информация

В этом каталоге содержится информация, относящаяся к сети. Следующие файлы являются общими как для протокола IPv4, так и IPv6:

• агр – ARP-таблица ядра;

• dev – сетевые устройства со своей статистикой;

• dev_stat – статус сетевого устройства;

• ip_fwchains – связи цепочки Firewall;

• ip_fwnames – имена цепочек Firewall;

• /ip_masq – каталог содержит таблицы маскарадинга[2];

• ip_masquerade – главная таблица маскарадинга;

• netstat – сетевая статистика;

• raw – статистика сетевых устройств;

• route – таблица маршрутизации ядра;

• /грс – каталог содержит RPC-информацию;

• rt_cache – кэш маршрутизации;

• snmp – данные SNMP;

• sockstat – статистика сокетов;

• tcp – ТСР-сокеты;

• tr_rif – таблица маршрутизации Token ring RIF;

• udp – UDP-сокеты;

• unix – UNIX-сокеты;

• wireless – данные беспроводного интерфейса (Wavelan и т. п.);

• igmp – IP-адреса, которые хост принимает;

• psched – параметры глобального администратора пакетов;

• netlink – список PF_NETLINK-сокетов;

• ip_mr_vifs – список виртуальных интерфейсов;

• ip_mr_cache – список кэша маршрутизации.

Файлы, приведенные ниже, используются протоколом IPv6:

• udp6 – UDP-сокеты (IPv6);

• tcp6 – ТСР-сокеты (IPv6);

• raw6 – статистика устройств (IPv6);

• igmp6 – IP-адреса, принимаемые хостом (IPv6);

• if_inet6 – список IРv6-интерфейсных адресов;

• ipv6_route – таблица маршрутизации для IPv6;

• rt6_stats – общая статистика IРv6-таблиц маршрутизации;

• sockstat6 – статистика сокетов (IPv6);

• snmp6 – SNMP-данные (IPv6).

/proc/parport – параллельные порты

Каталог содержит информацию обо всех параллельных портах, установленных в системе.

/proc/scsi – SCSI-устройства, установленные в системе

Если в компьютере установлены SCSI-устройства, то должен существовать каталог /proc/scsi. В нем содержится информация обо всех установленных в системе SCSI-устройствах, в том числе используемые драйверы.

/proc/sys – системная информация

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

/proc/sys/dev – информация, специфическая для устройств

На сегодняшний день поддерживаются только устройства CD-ROM.

/proc/sys/fs – данные файловой системы

Каталог содержит различную информацию о файловой системе.

/proc/sys/kerriel – основные параметры ядра операционной системы

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

/proc/sys/net – сетевая «начинка»

Этот каталог содержит интерфейс по управлению различными сетевыми протоколами. В этом каталоге могут находиться следующие подкаталоги:

• /802 – протокол Е802;

• /appletalk – Appletalk-протокол;

• /ах25 – АХ25;

• /bridge – Bridging;

• /core – основные параметры;

• /decnet – DEC-net;

• /ethernet – Ethernet-протокол;

• /ipv4 – IP версии 4;

• /ipv6 – IP версии 6;

• /ipx – IPX;

• /netrom – NET/ROM;

• /rose – X.25 PLP layer;

• /token-ring – IBM token ring;

• /unix – UNIX domain sockets;

• x25 – протокол X.25.

/proc/sys/sunrpc – удаленные вызовы процедур

Каталог содержит файлы, которые разрешают или запрещают отладку удаленно вызываемых процедур.

/proc/sys/vm – виртуальная подсистема памяти

Файлы в этом каталоге используются для настройки виртуальной подсистемы памяти ядра Linux.

/proc/tty – терминалы

Здесь содержится информация о доступных и используемых терминалах.

Каталог /root – домашний каталог для пользователя root (администратора)

Существенных причин для вынесения домашнего каталога /root в корневой уровень нет. Однако существует практика выделения отдельного раздела для каталога /home, который при аварийных ситуациях может не подмонтироваться. По-видимому, по этой причине каталог /root вынесли на корневой уровень.

Каталог /sbin – системные исполняемые файлы

Утилиты, используемые для системного администрирования, и другие, используемые только администратором (пользователем root), хранятся в каталогах /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки, восстановления, починки системы в добавление к файлам, находящимся в каталоге /bin. Программы, используемые после монтирования файловых систем, в основном помещаются в каталог /usr/sbin. Административные программы, используемые только на локальной системе, помещаются в каталог /usr/local/sbin.

Обычные пользователи не должны иметь доступа в каталоги /sbin. Если обычный пользователь (не администратор) может запускать команду, она должна находиться в одном из каталогов /bin. В каталоге /sbin должны присутствовать следующие файлы:

• badblocks – утилита для проверки жестких дисков;

• ctrlaltdel – программа для перезагрузки операционной системы;

• dumpe2fs – утилита для работы с файловой системой;

• e2fsck – утилита для проверки файловой системы;

• fastboot – утилита, перезагружающая систему без проверки дисков;

• fasthalt – утилита, останавливающая систему без проверки дисков;

• fdisk – утилита, позволяющая производить различные действия с таблицей разделов (создавать, редактировать, удалять раздел и т. д.);

• fsck – утилита, проверяющая и восстанавливающая файловую систему;

• fsck.* – утилита, проверяющая и восстанавливающая файловую специфичную систему (например, Ext2);

• getty – программа getty;

• halt – команда, останавливающая систему;

• ifconfig – утилита конфигурации сетевого интерфейса;

• init – Init-процесс;

• kbdrate – утилита для настройки клавиатуры;

• lilo – загрузчик операционной системы;

• mke2fs – утилита создания файловой системы;

• mkfs – команда, создающая файловую систему;

• mkfs.* – команда, создающая специфичную файловую систему;

• mkswap – команда, устанавливающая своп-область;

• reboot – команда, перегружающая систему;

• route – утилита для таблицы IP-маршрутизации;

• swapon – утилита, разрешающая свопирование;

• swapoff – утилита, запрещающая свопирование;

• tune2fs – утилита тонкой настройки файловой системы;

• update – демон, периодически сбрасывающий буферы файловой системы.

Каталог /tmp – временные файлы

Каталог должен быть доступен для программ, которые нуждаются во временных файлах.

При загрузке системы файлы, находящиеся в /tmp, должны удаляться (по крайней мере, рекомендуется).

Каталог /usr – иерархия

Каталог /usr – это вторая основная секция файловой системы, разделяемая, только для чтения. В каталоге /usr должны находиться следующие каталоги:

• /bin – содержит большую часть утилит, используемых пользователем;

• /include – файлы заголовков, включаемых в С-программы;

• /lib – библиотеки;

• /local – локальная иерархия;

• /sbin – содержит не жизненно необходимые системные исполняемые файлы;

• /share – архитектурно-независимые данные;

• /X11R6 – X Window System, версия 11, выпуск 6;

• /games – игры и образовательные программы;

• /src – исходные коды.

/usr/bin – пользовательские программы

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

• perl – интерпретатор языка Perl;

• python – интерпретатор языка Python;

• tclsh – интерпретатор Tel;

• wish – простая оконная оболочка Tcl/Tk;

• expect – программа для интерактивного диалога.

/usr/include – каталог для стандартных include-файлов

В этом каталоге хранится большинство включаемых файлов, используемых компилятором C/C++.

/usr/lib – библиотеки для программирования и пакетов

Каталог содержит объектные файлы, библиотеки и другие файлы, которые не используются напрямую пользователем или скриптами командных оболочек. Если программа создает подкаталог в /usr/lib, все архитектурно-зависимые данные должны помещаться в этот каталог. Для примера: подкаталог /рег15 содержит в себе модули и библиотеки для Perl 5.

/usr/local – локальная иерархия

Каталог предназначен для системного администратора под установку локального программного обеспечения. Это необходимо для предотвращения перезаписи программного обеспечения при обновлении системного программного обеспечения. Содержит следующие каталоги:

• /bin – локальные исполняемые файлы;

• /games – локальные исполняемые файлы игр;

• /include – локальные файлы С-заголовков;

• /lib – локальные библиотеки;

• /sbin – локальные системные исполняемые файлы;

• /share – локальная архитектурно-независимая иерархия;

• /sre – локальный исходный код.

/usr/sbin – не жизненно необходимые стандартные системные программы

Каталог содержит любые не жизненно необходимые для функционирования системы исполняемые файлы, используемые исключительно системным администратором. Программы и утилиты, используемые при восстановлении работоспособности системы, должны находиться в каталоге /sbin.

/usr/share – архитектурно-независимые данные

Каталог предназначен для всех архитектурно-независимых файлов данных, предназначенных только для чтения (неизменяемых). Содержит следующие каталоги:

• /diet – списки слов (словари);

• /doc – разнообразная документация;

• /games – неизменяемые файлы данных для /usr/games;

• /info – основной каталог информационной системы GNU;

• /locale – информация для локализации системы;

• /man – файлы справочной системы;

• /misc – разнообразные архитектурно-независимые данные;

• /terminfo – каталог для базы данных terminfo;

• /zoneinfo – информация и конфигурация временной зоны (Timezone).

Любая программа или пакет, который содержит или требует данных, не нуждающихся в модификации должны хранится в /usr/share (или /usr/local/share, если программное обеспечение установлено локально).

/usr/share/dict – списки слов (словари)

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

/usr/share/man – страницы справочной системы

Каталог предназначен для хранения данных справочной системы. Вся справочная информация разделена на восемь больших тем, для каждой существует свой отдельный каталог – от /man1 до /man8. Содержит следующие каталоги:

• /man1 – справочные страницы, описывающие доступные пользователям программы;

• /man2 – раздел, описывающий все системные вызовы (для взаимодействия с ядром);

• /man3 – библиотечные функции и подпрограммы. Описывает программные библиотеки, напрямую не взаимодействующие с ядром операционной системы. Этот и второй разделы справочной системы представляют интерес только для программистов;

• /man4 – описывает специальные файлы, осуществляющие функции драйверов и сетевой поддержки в системе. В основном эти файлы находятся в каталоге /dev;

• /man5 – документация по множеству файловых форматов;

• /man6 – содержится документация по разнообразным играм;

• /man7 – разное. Содержит документацию, которую трудно классифицировать;

• /man8 – системное администрирование. Программы, используемые системным администратором для администрирования и сопровождения системы.

Система справочной информации должна поддерживать несколько языков одновременно, поэтому для исключения конфликтов в каталоге /usr/share/man файлы справочной системы принято хранить следующим образом:

• для каждого языка, установленного в системе (locale, локаль), в каталоге /usr/share/man создается подкаталог, носящий имя своей локали;

• в этом подкаталоге создаются каталоги /man<раздел>, причем только те, в которых есть справочная информация;

• в каталоге /man<раздел> хранятся справочные файлы, отдельные для каждой установленной программы, причем стандартом de-facto является то, что справочные файлы хранятся в архивированном виде (никто, однако, не запрещает хранить их в распакованном виде, но для экономии места на жестком диске их упаковывают).

Программа man при обращении к ней с целью получения справочной информации по какой-то программе сначала пытается получить справочную информацию на языке, соответствующем текущей локали. Если ей это не удается, то берется информация, хранящяяся в /шг/811аге/man/man<раздел>. По умолчанию в этих каталогах содержится англоязычная справочная информация.

Наименование языковых подкаталогов в /usr/share/man основывается на приложении Е стандарта POSIX 1003.1, который описывает строку-идентификатор локали. Строка-идентификатор локали согласно этому стандарту имеет вид:


<язык>[_<территория>][.<кодовая страница символов>][,<версия>]


• поле <язык> берется из стандарта ISO 639. Это должны быть два символа исключительно в нижнем регистре;

• поле <территория> должно быть двухсимвольным кодом только в верхнем регистре (согласно стандарту ISO 3166);

• поле скодовая страница символов> должно быть представлено в стандартном описании кодовой страницы. Если скодовая страница символов> содержит числовую спецификацию, она соответствует интернациональному стандарту, описывающему эту страницу;

• поле <версия> рекомендуется не использовать без крайней необходимости. Реальное его применение – например, для страны, имеющей один язык и кодировку, но разные диалекты.

Пример формирования каталогов локализованной справочной системы приведен в табл. 5.3.

Таблица 5.3.
Пример формирования каталогов локализованной справочной системы

Архитектурно-зависимые справочные файлы можно помещать в отдельные каталоги, соответствующие архитектуре. Например, /usr/share/man/<locale>/ man8/i386/ctrlaltdel.8. Однако проще написать общее справочное руководство, в котором особо отметить архитектурно-зависимые случаи, чем разрабатывать справочные файлы для каждой архитектуры.

Справочная информация для программ и данных, находящихся в /usr/local, размещается в каталоге /usr/local/man. Справочная информация, касающаяся X11R6, размещается в каталоге /usr/X11R6/man.

Правило размещения справочных руководств на различных языках в отдельные подкаталоги также распространяется и на справочные руководства, хранящиеся в каталогах /usr/local/man и /usr/X11R6/man.

/usr/share/misc – различные архитектурно-независимые данные

Каталог содержит различные архитектурно-независимые файлы, которые не требуют отдельного каталога в /usr/share/. Если соответствующие пакеты установлены в системе, в каталоге должны находиться следующие файлы:

• ascii – ASCII-таблица символов;

• magic – список «магических» цифр;

• termcap – база данных совместимости терминалов.

/usr/src – исходные тексты программ

Любой исходный код нелокальной программы должен помещаться в этот каталог.

/usr/src/Liriux-2.4.3 – каталог исходного кода ядра Linux

В каталоге хранятся файлы и каталоги, содержащие исходный код ядра Linux, модулей, различная документация. Имя каталога меняется в зависимости от того, исходный код какой версии ядра Linux находится в каталоге.

/usr/src/Linux-2.4.3/Documentation – документация к ядру и модулям операционной системы Linux

В каталоге содержится документация, которая тем или иным образом касается ядра операционной системы Linux или загружаемых модулей. Типичное содержимое каталога приведено ниже:


/arm

/cdrom

/cris

/DocBook

/fb

/filesystems

/i2c

/i386

/ia64

/isdn

/kbuild

/m68k

/mips

/networking

/parisc

/powerpc

/s390

/sound

/sparc

/sysctl

/telephony

/video4linux

/vm

/usb

00-INDEX

binfmt_misc.txt

BUG-HUNTING

cachetlb.txt

cciss.txt

Changes

CodingStyle

computone.txt

Configure.help

cpqarray.txt

devices.txt

digiboard.txt

digiepca.txt

DMA-mapping.txt

dnotify.txt

exception.txt

floppy.txt

ftape.txt

hayes-esp.txt

highuid.txt

ide.txt

initrd.txt

ioctl-number.txt

IO-mapping.txt

IRQ-affinity.txt

isapnp.txt

java.txt

joystick-api.txt

joystick-paiport.txt

joystick.txt

kernel-doc-nano-HOWTO.txt

kernel-docs.txt

kernel-parameters.txt

kmod.txt

locks.txt

logo.gif

logo.txt

LVM-HOWTO

magic-number.txt

mandatoiy.txt

mca.txt

md.txt

memory.txt

mkdev.cciss

mkdev.ida

modules.txt

moxa-smartio

mtrr.txt

nbd.txt

nfsroot.txt

nmi_watchdog.txt

oops-tracing.txt

paride.txt

parport-lowlevel.txt

parport.txt

pci.txt

pcwd-watchdog.txt

pm.txt

ramdisk.txt

README.DAC960

README.moxa

README.nsp_cs.eng

riscom8.txt

rtc.txt

SAK.txt

scsi-generic.txt

scsi.txt

serial-console.txt

sgi-visws.txt

smart-config.txt

smp.tex

smp.txt

specialix.txt

spinlocks.txt

stallion.txt

SubmittingDrivers

SubmittingPatches

svga.txt

sx.txt

sysrq.txt

unicode.txt

VGA-softcursor.txt

watchdog.txt

xterm-linux.xpm

zorro.txt

/usr/X11R6 – X Window System, Version 11 Release 6

В каталоге X11R6 содержится иерархия каталогов X Window. Информацию о структуре и назначении каталогов следует искать в документации на X Window.

Каталог /var

Каталог содержит изменяемые файлы. Сюда входят spool-каталоги и файлы, административные и журнальные данные, временные файлы. Некоторые каталоги, входящие в иерархию /var, такие как /var/log, /var/lock и /var/run, не должны быть разделяемыми между различными системами. Другие каталоги, такие как /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news, могут быть разделяемыми.

Рекомендуется для каталога /var выделить отдельный раздел на жестком диске. В том случае, если это невозможно, не следует размещать его в корневой файловой системе. Это позволит избежать некоторых проблем, возникающих при переполнении диска. Приложения не должны создавать каталоги в верхнем уровне иерархии /var. В каталоге /var должны присутствовать следующие каталоги:

• /cache – каталог кэша программ;

• /db – каталог для файлов баз данных;

• /games – файлы для игровых программ;

• /lib – библиотеки;

• /local – изменяемые данные для /usr/local;

• /lock – Lock-файлы (файлы-защелки);

• /log – Log-файлы и каталоги (файлы журналов);

• /lost+found – каталог для файлов, восстановленных после краха системы;

• /mail – каталог, содержащий почтовые ящики пользователей;

• /named – файлы DNS-сервера;

• /opt – переменные данные для /opt;

• /run – данные о запущенных процессах;

• /spool – spool-данные приложений;

• /state – состояние приложений;

• /tmp – временные файлы, сохраняемые между перезагрузками системы.

/var/cache – кэш программ

Каталог используется для хранения временных «короткоживущих» данных, создаваемых программами. Это могут быть буферы ввода/вывода или файлы, содержащие какие-нибудь промежуточные данные. Подкаталоги в /var/cashe создаются при установке пакетов и обычно носят имя соответствующей программы.

Если соответствующие пакеты установлены в системе, в каталоге должны находиться следующие файлы:

• /fonts – каталог для хранения динамически создаваемых шрифтов;

• /man – сформатированные страницы руководств. Справочные страницы в /usr/man хранятся в специальном виде и перед тем, как показать справочное руководство пользователю, страницы необходимо сформатировать;

• /www – файлы или кэш-данные прокси-сервера WWW;

• /<пакет> – кэш соответствующего пакета.

/var/games – файлы для игровых программ

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

/var/lib – библиотеки

Немного неверное наименование раздела. В этом каталоге содержатся различные файлы, входящие в какие-либо пакеты, которые можно отнести к системным. Обычно каждый пакет, который сохраняет какие-то файлы в каталог /var/lib, создает свой каталог, имеющий вид Даг/НЬ<имя_пакета>. Если соответствующие пакеты установлены в системе, в каталоге должны находиться следующие файлы:

• /misc – разные несистематизированные файлы;

• /<редактор> – каталог соответствующего редактора, в котором хранятся резервные копии файлов и файлы состояния;

• /rpm – каталог для менеджера пакетов RPM. В нем содержатся базы установленных в системе пакетов и другая служебная информация;

• /<пакет> – файлы соответствующего пакета;

• /xdm – данные Х-менеджера.

/var/lock – lock-файлы (файлы-защелки)

Lock-файлы (файлы-защелки) – файлы, которые «закрепляют» какое-либо оборудование или файлы для использования только программой, создающей файл-защелку. Обычно уничтожаются по окончании работы программы или если файл или оборудование не нужны в данный момент программе. В каталоге /var/lock могут находиться, например, следующие подкаталоги:

• /console – данные, относящиеся к консоли системы;

• /samba – данные, связанные с программой Samba.

/var/log – файлы и каталоги журналов (log-файлов)

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

• /httpd – каталог для журнальных файлов Web-cepвepa;

• /samba – каталог для журнальных файлов сервера Samba;

• /squid – каталог для журнальных файлов SQUID;

• /uucp – каталог для журнальных файлов UUCP.

Также в каталоге /var/log должны находиться следующие файлы:

• сгоп – события демона сгоп;

• dmesg – сообщения в течение дня;

• lastlog – записи о последней регистрации в системе каждого пользователя;

• maillog – регистрация событий, связанных с почтовыми сообщениями;

• messages – системные сообщения от syslogd;

• secure – сообщения, связанные с безопасностью;

• statistics – файл статистики;

• usracct – файл активности пользователей;

• wtmp – записи всех logins и logouts;

• boot.log – журнал загрузки системы;

• htmlaccess.log – журнал доступа к Web-cepвepy;

• XFree86.0.1og – журнал XFree86.

/var/mail – пользовательские почтовые ящики

Этот каталог хранит пользовательские почтовые ящики, сохраненные в стандартном формате UNIX mailbox.

/var/opt – изменяемые данные для каталога /opt

В этом каталоге должны храниться изменяемые данные пакетов, устанавливаемые в каталог /opt. Рекомендуется для каждого пакета создать свой каталог вида /ор1/<имя_пакета>.

/var/run – переменные файлы времени исполнения

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

В каталоге, в основном, содержатся файлы-идентификаторы процессов (PID, Process identifie file), имеющие имя <имя_программы>.pid. К примеру, /var/run/named.pid. Pid-файл должен содержать символы, соответствующие номеру PID и символ перевода строки.

Каталог /var/run должен быть недоступен для записи непривилегированными пользователями, поскольку запись информации или ее удаление из каталога /var/run может привести к печальным последствиям, вплоть до краха системы.

/var/spool – spool-данные приложений

Каталог /var/spool – содержит данные, которые ожидают какой-либо обработки. После обработки (программой, пользователем, администратором) они должны быть удалены из каталога. Если соответствующие пакеты установлены в системе, в каталоге должны находиться следующие файлы:

• /at – spool-каталог программы at;

• /сгоп – spool-каталог программы сгоп;

• /lpd – spool-катал or программы печати;

• /mail – каталог входящей почты;

• /mqueue – исходящая почтовая очередь;

• /news – spool-каталог сервера новостей;

• /samba – spool-каталог сервера Samba;

• /squid – spool-каталог SQUID;

• /uucp – spool-каталог для UUCP.

/var/tmp – временные файлы, сохраняемые между перезагрузками

Каталог /var/tmp используется для того, чтобы временные файлы, необходимые для программ, сохранялись при перезагрузке системы. Файлы, находящиеся в /tmp, при перезагрузке системы могут быть удалены.

/var/yp – файлы баз данных Network Information Service (NIS) (опционально)

Если в системе установлена сетевая информационная служба (Network Information Service, NIS), так же известная, как Желтые страницы (Sun Yellow Pages, YP), то в этом каталоге хранятся ее базы данных.

Ссылки

http://www.pathname.com/fhs/ – Filesystem Hierarchy Standard в различных текстовых форматах.

http://www.kerael.org/pub/llniix/docs/device-list/devices.txt – список устройств и специальных файлов.

• proc.txt – документация по файловой системе procfs. Входит в состав документации к ядру Linux.

• Соответствующие тап-страницы.

• Соответствующие HOWTO (см. гл. 13):

– Networking-HOWTO;

– SMB-HOWTO;

– DNS-HOWTO;

– LILO-HOWTO.

Глава 6

Процесс загрузки Linux

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

Вот нажатием кнопки Power вы включили компьютер. Сначала специальная программа, зашитая в ПЗУ материнской платы, производит тестирование установленного в компьютере оборудования. В случае неудачи вы либо услышите из встроенного динамика компьютера серию гудков, либо программа тестирования оборудования выведет на дисплей предупреждающее сообщение.

Если система успешно прошла тестирование, на дисплее можно будет увидеть перечень установленного оборудования, емкость оперативной памяти и жесткого диска. После этого программа BIOS (Basic Input/Output System – базовая система ввода/вывода), хранящаяся в ПЗУ материнской платы, определит, с какого устройства будет происходить загрузка (например, с жесткого диска С:), и считает из первого сектора загрузочного диска короткую программу-загрузчик. Эта программа (LILO, GRUB) загружает с жесткого диска ядро Linux, которое имеет имя vmlinuz-x.y.z-a (где x.y.z – это номер версии ядра, например, 2.4.3, а строка а – признак сборки, может быть каким-то числом или словом) и находится в каталоге /boot (для Red Hat-подобных дистрибутивов) или в корне файловой системы (для дистрибутива Slackware). Во время загрузки ядру можно передать различные параметры, позволяющие более тонко настроить систему (об этом немного позже). Сразу после загрузки ядро производит инициализацию устройств, установленных в компьютере. Затем пробует загрузить и монтировать корневую (root) файловую систему. Ядру необходимо тем или иным образом сообщить, где искать корневую файловую систему. Если ядро Linux не может ее найти, оно выдает соответствующее сообщение и останавливается.

Во многих дистрибутивах и практически всегда при загрузке с дискеты в оперативной памяти создается псевдодиск (RAM-disk, виртуальный диск), который и выступает в роли корневой файловой системы. Для этого есть две причины. Во-первых, оперативная память на несколько порядков быстрее, чем дискета, и во-вторых – на виртуальный диск ядро может загрузить с дискеты и распаковать сжатую файловую систему, что позволяет поместить на дискете намного больше файлов.

После того как ядро Linux успешно смонтирует корневую файловую систему, оно запускает процесс init. Процесс init – это программа, которая, собственно, и осуществляет переход от начального состояния системы в стандартный многопользовательский режим (или тот, который установлен администратором по умолчанию). Помимо этого, процесс init выполняет множество различных операций, необходимых для корректной работы системы: проверку и монтирование файловых систем, запуск различных сервисов, запуск системы входа пользователя и т. п. А теперь подробнее разберемся с каждым шагом загрузки системы.

Программы-загрузчики

Используются для загрузки ядра операционной системы Linux, передачи параметров ядру и организации загрузки нескольких операционных систем, установленных на компьютере.

LILO – LInux LOader

Программа-загрузчик, на сегодняшний день является стандартом de-facto практически для любого дистрибутива Linux. LILO (LInux LOader – загрузчик Linux) без проблем может загружать DOS, OS/2, Linux, FreeBSD, Windows и множество других операционных систем.

Стандартно сконфигурированная программа LILO после запуска приостановит свое выполнение и выведет на экран графическое изображение с меню, пунктами которого являются варианты загрузки. Несколько секунд LILO ожидает ввода пользователем варианта загрузки (или специальных команд) и, в случае их отсутствия, запускает вариант загрузки, выбранный при конфигурировании по умолчанию. Обычные варианты загрузки в LILO носят название linux и dos (если в системе установлены одновременно операционная система Windows 9х и Linux).

Конфигурационный файл LILO – /etc/lilo.conf, формат его можно найти в соответствующей справочной документации.

GRUB

GRand Unified Bootloader (Главный унифицированный загрузчик) – универсальный загрузчик, разработан в Фонде свободного программного обеспечения. Имеет больше возможностей по сравнению с LILO, а также избавлен от некоторых ограничений. В последнее время стал очень популярен, и по распространенности скоро догонит LILO.

LoadLin

Еще одна программа запуска Linux, которая, правда, не используется при старте компьютера, а позволяет загрузить ядро Linux из командной строки DOS (с параметрами загрузки). Применение LoadLin оправдано в том случае, если мы не хотим устанавливать загрузчик типа LILO в MBR (Master Boot Record) винчестера. Этот загрузчик также необходим, если у нас имеется оборудование, использующее драйвер DOS для установки в определенное состояние.

Есть еще несколько других программ, которые можно использовать для загрузки Linux, однако они не получили широкого распространения.

Параметры ядра

Обзор параметров строки загрузки

Программы-загрузчики, описание которых приведено выше, способны также, помимо загрузки самого ядра, передавать ему необходимые параметры загрузки.

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


ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1


Посмотреть параметры командной строки, заданные при загрузке, можно набрав /proc/cmdline.

Утилита rdev

Есть несколько параметров загрузки ядра Linux, хранящих свои значения по умолчанию в его образе. Эти параметры задаются при компиляции ядра, и для того, чтобы не перекомпилировать каждый раз ядро, используется утилита rdev.

Утилита rdev может изменять следующие параметры:

• rdev – устройство, с которого производится загрузка;

• swapdev – устройство, содержащее раздел подкачки (swap);

• ramsize – параметры RAM-диска;

• vidmode – видеорежим по умолчанию;

• rootflags – установка режима монтирования корневого устройства ("только для чтения" или "чтение/запись").

Более подробную информацию по rdev можно найти в соответствующей справочной документации.

Разбор параметров ядром Linux

Большая часть параметров загрузки имеет вид:


Имя[=значение_1][,значение_2]…[,значение_11]


где имя – уникальное ключевое слово, идентифицирующее часть ядра, которому передаются связанные значения, но не более одиннадцати параметров. Большая часть разбора параметров загрузки происходит в linux/init/main.c. Сначала ядро проверяет, не являются ли параметры одним из специальных параметров root=, ro, rw или debug. Затем ядро просматривает список функций установки (находящийся в массиве bootsetups) в поиске совпадения заданной строки параметра с функцией установки конкретного устройства или части ядра. Если мы передаем ядру строку foo=3,4,5,6, bar, то ядро будет искать, присутствует ли foo в массиве bootsetups. Если присутствует, то ядро вызовет функцию установки, связанную с foo (foo setup ()) и передаст ей целочисленные значения 3, 4, 5 и 6, указанные в командной строке ядра, и также строковый параметр bar.

Если строка не подходит ни для одной функции установки, то этот случай считается установкой переменной окружения. Примером может служить указание переменных окружения term=vtioo или boot_image=vmiinuz.bak в качестве параметров загрузки. Как правило, переменные окружения проверяются скриптами инициализации для разрешения или запрещения большого диапазона параметров.

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

Общие неаппаратные параметры загрузки

В этом разделе рассматриваются параметры загрузки, не связанные с каким-либо оборудованием или периферией, а с параметрами ядра, такими как управление памятью, RAM-диском, корневой системой и т. п.

Опции корневой файловой системы

Параметр root

Этот параметр сообщает ядру, какое устройство будет использовано в качестве корневой файловой системы во время загрузки. По умолчанию эта установка имеет значение корневого устройства системы, на котором было скомпилировано ядро. Например, на одном компьютере корневая файловая система находится на /dev/hda2, а на другом – на /dev/hda6. Если скомпилировать ядро на втором компьютере, перенести его на первый и не указать в параметре root=/dev/hda2, то ядро будет думать, что оно загружается с /dev/hda6. А такого устройства на этом компьютере нет! Допустимыми корневыми устройствами могут быть следующие:

• /dev/hdaN, /dev/hdbN, /dev/hdcN, /dev/hddN, которые являются разделами N на IDE-диске;

• /dev/sdaN, /dev/sdbN, /dev/sdcN, /dev/sddN, /dev/sdeN, которые являются разделами N на SCSI-диске;

• /dev/fd0, /dev/fdl – привод флоппи-диска с номером N;

• /dev/nfs, не являющееся флагом, заставляющим ядро получить корневую файловую систему по сети.

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

Параметры
ro и
rw

Параметр го сообщает ядру о необходимости монтирования корневой файловой системы в режиме «только для чтения». Парный ему параметр rw указывает ядру монтировать корневую файловую систему в режиме «чтение/ запись». Сразу после загрузки ядра и запуска процесса init система должна осуществить проверку подмонтированных файловых систем на отсутствие ошибок. Однако, если корневая файловая система смонтирована в режиме «чтение/запись» надежно проверить целостность файловой системы невозможно. Существует два способа решения проблемы:

• Смонтировать изначально корневую файловую систему в режиме "только для чтения".

• Смонтировать изначально корневую файловую систему в режиме "чтение/запись", а перед проверкой перемонтировать ее в режим "только для чтения".

Это одни из немногих параметров загрузки ядра, которые хранят значение в образе ядра и могут быть изменены утилитой rdev.

Опции управления RAM-диском

Все следующие опции сообщают ядру, как управлять устройством RAM-диска, обычно используемым для загрузки машины.

Параметр ramdisk_start

Чтобы разрешить образу ядра находиться на флоппи-диске со сжатым образом RAM-диска, необходимо добавить команду ramdisk_start=<cMei4eHMe>.

Параметр load_ramdisk

Этот параметр сообщает ядру, нужно загружать образ RAM-диска или нет. При ioad_ramdisk=l ядро будет загружать RAM-диск. По умолчанию значение параметра равно нулю, т. е. ядро не должно в этом случае загружать RAM-диск.

Параметр prompt_ramdisk

Этот параметр сообщает ядру о необходимости вывести пользователю приглашение вставить флоппи-диск с образом RAM-диска. В однодисковой конфигурации образ RAM-диска находится на той же дискете, с которой только что закончилась загрузка ядра, поэтому приглашение не нужно. В этом случае нужно использовать команду prompt_ramdisk=0. В двухдисковой конфигурации может потребоваться заменить диски, поэтому нужно указать команду prompt_ramdisk=1. По умолчанию значение равно единице.

Параметр ramdisk_size

Поскольку RAM-диск размещается в оперативной памяти, необходимо каким-то способом указать занимаемый им объем оперативной памяти. По умолчанию это 4096 Кбайт.

Параметр
noinitrd (начальный RAM-диск)

В ядрах, начиная с версии 2jc, корневой файловой системой изначально может быть RAM-диск. Эта возможность обычно используется для загрузки модулей, необходимых для монтирования реальной корневой файловой системы (например, загрузка модулей драйвера SCSI, хранящихся в образе RAM-диска, а затем монтирование реальной файловой системы на SCSI-диске).

Параметр noinitrd определяет, что будет происходить с данными initrd после загрузки ядра.

Параметры загрузки для управления памятью

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

Параметр
mem

Используется для указания объема установленной памяти (или меньшего значения, если требуется ограничить объем памяти, доступный Linux). Старые версии BIOS не могли корректно возвращать количество оперативной памяти, если оно превышало 64 Мбайт. Поэтому приходилось вручную передавать в ядро реально установленное количество памяти.

Ядро воспримет любое значение параметра mem=xx, которое будет указано, однако если указать больший размер памяти, чем физически установлено в компьютере, то при определенном количестве процессов система попытается использовать несуществующий участок памяти и в общем возникнут проблемы, и что самое неприятное, такое может произойти и через месяц-другой после конфигурирования системы.

Количество памяти можно указывать как в шестнадцатеричном представлении, так и в десятичном. Например, если в компьютере установлено 96 Мбайт оперативной памяти, можно указать mem=0x6000000 или mem=96M.

Параметр
swap

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

• MAX_PAGE_AGE;

• PAGE_ADVANCE;

• PAGE_DECLINE;

• PAGE_INITIAL_AGE;

• AGE_CLUSTER_FRACT;

• AGE_CLUSTER_MIN;

• PAGEOUT_WEIGHT;

• BUFFEROUT_WEIGHT.

В каталоге /usr/src/Linux-2.4.3/Documentation/vm/ содержится полезная документация по этой теме, подставляемая с ядром операционной системы.

Параметр
buff

Параметр, похожий на swap, позволяет пользователю настроить некоторые параметры, связанные с управлением буферной памятью. Он может иметь следующие значения:

• MAX_BUFF_AGE;

• BUFF_ADVANCE;

• BUFF_DECLINE;

• BUFF_INITIAL_AGE;

• BUFFEROUT_WEIGHT;

• BUFFERMEM_GRACE.

Параметры загрузки для файловой системы NFS

Linux поддерживает и бездисковые рабочие станции, загружаемые по локальной сети. Для этого необходимо настроить корневую файловую систему бездисковой станции как NFS (Network File System, сетевая файловая система). Чтобы сообщить бездисковой рабочей станции, с какой машины она будет получать операционную систему, используются указанные в этом разделе параметры. Также необходимо установить параметр root=/dev/nfs. Подробная информация по использованию NFS в качестве корневой файловой системы содержится в файле /usr/src/Linux-2.4.3/Documentation/nfsroot.txt. Эта тема также будет рассмотрена в гл. 33.

Параметр
nfsroot

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


nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]


Если параметр nfsroot не был дан в командной строке, то по умолчанию будет использовано значение /tftpboot/%s.

Другие опции:

• <server-ip> – задает IP-адрес сервера NFS. Если это поле не задано, по умолчанию адрес будет определен переменной nfsaddrs;

• <root-dir> – имя каталога на сервере, монтируемого как корневой. Если в строке имеется фраза "%s", она будет заменена на ASCII-представление IP-адреса клиента;

• <nfs-options> – стандартные опции NFS. Все опции разделены запятыми. Если поле опций не задано, будут использованы следующие параметры:

– port = указывается демоном роЛтар-сервера

– rsize = 1024

– wsize = 1024

– timeo = 7

– retrans = 3

– acregmin = 3

– acregmax = 60

– acdirmin = 30

– acdirmax = 60

– flags = hard, nointr, noposix, cto, ac

Параметр
nfsaddrs

Параметр загрузки устанавливает параметры сетевого интерфейса. Если параметр опущен, то для выяснения этих значений ядро попытается использовать RARP и/или ВООТР. Формат параметра следующий:


nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>


• <my-ip> – IP-адрес клиента. Если параметр опущен, адрес определяется с помощью RARP или ВООТР. Выбор протокола будет зависеть от того, как было сконфигурировано ядро, и от параметра <auto>. Если параметр указан, ни RARP, ни ВООТР использоваться не будут;

• <serv-ip> – IP-адрес сервера NFS. Если это поле опущено, будет использован адрес сервера, ответившего на запрос RARP или ВООТР;

• <gw-ip> – IP-адрес шлюза. Если поле опущено, шлюзы использоваться не будут;

• <netmask> – маска сети для сетевого интерфейса;

• <name> – имя клиента;

• <dev> – имя используемого сетевого устройства. Если поле опущено, для RARP-запросов будут использованы все устройства, а для ВООТР – первое найденное. Для NFS будет использовано устройство, на котором были получены ответы RARP или ВООТР;

• <auto> – автоконфигурирование. Можно использовать следующие значения:

– rarp – использовать протокол RARP;

– bootp – использовать протокол ВООТР;

– both – будут применены оба протокола;

– none – означает отсутствие автоконфигурирования. В этом случае следует указать все необходимые значения в предыдущих полях.

Дополнительные параметры загрузки

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

Параметр debug

Ядро Linux имеет возможность выводить важные сообщения на консоль (ошибки ввода/вывода, проблемы с оборудованием и т. п.). Пороговое значение важности сообщения задается переменной consoie_iogievei. По умолчанию на консоль отправляется практически все, кроме отладочной информации. Использование параметра debug позволит всем сообщениям ядра попадать на консоль.

Параметр init

Во время загрузки ядро Linux запускает программу init, которая затем подготавливает операционную систему для полноценной работы. Сначала ядро Linux ищет программу init в каталоге /sbin, а при неудаче попробует запустить ее из каталога /bin/sh. Если программа init повреждена и загрузить операционную систему не удается, можно использовать командную строку загрузки init=/bin/sh, которая даст возможность заменить поврежденную программу или выполнить какие-то другие программы.

Параметр kbd-reset

Обычно на компьютерах семейства х86 ядро Linux не сбрасывает при загрузке контроллер клавиатуры, предполагая, что это делает BIOS. Однако такое предположение не всегда соответствует действительности. Применение этой опции заставляет во время загрузки Linux делать сброс контроллера клавиатуры.

Параметр maxcpus

Параметр ограничивает максимальное количество процессоров, используемое в режиме SMP. Указание в параметре о эквивалентно опции nosmp.

Параметр mca-pentium

Параметр, специфичный для компьютеров IBM модели 95 с шиной МСА (MicroChannel), которые зависают во время теста, выполняемого Linux для обнаружения типа математического сопроцессора. Эту проблему можно решить с помощью параметра загрузки mca-pentium.

Параметр md

Если корневая система компьютера расположена на составном (Multiple) устройстве (как правило, это RAID-массив дисков), то можно использовать параметр md, чтобы сообщить ядру конфигурацию составного устройства.

Подробная информация по этой теме содержится в файле /usr/src/Linux-2.4.3/Documentation/md.txt.

Параметр no387

Параметр актуален только для старых компьютеров на базе процессора i386. В некоторых сопроцессорах 1387 есть ошибки, например, ранние чипы ULSI-387 вызывают зависание при вычислениях с плавающей запятой. Параметр загрузки по387 заставляет Linux игнорировать сопроцессор, даже если он имеется.

Параметр no-hlt

Параметр актуален только для старых компьютеров на базе процессора i486. У процессоров Intel есть инструкция hit, заставляющая процессор ничего не делать, пока внешнее устройство (клавиатура, винчестер и т. п.) не вызовут его для выполнения задачи. Некоторые чипы i486 имели проблемы с командой hit, после которой они не могли вернуться в рабочий режим. С помощью параметра no-hit можно заставить ядро Linux при отсутствии активности вместо остановки процессора выполнять бесконечный цикл.

Параметр no-scroll

Параметр запрещает при загрузке функцию прокрутки. Актуально только для некоторых устаревших терминалов.

Параметр noapic

Параметр позволяет ядру Linux с поддержкой мультипроцессорности не использовать расширенные возможности контроллера прерываний в многопроцессорных машинах. Подробную информацию можно найти в файле /usr/src/Linux-2.4.3/Documentation/IO-APIC.txt.

Параметр nosmp

Позволяет ядру Linux с поддержкой мультипроцессорности на SMP-машинах работать только с одним процессором. Обычно используется для отладки.

Параметр panic

В крайне редком случае «паники» ядра (обнаруженная ядром внутренняя ошибка, которую ядро считает достаточно серьезной, что приводит к выдаче сообщения kernel panic и полной остановке системы) по умолчанию компьютер остается в этом состоянии, пока администратор его не перезагрузит. Однако иногда необходимо, чтобы машина автоматически перезагрузила себя, чтобы восстановить нормальную работу системы. Используя этот параметр, можно установить время (в секундах), по прошествии которого система попытается перезагрузиться. Например, при установке параметра panic=2 о ядро Linux попытается перегрузиться через 20 секунд после выдачи сообщения kernel panic. Нулевое значение соответствует стандартному поведению – ждать вмешательства администратора.

Также время тайм-аута можно прочитать и изменить через интерфейс /proc /sys/kernel/panic.

Параметр pirq

Эта опция передает мультипроцессорному ядру информацию об установках IRQ-слота PCI для некоторых материнских плат SMP. Подробную информацию можно найти в файле /usr/src/Linux-2.4.3/Documentation/IO-APIC.txt.

Параметр profile

Разработчики ядер могут разрешать опции, позволяющие им с целью оптимизации быстродействия ядра определять, как и где ядро может использовать циклы процессора. Эта опция позволяет указать номер конфигурационного файла при загрузке. Можно также скомпилировать ядро с конфигурацией, разрешенной по умолчанию.

Параметр reboot

Параметр задает тип перезагрузки, выполняемой ядром Linux. Стандартно ядро Linux выполняет так называемую «холодную» перезагрузку (полная инициализация аппаратного обеспечения, BIOS проверяет память и т. д.). Существует также «теплая» перезагрузка, при которой не происходит первоначального тестирования оборудования, что несколько убыстряет загрузку операционной системы.

Параметр reserve

Используется для защиты диапазона портов ввода/вывода от тестирования (I/O probe). Формат команды:


reserve=iobase,extent[,iobase,extent]…


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

Параметр загрузки reserve устраняет проблему, указывая диапазон портов ввода/вывода, который необходимо исключить из тестирования. При этом диапазон резервируется в таблице ядра регистрации портов как уже определенный. Такой механизм необходимо использовать только при наличии проблем или в специальных случаях.

Параметр vga

Опция, интерпретируемая LILO, а не ядром, однако ее применение стало настолько обычным, что заслуживает упоминания. Также может быть установлена с помощью команды rdev – v. Лучший способ применения этой опции – стартовать с vga=ask. Тогда до загрузки ядра будет предложен список различных режимов, допустимых для имеющейся в системе видеокарты. Более подробная информация содержится в файле /usr/src/Linux-2.4.3/Documentation/svga.txt.

Загрузочные параметры, определяющие поведение шины PCI

Параметр pci= можно использовать для изменения способа поиска устройств на шине PCI и поведения этих устройств. Как правило, это необходимо либо для старого оборудования, не совсем корректно использующего технологию Plug and Play, либо для специфических РС1-устройств.

Аргументы pci=bios и pci-nobios

Используются для установки или сброса флага индикации тестирования (probing) PCI через PCI BIOS. По умолчанию используется BIOS.

Аргументы pci=conf1 и pci=conf2

Разрешают тип конфигурации 1 или 2. Также они неявно сбрасывают флаг PCI BIOS probe (т. е. pci=nobios).

Аргумент pci=io=

Если получено сообщение типа


Unassigned 10 space for…/


то может потребоваться указать значение ввода/вывода этой опцией.

Аргумент pci=nopeer

Специфический аргумент, исправляющий погрешности некоторых версий BIOS.

Аргумент pci=nosort

Использование этого аргумента заставляет ядро не сортировать PCI-устройства в процессе проверки.

Аргумент pci=off

Использование этой опции запрещает все проверки PCI-шины. Любые драйверы устройств, использующих функции PCI для поиска и инициализации оборудования, скорее всего, потеряют работоспособность.

Аргумент pci=reverse

Эта опция меняет на обратный порядок PCI-устройств на шине PCI.

Аргументы загрузки для драйверов буфера видеофреймов

Аргумент video= используется, когда уровень абстракции устройства буфера фреймов встроен в ядро. Это означает, что вместо наличия отдельных программ для каждого семейства видеокарт (VOODOO, TNT, S3 и пр.) ядро имеет встроенный драйвер для каждой видеокарты и экспортирует единственный (единый) интерфейс для видеопрограмм. Типичный формат этого аргумента:


video=name: option1,option2,…

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

Информацию по опциям, поддерживаемым каждым драйвером, можно найти в файле /usr/src/Linux-2.4.3/Documentation/fb/.

Аргумент video=map:…

Эта опция используется для установки консоли отображения устройства буфера фреймов.

Аргумент video=scrollback:…

Число после двоеточия устанавливает размер памяти, выделенной для буфера прокрутки. Суффикс к или к после числа указывает, что число представляет килобайты.

Аргумент video=vc:…

Число или диапазон чисел определяют первую или первую и последнюю виртуальную консоли буфера фреймов.

Аргументы загрузки для SCSI-периферии

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

Аргументы для драйверов Mid-level

Драйверы уровня Mid управляют такими устройствами, как винчестеры, CD-ROM и стримеры без учета специфики SCSI-контроллера.

Максимальный LUN
(max_scsi_luns=)

Каждое SCSI-устройство может иметь несколько псевдоустройств внутри себя. К примеру, SCSI CD-ROM, обслуживающий более чем один диск одновременно. Каждый CD-ROM адресуется номером логического устройства (Logical Unit Number, LUN). Но большинство SCSI-устройств являются одним устройством, и им назначается нулевой LUN.

Старые SCSI-устройства не могут обработать запросы поиска с LUN, не равным нулю. Зачастую это приводит к зависанию устройства. Чтобы избежать указанной проблемы, по умолчанию пробуется только нулевой LUN.

Для определения количества пробуемых LUN при загрузке, в качестве аргумента загрузки вводится max_scsi_iuns=n, где л – номер от 1 до 8.

Регистрация SCSI (
scsi_logging=)

Ненулевое значение этого загрузочного аргумента включает регистрацию всех SCSI-событий.

Параметры для ленточного накопителя SCSI (
st=)

При загрузке ядра Linux можно изменить конфигурацию ленточного накопителя SCSI, используя


st=buf_size[,write_threshold[,max bufs]]


Первые два числа указываются в килобайтах. По умолчанию buf_size равен 32 Кбайт. write_threshoid – значение, при котором буфер сбрасывается на ленту, по умолчанию 30 Кбайт. Максимальное количество буферов зависит от количества обнаруженных ленточных накопителей, по умолчанию равно 2.

Аргументы для контроллеров SCSI

Понятия, используемые в данном разделе:

• iobase – первый порт ввода/вывода, занимаемый контроллером SCSI. Указывается в шестнадцатеричной нотации и обычно лежит в диапазоне от 0x200 до 0x3ff;

• irq – аппаратное прерывание, установленное на карте. Допустимые значения зависят от конкретного контроллера, но обычно это 5, 7, 9, 10, 11, 12 и 15;

• dma – используемый картой канал DMA (Direct Memoiy Access – прямой доступ к памяти). Обычно применяется только для карт с управлением шиной (bus-mastering);

• scsi-id – идентификатор, используемый контроллером для идентификации себя на SCSI-шине. Только некоторые контроллеры позволят изменить это значение. Типичное значение по умолчанию – 7.

• parity – ожидает ли SCSI-контроллер поддержку всеми подсоединенными устройствами четности при всех информационных обменах. Единица разрешает проверку четности, ноль – запрещает.

К сожалению, большей неразберихи, чем в настройках SCSI-контроллеров и устройств, наверное, не существует. До недавнего времени любая попытка улучшить поддержку SCSI-устройств в Linux оборачивалась тем, что какие-то новые контроллеры работали, а старые (казалось, уже давно отлаженные) теряли свою работоспособность.

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

Adaptec
aha154x (aha1542=)

Карты серии ahal54x с управлением шиной. Аргументы загрузки выглядят следующим образом:


aha1542=iobase[,buson,busoff[,dmaspeed]]


Допустимые значения iobase: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334. Клоны карты могут допускать другие значения.

Значения buson, busoff указывают количество микросекунд, на которое карта может захватить ISA-шину.

Параметр dmaspeed указывает скорость в мегабайтах в секунду, с которой происходит DMA-доступ. По умолчанию – 5 Мбайт/с.

Adaptec
aha274x, aha284x, aic7xxx (aic7xxx=)

Эти контроллеры принимают следующие аргументы:


aiс7xxx=extended,no_reset


Здесь:

• extended – значение, используемое с винчестерами большой емкости;

• no_reset – значение, запрещающее сброс SCSI-шины во время загрузки.

Если SCSI-контроллер не желает нормально функционировать, следует обратится к SCSI-HOWTO или к документации ядра. Возможно, там присутствует данный SCSI-контроллер и описано решение этой проблемы.

Жесткие диски

В этом разделе приводится список аргументов загрузки для стандартных жестких дисков (винчестеров) MFM/RLL, ST-506, XT и устройств IDE.

Параметры драйвера IDE – винчестера/CD-ROM

Драйвер IDE допускает множество параметров, от определения геометрии диска до поддержки расширенных или дефектных микросхем контроллера. Подробная информация по конфигурации драйвера содержится в файле /usr/src/Linux-2.4.3/Documentation/ide.txt.

• hdx= – распознается от а до h, например HDD;

• idex= – распознается от 0 до 3, например IDE1;

• hdx=noprobe – привод может присутствовать, но он не тестируется;

• hdx=none – жесткий диск отсутствует, CMOS игнорируется и тестирование не производится;

• hdx=nowerr – игнорируется бит wrerr_stat на этом приводе;

• hdx=cdrom – привод присутствует и является приводом CD-ROM;

• hdx=cyi, head, sect – принудительное указание геометрии жесткого диска;

• hdx=autotune – привод попытается настроить скорость интерфейса на самый быстрый поддерживаемый режим PIO, который только возможен для этого привода. На старых материнских платах не гарантируется полная поддержка такого режима;

• idex=noprobe – не тестировать данный интерфейс;

• idex=base – задать адрес указанному интерфейсу, где base обычно 0x1f0 или 0x170, a cti подразумевается base+0x206;

• idex=base, cti – указывает как base, так и cti;

• idex=base, cti, irq – указывает base, cti и номер IRQ;

• idex=autotune – будет произведена попытка настроить скорость интерфейса на самый быстрый поддерживаемый режим PIO для всех приводов на этом интерфейсе. На старых материнских платах не гарантируется полная поддержка такого режима;

• idex=noautotune – привод не будет пытаться настроить скорость интерфейса;

• idex=serialize – не выполнять операции overlap на idex.

Нижеследующее допустимо только на IDE0, и умолчания для base– и ctl-портов не должны меняться. Используется для старых чипсетов времен процессоров i386 и i486:

• ide0=dtc2278 – поддерживать контроллер DTC2278;

• ide0=ht6560b – поддерживать контроллер НТ6560В;

• ide0=cmd640_vib – необходим для карт VLB с чипом CMD640;

• ide0=qd6580 – поддерживать контроллер qd6580;

• ide0=ali14xx – поддерживать чипсеты ALI14xx (ALI М1439/М1445);

• ide0=umc8672 – поддерживать чипсет UMC8672.

Опции драйвера диска стандарта ST-506 (hd)

Устаревший стандарт. Сегодня вряд ли можно где-нибудь столкнуться с жестким диском этого стандарта. Допустим только аргумент hd=.

Формат: hd=cyls, heads, sects

Если установлено два диска, точно так же задается второй диск.

Опции драйвера диска XT (xd)

Устаревший стандарт. Аргумент загрузки для жесткого диска:


xd=type,irq,iobase,dma_chan


Значение type указывает конкретного производителя карты и обозначается: 0=generic; 1=DTC; 2,3,4=Western Digital, 5,6,7=Seagate; 8=OMTI. Единственное отличие между разными типами от одного и того же производителя – строка BIOS, используемая для обнаружения, которая не активизируется, если указан тип.

CD-ROM (не-SCSI/ATAPI/IDE)

Первоначально, когда только появились приводы CD-ROM, для этих приводов не было единого интерфейса. Последние 4–5 лет выпускаются приводы CD-ROM только с SCSI или IDE-интерфейсом. Однако иногда приходится встречаться с CD-ROM с интерфейсом Sony и Mitsumi. Ниже приведены параметры для различных контроллеров приводов CD-ROM.

Более подробная информация содержится в каталоге /usr/src/Linux-2.4.3/ Documentation/cdrom.

Интерфейс Aztech (aztcd)

Синтаксис для этого типа интерфейса:


aztcd=iobase[,magic_number]


Если установить magic_number равным 0x79, драйвер опробует устройство и в случае неизвестной ему версии оборудования (firmware) отключится. Все другие значения игнорируются.

Интерфейс Sony CDU-31A и CDU-33A (cdu31a)

Синтаксис:


cdu31a=iobase,[irq[,is_pas_card]]


Указав значение IRQ, равное нулю, сообщаем драйверу, что аппаратные прерывания не поддерживаются. Если имеющаяся карта поддерживает прерывания, следует использовать их для уменьшения загрузки центрального процессора.

Интерфейс Sony CDU-535 (sonycd535)

Синтаксис для этого интерфейса:


sonycd535=iobase[, irq]


Если необходимо прописать значение IRQ, то в качестве адреса ввода/вывода следует указать 0.

Интерфейс GoldStar (gscd)

Синтаксис для интерфейса CD-ROM:


gscd=iobase

Интерфейс ISP16 (isp16)

Синтаксис для этого интерфейса:


isp16= [port [, irq[, dma]]] [[,] drive_type]


Использование нуля для IRQ или DMA означает, что они не используются. Допустимые значения ДЛЯ drive_type – noispl6, Sanyo, Panasonic, Sony и Mitsumi. Применение noispie полностью запрещает драйвер.

Интерфейс Mitsumi Standard (mcd)

Синтаксис для этого интерфейса CD-ROM:


mcd=iobase, [irq[,wait_value]]


wait_vaiue используется как значение внутреннего тайм-аута.

Интерфейс Optics Storage (optcd)

Синтаксис для этого типа карт:


optcd=iobase

Интерфейс Phillips CM206 (cm206)

Синтаксис для этого типа карт:


cm206=[iobase][,irq]


Драйвер предполагает значения IRQ между 3 и 11, а значения портов ввода/вывода– между 0x300 и 0x370. Также допускается cm206=auto для разрешения автоматического определения параметров.

Интерфейс Sanyo (sjcd)

Синтаксис для этого типа карт:


sjcd=iobase[,irq[,dma_channel]]

Интерфейс SoundBlaster Pro (sbpcd)

Синтаксис для этого типа карт:


sbpcd=iobase,type


где type – один из следующих (чувствителен к регистру) значений: SoundBlaster, LaserMate, или SPEA. iobase – адрес интерфейса CD-ROM, а не звуковой части карты.

Последовательные и ISDN-драйверы

В разделе приведены параметры для некоторых ISDN-карт и так называемых мультипортовых последовательных контроллеров. Как обычно, первоначально единых стандартов не существовало, и из-за этого приходится иногда использовать параметры, передаваемые при загрузке ядра.

Драйвер PCBIT ISDN (pcbit)

Параметры:


pcbit=membase1,irq1[,membase2,irq2]


где membaseN – база разделяемой памяти для::-ой карты, a irqN – установленное прерывание для n-ой карты. По умолчанию IRQ 5 и membase 0xD0000.

Драйвер Teles ISDN (teles)

ISDN-драйвер требует аргументы загрузки в следующем виде:


teles=iobase,irq,membase,protocol,teles_id


где iobase – адрес порта ввода/вывода карты, membase – базовый адрес разделяемой памяти карты, irq – прерывание, используемое картой, teies_id – уникальная строка идентификатора.

Драйвер DigiBoard (digi)

Драйвер мультипортового последовательного контроллера DigiBoard принимает строку из шести идентификаторов или целых чисел, разделенных запятыми. Значения по порядку:

• Enable/Disable – разрешить/запретить использование контроллера;

• тип карты – PC/Xi(0), РС/Хе(1), PC/Xeve(2), PC/Xem(3);

• Enable/Disable – разрешить/запретить альтернативное расположение контактов;

• количество портов на этой карте;

• порт ввода/вывода, на который сконфигурирована карта;

• база окна памяти. Пример аргумента загрузки:


digi=E,PC/Xi,D,16,200,D0000


Более подробную информацию можно прочитать в файле /usr/src/Linux-2.4.3/Documentation/digiboard.txt.

Последовательный/параллельный радиомодем Baycom (baycom)

Формат аргумента загрузки для этого устройства:


baycom=modem,io,irq,options[,modem,io,irq,options]


Использование modem=i означает, что у вас устройство seri2; modem=2 – устройство рагЭб. Значение options=0 предписывает использование аппаратного DCD, a opton=l – программного DCD. Параметры io и irq – базовый порт ввода/вывода и прерывание.

Драйверы других устройств

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

Устройства Ethernet (ether)

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


ether=irq, iobase [, param_1 [, param_2,…]]], name


Первый нецифровой аргумент воспринимается как имя. Обычно значения param_n имеют различные назначения для разных сетевых контроллеров. Чаще всего этот параметр используют для второй сетевой карты, поскольку по умолчанию автоматически определяется только одна сетевая карта. Это можно сделать, указав:


ether=0,0,eth1


Обратите внимание, что нулевые значения IRQ и базы ввода/вывода в примере заставляют драйвер сделать автоопределение параметров сетевой карты.

Данный пример не будет автоматически определять параметры второй сетевой карты, если вместо вкомпилированных в ядро использовать загружаемые модули. Большинство современных дистрибутивов Linux используют ядро операционной системы в комбинации с загружаемыми модулями. Параметр ether= применяется только для драйверов, вкомпилированных непосредственно в ядро.

Полная информация по конфигурации и использованию нескольких сетевых карт и описание особенностей настройки конкретных типов сетевых карт содержится в ETHERNET-HOWTO.

Драйвер флоппи-диска (floppy)

Существует большое количество опций драйвера флоппи-диска, и все они перечислены в файле /usr/src/Linux-2.4.3/drivers/block/README.fd. Использование параметров загрузки для дисковода зачастую вызывает откровенное непонимание – казалось бы, более стандартное устройство трудно найти. Однако достаточно много проблем вносят ноутбуки. Почти треть параметров загрузки для дисковода так или иначе касаются только ноутбуков. Ниже приведены только основные опции:

• floppy=0, daring – сообщает драйверу дисковода о необходимости запрета всех рискованных операций;

• floppy=thinkpad – сообщает драйверу дисковода, что у вас ноутбук фирмы IBM;

• floppy=nodma – указывает драйверу дисковода не использовать DMA для передачи данных. Необходима при установке Linux на ноутбук HP Omnibooks, у которого нет работающего DMA-канала для дисковода. Эта опция также необходима, если вы часто получаете сообщения Unable to allocate DMA memory ("He могу распределить память DMA");

• floppy=nofif – полностью запрещает буфер FIFO (First Input First Output, первый вошел – первый вышел) при операциях записи/чтения. Применение этого параметра необходимо, если при доступе к дисководу вы получаете сообщения Bus master arbitration error ("Ошибка разделения шины");

• flорру=broken_dcl – указывает драйверу не использовать сигнал смены диска (Disc Change Line, DCL), однако при этом каждый раз при повторном открытии узла устройства (device node) операционная система предполагает, что диск был заменен. Необходима для компьютеров, где сигнал замены диска поврежден или не поддерживается. В основном касается ноутбуков. Однако, если вдруг возникли проблемы с определением замены дискеты – это первый признак того, что дисковод скоро выйдет из строя;

• floppy=debug – установка этой опции указывает драйверу выводить отладочную информацию;

• floppy=message – указывает драйверу выводить информационные сообщения для некоторых дисковых операций.

Драйвер звуковой карты (sound)

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

Тем более что за последнее время заметно улучшилось качество драйверов для звуковых карт и заметно увеличился ассортимент поддерживаемых драйверами устройств. Принимается аргумент загрузки в следующем виде:


sound=device1[,device2[,device3…]]


где каждое значение deviceN имеет формат 0xDTaaaId. Расшифруем формат deviceN:

• D – второй канал DMA (ноль не применяется);

• T – тип устройства (список звуковых карт до типа 26 находится в файле /usr/src/Linux-2.4.3/include/linux/soundcard.h, а от 27 до 999 – в файле /usr/src/Linux-2.4.3/drivers/soimd/dev_table.h.):

• 1=FM

• 2=SB

• 3=PAS

• 4=GUS

• 5=MPU401

• 6=SB16

• 7=SB16-MIDI

И т. д.;

• aaa – адрес ввода/вывода в шестнадцатеричном представлении;

• I – номер прерывания в шестнадцатеричном представлении;

• d – первый канал DMA.

Применение параметра загрузки sound=0 полностью запрещает драйвер звуковой карты.

Драйвер Bus Mouse (bmouse)

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

Драйвер MS Bus Mouse (msmouse)

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

Драйвер принтера (lp)

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

Формат аргумента – несколько пар адресов ввода/вывода, прерываний. Например,


lр=0х3Ьс,0,0x378,7


Драйвер принтера будет использовать порт на 0x3Ьс без прерывания и порт 0x378 с седьмым прерыванием. Порт 0x278 (если он присутствует в компьютере) не будет использоваться, поскольку автоопределение выполняется при отсутствии аргумента lр=. Для полного отключения драйвера принтера можно использовать параметр lр=о.

Процесс init

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


VFS: Mounted root (ext2 filesystem) readonly


В этой точке система находит на корневой файловой системе программу init и выполняет ее.

Процесс init – это программа, ответственная за продолжение процедуры загрузки и перевод операционной системы из начального состояния, возникающего после загрузки ядра, в стандартное состояние. Во время этого процесса init выполняет множество операций, необходимых для нормального функционирования операционной системы: монтирование и проверку файловых систем, запуск различных служб и т. п. Список производимых действий помимо конфигурации системы зависит от так называемого уровня выполнения (run level).

Достаточно простой аналогией уровня выполнения является обычный распорядок дня человека – пробуждение, приведение себя в порядок, завтрак, "выход в свет" – общение с окружающим миром, ужин, приведение себя в порядок, сон. Так изо дня в день, одни и те же операции, в одной и той же последовательности. Не умывшись, вы на работу не пойдете, завтрак обязательно идет перед ужином и т. д.

Точно так же разбиты уровни выполнения. Каждый уровень выполнения однозначно (по крайней мере, в пределах дистрибутива) определяет перечень действий, выполняемых процессом init, и конфигурацию запущенных процессов. К сожалению (а может, и к счастью) четкого разделения на уровни выполнения, их количество, действия, выполняемые на каждом уровне, нет. Так, в некоторых UNIX-системах уровней выполнения всего два. Некоторые дистрибутивы Linux таким же образом конфигурируют свою операционную систему (в дистрибутиве Slackware, например, два уровня выполнения). В других дистрибутивах (Red Hat Linux) уровней выполнения восемь. Поскольку эта книга базируется на дистрибутиве Red Hat, дальнейшее описание на нем и основано.

В операционной системе Linux существует восемь уровней выполнения:

• 0 – останов системы;

• 1 – однопользовательский режим для специальных случаев администрирования. Отсутствует поддержка сети, практически нет сервисов;

• 2 – многопользовательский режим без поддержки сети;

• 3 – многопользовательский режим с поддержкой сети;

• 4 – использование не регламентировано;

• 5 – обычно по умолчанию стартует X Window System;

• 6 – перезагрузка системы;

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

Как можно заметить, существует определенное логическое нарушение в следовании уровней выполнения. Было бы более логично нулевой уровень выполнения вставить перед шестым. Однако здесь проявили себя исторические традиции – как повелось много лет назад в UNIX, так ради совместимости и остается.

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

Конфигурационный файл init – /etc/inittab

Как всякая программа, после старта init сразу считывает свой конфигурационный файл /etc/inittab. Это обычный текстовый файл, состоящий из отдельных строк. Если строка начинается со знака # (стандартный признак комментария в конфигурационных файлах и скриптах) или пуста, она игнорируется. Все остальные строки состоят из 4 разделенных двоеточиями полей, имеющих вид:


id: runlevels: action: process


где:

• id – идентификатор строки. Выбирается произвольно, но в файле не может быть двух строк с одинаковыми идентификаторами. Если конфигурационный файл модифицируется достаточно часто, имеет смысл использовать неписаное правило нумерации строк в BASIC – номера строкам назначать кратно пяти или десяти;

• runieveis – уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами (без разделителей);

• process – команда, которая должна быть запущена;

• action – действие. В этом поле стоит ключевое слово, которое определяет, что должен делать процесс init, пока выполняется (или после выполнения) команда, заданная полем process:

– wait – ожидать завершения процесса. Соответственно, пока не закончится данный процесс, init не запускает никаких других процессов. Как правило, такого типа процессы используются для разнообразных проверочных действий (проверка и восстановление файловых систем), а так же для запуска различных служб (демонов);

– once – выполнять процесс только один раз;

– respawn – перезапустить процесс в случае его «смерти». Актуально для некоторых служб, которые должны постоянно присутствовать в системе;

– off – игнорировать данный элемент. Можно использовать при отладке конфигурационного файла;

– boot – процесс должен быть выполнен при загрузке операционной системы, поле runieveis (уровни выполнения) при этом игнорируется;

– bootwait – то же, что и предыдущая опция, но init должен ожидать окончания работы процесса;

– initdefauit – указывает init, в какой уровень выполнения необходимо перейти системе после загрузки;

– sysinit – процесс должен быть выполнен во время загрузки операционной системы до выполнения любой строки с boot или bootwait;

– powerwait – позволяет процессу init остановить систему при пропадании электроэнергии. Применение этого ключевого слова предполагает, что используется источник бесперебойного питания (UPS), имеющий специальный интерфейс, с помощью которого источник бесперебойного питания может посылать в компьютер и принимать из него различные управляющие сигналы (например "нет питания", "выключить источник бесперебойного питания", "аккумуляторы разряжены" и т. п.), а также программное обеспечение, которое отслеживает состояние источника бесперебойного питания и информирует init о том, что питание отключилось;

– ctriaitdei – разрешает init перезагрузить систему, когда пользователь нажимает комбинацию <Ctrl>+<Alt>+<Del> на клавиатуре. Однако системный администратор может определить действия по <Ctrl>+<Alt>+<Del>, например, игнорировать нажатие этой комбинации.

Этот список не является исчерпывающим. Подробную информацию о файле inittab можно узнать из тап-страниц init, inittab.

В качестве примера приведем файл inittab, который находится в только что установленной системе Red Hat 7.1.


# inittab Этот файл описывает как процесс INIT должен настроить

# операционную систему в соответствующем уровне выполнения

#

# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>

# Modified for RHS Linux by Marc Ewing and Donnie Barnes

#


# Default runlevel. The runieveis used by RHS are:

# 0 – halt (Do NOT set initdefault to this)

# 1 – Single user mode

# 2 – Multiuser, without NFS (The same as 3, if you do not have

# networking)

# 3 – Full multiuser mode

# 4 – unused

# 5 – X11

# 6 – reboot (Do NOT set initdefault to this)

id:3:initdefault:


# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit


10:0:wait:/etc/rc.d/rc 0

11:1:wait:/etc/rc.d/rc 1

12:2:wait:/etc/rc.d/rc 2

13:3:wait:/etc/rc.d/rc 3

14:4:wait:/etc/rc.d/rc 4

15:5:wait:/etc/rc.d/rc 5

16:6:wait:/etc/rcd/rc. 6


# Things to run in every runlevel.

ud::once:/sbin/update


# Trap CTRL-ALT-DELETE

са::ctrlaltdel:/sbin/shutdown -t3 -r now


# When our UPS tells us power has failed, assume we have a few

# minutes

# of power left. Schedule a shutdown for 2 minutes from now.

# This does, of course, assume you have powerd installed and your

# UPS connected and working correctly.

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"


# If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runieveis

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6


# Run xdm in runlevel 5

# xdm is now a separate service

x:5:respawn:/etc/X11/prefdm -nodaemon


Сразу после запуска процесс init считывает свой конфигурационный файл /etc/inittab и производит его разбор. Сначала он определяет, какой уровень по умолчанию установлен в системе. Как видно из приведенного конфигурационного файла id:3rinitdefault уровень выполнения, в котором будет функционировать операционная система после загрузки, равен трем (то есть предполагается многопользовательский режим с поддержкой сетевых функций). Дистрибутив Red Hat по умолчанию предлагает установить вход в систему в графическом режиме – пятый уровень выполнения.

Затем процесс init принимает к сведению строки, содержащие специальные команды, такие как:


са::ctrlaltdel:/sbin/shutdown -t3 -r now

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

pr:12345:powerokwait:/sbin/shutdown -с "Power Restored; Shutdown Cancelled"


После этого процесс init инициирует команду, которую необходимо запустить при старте системы, но перед тем как перейти к какому-нибудь уровню выполнения. Эта команда содержится в строке с ключевым словом sysinit.


si::sysinit:/etc/rc.d/rc.sysinit


После этого процесс init запускает скрипты, которые должны действовать в любом уровне выполнения:


ud::once:/sbin/update


а затем команды, соответствующие уровню, заданному по умолчанию:


13:3:wait:/etc/rc.d/rc 3

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6


Как можно заметить, есть несколько строк, запускающих скрипт гс, которые отличаются только уровнем выполнения и аргументом командной строки, передаваемой в скрипт гс. Функции, выполняемые скриптами rc.sysinit и гс, будут рассмотрены в разд. «Основные конфигурационные файлы».

После запуска скрипта гс процесс init выполняет запуск шести виртуальных консолей (процессов mingetty или, в более старом варианте, – gettty), что дает пользователям возможность регистрироваться в системе с терминалов (или виртуальных консолей, поскольку терминал вы вряд ли где-нибудь встретите). Для переключения между виртуальными консолями необходимо нажимать комбинацию одной из русифицированных клавиш верхнего ряда клавиатуры: клавиши <Alt> с номером, соответствующим номеру виртуальной консоли. После инициализации виртуальных консолей можно считать, что система полностью перешла в соответствующий уровень выполнения, загрузка завершилась, операционная система ожидает регистрации пользователя.

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

Когда пользователь останавливает систему (командой shutdown, halt, poweroff или reboot), процесс init завершает все исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор или производит перезагрузку системы.

Основные конфигурационные файлы

Таким образом, в итоге рассмотрения предыдущего раздела мы установили, что процесс init выполняет три основных действия:

• запускает скрипт rc.sysinit из каталога /etc/rc.d;

• запускает скрипт гс из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно третий или пятый уровни выполнения);

• запускает процессы getty.

Как следует из материала гл. 5, в каталоге /etc находится каталог rc.d, содержимое которого непосредственно касается процесса загрузки системы. Вот оно:


/init.d

/rc0.d

/rc1.d

/rc2.d

/rc3.d

/rc4.d

/rc5.d

/rc6.d

rc

rc.local

rc.sysinit


Опираясь на предыдущую информацию, нетрудно заметить, что существует семь каталогов для каждого уровня выполнения, какой-то каталог /init.d и три исполняемых файла, два из которых нам уже знакомы – гс и rc.sysinit. Третий файл – rc.local – вызывается по окончании исполнения файла гс и предназначен для команд, добавляемых администратором для запуска в процессе начальной загрузки. Редактировать файл гс не возбраняется, однако вероятность ошибки в файле, содержащем сотню-другую строк, очень велика, поэтому настоятельно рекомендуется использовать только файл rc.local.

rc.sysinit

Вернемся к процессу загрузки. Файл rc.sysinit предназначен для выполнения начальных действий, необходимых для корректного функционирования операционной системы. Ниже приведен список действий, выполняемых скриптом rc.sysinit. Конечно, он зависит от дистрибутива и от конфигурации системы, но в большей части он неизменен.

Действия скрипта:

• установка путей;

• установка имени хоста;

• чтение конфигурационных данных из /etc/sysconfig/network;

• вывод баннера;

• монтирование файловой системы /proc;

• конфигурирование параметров ядра системы, используя файл /etc/sysctl.conf;

• установка системных часов, используя конфигурацию из /etc/sysconfig/clock;

• установка параметров клавиатуры консоли программой loadkeys в соответствии с файлами /etc/sysconfig/console/default.kmap или /etc/sysconfig/keyboard;

• загрузка системного шрифта из /etc/sysconfig/i18n и файлов с расширением pcf.gz или gz из каталогов /etc/sysconfig/console, /usr/lib/kbd/consolefonts или /lib/kbd/consolefonts;

• активация области подкачки;

• инициализация USB-контроллера;

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

• старт PNP-устройств в соответствии с /etc/isapnp.conf;

• перемонтирование корневой файловой системы в режим чтения/записи;

• перенастройка таблицы монтирования /etc/mtab;

• проверка квот для корневой файловой системы;

• проверка необходимости загрузки модулей, нахождение зависимостей, загрузка и конфигурирование модулей;

• подключение RAID-устройств;

• запуск fsck для других систем;

• монтирование локальных файловых систем;

• включение механизма квот;

• удаление тригерных файлов загрузки;

• очистка каталогов /var/lock и /var/run;

• очистка файлов /var/run/utmp и /var/run/utmpx;

• удаление файлов-защелок из /tmp;

• включение подкачки;

• инициализация последовательных устройств, используя скрипт /etc/rc.d/rc.serial;

• загрузка модулей для SCSI-стримера;

• генерация файла заголовка для определения загружаемого ядра командой /sbin/mkkerneldoth;

• установка ссылки /boot/System.map;

• проверка использования интерактивного режима загрузки и, в случае необходимости, создание файла /var/run/confirm.

Запуск проверки файловой системы командой fsck может быть принудительно отключен при наличии файла /fastboot, а также включен при наличии /forcefsck. Создать эти файлы можно выполнением команды shutdown с соответствующими ключами. Однако не рекомендуется злоупотреблять этими возможностями.

Sysctl позволяет зафиксировать ряд параметров и обеспечить (через /etc/sysctl.conf) их установку после перезагрузки. Вот как выглядит /etc/sysctl.conf сразу после инсталяции системы:


# Disables packet forwarding

net.ipv4.ip_forward = 0

# Enables source route verification

net.ipv4.conf.all.rp_filter = 1

# Disables the magic-sysrq key

kernel.sysrq = 0

rc

Прежде чем приступить к разбору скрипта гс, необходимо упомянуть о каталогах /rcX.d и /init.d. Уточним еще раз – иерархия /rcX.d характерна для дистрибутивов Red Hat и базирующихся на нем, в других дистрибутивах и в UNIX-системах их может и не быть. Эти каталоги играют исключительную роль в процессе загрузки, поскольку они содержит основные скрипты, необходимые для организации процесса загрузки.

Подкаталог /init.d содержит по одному скрипту для каждой из служб, установленных в системе (sendmail, HTTP, Samba, FTP и т. п.). Этот скрипт отвечает за запуск, остановку или перезагрузку соответствующей службы. В каталоге /rcX.d находятся ссылки на файлы скриптов, как правило расположенные в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы К, либо с буквы S, после которой вдет двухзначное число и имя соответствующей службы. Буквы S и К – первые буквы слов start и kill соответственно. Из этого следует, что файл, начинающийся с буквы S, отвечает за старт соответствующего процесса, а файл, начинающийся с буквы К, отвечает за остановку соответствующего процесса. Цифры, идущие после S или К в именах ссылок, задают порядок запуска скриптов.

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

В качестве флагов служат файлы в каталоге /var/lock/subsys/${subsys} или /var/lock/subsys/${subsys}.init, где subsys – имя соответствующей службы. Если файлов нет, то данный процесс считается незапущенным (запуск S-файла имеет смысл), а если есть – запущенным (запуск К-файла имеет смысл). Так же для программы linuxconf создается специальный флаг /var/run/rimlevel.dir, из которого можно узнать текущий уровень выполнения системы.

Для управления набором доступных служб в текущем уровне выполнения можно использовать программу конфигурирования linuxconf, программу ntsysv (рис. 6.1), /usr/sbin/setup или графическую программу Control-panel (рис. 6.2).

Рис. 6.1. Программа ntsysv


Рис. 6.2. Программа Control-panel


Можно сконфигурировать набор доступных сервисов и вручную. Для запрета старта какого-либо сервиса достаточно просто удалить соответствующую ссылку (SXXlalala) из необходимого каталога /rcX.d, а для разрешения – создать соответствующую ссылку в нужном каталоге /rcX.d. Однако не следует забывать помимо стартовой ссылки создавать стоповую, иначе возможны проблемы, когда система некорректно завершит функционирование сервиса, для которого забыли создать стоповую ссылку. А как же корректно установить порядковый номер у соответствующей ссылки? Конечно, можно чисто эмпирически подобрать номер, исходя из функций, выполняемых сервисом. Но давайте заглянем в любой файл в каталоге /etc/rc.d/init.d/, к примеру, в файл anacron:


#!/bin/sh

# Startup script for anacron

# chkconfig: 2345 95 05

# description: Run cron jobs that were left out due to downtime


# Source function library.

. /etc/rc.d/init.d/functions

[-f /usr/sbin/anacron] || exit 0

prog="anaсron"

start () {

echo -n $"Starting $prog: "

daemon anacron

RETVAL=$?

[$RETVAL – eq 0] && touch /var/lock/subsys/anacron

echo

return $RETVAL

}

stop() {

if test "x" pidof anacron""!= x; then

echo -n $"Stopping $prog:»

killproc anacron

echo

fi

RETVAL=$?

[$RETVAL – eq 0] && rm -f /var/lock/subsys/anacron

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status anacron

;;

restart)

stop

start

;;

condrestart)

if test "x" pidof anacron""!= x; then

stop

start

fi

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

exit 1

esac

exit 0

###################################################################


Обратите внимание на часть заголовка файла:


#!/bin/sh

# Startup script for anacron

# chkconfig: 2345 95 05

# description: Run cron jobs that were left out due to downtime


Помимо указания, какой командной оболочкой необходимо воспользоваться, там есть строчка


# chkconfig: 2345 95 05


Из которой следует, что этот скрипт может использоваться во втором, третьем, четвертом и пятом уровнях выполнения, а цифры 95 и 05 – порядковый номер для стартового (95) и стопового (05) скриптов. Обратите внимание – в сумме эти две цифры составляют 100. Таким образом, достаточно просто добиться того, чтобы порядок останова сервисов был в точности обратный стартовому. Description в данном файле – комментарий, который linuxconf выдает на экран для объяснения роли данного сервиса.

Если внимательно посмотреть скрипт, то сразу видно, что опций у него больше, чем стандартные start и stop. Имеются еще restart, condrestart и status. Старт, останов и проверка состояния демона выполняются рядом функций типа daemon, killproc, status. Процедуры daemon, killproc, status – определяются в файле /etc/rc.d/init.d/functions (а тот пользуется определениями из /etc/sysconfig/init). Они предназначены для старта, останова и проверки статуса демона (сервиса).

Функция daemon обеспечивает старт сервиса. При этом можно учесть особенности поведения демона. Перед стартом сервиса всегда делается проверка наличия его в системе. Так как появление дампа (дамп – моментальный снимок памяти, используемой зависшей программой на момент ее краха) памяти сервиса может привести к проблемам с безопасностью, то все демоны запускаются в режиме без создания дампа памяти.

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

Функция status позволяет проверить текущее состояние сервиса. Если сервис нормально функционирует, то просто сообщается об этом факте. В противном случае осуществляется проверка на наличие флаговых файлов (/var/run/noflCHCTeMa.pid и /var/lock/subsys/подсистема), которые должны блокировать повторный запуск сервиса. Таким образом, несложно самому создать скрипт для управления сервисом.

rc.local

Файл /etc/rc.d/rc.local выполняется после скрипта rc. В исто рекомендуется помещать дополнительные сервисы или персональные настройки. Однако обычный пользователь редко использует эту возможность.

Другие файлы, влияющие на процесс загрузки

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

в каталоге /etc:

• /etc/fstab – содержит информацию об автоматически монтируемых при старте файловых системах;

• /etc/skel – образцы файлов конфигурации, используются при создании учетных записей новых пользователей;

• /etc/bashrc – общесистемный файл для командной оболочки;

• /etc/initscript – файл, позволяющий задать специфические действия для каждой команды из файла /etc/inittab (подробную информацию следует искать в справочной системе).

Второстепенные файлы конфигурации:

• /etc/issue – сообщение, выдаваемое системой до приглашения "login: ";

• /etc/motd – сообщение, выдаваемое системой после регистрации пользователя.

Процессы, происходящие при регистрации пользователя

Последовательность событий при регистрации пользователя:

1. Пользователь вводит свое регистрационное имя (login) по приглашению "login: " процесса getty;

2. Процесс getty выполняет программу login, передавая программе login в качестве аргумента регистрационное имя пользователя;

3. Программа login запрашивает пароль и сверяет регистрационное имя и пароль пользователя с записанными в файле /etc/passwd (login) и /etc/shadow (пароль). При этом введенный пароль пользователя шифруется по специальному алгоритму (в последнее время чаще всего используется алгоритм MD5), и полученный результат сравнивается с зашифрованным паролем, хранящимся в /etc/shadow;

4. В случае, если регистрационное имя пользователя или пароль не совпали с хранящимся в системе, то после паузы (около 3 секувд, задержка настраивается) выводится сообщение Password incorrect. Программа login завершает свою работу, а процесс getty снова выводит приглашение "login: ";

5. Если проверка регистрационного имени и пароля пользователя прошла успешно, login выводит на экран из файла /etc/motd так называемое "сообщение дня";

6. После этого login запускает командную оболочку (shell), указанную в бюджете пользователя, и устанавливает переменную среды TERM;

7. Оболочка shell выполняет файлы, исполняемые при регистрации пользователя в системе, сперва общесистемные, а затем пользовательские (если это Bourne-shell, выполняется файл. profile, если C-shell —.login и. cshrc, если Korn-shell —.profile и. kshrc). В этих файлах можно указать специфические настройки пользователя, переменные окружения, запустить какие-то приложения. После этого shell выводит на экран приглашение и ожидает ввода информации.

Основные файлы, участвующие в регистрации пользователя

В регистрации пользователя участвуют следующие файлы:

• /etc/profile – общесистемный профильный файл, устанавливает пути и другие важнейшие переменные;

• /etc/passwd – различная регистрационная информация, такая как имя пользователя, группа пользователя, домашний каталог и командный интерпретатор;

• /etc/shadow – в определенной мере дублирует файл passwd, но его основное назначение – хранить пароли пользователей;

• /etc/bashrc – общесистемный файл конфигурации bash;

• /домашний каталог/.* – пользовательские файлы конфигурации.

Если требуется, чтобы при регистрации пользователя выполнялся какой-то скрипт или устанавливались переменные окружения, то для этого надо вызов данного скрипта поместить в ""/.profile или в. bash_profile.

Если необходимо, чтобы пользователь не мог отменить выполнение какого-то скрипта или команды при его регистрации в системе, то для этого следует вписать в./etc/profile следующее:


if test $USER = petya; then

echo Hello Petya!

#здесь запускается ваш скрипт

fi


Эти команды будут исполняться только при регистрации в системе пользователя petya.

Загрузка в однопользовательском режиме

Помимо стандартной загрузки, описанной ранее, можно заставить процесс init загрузить систему на уровне выполнения, отличном от загружаемого по умолчанию. Эта возможность крайне необходима в случае, когда у операционной системы есть проблемы. Это могут быть чьи-то неудачные эксперименты с файлом inittab или неправильно сконфигурированный процесс (например, если сеть нормально не настроена, sendmail пытается найти хост, которого нет. Это может привести к задержке при старте системы в 10 минут и более). При возникновении такой ситуации необходимо перевести систему в однопользовательский режим и решить проблему. Для этого в строку приглашения LILO (boot:) надо ввести аргументы single или emergency. Это позволит загрузить систему в однопользовательском режиме (уровень выполнения 1), при котором в системе работает только суперпользователь (root) и запускается очень небольшое число самых необходимых системных служб, включая login. Другим способом перевода системы в однопользовательский режим является применение команды teiinit, которая, собственно, является символической ссылкой на сам init. Команда teiinit, помимо перевода системы с одного уровня выполнения в другой, может заставить процесс init перечитать файл inittab без перезагрузки операционной системы.

Однопользовательский режим необходим для выполнения административных задач, таких как проверка и восстановление файловой системы. К примеру, запуск fsck в разделе /usr. Обычно необходимость перехода в однопользовательский режим возникает тогда, когда fsck не может автоматически восстановить файловую систему при загрузке. Такое случается редко, обычно при пропадании электроэнергии во время работы компьютера или выходе из строя жесткого диска.

Однако бывают случаи, когда в однопользовательском режиме загрузиться с жесткого диска невозможно. В этом случае можно загрузиться в однопользовательском режиме с дискеты или с CD-ROM. Такое может произойти в случае серьезного краха системы (что иногда бывает смертельно для информации на жестком диске) или когда, к примеру, при установке Windows переписывает MBR, и в результате уничтожается загрузчик LILO (разделы Linux и система жизнеспособны, только загрузить ее нечем). Более подробную информацию см. в гл. 40.

Из соображений безопасности правильно сконфигурированная система при загрузке в однопользовательском режиме запросит пароль пользователя root.

Существует еще один способ вмешаться в процесс загрузки. В процессе загрузки системы выдается сообщение Press «I» to enter interactive startup. Если вы нажмете клавишу <1>, система перейдет в режим пошагового выполнения загрузки сервисов (подобно нажатию клавиши <F8> в Windows и выбора режима загрузки step by step).

Это позволит отказаться от загрузки подозрительных (с вашей точки зрения) процессов и определить, при запуске какого процесса возникают неприятности.

Утилиты

Подводя итог, перечислим утилиты, участвующие в процессе загрузки системы:

• init – программа, управляющая загрузкой операционной системы;

• teiinit – утилита для управления процессом init;

• runlevel – выводит текущий уровень выполнения;

• linuxconf – утилита конфигурации операционной системы Linux. В том числе позволяет редактировать список сервисов, запускаемых в текущем уровне выполнения;

• ntsysv – консольная утилита для редактирования списка сервисов, запускаемых в текущем уровне выполнения;

• /usr/sbin/setup – консольная утилита для конфигурирования операционной системы;

• control-panel – графическая утилита для конфигурирования операционной системы.

Ссылки

www.osp.ru/os/2001/02/073.htm – и. Облаков. Восход солнца вручную.

• /usr/src/Linux-2.4.3/Documentation/ – много информации, так или иначе связанной с ядром операционной системы, драйверами, файловыми системами и т. п.

• Справочные страницы man – init, inittab, teiinit, initscript.

• Соответствующие HOWTO (см. гл. 13):

– Ethernet-HOWTO – различные тонкости настройки сетевых адаптеров;

– The Linux BootPromt HOWTO – справочник по аргументам начальной загрузки, передаваемым ядру Linux во время загрузки системы;

– The Linux Bootdisk HOWTO – создание загрузочной дискеты.

Глава 7

Безопасная работа в Linux

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

Основные положения

Зачем вам безопасность?

Безопасность компьютеров и компьютерных сетей сейчас, в связи с повсеместным распространением Интернета и электронной коммерции, все больше выходит на первый план. В любой серьезной организации при приеме на работу системного администратора одним из основных требований к нему является умение организовать безопасность системы и сетей.

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

Надежность защиты системы

Следует помнить: «все, что один человек построил, другой всегда сможет поломать». Надежность защиты, в идеале, должна соответствовать следующему правилу: затраты взломщика на преодоление защиты должны существенно превышать стоимость поврежденных или украденных данных. Это, конечно, не означает, что домашнюю систему, на которой ничего важного нет, защищать не надо. Просто необходимо соразмерять затраченные усилия – для домашнего пользователя их надо потратить гораздо меньше, чем для банковской сети.

У защиты есть одна особенность – чем более безопасна система, тем больше усилий необходимо затрачивать на поддержание ее в рабочем состоянии, и тем более навязчивой становится сама система безопасности. Всегда необходимо соблюдать золотую середину между безопасностью системы и неудобствами пользователей, связанными с режимом безопасности.

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

Определение приоритетов защиты

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

Кроме того, всегда следует помнить – никаких поблажек для пользователей вне зависимости, насколько высокое положение они занимают. Пользователь, который имеет привилегии, неизбежно является брешью в безопасности.

Политика безопасности

Если ваша задача – администрирование средней или большой сети, необходимо разработать документ, который называется «Политика безопасности» и определяет права и обязанности пользователей, меры по защите системы и действия, применяемые в случае нарушения безопасности системы.

Этот документ должен быть утвержден руководством фирмы, и с ним следует ознакомить каждого сотрудника, причем желательно под расписку. Чем проще и понятнее составлен документ, тем больше вероятность, что его поймут и будут им руководствоваться. Главное правило, которое должно быть четко зафиксировано: "То, что не разрешено – запрещено".

Основные направления защиты

Прежде чем что-то защищать, необходимо знать, что, от кого и от чего.

• Физическая защита:

– защита от физического проникновения в компьютер;

– защита от аппаратных сбоев.

• Защита рабочей станции (локальная безопасность).

• Защита сервера:

– защита от пользователей;

– защита от внешнего мира.

• Защита сети:

– защита от проникновения извне;

– защита от взломов изнутри.

Физическая безопасность

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

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

Замки

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

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

Хуже дело обстоит с ноутбуками – его можно просто взять со стола. Но любой современный ноутбук имеет специальное отверстие, куда крепится замок, похожий на велосипедный.

Охрана жесткого диска

Если на жестком диске хранится информация, которая ни в коем случае не должна попасть в чужие руки, и лучше ее уничтожить, чем допустить пропажу, то для этого необходимо предпринять дополнительные меры. Если у вас небольшой сервер или рабочая станция, имеет смысл жесткий диск, на котором хранится информация, установить в специальную съемную корзину, так называемый Rack Mount. Это позволит по окончании работы извлекать жесткий диск из компьютера и прятать в сейф. Для больших серверов такое сделать несколько затруднительно, но иногда имеет смысл. В случае, если к вам заявляются гости, которым «невозможно отказать», можно практически моментально извлечь жесткий диск и уничтожить его, разбив об пол. (Автору известна фирма, возле сервера которой стоит охранник, в случае попытки прорыва в серверную обязанный выстрелом из пистолета уничтожить жесткие дискию.)

BIOS

BIOS является самым первым звеном, от которого зависят настройки компьютера, и попытка проникновения в BIOS будет произведена взломщиком в 99 % случаев. Практически любая BIOS имеет возможность установить два типа паролей – на вход в систему и на вход в BIOS. Это не дает стопроцентной защиты (установки BIOS могут быть обнулены, если кто-то имеет доступ вовнутрь корпуса), но может быть хорошим сдерживающим фактором. Однако следует помнить, что в случае установки загрузочного пароля на сервере система не сможет загрузиться без вмешательства администратора. (Очень неприятно, когда в три часа ночи вас выдергивают из постели для того, чтобы вы ввели пароль в сервер.)

Загрузочные устройства

Если не установлен пароль в BIOS, велика вероятность, что взломщик попытается загрузить систему с помощью системной дискеты, CD-ROM-диска, Zip-дисковода и тому подобных съемных устройств. Это дает ему полный доступ к жестким дискам компьютера. Поэтому, помимо установки пароля на вход в BIOS, необходимо запретить в BIOS загрузку со всех устройств, кроме жесткого диска. Так же рекомендуется либо отключить в BIOS сервера дисководы съемных устройств, либо (при наличии такой возможности) физически отключить флоппи-, Zip– и тому подобные дисководы и CD-ROM, а иногда даже вообще не устанавливать их в сервер.

Безопасность загрузчика операционной системы

Загрузчики Linux также имеют возможность установки стартового пароля. Это позволяет предотвратить загрузку операционной системы без ввода пароля.

Программы xlock и vlock

Если вы отходите на какое-то время от своего рабочего компьютера и не хотите выключать его, используйте программы xlock и vlock. Эти программы заблокируют доступ к системе, причем как визуально (черный экран или какая-то надпись типа «Консоль заблокирована»), так и с помощью клавиатуры:

• xlock предназначена для X Window. Она «запирает» дисплей и для продолжения работы запрашивает пароль;

• vlock – консольная программа, которая позволяет «запереть» часть или все виртуальные консоли системы.

Конечно, «запирание» консоли не позволит нанести прямой вред работе, однако не помешает перезагрузить машину (кнопку Reset или отключение питания еще никто не отменял).

Определение нарушений физической безопасности

При подозрении на попытку нарушения физической безопасности системы первым делом проверьте, что сразу бросается в глаза – наличие физических повреждений. Второе – определите, была ли произведена перезагрузка системы. Операционная система Linux очень надежна, и непроизвольные перезагрузки по ее вине исключены. Если операционная система непроизвольно перезагружается, причина, скорее всего, в аппаратной части. Известны случаи, когда установленный на столе компьютер перезагружался, если кто-то задевал стол. Причиной была микротрещина в материнской плате. Во всех остальных случаях перезагрузка системы производится администратором (пользователем) или по команде источника бесперебойного питания. Если компьютер перезагружен без вас – это проблема, требующая изучения.

Вот часть того, что следует проверить:

• короткие или незаконченные системные журналы;

• системные журналы, которые содержат неверные права доступа или права собственности;

• системные журналы, в которых присутствуют записи перегрузки или перезапуска сервисов;

• отсутствие системных журналов;

• подключение пользователя с нетипичного для него места или использование программы su пользователем, который никогда этого не делал.

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

Локальная безопасность

Сразу после установки системы необходимо позаботиться о защите от локальных пользователей. Достаточно много методов взлома основано на различных недочетах или ошибках программного обеспечения, доступного только им. Локальный пользователь и сам по себе потенциально опасен. Предоставьте ему чуть больше прав, чем следует и одной простой командой rm он может снести половину операционной системы.

Регистрация новых пользователей

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

• предоставлять минимальное количество привилегий;

• отслеживать, когда и откуда происходит регистрация пользователя;

• не забывать удалить пользователя, если он больше не работает в фирме;

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

Безопасность пользователя root

Наиболее желанным приобретением для взломщика является пароль суперпользователя (root). Поскольку этот пользователь в системе «царь и бог», проблемы, связанные с ним, для системы катастрофические. Следует заходить в систему под именем пользователя root как можно реже и, желательно, не через сеть. Существует несколько правил, которых необходимо придерживаться при работе в системе в качестве пользователя root:

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

• используйте потенциально опасные команды (удаление, переименование, перенос файлов) со специальным ключом, который заставляет команду спрашивать, действительно ли вы хотите совершить эту операцию с файлами. Помните, удаленные файлы в операционной системе Linux восстановить невозможно;

• регистрируйтесь в системе как пользователь root только в экстраординарных случаях. Для выполнения отдельных команд вполне можно воспользоваться программами su и sudo;

• исключите из своего и пользовательского обихода r-утилиты – rlogin, rsh, rexec и тому подобные, а также программу telnet. Лучше просто удалите их из всех систем. Эти программы были хороши лет двадцать пять назад. Теперь же каждый второй взломщик пытается ими воспользоваться в корыстных целях. В качестве замены используйте пакет SSH;

• сначала хорошенько подумайте, что собираетесь делать, потом проверьте, правильно ли ввели команду. И только затем нажмите клавишу <Enter>.

Безопасность файлов и файловой системы

Множество взломов операционной системы увенчались успехом из-за неправильной установки прав доступа к файлам или проблем с файловой системой. Существует несколько правил, которых необходимо придерживаться при работе с установкой прав:

• ограничьте возможность запуска пользователем специальных команд или файлов. Для разделов, на которые может записывать данные любой пользователь, в файле /etc/fstab поставьте опцию nosuid. Так же можно использовать nodev (запрещает создание символьных и блочных устройств), поехес (запрет выполнения программ) и го (монтировать раздел только для чтения);

• не рекомендуется использовать NFS. Если все же NFS установлена, применяйте максимальные ограничения;

• настройте маску для создания пользователями файлов в максимально ограничивающем режиме. Идеальный вариант – маска 077;

• установите квоты на использование файловой системы для пользователей. Также желательно запретить приложениям пользователя создавать дамп памяти программы на диске;

• старайтесь свести к минимуму количество SUID– и SGID-файлов в системе. Поскольку эти программы предоставляют пользователям, которые их запускают, специальные привилегии, необходимо убедиться, что небезопасные программы не установлены;

• обнаруживайте и удаляйте файлы. rhosts;

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

• периодически проверяйте права доступа ко всем важнейшим файлам системы. Изменение прав доступа к файлам – один из основных признаков взлома системы.

Проверка целостности файлов

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

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

Особенности безопасности файловой системы Ext2

В файловой системе Ext2 присутствует поддержка дополнительных флагов для файлов, используемых для повышения безопасности системы. Ядро Linux версии 2.4 позволяет работать со следующим набором атрибутов:

• A – Atime. Система не модифицирует access time для данного файла;

• S – Sync. Система фиксирует все изменения, происходящие в данном файле на физическом диске синхронно с приложением, изменяющим данный файл;

• а – append. Система позволяет открывать данный файл с целью его дополнения и не позволяет никаким процессам перезаписывать или усекать его. Если данный атрибут применяется к каталогу – процесс может создавать или модифицировать файлы в этом каталоге, но не удалять их;

• i – immutable. Система запрещает любые изменения данного файла. Если данный атрибут применяется к каталогу – процессы могут модифицировать файлы, уже содержащиеся в данном каталоге, но не могут удалять файлы или создавать новые;

• d – no dump. Программе, создающей дампы системы, дается указание игнорировать данный файл во время создания резервной копии;

• с – compress. Система использует прозрачную компрессию для данного файла;

• s – secure deletion. Удаление такого файла сопровождается записью блоков диска, на которых он располагался, нулями;

• u – undelete. Когда приложение запрашивает файл на удаление, система должна сохранить его блоки на диске, чтобы потом его можно было восстановить.

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

К сожалению, ядро Linux версии 2.4 игнорирует флаги с, s и и.

Флаг A или Atime для определенных файлов может дать некоторую прибавку производительности, т. к. Избавляет систему от необходимости постоянно обновлять поле access time для этих файлов каждый раз, когда их открывают на чтение. Атрибут s или sync увеличивает надежность сохранения данных ценой некоторой потери производительности системы.

Команды для установки и чтения атрибутов в Ext2

Есть две утилиты, специально предназначенные для установки и чтения данных атрибутов: chattr и lsattr.

Команда chattr используется для установки и снятия флагов:

• chattr +Si test. txt – установить флаги sync и immutable для файла test.txt;

• chattr – ai test.txt – убрать флаги append-only и immutable у test.txt;

• chattr =aiA test.txt – установить ограничение на использование только флагов a, i и A.

Команда lsattr выводит список файлов и каталогов с атрибутами и функционально напоминает команду ls.

Команда lsattr -a test*, например, выдаст на экран:


–i– test.conf

–а– test.log

– test.txt


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

Утилита leap позволяет конфигурировать параметры ядра, и в том числе те, которые определяют работу файловой системы Ext2 с расширенными атрибутами. Вот наиболее важные вызовы leap, которые нас интересуют:

• leap cap_linux_immutable;

• leap CAP_SYS_RAWIO.

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

Пароли и шифрование

Стандартным атрибутом безопасности системы в наше время является пароль. Наиболее общие рекомендации по выбору паролей приведены ниже:

• длина пароля не должна быть менее, чем 8 символов;

• пароль должен состоять из букв, набираемых в разных регистрах, символов типа # $ @ /. , и цифр;

• не рекомендуется использовать что-либо обозначающие слова;

• желательно периодически изменять пароли.

Семейство Linux для шифрования паролей использует односторонний алгоритм шифрования, называемый DES (Data Encription Standard, стандарт шифрования данных). Хэши паролей затем сохраняются в файле /etc/shadow. Использование одностороннего алгоритма шифрования исключает возможность провести расшифровку /etc/shadow для получения паролей. Однако наличие у взломщика файла /etc/shadow значительно облегчает подбор пароля пользователя программами типа John the Ripper. На современных машинах шестисимвольный пароль подбирается этой программой за пару часов. РАМ-модули (такие как MD5 или подобные) позволяют использовать различные алгоритмы шифрования для паролей.

Протоколы шифрования трафика

Для надежной (в плане безопасности) передачи данных в Интернете используются следующие методы и протоколы:

• SSL – Secure Sockets Layer, метод шифрования, разработанный Netscape для обеспечения безопасности в сети. Он поддерживает несколько различных протоколов шифрования и обеспечивает идентификацию как на уровне клиента, так и на уровне сервера. SSL работает на транспортном уровне и создает безопасный шифрованный канал данных. Чаще всего он используется при посещении пользователем защищенного Web-узла;

• S-HTTP – интернет-протокол, реализующий сервис безопасности;

• S/MIME – Secure Multipurpose Internet Mail Extension, стандарт шифрования, используемый в электронной почте или других типах сообщений в Интернете.

SSH

SSH (Secure Shell) – программа, позволяющая зарегистрироваться на удаленном сервере и иметь шифрованное соединение. SSH используется вместо устаревших и небезопасных утилит rlogin, rsh и rep. Применяемый протокол использует шифрование с помощью открытого ключа как для шифрования соединения между двумя машинами, так и для опознавания пользователей. Существует также несколько бесплатных реализаций SSH-клиентов для Windows.

РАМ

РАМ (Pluggable Authentication Modules) – унифицированный метод идентификации. Практически все современные приложения, которые используют идентификацию пользователя, имеют соответствующий модуль РАМ. Это позволяет пользователю «на лету» изменять методы идентификации, требования, инкапсулировать все локальные методы идентификации без перекомпиляции программ.

Вот что можно делать с РАМ:

• использовать различные алгоритмы шифрования для своих паролей;

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

• «налету» активизировать теневые пароли (shadow password);

• разрешать определенным пользователям регистрироваться только в определенное время и/или из определенного места.

CIPE

CIPE – криптографическая IP-инкапсуляция, шифрует данные на сетевом уровне. Шифруются пакеты, которые передаются между компьютерами в сети. CIPE можно также использовать при тунелировании (tunnelling) для создания виртуальных частных сетей (VPN, Virtual Private Networks). Преимущество низкоуровневого шифрования состоит в том, что оно разрешает прозрачную работу между двумя сетями, соединенными в VPN, без каких-либо изменений в программном обеспечении.

Kerberos

Kerberos является идентификационной системой, разработанной по проекту Athena в Массачусетском технологическом институте (MIT). Kerberos представляет сервер идентификации, услугами которого могут пользоваться компьютеры, подключенные к сети. Таким образом нет необходимости заводить на всех компьютерах учетную запись пользователя. Очень часто используется при модемном соединении провайдерами, имеющими несколько удаленных площадок.

CFS и TCFS

CFS – криптографическая файловая система. Это метод шифрования всей файловой системы, позволяющий пользователям сохранять в ней зашифрованные файлы. Метод использует NFS-сервер, запущенный на локальной машине.

TCFS – прозрачная криптографическая файловая система, является улучшенным вариантом CFS, поскольку более интегрирована с файловой системой и, таким образом, прозрачна для всех пользователей, использующих зашифрованную файловую систему.

Безопасность ядра

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

Устройства ядра

Устройства /dev/random и /dev/urandom служат для получения случайных чисел в любой момент времени. Эти числа используются в генераторах PGP-ключей (Pretty Good Privacy – общедоступная система кодирования информации с открытым ключом), SSH-вызовах и других аналогичных приложениях.

Устройство /dev/random является высококачественным генератором случайных чисел, основанным на временно-зависимых параметрах системы.

Работа устройства /dev/urandom подобна, однако она более быстра, но менее надежна.

Сетевая безопасность

Все наверняка слышали, как кто-то по сети взломал Web-cepвep и испортил его содержимое или украл номера кредиток. Таких случаев становится все больше, поэтому крайне важно обеспокоиться сетевой безопасностью. Не следует, однако, забывать, что атака может проистекать в равной мере как из Интернета, так и из внутренней сети фирмы, поэтому крайне неразумно защищать сеть от атак снаружи и ничего не предпринимать для защиты от атак из внутренней сети.

Packet Sniffers

Одним из наиболее общих методов взлома сетевых машин является применение сниферов (Packet Sniffer – в дальнейшем просто снифер – программа, позволяющая перехватывать сетевые пакеты, предназначенные для других компьютеров. Первоначально использовалась для анализа сетевого трафика) с уже взломанного компьютера вашей сети. Эта программа перехватывает все Ethernet-пакеты сети и сканирует их на наличие слов Password, Login или su. Таким образом без особых усилий взломщик получает множество паролей для систем, которые он даже и не пробовал пока взламывать. Поэтому крайне нежелательно использовать сетевые сервисы, передающие пароли в незашифрованном виде. Этот способ взлома напрямую связан с обеспечением физической безопасности, т. к. посторонний может просто принести с собой ноутбук и подключиться с его помощью к внутренней сети фирмы.

Использование SSH или других методов шифрования паролей сводит к нулю эффективность этого способа взлома.

Системные сервисы

Прежде чем подключить систему к сети, следует подумать, какие сервисы будут предоставляться системой. Чем меньше запущенных сервисов, тем меньше вероятность взлома системы. Можно также ограничить список компьютеров, для которых разрешено использование сервисов вашего компьютера. Для этого в файле /etc/hosts.allow необходимо прописать только те компьютеры, которым разрешено иметь доступ к сервисам на вашем компьютере. Для запрещения доступа «подозрительных» систем следует использовать файл /etc/hosts.deny. Также проверьте ваши каталоги /etc/rc.d/rcN.d на предмет наличия запуска сервисов, которые вам не нужны.

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

DNS

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

identd

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

Сетевые сканеры

Существует целый класс программных пакетов, которые выполняют сканирование портов и сервисов в компьютерных сетях. Сетевые сканеры используются администратором системы для определения уязвимых мест системы, однако никто не мешает воспользоваться ими и злоумышленнику. Наиболее известными, хотя уже и устаревшими, представителями этого класса программ являются SATAN и ISS. SATAN (инструмент администратора безопасности для анализа сетей) является сканером портов с Web-интерфейсом. Он может быть полезен для выполнения легкой, средней или тщательной проверки машины или сети машин. ISS (сканер безопасности Интернета) также является сканером портов. Он быстрее чем SATAN, но SATAN предоставляет больше информации.

Электронная почта

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

«Отказ в предоставлении доступа»

Очень популярный в последнее время вид атаки. Смысл ее напоминает пословицу – «Сам не гам, и другому не дам». Взломщик пытается искусственно загрузить некоторые сервисы настолько, чтобы они не могли отвечать на запросы или запрещали доступ к вашей машине законным пользователям. Имеется несколько разновидностей такой атаки:

• SYN flooding – сетевая атака "отказ в предоставлении доступа". Использует преимущества «лазейки» (loophole) в методе создания ТСР-соединения. Последние версии ядер Linux имеют несколько конфигурационных настроек для предотвращения SYN Flooding-атак;

• Ping flooding – простая грубая реализация атаки "отказ в предоставлении сервиса". Взломщик посылает компьютеру «поток» ICMP-пакетов. Если атака происходит с компьютера с большей полосой пропускания, нежели имеет ваш компьютер, или с нескольких компьютеров одновременно, то ваша машина будет лишена возможности посылать что-либо в сеть. При вариации этой атаки, называемой «smurfmg», на определенный сервер посылается поток ICMP-пакетов с обратным IP-адресом вашей машины;

• атака Ping о Death использует тот факт, что поступающие ICMP-пакеты ECHO REQUEST могут быть больше, нежели может вместить структура данных ядра, которая сохраняет эту информацию. Из-за приема единичного большого (65 510 байтов) ping-пакета многие системы зависали, поэтому эта атака быстро обрела свое название;

• Teardrop/New Tear – атака, основанная на ошибке, присутствующей в коде фрагментации IP в Linux– и Windows-платформах. Она была исправлена еще в ядре версии 2.0.33.

Безопасность NFS

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

Firewall

Firewall (брандмауэр, сетевой экран), используя определенный набор правил, ограничивает прохождение информации как внутрь, так и за пределы вашей локальной сети. Обычно компьютер, выполняющий роль брандмауэра, соединен с Интернетом и вашей локальной сетью, и доступ к Интернету из локальной сети выполняется только через него. Брандмауэр является полезным инструментом в обеспечении безопасности вашей сети. Однако не следует забывать о безопасности только из-за того, что у вас установлен брандмауэр. Если нарушитель прорвался через брандмауэр или действует изнутри сети, у него будет огромное поле деятельности.

Существует большое количество типов и методов организации брандмауэра. Более подробную информацию вы получите, прочитав великолепную книгу "Брандмауэры в Linux" (см. приложение 5).

Администрирование системы

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

Резервная копия системы

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

В настоящее время существует несколько малобюджетных вариантов резервирования системы:

• использование жестких IDE-дисков. Сегодня приличный жесткий диск емкостью 20 Гбайт стоит порядка восьмидесяти долларов. Как представляется, это небольшая плата за систему, которую отлаживали долго и упорно, а тем более, если в ней хранятся важные данные. Еще одно преимущество резервного копирования на жесткий диск – его можно сконфигурировать так, чтобы было достаточно подключить винчестер в сервер, и система практически сразу становится полностью работоспособна;

• использование привода CD-RW. Очень экономичный вариант. При стоимости одного диска CD-R менее шестидесяти центов, а диска CD-RW около доллара, это, пожалуй, самый экономичный вариант;

• использование привода DVD-RAM. Позволяет резервировать достаточно большие объемы данных;

• привод Zip. Удобен тем, что существует внешний вариант исполнения;

• привод Jazz. Емкость диска порядка одного гигабайта;

• накопители на магнитооптике. Существуют разные модели с разной емкостью дисков. Достаточно дороги;

• ленточные накопители. Существуют разные модели с разной емкостью. Достаточно дороги.

Сразу после создания резервных копий на лентах и других перезаписываемых носителях необходимо поставить защиту от записи. Сохраняйте ваши резервные копии в надежных недоступных местах. Периодически проверяйте восстанавливаемость резервной копии. Периодически устраивайте "боевые учения" по восстановлению системы.

Режим резервирования

Существует несколько стратегий резервирования, и только вам решать, какая стратегия резервирования подходит. Достаточно универсальной является следующая стратегия:

• в конце рабочей недели делается полная резервная копия системы;

• в течение недели делается нарастающее резервирование системы (то есть резервируется изменение данных по сравнению с прошлым днем);

• при особо важных изменениях в системе резервная копия делается немедленно.

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

Существуют специальные программные пакеты, позволяющие писать сценарии автоматизированного сохранения и восстановления данных. Для простых схем резервирования достаточно часто используются скрипты, написанные администратором системы.

Резервирование RPM-базы

При взломе системы взломщик обычно модифицирует для своих нужд несколько файлов, устанавливаемых при инсталляции из пакетов RPM. Если есть подозрение на взлом системы – одним из первых действий будет проверка целостности этих файлов. Однако, если работал опытный взломщик, велика вероятность того, что он подправит нужным ему образом базу установленных RPM-пакетов или, вообще, уничтожит ее. На функциональности системы отсутствие или повреждение базы установленных RPM-пакетов не влияет, но при этом теряется возможность проверки целостности установленных пакетов. Поэтому крайне желательно периодически копировать базу RPM (/var/lib/rpm/*) на съемный носитель и хранить его отдельно.

Для проверки целостности установленных пакетов можно воспользоваться командой


rpm -Va


Но не забывайте после установки или удаления пакетов обновлять резервную копию базы RPM.

Файлы регистрации

Первое, что делает опытный взломщик системы после успешного проникновения в нее – заметает следы. А поскольку ведутся специальные файлы регистрации пользователей в системе, подключений к сетевым сервисам и тому подобных событий, вполне очевидным действием взломщика является уничтожение или модификация файлов журналов. Поэтому крайне важно сохранить эти файлы в неприкосновенности. Начинать надо с ограничения списка пользователей, способных читать и писать в каталог /var/log.

Регулярно инспектируйте свои журнальные файлы. Большое количество неудачных попыток регистрации или сканирование портов с одного и того же компьютера может указывать на попытку вторжения. Чтобы узнать, где ваш дистрибутив ведет системные журналы, нужно посмотреть в файл /etc/syslog.conf, который указывает syslog, куца записывать различные сообщения. Если вы заметили, что в журнальных файлах кто-то похозяйничал, необходимо определить, когда это началось и каких процессов касалось. Лучше всего в такой ситуации восстановить журналы с резервных копий и определить момент взлома.

Можно настроить syslog так, чтобы он отсылал копию наиболее важных данных на безопасную систему. Это предотвратит попытки взломщика скрыть свою деятельность путем удаления информации о его действиях в системе. Более подробную информацию по syslog.conf можно найти на соответствующей странице помощи (man-странице).

Обновляйте операционную систему

Большинство систем Linux устанавливаются с компакт-дисков. Но жизнь не стоит на месте, выходят различные обновления и исправления программ. К примеру, к дистрибутиву Red Hat только официальных обновлений за четыре месяца набралось более ста тридцати мегабайт. И это далеко не все обновления! Однако в погоне за номером версии не стоит устанавливать самое свежее программное обеспечение. Есть одно неплохое правило «Работает – не трогай!» Нашли в программе ошибку – обновите. Хотите получить самую свежую версию программы – подождите неделю-другую после ее выхода. Пусть на грабли наступают другие. За это время наверняка в безопасности системы найдутся прорехи или в программе ошибки. Однако после обнаружения ошибки в безопасности программы, не затягивайте с ее обновлением – велик шанс, что вашу систему попытаются взломать, используя именно эту брешь.

Действия во время и после взлома системы

Если вы обнаружили, что ваша система взломана – не паникуйте, расслабьтесь. Поспешные действия еще никого до добра не доводили.

Нарушение безопасности

Проще всего обнаружить физический взлом системы или подключение к вашей сети. В каждой фирме есть служба безопасности, воспользуйтесь ее услугами или вызовите представителей правоохранительных органов.

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

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

Взлом системы произошел

Взлом обнаружен. Что дальше?

Закрытие бреши

Если вы четко знаете, каким образом взломщик проник в систему, постарайтесь сразу же закрыть эту брешь. К примеру, взлом произошел через сервер Samba. Самый простой выход – завершить процесс и отправиться в Интернет искать решение проблемы. Как правило, существует обновленная версия программы или какой-либо список исправлений известных ошибок.

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

Оценка повреждений

Оцените повреждения. Выясните, что было нарушено. Не исключено, что в результате взлома проще переустановить систему, чем пытаться восстановить. Правда, такие тяжелые повреждения встречаются не часто.

Так как Linux достаточно легко инсталлировать, рекомендуется создать специальный конфигурационный файл kickstart, содержащий список установленных в системе пакетов, который затем используется при инсталляции системы. А конфигурационные файлы следует заранее переписать. Рекомендуется также восстановить систему из резервной копии, поскольку наверняка резервная копия содержит важные данные. Однако нужно очень точно определить момент взлома системы, чтобы не случилось так, что восстановленная из резервной копии система уже содержит «закладки» взломщика.

Выслеживание взломщика

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

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

Ссылки

В Интернете существует очень много узлов, посвященных безопасности систем UNIX и специфике безопасности Linux. Обязательно подпишитесь на списки рассылки по вопросам безопасности и анонсы свежих выпусков программ. В частности, большой список русскоязычных рассылок, в том числе и по Linux, можно найти на сайте www.citycat.ru. Кроме того, можно посетить и эти адреса:

www.rootsheU.com – сайт, полезный для изучения современных методов взлома, которые сейчас используют взломщики;

www.netspace.org/lsv-archive/bugtraq.html/ – содержит советы в области безопасности;

www.aoy.com/Linux/Security/ – хороший узел по безопасности в Linux.

Вопросы безопасности затрагивают документы, находящиеся и по нижеприведенным ссылкам.

www.linuxdocs.org – Network Administrators Guide (Руководство сетевого администратора).

linux.webclub.ru/books/linuxsos/index.html – безопасность и оптимизация Linux. Редакция для Red Hat – русский перевод.

dc.internic.net/rfc/rfc2196.txt – документ, посвященный политике безопасности системы.

www.consensus.com/security/ssl-talk-faq.htrnl – часто задаваемые вопросы по протоколу SSL.

www.kernel.org/pub/linux/libs/pam/index.html – РАМ-модули.

linux.webclub.ru/adm/attr_ext2.html – Безопасность файловой системы Ext2. Michael Shaffer.

pwl.netcom.com/~spoon/lcap/ – Linux Kernel Capabilities Bounding Set Editor.

www.linuxdocs.org – содержит соответствующие HOWTO (см. гл. 13):

– security-howto – документ, посвященный безопасности операционной системы;

– hacker-howto – документ, посвященный взлому и защите от оного операционной системы;

– NFS HOWTO – документ о настройке и использовании NFS – сетевой файловой системы;

– Firewall-HOWTO – документ, посвященный настройке брандмауэра;

– IP-Masquerade mini-howto – организация маскарадинга.

Глава 8

RPM

Фирма Microsoft и Windows уже приучили нас, что установка любой программы начинается с запуска программ Setup или Install. Затем, после согласия с лицензионным соглашением (по которому фирма-производитель обязывает вас установить программное обеспечение только на один компьютер, и, в свою очередь, сообщает, что не несет никакой ответственности за функционирование этого программного обеспечения), задается пара вопросов (куда и какие модули программного обеспечения установить) и все: «Программа установлена, перезагрузите, пожалуйста, компьютер». Достаточно быстро и просто.

Остаются, конечно, некоторые вопросы: "Почему я не могу убрать лишнюю функциональность, зачем эта игра перезаписала мой DirectX 8 своим DirectX 5, для чего в системе столько DLL для разных версий Visual Basic." Но, в общем, это намного проще, чем вручную копировать какие-то архивы, распаковывать их, править конфигурационные файлы, искать конфликты библиотек и версий, а в самом неприятном случае – получать ошибки компиляции или линковки и просматривать исходные тексты программ. Это еще один упрек Linux со стороны пользователей Windows. И как часто бывает, они не совсем правы. Да, в большинстве своем программы Linux поставляются в виде исходных кодов, упакованных в архив. Но так наиболее просто удовлетворить требование лицензии GNU, которая обязывает дистрибьютора программы в обязательном порядке предоставить потребителю ее исходный код.

Не следует также забывать, что программы разрабатываются не только для Linux, обычно их можно откомпилировать на многих UNIX-платформах, а в UNIX-мире стандартом de-facto для пакетов является так называемый «tarballs». Tarballs – это архивы, которые распаковываются утилитой tar (файлы с расширением tar) или gzip (файлы с расширением tar.gz). Поскольку Linux-программы по большей части распространяются через Интернет, проще выложить на FTP-сервер и скачать оттуда архив только с исходным кодом программы, чем выкачивать архив и с исходными кодами, и с откомпилированной программой. Кроме того, энтузиасты Linux, как правило, имеют привычку смотреть исходные коды программ, изменять их и компилировать так, как им нравится (включать поддержку команд определенного процессора, добиваться максимального уровня оптимизации, различной степени выдачи отладочной информации и т. д.).

Однако с приходом в мир Linux пользователей, которые не желают учить опции компилятора, помнить, какие библиотеки установлены в системе, ждать по полчаса, пока откомпилируется программа и т. п., остро возник вопрос о стандартизации процесса установки программ в Linux. На сегодняшний день есть, по меньшей мере, три, или, если быть совсем точным, три с половиной способа установки программ. Способ первый, «старейшина» – программы распространяются в виде архивов исходных кодов *.tar.gz, которые необходимо распаковать и, в простейшем случае, откомпилировать командами make, make install. Способ второй — воспользоваться программой RPM (Red Hat Linux package management, Red Hat Linux менеджер пакетов) и, соответственно, пакетами RPM, содержащими уже откомпилированный код программ. Способ «два с половиной» – воспользоваться программой RPM и пакетами RPM с исходным кодом. Здесь два варианта: или получать исходный код пакетов, или делать из пакета с исходным кодом пакет с исполняемым кодом и устанавливать. Способ третий — разновидность второго – менеджер пакетов, входящий в дистрибутив Linux Debian. Возможно, в этой главе не будет упомянут какой-то другой способ инсталляции или менеджер пакетов. Мир Linux и Интернет настолько велики, что узнать или охватить все невозможно. Как уже упоминалось, значительная часть современных дистрибутивов тем или иным образом основаны на дистрибутиве Red Hat Linux, или, по крайней мере, имеют утилиты, способные работать с пакетами формата RPM. Поэтому эта глава полностью посвящена RPM-пакетам и RPM-менеджерам.

Система поддержки пакетов RPM

Во многом благодаря RPM, а так же удобной программе инсталляции Linux, дистрибутив Red Hat Linux завоевал огромнейшую популярность. Рассмотрим вкратце основные особенности RPM.

Для системного администратора RPM предоставляет следующие возможности:

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

• получать информацию об используемых пакетом файлах;

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

• производить проверку пакетов;

• выдавать раздельно пакеты в авторском виде и сделанные к ним добавки;

• производить автоматизированное обновление пакетов (например, получение обновлений с FTP-сервера).

Благодаря этому с помощью RPM можно устанавливать, обновлять, удалять пакеты единственной командой в текстовом режиме или несколькими щелчками мышью в графическом менеджере пакетов. Пакет RPM содержит информацию о себе в заголовке пакета. Эта информация при установке пакета добавляется в базу данных установленных пакетов, где содержится информация о том, где находится пакет, какие дополнительные (supporting) пакеты ему необходимы и установлены ли они. Знатоки Windows могут заметить, что централизованная база данных установленных пакетов очень сильно напоминает часто критикуемый реестр Windows. Сравнение, однако, поверхностно. На самом деле, реестр Windows помимо списка установленных программ содержит в себе многочисленные системные настройки, без которых (повреждение или отсутствие реестра) не будет функционировать система в целом. Для Linux отсутствие или повреждение базы данных установленных пакетов вовсе не фатально. Как будет показано далее, базу данных всегда можно попытаться создать заново. Но не это главное. Отсутствие или повреждение базы данных никоим образом не сказывается на работоспособности системы – она полноценно функционирует. Могут возникнуть проблемы с обновлением или установкой пакетов, но их можно обойти с помощью специальных ключей программы RPM (принудительная инсталляция, отказ проверять зависимости и т. п.).

Принципы наименования пакетов

Имя пакета характеризует сам пакет, его версию, версию сборки исполняемых файлов (релиз) и архитектуру и задается в виде «имя_программы-версия-релиз.платформа» или «src.rpm».

Рассмотрим для примера пакет telnet-server-0.17–18.i386.rpm. По названию файла можно определить, что пакет содержит tclnct-ссрвср версии 0.17, версия сборки файлов (релиз) 18 для данной версии пакета Red Hat Linux, собрана для процессора Intel 80386 и выше, формат файла – RPM. Файл пакета, у которого вместо архитектуры (например, i586) стоит src, содержит в себе исходные тексты программы. Иногда встречается немного другая структура именования пакета, например, apache-1.3.3–1.src.rpm. Здесь версия пакета – 1.3.3 – состоит из трех цифр. На инсталляционных дисках Red Hat и на FTP скомпилированные пакеты хранятся в каталоге RPMS, а пакеты, содержащие исходный код, – в каталоге SRPMS.

Конец ознакомительного фрагмента.