Глава 7. Системные трюки

7.1. Антивирус ClamAV

7.1.1. Вирусы в Linux

Первым делом нужно разрушить миф о том, что в Linux нет вирусов. Вирусы в Linux есть. По данным сайта www.virus-list.com для Linux написано всего 1111 вирусов (на момент написания этих строк).

Почему "всего"? Потому что по данным того же www. viruslist.com всего вирусов и их разновидностей существует почти полмиллиона (!). Но 1111, согласитесь, тоже немало.

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

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

А вот если вирус запущен от имени пользователя root (вы его "поймали", когда работали под именем root), тогда вирус сможет разнести систему в пух и прах! Хотя, учитывая, что для Linux написано чуть больше 1000 вирусов, большая часть из которых не вышла за пределы тех "лабораторий", в которых была создана, по вероятность разнести систему самому ("нечаянно") гораздо выше, чем вероятность заражения вирусом.

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

• Во-первых, они рассчитаны на дыры в старых сетевых службах, которые уже давно "залатаны".

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

• В-третьих, все современные дистрибутивы по умолчанию активируют брандмауэр, который закрывает любой доступ извне (кроме, правда SSH, но по протоколу SSH вирусы не paспространяются).

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

А теперь возьмем другой сценарий. Вам кто-то может прислать по электронной почте документ с вирусом. Пока OpenOffice не подвержен обычным макровирусам MS Office, но опять-таки вы можете передать данный файл Windows-пользователям. Результат будет тем же, что и в предыдущем случае.

Поэтому антивирус для Linux нужен. Другое дело, какой антивирус установить. Для среды Linux разработаны Linux-версии популярных антивирусов AVP (www.kaspersky.ru) и DrWeb (www.drweb.com), но они платные. Если вы хотите использовать AVP или DrWeb, то всегда сможете их купить на приведенных выше сайтах. Они поставляются с подробной документацией, поэтому рассматривать их здесь мы не будем.

Вместо коммерческих антивирусов мы рассмотрим бесплатный антивирус ClamAV. Можно сказать, что ClamAV - это "стандартный" антивирус Linux, поскольку он входит в состав большинства современных дистрибутивов и в некоторых случаях даже устанавливается по умолчанию. А раз это стандарт, то вы должны знать, как его использовать.

7.1.2. Установка и первое обновление антивирусных баз данных

Установить ClamAV очень просто - достаточно установить пакет clamav:

# уum install clamav

В этом пакете находится все необходимое - демон clamd, сканер clamscan и программа обновления антивирусных Саз clamav. Антивирусные базы в комплект поставки не входят; их нужно загрузить из Интернета, но это даже к лучшему - ведь все равно нам пришлось бы после установки пакета со старыми базами обязательно их обновлять.

Сразу после установки пакета нужно запустить демон clamd:

# service clamd start

Система ответит:

Starting Clam AntiVirus daemon [Ok]

Мы уже знаем, что такое служба (сервис) и не раз включали/отключали службы с помощью конфигуратора system-config-services. Так вот, знайте: в Linux правильнее называть службы демонами - этот термин появился раньше.

После этого нужно запустить программу обновления антивирусных баз:

# freshclam


ClaimAV update process started at Mon Nov 26 6:07:23 2007

Downloading main.cvd [100%]

main.cvd updated (version: 46, sigs: 133163, f-level: 20, builder: sven.)

Downloading daily.cvd [100%]

daily.cvd updated (version: 4683, sigs: 30600, f-level: 21, builder: ccordes)

Database updated (163763 signatures) from database.clamav.net (IP: 217.173.238.34)

Обратите внимание: команду freshclam нужно вводить после clarmd. Если демон clamd не будет запущен, то вы получите предупреждение о том, что демон clamd не уведомлен об обновлении баз:

WARNING: Clamd was NOT notified: Can't connect to clamd on 127.0.0.1:3310

connect(): Connection refused

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

7.1.3. Проверка файлов и каталогов

Для проверки файлов и каталогов используется сканер clam-scan. Вот как можно проверить подозрительный файл file.bin:

clamscan file.bin

Для проверки каталогов желательно указывать опцию -r, чтобы заодно были проверены все их подкаталоги:

clamscan -r /home/den

А вот проверку корневой файловой системы лучше проводить от имени пользователя root, потому что у обычного пользователя есть доступ не ко всем объектам файловой системы:

# clamscan -r /

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

Known viruses; 161763

всего известных вирусов в базе

Engine version: 0.91.2

версия ClamAV

Scanned directories: 552

количество просксанированных каталогов

Scanned files: 997

количество просканированных файлов

Infected files: 0

инфицировано файлов

Data scanned: 75.22 MB

общий объем просканированных файлов

Time: 57.023 sec (0 m 57 s)

общее время сканирования

По умолчанию clamscan не проверяет почтовые ящики и архивы. Для проверки почтовых ящиков используется опция -r-mbох:

# clamscan -r-mbox /var/spool/mail

Для проверки архивов нужно указать опции -unzip, -unrar, -tgz:

# clamscan -tgz -unzip -unrar -r /home

Если программа не сможет найти необходимый архиватор, тогда вам нужно указать его так:

# clamscan -unrar=/путь/rar -r /home

7.1.4. KlamAV- графический интерфейс для ClamAV

В Windows мы привыкли, что у антивируса должен быть графический интерфейс. Для ClamAV тоже был создан графический интерфейс - программа KlamAV, скачать которую можно по адресу:

http://sourceforge.net/projects/klamav

KlamAV - это всего лишь оболочка (рис. 7.1), и для ее работы необходимо, чтобы была установлена сама программа антивирус ClamAV. Использовать программу-оболочку достаточно просто, поэтому вы разберетесь с ней и без моих комментариев.

У KlamAV есть одно ограничение: данная программа написана с использованием KDE, поэтому пользователям GNOME придется дополнительно установить если не всю KDE, то большую ее часть.

Рис. 7.1. Программа KlamAV

7.1.5. ClamAV для Windows

Если вам нужен бесплатный антивирус для Windows, тогда можно обратить внимание на ClamAV для Windows. Посетите следующие сайты.

• http://www.sosdg.org/clamav-win32 - здесь вы можете скачать консольную версию антивируса ClamAV, работающую в Windows Данная лpoгpaммa полностью аналогична Linux-вepcии (те же опции, тот же принцип работы).

• http://www.clamwin.net - графическая версия антивируса (эти не оболочка, а полноценная версия), работающая в среде Windows (рис. 7.2). Программа по умолчанию сканирует файлы только по вашему запросу, НО может интегрироваться в MS Outlook для проверки почтовых вложений и в Internet Еxрlоrеr (и последнем появится новая команда контекстного меню - Проверить на вирусы).

Рис. 7.2. ClamWin - версия ClamAV для Windows

7.2. Подробно о загрузке Linux

7.2.1. Загрузка компьютера

Рассмотрим первоначальную загрузку компьютера с момента включения питания. Вы нажимаете кнопку Power на корпусе компьютера и в его оперативную память загружается программа POST (Power On Self Test) - программа самотестирования компьютера при включении питания. Она хранится в ПЗУ компьютера.

Программа тестирования первым делом проверяет видеокарту и монитор, затем - запускает тест оперативной памяти, далее проверяются носители данных и другие устройства (это зависит от версии BIOS и "наворотов" материнской платы). После успешного завершения всех проверок управление передается программе-загрузчику.

Задача загрузчика - отыскать устройство, содержащее программу-загрузчик операционной системы, считать найденный загрузчик с носителя в память компьютера и передать ему управление. Порядок поиска загрузочного устройства задается в программе первоначальной настройки компьютера - SETUP. Обычно первое загрузочное устройство - это жесткий диск, CD-ROM и другие сменные носители выступают в роли первых загрузочных устройств редко - как правило, в случае сбоя, когда нужно переустановить операционную систему или восстановить ее, загрузившись с загрузочного CD/DVD.

Загрузчик операционной системы обычно помещается в главную загрузочную запись жесткого диска - MBR (Master Boot Record). После передачи управления загрузчику ОС дальнейшее развитие событии зависит только от этого загрузчика.

Поскольку на вашем компьютере, помимо Fedora, скорее всего, также установлена Windows ХР или Windows Vista, та вы будете иметь дело с двумя загрузчиками - NT Loader (загрузчик Windows) и GRUB (загрузчик Linux). В других дистрибутивах Linux вместо GRUB может использоваться другой загрузчик, например, LILO или ASPLoader. Но в Fedora используется GRUB, поэтому здесь мы будем рассматривать только этот загрузчик.

Как уже было отмечено в этой книге, заставить NTLoader загружать Linux можно, но это не стоит потраченного времени и сил, поэтому проще установить сначала Windows, а затем - Linux. В этом случае при загрузив компьютера GRUB отобразит меню, состоящее из нескольких вариантов загрузки Linux (обычная загрузка и безопасный режим) и одного варианта загрузки Windows. При выборе пункта меню Windows управление будет передано загрузчику NTLoader, который, к свою очередь, если установлено несколько версий Windows, отобразит меню, позволяющее выбрать ту или иную версию Windows (например, ХР или Vista).

7.2.2. Загрузка Linux

7.2.2.1. Корневая файловая система и система инициализации

Итак, вы выбрали загрузку Linux. Загрузчик GRUB загрузит ядро, а затем передаст ему параметры и управление. Подробно

весь процесс загрузки ядра рассматриваться здесь не будет. Вам достаточно знать следующее: ядру при загрузке нужно сделать две важные веши - "подмонтировать" корневую файловую систему и запустить систему инициализации.

Название раздела, содержащего корневую файловую систему, передается ядру в виде параметра root, например:

root=/dev/hda5

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

kernel panic: VFS: unable to mount root fs

Система инициализации указывается с помощью параметра init. Если параметр init не указан, то используется система инициализации /sbin/init. Вообще init - это далеко не единственная система инициализации. Например, в Ubuntu используется система инициализации upstart, а в некоторых других дистрибутивах используется система init-ng (init Nest Generation).

7.2.2.2. Вывод сообщений ядра: программа dmesg

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

dmesg | less

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

Листинг 7.1. Вывод сообщений ядра Linux при загрузке (Fedora 7)

# Версия ядра и версия gcc, с помощью которого собиралось ядро

Linux version 2.6.21-1.3194.fc7 (kojbuilder@xenbuilder4.fedora.phx.ewdhat.com) (gcc version 4.1.2. 20070502 (Red Hat 4.1.2-12)) #1 SMP Wed May 23 22:35:01 EDT 2007

BIOS-provided physical RAM map:

sanitize stare

sanitize end

copy_e820_map() start: 00000000000000000 size: 000000000009f800 end:00000000009f800 type: 1

copy_e820_map() type is E820_RAM

copy_e820_map() start: 000000000009f800 size: 000000000009f800 end: 0000000000009f800 type: 1 copy_e820_maр() start: 0000000000000000 size: 000000000009fc00 end: 000000000009fc00 type: 1

BIOS-е820; 0000000000000000 - 00000000009fcOO (usable)

BIOS-e820: 00000000ffff0000 - 0000000l00000000 (reserved)

OMB HIGHMEM available.

# Всего установлено 768 Мбайт оперативной памяти (512 + 256)

767 MB lowmem available.

Entering add_active_range(0, 0, 196592) 0 entriеs of 256 used

Zone PFN ranges:

DMA 0 -› 4096

Normal 4096 -› 196592

HighMem 196592 -› 196592 early_node_map[1] active PFN ranges

0: 0 -› 196592

On node 0 totalpages: 196592

DMA zone: 32 pages used for memmap

DMA zone: 0 pages reserved

DMA zone: 4064 pages, LIFO batch: 0

Normal zone; 1503 pages used for memmap

Normal zone: 190993 pages, LIFO batch: 31

HighMem zone: 0 pages used for memmap

DMI 2.2 present.

# Параметры ACPI (Advanced Configuration and Рower Interface):

ACPI: RSDP (v000 VIA694) @ 0x000f6a20

ACPI: RSDT (v001 VIA694 АWRDАСРI 0x42302e31 AWRD 0x00000000) @ 0x2fff3000

AСРI: FADT (v001 VIA694 AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x2fff3040

ACPI: DSDT (v001 VIA694 AWRDACPI 0x00001000 MSFT 0x0100000e) @ 0x00000000

ACPI: PM-Timer IO Port: 0x4008

Allocating PCI resources starting at 40000000 gap: 30000000:cfff0000)

# Частота процессора:

Detected 1595.598 MHz processor.

Built 1 zonelists. Total pages: 195057

# Параметры, переданные ядру

Kernel сommand line: root=/dev/hda6 ro locale=ru_RU

# Локальный контроллер прерываний APIC (Advanced Programmable Interrupt Controller) отключен:

Local APIC disabled by BIOS - you can enable it with "lapic"

mapped APIC to ffffd000 (0160c000)

Enabling fast FPU save and restore… done.

Enabling unmasked SIMD FPU exception support… done.

Initializing CPU#0

PID hash table entries: 4096 (Order: 12, 16384 bytes)

# Консоль: цветная, 80x25

Console: colour VGA+ 80x25

Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)

Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)

# Информация об использовании памяти при загрузке

Memory: 768064k/786368k available (l992k kernel code, 17644k reserved, 893k data, 328k init, 0k highmem)

# Карта виртуальной памяти ядра

virtual kernel memory layout:

fixmap: 0xfff4e000 - 0xfffff000 (708 kB)

pkmap: 0xff800000 - 0xffc00000 (4096 kB)

vmalloc: 0xf0800000 - 0xff7fe000 (239 MB)

lowmem: 0xc00000000 - 0xefff0000 (767 MB)

.init: 0xc03d7000 - 0xc0429000 (328 kB)

.data: 0xc02f2264 - 0xc03d16d4 (893 kB)

.text: 0xc010000 - 0xc02f2264 (1992 kB)

Checking if this processor honours the WP bit even in supervisor mode… Ok.

Calibrating delay using timer specific routine… 3193.85 BogoMIPS (lpj = 6387715)

Security Framework v1.0.0 initialized

# SELinux выключена

SELinux: Disabled at boot.

Mount-cache hash table entries: 512

CPU: After generic identify, caps: 0383f9ff c1c3f9ff 00000000 00000000 00000000 00000000 00000000

# Кэш первого и второго уровня:

CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)

CPU: L2 Cache: 64K (64 bytes/line)

CPU: After all inits, caps: 0383f9ff c1c3f9ff 00000000 00000420 00000000 00000000 00000000

ACPI: setting ELCR to 0200 (from 0e28)

# тип и производитель процессора

CPU0: AMD Duron(tm) processor stepping 01

# Материнская плата обычная, не SMP

SMP motherboard not detected.

# Локальный контроллер APIC не найден, используется его эмуляция

Local APIC not detected. Using dummy APIC emulation.

# Всего один процессор

Brought up 1 CPUs

Booting paravirtiualized kernel on bare hardware

Time: 7:33:12 Date: 09/03/107

NET: Registered protocol family 16

# Настраиваются шины EISA, PCI

EISA bus registered

ACPI: bus type pci registered

PCI: PCI BIOS revision 2.10 entry at 0xfb3e0, last bus=1

PCI: Using configuration type 1

# Настраиваются стандартные РCI-ресурсы

Setting up standard PCI resources

ACPI: Interpreter enabled

ACPI: Using PIC for interrupt routing

ACPI: PCI Root Bridge [PCI0] (0000:00)

PCI: Probing PCI hardware (bus 00)

ACPI: Assume root bridge [\_SB_.PCI0] bus is 0

# Регионы 4000-407f и 5000-500f, занятые контроллером IDE

PCI quirk: region 4000-407f claimed by vt8235PM

PCI quirk: region 5000-500f claimed by vt8235SMB

Boot video device is 0000:01:00.0

# Таблица прерываний PCI

ACPI: PCI interrupt Routing Table [\_SB_.PCI0.PRT]

ACPI; PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 10 *11 12 14 15)

ACPI: PCI Interrupt Link [LNKB] (IRQs 1 *3 4 5 6 7 10 11 12 14 15)

ACPI: PCI interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 *10 11 12 14 15)

ACPI: PCI interrupt Link [LNKD] (IRQs 1 3 4 *5 6 7 10 11 12 14 15)

# Запущена поддержка PnP-устройств

Linux Plug and Play Support V0.97 (c) Adam Веlау

pnp: PnP ACPI init

pnp: PnP ACPI: found 13 devices

# PnPBios отключена ACPI PNP

PnPBIOS: Disabled by ACPI PNP

# PCI использует ACPI для IRQ-маршрутизации (Маршрутизации прерываний)

PCI: Using ACPI for IRQ routing

# Если ваше PCI-устройство не работает, попробуйте передать ядру параметр pci=routeirq

PCI: If a device doesn't work, try "pci=routeirq". If it helps, post a report

# Регистрируются сетевые протоколы

NET: Registered protocol family 8

NET: Registered protocol family 20

pnp: 00:02: ioport range 0x4000-0x407f could not be reserved

pnp: 00:02: ioport range 0x5000-0x500f has been reserved

PCI: Bridge: 0000:00:01.0

IO window: disabled.

MEM window: e8000000-e9ffffff

PREFETCH window: d0000000-dfffffff

PCI: Setting latency timer of device 0000: 00:01.0 to 64

NET: Registered protocol family 2

# Подготавливаются таблицы хеша для протоколов IP и TCP

IP route cache hash table entries: 32768 (order: 5, 131072 bytes)

TCP established hash table entries: 131072 (order: 8, 1048576 bytes)

TCP bind hash table entries: 65536 (order: 7, 524288 bytes)

TCP: Hash tables configured (established 131072 bind 65536)

TCP reno registered

# Поддерживаются квоты дискового пространства

VFS: Disk quotas dquot_6.5.1

Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)

# Параметры планировщика ввода-вывода (о нем мы поговорим позже)

io scheduler noop registered

io scheduler anticipatory registered

io scheduler deadline registered

# планировщик cfg используется по умолчанию

io scheduler cfq registered (default)

# Поиск PnP-карт на шине ISA: карты расширения не найдены

isapnp: Scanning for PnP cards…

isapnp: No Plug&Play device found

# Драйвер часов реального времени (RTC)

Real Time Clock Driver v1.12ac

# Драйвер последовательного порта

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled

serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

# Мышка

mice: PS/2 mouse device common for all mice

# Параметры RAM-диска (диска в памяти)

RAMDISK driver initialized: 16 RAM disks of 65536K size 1024 blocksize

input: Macintosh mouse button emulation as /class/input/input0

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2

ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx

# Параметры клавиатуры и PS/2 контроллера

PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12

NЕТ: Registered protocol family 1

Using IPI No-Shortcut mode

ACPI: (supports S0 S1 S4 S5)

Magic number: 11:19:571

hash matches device рtуb3

# Освобождается неиспользуемая ядром память

Freeing unused kernel memory: 328k freed

Time: tac clocksource has been installed.

input: AT translated Set 2 keyboard as /class/input/input1

# LSM-модель возможностей инициализирован

Capability LSM initialized

ACPI: Fan [FAN] (on)

ACPI: CPU0 (power states: C1[C1] C2[C2])

ACPI: Thermal zone [THRM] (40 C)

# Подготовка к загрузке USB

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

# Загружен драйвер USB

USB Universal Host Controller Interface driver v3.0

ACPI: PCI Interrupt Link [LNKA] enabled at IRQ11

PCI: setting IRQ 11 as level-triggered

ACPI: PCI interrupt 0000:00:10.0 [A] -› Link

- [LNKA] -› GSI 11 (level, low) -› IRQ 11

uhci_hcd 0000:00:10.0: UHCI Host Controller

uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 1

uhci_hcd 0000:00:10.0: irq 11, io bаsе 0x0000d000

usb usb1 configuration #1 chosen from 1 choice

# Найден USB-хаб с двумя портами

hub 1-0:1.0: USB hub found

hub 1-0:l-0: 2 ports detected

FDC a is a post-1991 82077

VP_IDE: IDE controller at PCI slot 0000:00:11.1

ACPI: PCI Interrupt 0000:00:11.1 [A] -› Link [LNKA] -GSI 11 (level, low) -IRQ 11

PCI: VIA VLink IRQ fixup for 0000:00:11.1, from 255 to 11

VP_IDE: chipset revision 6

VP_IDE: not 100% native mode: will probe irqs later

# Контроллер IDE VIA vt8235

VP_IDE: VIA vt8235 (rev 00) IDE UDMA133 controller on pci0000:00:11.1

# найдены IDE-устройства

ide0: BM-DMA at 0xdс00-0xdc07, BIOS settings: hda:DMA, hdb:pio

ide1: BM-DMA at 0xdc08-0xdc0f, BIOS settings: hdc:DMA, hdd:DMA

# Проверяется первый IDE-контроллер (ide0)

Probing IDE interface ide0…

Time: acpi_pm clocksource has been installed.

# Первый жесткий диск (hda) - производства Western Digital,

# модель WD1600JB-00REA0 (Primary Master)

hda: WDC WD1600JB-00REA0, ATA DISK drive

ide0 at 0xlf0-0xlf7, 0x3f6 on irq 14

# Проверяется второй IDE-контроллер (ide1) Probing IDE interface ide1…

# Найден жесткий диск (hdc) Maxtor, модель 6E040L0 (подключен как Secondary Master)

hdc: Maxtor 6E040L0, ATA DISK drive

# К hdd (Secondary Slave) подключен CD/DVD-RОМ производства LG

hdd: HL-DT-ST DVDRAM GSА-4167В, ATAPI CD/DVD-ROM drive

ide1 at 0x170-0x177, 0x376 on irq 15

# Подсистема SCSI инициализирована

SCSI subsystem initialized

libata version 2.20 loaded. ACPI: PCI Interrupt 0000:00:12.0[A] -› Link [LNKА] -› GSI 11 (level, low) -› IRQ 11

# Сетевой адаптер VIA Rhine II

еth0: VIA Rhine II at 0x1e800, 00:0d:87:88:bc:96 IRQ 11.

eth0: MII PHY found at address 1, status 0x786d advertising 05e1 Link 45e1.

ACPI: PCI interrupt LINK [LNKD] enabled at IRQ 5

РСI: setting IRQ 5 as level-triggered

ACPI: PCI interrupt 0000:00:10.3[d] -› Link[LNKD] -› GSI 5 (level, low) -› IRQ 5

# Параметры жёстких дисков

# Первый жесткий диск

# Максимальный размер запроса 512 Кбайт

hda: max request size: 512KiB

# К-во секторов - 312581808, размер 160041 MВ, буфер - 8192 Кбайт, поддержка UDMA 100

hda: 312581808 sectors (160041 MB) w/8192KiB Cache, CHS=19457/255/63, UDMA(100)

hda: cache flushes supported

hda: hda1 hda2 ‹ hda5 hda6 hda7 hda8 hda9 hda10 hda11 hda12 ›

# Второй жесткий диск

# Максимальный размер запроса 128 Кбайт

hdc: max request size: 128KiB

# К-во секторов - 802932248, размер 41110 MB, буфер - 2048 Кбайт

hdc: 80293248 sectors (41110 МB) w/2048KiB Cache, CHS=65535/16/63

# DVD-ROM не поддерживает DMA

hdd: DMA disabled

ide1: reset: success

hdc1 hdc2 ‹ hdc5 hdc6 hdc7 hdc8 hdc9 hdc10 ›

# Максимальная скорость чтения - 48X, кэш - 2048 Кбайт

hdd: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache

Uniform CD-ROM driver Revision: 3.20

ewsusp: Resume From Partition 3:7 PM: Checking swsusp image.

РМ: Resume from disk failed.

kjournald starting. Commit interval 5 seconds

# Файловая система ext3 работает в режиме ordered

EXT3-fS: mounted filesystem with ordered data mode.

# Сетевой интерфейс eth0 подключен к сети, скорость 100 Мбит/с

eth0: link up, 100Mbps, full-duplex, lрa 0x45E1

NET: Registered рrotоcоl family 17

pci_hotplug: PCI Hot Plug PCI Core version: 0.5

shpchp: Standard Hot Plug PCI Controller Driver version: 0.4

Linux agpgart interface v0.102 (c) Dave Jones

irda_init()

NET: Registered protocol family 23

# Чипсет материнской платы VIA KT266/KY266x/KT333

agpgart: Detected VIA KT266/KY266x/KT333 chip set

# Размер видеопамяти - 128 Мбайт

agpgart: AGP aperture is 128М @ 0xe0000000

# Загрузка модуля видеокарты nVidia

nvidia: module license 'NVIDIA' taints kernel.

input: PC Speaker as /class/input/input2

ACPI: PCI Interrupt 0000:01:00.0[A] -› Link[LNKA] -› GSI 11 (level, low) -› IRQ 11

NVRM: lоаding NVIDIA Linux x86 Kernel Module 1.0-9631 Thu Nov 9 17:38:10 PST 2006

parport: PnPBIOS parport detected.

parport0: PC-style at 0x378 (0x778), irq 7, dma 3 [РСSРР,TRISTATE,CОМРАТ,ЕСР,DMA]

ACPI: PCI Interrupt 0000:00:11.5[C] -› Link[LNKC] -› GSI 10 (level, low) -› IRQ 10

PCI: Setting latency timer of device 0000:00:11.5 to 64

input: ImPS/2 Generic Wheel Mouse as /class/input/input3

fuse init (API Version 7.8)

# Параллельный порт

lp0: using parport0 (interrupt-driven).

# Добавляются разделы подкачки

Adding 530104k swap on /dev/hda7. Priority:-1 extents: 1 across:530104k

Adding 256968k swap on /dev/hdc7. Priority:-2 extents:1 across:256968k

# Файловая система ext3 найдена на hda6

EXT3 FS on hda6, internal journal

kjournald starting, Commit interval 5 seconds

# Файловая система ext3 найдена на hda5, режим журнала ordered

EXT3 FS on hda5, internal jоurnal

ЕХТЗ-fs: mounted filesystem with ordered data mode.

kjournald starting. Commit interval 5 seconds

# Файловая система ext3 найдена на hdc5, режим журнала ordered

EXT3 FS on hdc5, internal journal

EXT3-fs: mounted filesystem with ordered data mode.

kjournald starting. Commit interval 5 seconds

# Файловая система ext3 найдена на hdc6, режим журнала ordered

EXT3 FS on hdc6: internal journal

EXT3-fs: mounted filesystem with ordered data mode.

# Есть NTFS-драйвер, поддержка NTFS в режиме только чтение

NTFS driver 2.1.28 [Flags: R/O MODULE]. NTFS volume version 3.1.

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

• процессор AMD Duron™, частота 1.6 ГГц;

• 64 Кбайт кэш-памяти первого уровня (L1 cache), 64 Кбайт кэша второго уровня (L2 cache);

• объем оперативной памяти - 768 Мбайт;

• материнская плата VIA, чипсет KТ266;

• два жестких диска: WD 160 Гбайт и Maxtor 40 Гбайт;

• CD/DVD-ROM LG;

• сетевой адаптер VIA Rhine 11 (интегрированный в материнскую плату);

• видеокарта nVidia, 128 Мбайт;

• два USB-порта.

О самой операционной системе можно сказать следующее:

• ядро - 2.6.21;

• SELinux выключена;

• планировщик ввода-вывода работает в режиме cfg;

• два раздела подкачки - один 530Мбайт, второй - 256 Мбайт;

• основная файловая система - ext3;

• основной режим журнала ext3 - ordered;

• есть поддержка NTFS.

Все сказанное выше должно быть понятно обычному квалифицированному пользователю, не знакомому с Linux вообще. Всё, кроме параметров планировщика, - о режимах работы журнала exl3 мы уже говорили.

7.2.2.3. Планировщик ввода-вывода

В ядре 2.6 появилась возможность самостоятельно выбирать планировщик ввода-вывода. Всего используется четыре плани-ровщика.

• noop - самый простой планировщик ввода-вывода, практически ничего не умеет, создавался в расчете на использование Flash-диска вместо жесткого диска, поэтому нам такой планировщик не подходит.

• fq - этот планировщик равномерно планирует операции ввода-вывода (получается "местная" очередь). Используется по умолчанию.

• anticipatory (сокращенно as) - этот планировщик будет пытаться угадать следующую инструкцию программы. В этом случай производительность той или иной программы зависит от ее алгоритма, т.е. оттого, угадает ли планировщик следующий "ход" программы.

• deadline - планируются "крайние сроки" выполнения той или иной операции. Больше подходит для сервера, поэтому на рабочих станциям и домашних компьютерах его лучше не использовать.

Итак, сделаем выводы. Планировщики noop и deadline нам не годятся. Остается использовать или планировщик по умолчанию - cfg, или "планировщик-предсказатель". Попробуйте использовать anticipatory: если производительность системы понизится, всегда можно вернуться к cfg.

Выбор планировщика осуществляется путем передачи ядру параметра elevator:

elevatоr=aa (для anticipatory)

или

elevator=cfq

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

7.2.3. Уровни запуска. Файл /etc/inittab

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

Первым делом программа init открывает файл /etc/inittab (это таблица инициализации) и читает уровень запуска по умолчанию. Он задается так:

id:5:initdefault:

5 - это номер уровня запуска по умолчанию; всего существует шесть уровней запуска:

• 0 - останов системы (система переходит на этот уровень когда получена команда завершения работа);

• 1 - Однопользовательский режим без поддержки сети (для перехода в этот режим нужно передать ядру параметр single);

• 2 - многопользовательский режим без поддержки сети;

• 3 - многопользовательский режим с поддержкой сети бeз загрузки графического интерфейса;

• 4 - данный уровень запуска не используется;

• 5 - многопользовательский режим с поддержкой сети с загрузкой графического интерфейса,

• 6 - перезагрузка системы (система переходит на этот уровень, когда получена команда перезагрузки).

Вот основные команды завершения работы:

• halt - останов системы;

• poweroff - останов системы с выключением питания;

• reboot - перезагрузка системы.

Перейти на нужный вам уровень запуска (уже после загрузки системы) можно с помощью команды init:

# init ‹номер_уровня›

Например:

# init 3

7.2.4. Сервисы (службы)

После того как программа init получила номер уровня запуска, она запускает из каталога /etc/rc.d/rcN.d (N - это номер уровня запуска) ссылки вида SномерИмя (или KномерИмя - в зависимости от уровня запуска). Сейчас разберемся, что это за ссылки. Перейдите в каталог /etc/rc.d/rcN.d - например, с помощью команды

cd /etc/rc.d/rcs.d

В данном каталоге вы найдете файлы ссылок с именами вида SномерИмя и KномерИмя. Каждая ссылка ссылается на один из сценариев в каталоге /etc/rc.d/init.d.

Данные сценарии используются для управления сетевыми службами. Предположим, что на вашем компьютере установлен Web-сервер, тогда в каталоге /etc/rc.d/init.d будет сценарий. httpd. Для запуска Web-сеpвepa используется команда /etc/rc.d/init.d/httpd start, а для останова - /etc/rc.d/init.d/httpd stop.

Теперь вернемся к нашим ссылкам SномерИмя и KномерИмя, Ссылка вида S* используется для запуска сетевой службы. Например, ссылка для запуска Web-сервера может выглядеть так: S25httpd, а ссылка для останова Web-сервера - так: K15httpd.

Если команда init обнаружит, что ей нужно обработать ссылку вида S*, то будет выполнена команда S25httpd start. Поскольку ссылка S25httpd ссылается на /etc/red/init.d/httpd, то на самом деле будет выполнена команда:

/etc/rc.d/init.d/httpd start

Другими словами, с помощью ссылки S25httpd программа init запустит наш Web-сервер.

Ссылка вида K* используется для останова сетевой службы. Если команда init должна обработать такую ссылку, то будет выполнена команда KномерИмя stop. Другими словами, сетевая служба будет остановлена.

Номер в имени ссылки означает порядок запуска/останова службы, Например, служба S10service будет запущена раньше, чем S25httpd.

Если вы заглянете в каталоги rc2.d, rс3.d и rc5.d, то обнаружите, что d этих каталогам есть только S-ссылки. В каталогах rc0.d и rc6.d находятся преимущественно К-ссылки, поскольку с их помощью выполняется разгрузка системы, и нужно остановить работавшие сетевые службы.

Уровень 1 (single) особый: на нем нужно остановить все запушенные сетевые службы, поэтому в каталоге rc1.d тоже нет S-ссылок, будут только одни K-ссылки. K-ссылки нужны для того, чтобы остановить запушенные сетевые службы, если вы перешли на первый уровень с более высокого уровня запуска.

Для управления службами в Fedora используется конфигуратор system-config-services, который мы уже рассмотрели в главе 1.

7.3. Загрузчик GRUB

7.3.1. Кратко о GRUB

Как уже было отмечено, GRUB (Grand Unified Bootloader) - это один из возможных загрузчиков Linux. Раньше загрузчиком де-факто был LILO (Linux Loader), но потом появился GRUB, и LILO сдал свои позиции. Конечно, LILO уступил свое место под солнцем не сразу, а за несколько лет. Но даже и сейчас встречаются дистрибутивы, которые используют LILO. Иногда встречаются дистрибутивы, которые используют собственный загрузчики вместо GRUB, например, ASP Linux использует собственный загрузчик - ASP Loader, нота при установке операционной системы у пользователя есть возможность выбрать другой загрузчик - GRUB или LILO.

Чем же GRUB лучше, чем LILO? Во-первых, GRUB не нужно каждый раз переустанавливать после изменения конфигурационного файла. Если вы не знакомы с LILO, то знайте: после редактирования конфигурационного файла lilo.conf нужно было в обязательном порядке переустановить загрузчик. GRUB не нужно переустанавливать после изменения его конфигурационного файла. Во-вторых, GRUB более гибкий. По сути, GRUB - это командная оболочка, позволяющая без загрузки операционной системы выполнять простейшие операции над файлами. Например, с помощью команды cat можно просмотреть любой файл на жестком диске:

grub› cat (жёсткий диск)путь/файл

Например,

grub› cat (hd0,4)/etc/inittab

Это очень полезно, если система не загружается, а у вас есть подозрения, что дело в одном из конфигурационных файлов. В-третьих, GRUB поддерживает много разных файловых систем - FAT32, ext3, Reiserfc, XFS и др., что и позволяет ему проделывать трюки, описанные выше.

7.3.2. Конфигурационный файл GRUB

Конфигурационный файл GRUB называется /boot/grub/grub.conf. В ранних версиях этот файл назывался menu.lst, а теперь menu.lst - это ссылка на файл grub.conf, хотя в некоторых дистрибутивах, например, в Ubuntu, данный файл до сих пор называется menu.lst. Впрочем, к Fedora это отношении не имеет.

Пример файла конфигурации grub.conf представлен в листинге7.2.

Листинг 7.3. Пример файла конфигурации grub.conf

# тайм-аут: ждать 5 секунд, а потом загрузить операционную систему по умолчанию

timeout 5

# номер ОС по умолчанию - это Fedora

default 0

# графическая тема

color black/yellow yellow/black


title Fedora (on /dev/hda5)

root (hd0,4)

kernel /boot/vmlinuz-2.6.22-1.2798.fc8 ro root=LABEL=/ rhgb quiet

initrd /boot/initrd-2.6.22-1.2798.fc8.img

savedefault


title Windows NT/2000/XP (loader)

root (hd0,0)

makeactive chainloader +1

Параметр timeout задает тайм-аут в секундах перед загрузкой операционной системы по умолчанию. Параметр default задает номер операционной системы, загружаемой по умолчанию. Нумерация операционных систем начинается с 0.

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

Параметр root задает идентификатор устройства (раздела жесткого диска), в котором установлена система. Идентификаторы в GRUB немного отличаются от общепринятых в Linux. Мы привыкли, что разделы жесткого диска именуются так: /dev/hdXn, где X - буква, а n - цифра (или /dev/sdiXn в случае с SCSI/SATA-диском). В GRUB формат другой:

(hdНомер,Номер)

Первый номер - это номер жесткого диска, второй - номер раздела. Предположим, что у нас есть устройство /dev/hda5. В GRUВ его ID будет выглядеть так: (hd0, 4).

Вот последовательность действий по преобразованию имен /dev/hdXn в имена GRUB:

• удалить /dev/ (останется hdXn);

• букву X заменить на соответствующий ей номер, при условии, что нумерация начинается с 0, т.е. а = 0, b = 1, с = 2, d = 3 и т.д.;

• номер n уменьшить на 1.

Параметр kernel указывает требуемое для загрузки операционной системы ядро и параметры этого ядра. В данном случае ядро называется /boot/vmlinuz-2.6.22-1.2798.fc8, и ему будут переданы cледующие параметры ro root-LABEL-/ rhgb quiet. Понятно, что параметр kernel не нужно указывать для операционных систем, отличных от Linux.

Параметр initrd задает RAM-диск. Он тоже нужен только для Linux.

Параметр savedefault нужен далеко не всегда. Операционная система по умолчанию задается параметром default. Обычно указывается номер операционной системы, но если вместо номера ОС указать значение saved, то по умолчанию будет загружена ОС, отмеченная параметром savedefault.

Для загрузки Linuх достаточно всего трех параметров: root, kernel и initrd. Теперь рассмотрим загрузку Windows. Как обычно, с помощью root нужно указать раздел жесткого диска, в который установлена Windows. Параметры kernel и initrd в этом случае не нужны, поскольку нет ни Linux-ядра, ни RAM-диска. Зато нужны следующие параметры:

makeactive

chainloader +1

Первый параметр делает раздел, из которого загружается Windows, активным. Для Windows 2000, XP и Vista это уже не актуально, зато актуально для старых версий Windows (98, ME), которые не могли загрузиться, если раздел жесткого диска, в который они установлены, не являлся активным.

Параметр chainloader нужен для всех ОС, поддерживающих цепочечную загрузку. В данном случае такой ОС является Windows, поэтому нужно не забыть указать chainloader +1, иначе Windows вы не запустите.

7.3.3. Некоторые полезные глобальные параметры

В табл. 7.1 приведены некоторые полезные глобальные параметры программы GRUB.

Таблица 7.1. Полезные глобальные параметры GRUB

Параметр Описание
hiddenmenu Скрывает загрузочное меню. Для его открытия нужно нажать ‹Esc›. Посла тайм-аута будет, как обычно, загружена ОС по умолчанию. Параметр удобно использовать, если список загружаемых ОС большой, но обычно используется ОС по умолчанию, поэтому нет особой необходимости при каждой загрузке выбирать другую ОС
password пароль Позволяет установить пароль. Если параметр password является глобальным (указан до первого параметра title), то при редактировании параметров ядра всех ОС будет запрошен пароль, также пароль будет запрошен при попытке загрузить ОС, отмеченные параметром lock. Если же параметр password относится только к одной ОС (указан после ее параметра title), тогда паролем будет защищена только выбранная ОС. Подробно о защите паролем мы поговорим чуть позже
groot=ID Позволяет указать загрузочное устройство по умолчанию, например groot=(hdo,4)
memtest86=true Если задан параметр memtest86=true, GRUB cоздаст загрузочную опцию для вызова программы memtest86 (ее заранее нужно установить). Данная программа используется для проверка оперативной памяти. Если компьютер часто самопроизвольно перезагружается или зависает - это повод проверить его оперативную память
splashimage= картинка Позволяет установить фоновую картинку для меню загрузчика

7.3.4. Обои для GRUB

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

Вот требования к картинке:

• количество цветов - 16;

• разрешение (размеры) - 640 х 480;

• формат - ХРМ.

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

convert исходная_картннка -colors 16 -resize 640x480 image.xpm

Программа convert входит в состав пакета ImageMagic.

Затем файл image.xpm нужно cкопировать в каталог /boot/ grub и сжать с помощью архиватора gz:

# cp image.xpm /boot/grub

# gzip image.xpm

Затем нужно открыть файл grub.conf и добавить параметр:

splashimage= (ID)/boot/grub/image.xpm.gz,

где ID - это идентификатор вашего раздела, например hd0,5.

7.3.5. Установка пароли GRUB

Теперь поговорим об установке пароля GRUB. Пароль можно установить так (в файле /boot/grub/grub.conf):

password my_pass

title Linux

В этом случае мы установили пароль my_pass. Если кто-то попытается отредактировать параметры ядра (чтобы, например, взломать ваш пароль root, см, приложение А), то GRUB запросит у него пароль. Но любой желающий сможет загрузить любую операционную систему с параметрами по умолчанию.

Если вы хотите, чтобы GRUB запрашивал пароль при загрузке операционной системы, нужно "закрыть" ее параметром lock, Сейчас мы "закроем" ОС Windows: title Windows NT/2000/XP (loader) root (hd0,0) makeactive

chainloader +1 lock

Вроде бы все теперь хорошо. Но не совсем. Ваш пароль виден невооруженным взглядом. Это означает, что если кто-то подключит ваш жесткий диск к другому компьютеру и просмотрит ваш файл grub.conf, то он узнает ваш пароль. Ну, или загрузится с LiveCD, "подмонтирует" корневую файловую систему и откроет файл grub.conf - способ значения не имеет, важен результат.

Чтобы такого не произошло, нужно зашифровать ваш пароль. Для этого введите команду grub:

# grub

В ответ система выведет приглашение:

grub›

Введите команду md5crypt. Затем нужно ввести ваш пароль. В ответ вы получите код, например, $l$gLhU0/$aW78kHK1QfV3P 2b2znUoe/. Запишите код на бумажке и введите команду quit для выхода из оболочки GRUB. После этого откройте файл grub.conf и измените параметр password следующим образом: password -md5 ваш_код

Например:

password -md5 $l$gLhU0/$aW78kHK1QfV3P2b2znUoe/

Вот теперь ваш пароль в GRUB защищен.

7.4. Создание и использование LiveCD

7.4.1. Что такое LiveCD

В 2006 году появился первый LiveCD на базе Fedora Core (тогда еще шестой версии). LiveCD - это загрузочный диск, содержащий основные компоненты системы, графический интерфейс пользователя (обычно GNОМЕ) и различные вспомогательные программы, включенные в состав дистрибутива по усмотрению разработчиков данного диска LiveCD.

LiveCD - это не просто загрузочный диск с пакетами. Ведь дистрибутивный (установочный) диск тоже является загрузочным. A LiveCD - это нечто большее. С помощью LiveCD можно ознакомиться с дистрибутивом, не устанавливая его на жесткий диск. Многие пользователи, перед тем, как скачать с Интернета полную версию дистрибутива на DVD (а она "весит" примерно 3 Гбайт, - например, восьмая версия Fedora занимает 3,2 Гбайт), загружают LiveCD. который занимает всего 700 Мбайт. Если дистрибутив понравился, то загружается полная DVD-версия,

Но ознакомление с дистрибутивом - это не единственное применение LiveCD. Бы можете использовать диск LiveCD для восстановления системы. Например, вы переустановили Windows, и она затерла загрузочный сектор, и Linux больше не загружается. Переустанавливать Linux ой как не хочется. С помощью же LiveCD вы легко можете восстановить загрузчик системы.

Еще LiveCD удобно использовать, чтобы Linux постоянно была "под рукой". Ведь на LiveCD обычно записаны практически все программы, с которыми вы привыкли работать - OpenOffice, GIMP, конфигураторы сети, браузер Firefox. Вы можете загрузиться с LiveCD и работать с вашими документами. Правда, сохранить документы на LiveCD не получится, но сейчас это не проблема - ведь можно использовать Flash-диск. Конечно, каждый раз придется заново настраивать доступ к Интернету, но, учитывая, что в современных дистрибутивах на это уходит пару щелчков мыши (если не считать ввода имени пользователя и пароля), то данная процедура не займет много времени.

Теперь вы знаете, что такое LiveCD. Как его использовать, вы уже поняли - просто нужно вставить в привод CD/DVD и загрузиться с него. В этой главе мы поговорим о создании собственного LiveCD. Да, очень скоро вы научитесь создавать собственные LiveCD!

7.4.2. Создание собственного LiveCD

Ничего сложного в создании собственного LiveCD нет. Ведь во времена 6-й версии Fedora Core Дэвид Цойтен (David Zeuthen) разработал инструментарий livecd, позволяющий создавать LiveCD даже самим неподготовленным пользователям. Создание LiveCD заключается в вводе одной-единственной команды, вам нужно лишь понять, как она формируется. Но для начала нужно освоить немного теории.

7.4.2.1. Репозиторий и его создание

Мы уже знаем, что такое репозиторий - это просто набор пакетов, У Fedora два основных репозитория:

• core - основной репозиторий, поддерживается разработчиками Fedora;

• extras - поддерживается участниками проекта и сообществом разработчиков.

Кроме этих репозиториев существуют и другие, например, Livna, FreshRPM, Tigro, которые поддерживаются третьими лицами.

Я не знаю, какая у вас версия Fedora - у вас может быть восьмая, седьмая или даже шестая, поэтому, чтобы приведенные ко-^faидь^ работали абсолютно у всех пользователей, будем рассматривать только самый универсальный вариант. Для его реализации нам нужно создать каталог /rpms и скопировать в него все пакеты с дистрибутивного DVD. После этого с помощью утилиты createrepo (она устанавливается отдельно) создать локальный репозиторий пакетов, который и будет использоваться инструментарием для создания LiveCD. Вот действия, которые вам нужно выполнить (точкой с запятой отделены мои комментарии):

su ; становимся root

# mkdir /rpms ; создаем каталог

# ср /путь/*.rpm /rpms ; путь к пакетам, зависит от версии Fedora

# yum install createrepo ; устанавливаем createrepo (если еще не установлена)

# createrepo /rpms ; создание репозитория

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

7.4.2.2. Установка инструментария livecd и дополнительных пакетов

Для установки инструментария для создания LiveCD нужно установить всего лишь один пакет - livecd-tools. Но кроме этого пакета желательно скачать и установить следующие пакеты:

• fedora-livecd - минимальный (базовый) LiveCD на базе Fedora;

• fedora-livecd-gnome - LiveCD, включающий GNOME;

• fedora-livecd-desktop - содержит все то, что и fedora-livecd-gnome, плюс дополнительные программы.

На базе данных заготовок вы с легкостью создадите собственный LiveCD. Теперь загрузим и установим все необходимые пакеты. Начнем с livecd-tools:

# wget -c http://people.redhat.com/davidz/livecd/i386/livecd-tools-001-1.i386.rpm

# rpm -ivh livecd-tools-001-1.i386.rpm

Первая команда загрузит пакет livecd-tools с Интернета, поэтому на момент ее ввода соединение с Интернетом должно быть уже установлено. Вторая команда установит загруженный пакет.

Теперь установим заготовки LiveCD:

# сd ~

# mkdir livecds

# cd livecds

# wget -c http://people.redhat.com/davids/livecd/i386/fedora-livecd-6-1.i386.rpm

# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-gnome-6-1.i386.rpm

# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-desktop-6-1.i386.rpm

# createrepo livecds

"6" в имени пакета - это не версия Fedora, а версия пакета, поэтому) не нужно пытаться установить пакет fedora-livecd-7 или fedora-livecd-8 - их просто не существует!

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

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

7.4.2.3. Использование livecd-creator

В состав livecd-tools входит утилита livecd-creator. Данная утилита не имеет графического интерфейса, поэтому она используется в консоли (терминале). Параметры livecd-creator приведены в табл. 7.2.

Таблица 7.2. Параметры утилиты livecd-creatoг

Параметр Описание
--repo=‹имя›,‹url› Задает путь к репозиторию
--package=‹имя› Добавляет в состав LiveCD указанный пакет
--exclude-package=‹имя› Исключает пакет из состава LiveCD
--bаse-on=‹ISO-файл› Позволяет в качестве основы LiveCD использовать уже готовый LiveCD, т.е. ISO-образ LiveCD
--fslabel=‹метка› Метка файловой системы (по умолчанию: livecd-YYYYMMDD-HHMI)

7.4.2.4. Создание своего первого LiveCD

Теперь у нас все готово, чтобы создать свой первый LiveCD. Для его создания нужно ввести команду (от имени пользователя root):

# livecd-creator --repo=cоrе, file:///rpms --расkage=bash --package=kernel --package=grub

Данная команда создаст LiveCD, в который будут включены пакеты kernel (ядро), bash (командный интерпретатор), grub (загрузчик Linux) и все пакеты, от которых зависят указанные три пакета.

В результате будет создан ISO-файл. Вы можете записать его на CD (желательно на CD-RW - так экономнее будет в итоге) и загрузиться с него. В результате у вас будет система с минимальным набором утилит и командным интерпретатором. Да, с помощью такого LiveCD много вы не сделаете, но все же это ваш первый LiveCD, с чем я вас и поздравляю!

7.4.2.5. Создание LiveCD с GNOME

Теперь усложним нашу задачу: создадим LiveCD, содержащий систему XOrg и графическую среду GNOME. Проще всего это сделать на базе уже готового пакета fedora-livecd-gnome.

Ничего особенного вам делать не нужно, просто введите следующую команду:

# livecd-creator --repo=core,file:///rpms \

--package=fedora-livecd-gnome \

--repo=e6,http://download.fedora.redhat.com/pub/fеdora/linux/extrаs/6/i386

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

Последнюю строчку нужно указывать только, если у вас Fedora Core 6. Пакеты из репозитория extras, начиная с седьмой версии Fedora, включены в состав репозитория core, поэтому уже указаны параметром:

--repo=core,filе:///rрms

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

7.4.2.6. Добавление в LiveCD собственных пакетов

В предыдущем параграфе мы создали LiveCD с GNOME. Сейчас попробуем добавить в него другие пакеты, например Open Office (популярный офисный пакет) и Evolution (почтовый клиент и органайзер).

Добавление пакетов в LiveCD осуществляется с помощью параметра --package:

--package=имя

Команда, создающая LiveCD с GNOME, OpenOffice и Evolution, выглядит так:

# livecd-creator -repo=core,file:///rpms \

--repo=lcd,file:///root/livecds \

--расkаgе= fedora-livecd-gnome \

--package=openoffice \

--packsage=evolution \

--repo=e6,http://ownload.fedora.re4hat.com/pub/fedora/linux/extras/6/i386

Как обычно, последний параметр нужно указывать только в случае с Fedora Core 6.

7.4.2.7. Подключение других репозиториев

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

# livecd-creator -repo=core,file:///rpms \ -repo=lcd,file:///root/livecds \

--repo= livna8,http://livna-dl.reloumirrors.net/fedora/8/i386/ -package=fedora-livecd-gnome \

--package=пакет1

--package=пакетN

Обратите внимание на URL репозитория:

http://livna-dl.reloumirrors.net/fedora/8/i386/; для Fedora 8

http://livna-dl.reloumirrors.net/fedora/7/i386/; для Fedora 7

http://livna-dl.reloumirrors.net/fedora/6/i386/; для Fedora Core 6

7.4.2.8. Изменение существующих LiveCD

Предположим, что вы создали свой LiveCD и он сохранен на жестком диске в виде ISO-файла. Создание LiveCD довольно длительный по времени процесс, и очень неприятно, если потребуется повторить его из-за случайно забытого и не включенного в LiveCD какого-то пакета. Что же делать в подобном случае? Да ничего особенного делать и не нужно, просто следует в команде создания указать параметр base-on со ссылкой на уже созданный ISO-файл;

# livecd-creator -repo=core,file:///rpms \

--repo=репозиторий1

--repo=репозиторийN

--base-on=MyLiveCD.iso

Как видите, ничего сложного нет: сначала приводим список репозиториев, затем с помощью параметра base-on указываем наш LiveCD, а потом с помощью параметра package - нужный пакет.

7.4.2.9. Запись созданных LiveCD на болванку

Проще всего записать созданный ISO-файл с помощью графической программы для прожига дисков, например с помощью Nero для Linux. Если нет никакого желания устанавливать платную программу, да к тому же хотелось бы сделать все, что надо, не выходя из консоли, то для записи CD подойдет вот такая команда:

# cdrecord dev=0,0,0 -dao speed=N ISO-файл

Например:

# cdrecord dev=0,0,0 -dao speed=16 MyLiveCD.iso

Данная команда запишет ISO-файл MyLiveCD. iso на скорости 16x на диск, установленный в устройстве 0,0,0. Определить идентификатор устройства можно с помощью команды cdrecord -scanbus, хотя если у вас всего лишь один привод CD/DVD, то это всегда будет 0,0,0.

Если вы записываете ISO-файл на перезаписываемый диск CD-RW, то перед записью его нужно очистить. Для этого используется команда:

# cdrecord -v blank=fast dev=0,0,0

7.5. Брандмауэр в Fedora. Общий доступ к Интернету

7.5.1. Что такое брандмауэр

Основная задача брандмауэра (другие названия - межсетевой экран, бастион, firewall) - фильтрация пакетов. Брандмауэр просматривает заголовки всех пакетов, которые передаются по сетевым интерфейсам вашего компьютера, и выполняет действия над этими пакетами к соответствии c установленными для него правилами.

Брандмауэр может использоваться как для защиты едкого компьютера, например, домашнего компьютера, подключаемого к Интернету, так и для защиты всей сети, В случае с сетью брандмауэр устанавливается на шлюзе - компьютере, через который остальным компьютерам в сети предоставляется доступ к Интернету,

Настройка брандмауэра для зашиты одного компьютера очень проста. По умолчанию брандмауэр запрещает доступ к вашему компьютеру всем пользователям Интернета. Для настройки брандмауэра вам нужно лишь указать, каким службам можно будет обращаться к вашему компьютеру. Например, если вы хотите получить удаленный доступ к консоли своего компьютера, необходимо разрешить службу SSH (Secure Shell), После этого вы сможете подключиться к консоли своего компьютера с другого компьютера (из любой точки земного шара) с помощью следующей команды: ssh имя_вашего_компьютера

Понятно, что в момент удаленного подключения наш компьютер должен быть включен, загружен и подключен к Интернету.

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

На компьютере-шлюзе должно быть как минимум два сетевых интерфейса. Один интерфейс (внешний) будет использоваться для выхода в Интернет, а второй (внутренний) - для связи с компьютерами локальной сети.

Сетевые интерфейсы могут быть разными, например, сетевая плата (для связи с сетью) и модем (для связи с Интернетом). Если у вас ADSL-модем, тогда вам придется купить еще одну сетевую плату. К одной сетевой плате (интерфейс eth0) вы подключите ADSL-модем, а вторая (интерфейс eth1) будет использоваться для подключения к локальной сети.

В локальной сети используются так называемые локальные адреса вроде 10.*.*.* или 192. 168.*.*. Такие адреса не пропустит ни один шлюз Интернета, поэтому наш шлюз должен выполнять преобразование адресов. Сейчас поясню, что это такое. Предположим, что компьютер внутренней сети с IP-адресом 192.168.1.2 пытается получить доступ к узлу www.mail.ru. Он посылает запрос (который получит наш шлюз) вида: "Отправитель: 192.1б8.1.2, получатель: 194.67.57.226 (это IР-адрес сайта www.mail.ru)".

Шлюз получает этот запрос и перезаписывает его так: "Отправитель: 193.254.219.230, получатель: 194.67.57.226". Как вы уже догадались, 193.254.219.230 - это (IР-адрес самого шлюза в Интернете. Данный адрес является реальным (не локальным), поэтому запрос от такого адреса пройдет по глобальной сети нормально.

Шлюз, получив ответ от узла 194.67.57.236 вида "Отправитель: 134.67.57.226, получатель 193.254.219.230", перезаписывает его так: "Отправитель: 194.67.57.226, получатель 192.168.1.2". Сайт 194.67.57.226 ничего не заподозрит - он будет считать, что "общается" с узлом 193.254.219.330, а узел 192.168.1.2 будет полагать, что получил ответ непосредственно от www.mail.ru.

Как видите, все достаточно просто. Данная процедура называется NAT (Network Address Translation) - преобразование сетевых адресов. Теперь, когда теория изучена, можно приступать к практике.

7.5.2. Конфигуратор system-config-firewall

Для настройки брандмауэра используется конфигуратор system-config-firewall. При запуске программа сообщит, что является всего лишь оболочкой и позволяет произвести только базовую настройку брандмауэра (рис. 7.3). Но в нашем простом случае этого будет вполне достаточно.

Проще всего выполнять первую настройку брандмауэра с помощью мастера, поэтому щелкните на кнопке Wizard панели инструментов. Первый вопрос мастера - подключена ли ваша система к сети (к любой сети, в том числе и к Интернету). Понятно, что подключена, поэтому выбираем в списке значение System with network access (рис 7.4).

Рис. 7.3. Предупреждение об ограниченных возможностях программы-конфигуратора

Рис. 7.4. Запрос: система подключена к Сети?


Затем нужно указать, подключена система только к одной сети (значение Up to one) или к нескольким сетям (значение More than one). Если у вас только один компьютер и вы не хотите настраивать общий доступ к Интернету, тогда следует выбрать в списке значение Up to one. В противном случае (когда у вас несколько компьютеров и вы хотите настроить общий доступ) нужно выбрать значение More than one (рис. 7.5).

Рис. 7.5. Запрос: система подключена к одной или к нескольким сетям?

Далее нужно честно оценить ваши знания по настройке сети; новички выбирают значение Beginner, а более опытные пользователи - значение Expert. Понятно, что в режиме Expert (рис. 7.6) конфигуратор предоставляет больше возможностей по настройке брандмауэра, чем в режиме Beginner. (А точнее, в режиме Beginner недоступны разделы Доверенные интерфейсы, Маскарадинг и Custom Rules). Далее нужно пару раз щелкнуть на кнопке Next, и конфигурация брандмауэра будет создана.

Теперь можно перейти к основному окну брандмауэра (рис. 7.7), в котором присутствует пять разделов.

• Trusted services - доверяемые службы: службы, которым разрешен удаленный доступ к вашему компьютеру. По умолчанию отмечены IPsec, mDNS, Сетевая печать и SSH. Рекомендую отключить службу SSH - вряд ли вы будете подключаться к своему компьютеру по протоколу SSH.

Рис. 7.6. Выбор режима настройки интерфейса

Рис. 7.7. Основное окно конфигуратора system-config-firewall


Other ports - в предыдущем разделе перечислены только общеизвестные службы, например, Web-сервер, FTP-сервер и др. (см. врезку ниже). Если нужной вам службы в списке нет, ее можно добавить в разделе Other ports. Например, вы установили в системе игровой сервер (для того же Counter Strike) и хотите разрешить к нему доступ извне (из Интернета), чтобы другие пользователи могли подключиться к вашей игре.

Custom rules - позволяет добавить пользовательские правила. Пользовательские правила - это правила, сохраненные в специальном файле с помощью программы iptables-save. Кстати, программа iptables - это и есть брандмауэр Linux, a system-config-firewall - это всего лишь оболочка для нее. Раздел Custom rules предназначен для тех случаев, если брандмауэр у вас был настроен ранее (в предыдущих версиях Fedora), вы сохранили его настройки, переустановили систему, а теперь хотите их импортировать. Хотя, если честно, пользователям, умеющим настраивать iptables, никакой конфигуратор для импорта настроек не нужен вовсе! Разделы Доверенные интерфейсы и Маскарадинг используются для настройки NAT, т. е. общего доступа к Интернету. Но, вообще говоря, для настройки общего доступа к Интернету намного проще использовать утилиту Firestarter (пакет называется firestarter).

О настройке Web-сервера и FTP-сервера вы можете прочитать в других моих книгах, посвященных настройке сетевого сервера под управлением Linux. В данной книге настройка этих сетевых служб не рассматривается.

7.5.3. Программа Firestarter: общий доступ к Интернету

С немощью Firestarter вы можете настроить общий доступ к Интернету всего за пару щелчков мыши. Данная программа намного удобнее стандартного конфигуратора system-config-firewall.

Сначала установим саму утилиту firestarter.

# yum install firestarter


После установки запустите firestarter: firestarter. При первом запуске откроется окно мастера (рис. 7.8), помогающего настроить брандмауэр.

Рис. 7.8. Стартовое окно мастера Firestarter

Первым делом мастер попросит указать устройство, с помощью которого вы подключаетесь к Интернету (рис. 7.9).

Рис. 7.9. Выбор сетевого интерфейса для подключения к Интернету

В очередном окне нужно установить флажок опции Enable Internet connection sharing (рис. 7.10), а в следующем - Start firewall now (рис. 7.11). Этим вы разрешите общий доступ к Интернету и запустите брандмауэр прямо сейчас.

Рис. 7.10. Разрешение общего доступа к Интернету


Рис. 7.11. Немедленный запуск брандмауэра

На этом настройка шлюза завершена. Теперь нужно настроить остальные компьютеры вашей сети. На каждом компьютере нужно запустить конфигуратор system-config-network, выделить интерфейс сетевой платы (eth0), щелкнуть на кнопке Свойства и в качестве IP-адреса шлюза установить IP-адрес компьютера, на котором запушен Firestarter (рис. 7.12),

Затем нужно перейти на вкладку DNS конфигуратора system-config-network и установить адреса DNS-серверов провайдера (рис. 7.13).

На этом настройку брандмауэра можно считать завершенной.


Рис. 7.12. Установка адреса шлюза на остальных компьютерах сети

Рис. 7.13. Прописывание DNS-адресов

7.6. Планировщики заданий

7.6.1. Выбор планировщика

В состав Fedora входит три планировщика: crond, anacron и atd. Планировщик crond используется для создания расписания, т.е. для периодического выполнения указанных пользователем команд в определенное время. Например, вы можете задать команду, которая будет выполняться каждый час, каждый день или раз в месяц.

Планировщик atd немного проще. Он умеет выполнять программы в строго определенное время, т.е. вы можете задать время и дату, например, 7 часов 11 октября, и команду, которая будет выполнена и это время.

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

Планировщик anacron является ближайшим родственником crond. Он похож на crond, но в то же время заслуживает отдельного разговора.

7.6.2. Планировщик crond

7.6.2.1. Файл конфигурации /etc/crontab

Основной конфигурационный файл данного планировщика называется /etс/crontab. Этот файл является общесистемным расписанием и его может редактировать только пользователь root. Формат файла crontab следующий:

М Ч Д ММ ДН Команда

где;

М - минута (0-59);

Ч - час (0-23);

Д - день (1-31);

ММ - месяц (1-12);

ДН - день недели (0=Вс, 1=Пн и т.д.).

Рассмотрим типичный пример данного файла (листинг 7.3).

Листинг 7.3. Типичный пример файла crontab

SHELL= /bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/


# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

Здесь SHELL, PATH, MAILTO и HOME - это переменные окружения, задающие, соответственно, оболочку, путь поиска программ, адрес администратора и домашний каталог - они нужны только в общесистемном файле. Нас больше интересует вторая часть этого файла:

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

Команда run-parts означает, что должны быть выполнены все выполняемые файлы (обычно это сценарии) из указанного каталога. Не сложно догадаться, что из каталога /etc/cron.hourly команды будут выполняться каждый час, из каталога /etc/cron.daily - каждый день (в 4 часа утра), из каталога /etc/cron.weekly - раз в неделю по воскресеньям, а из каталога /eta/сron.monthly - раз в месяц, 1-го числа.

7.6.2.2. Правильное расписание для домашнего компьютера

Взгляните на формат файла crontab, а затем на имеющееся расписание. Программа crond довольно "древняя". Первоначально она появилась в UNIX, а UNIX преимущественно устанавливалась на серверах, которые работают круглосуточно и никогда не выключаются. Потом программа crond ''перекочевала" в Linux. Система Linux тоже сначала использовалась на машинах, которые практически никогда не выключаются - на компьютерах профессиональных пользователей-фанатов и на серверах. Со временем система Linux плавно переехала на домашние компьютеры, но в 4 часа утра компьютеры домашних пользователей… выключены. Следовательно, заданные команды не будут выполнены никогда!

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

02 9 * * * root run-parts /etc/cron.daily

22 9 * * 0 root run-parts /etс/cron.weekly

42 9 1 * * root run-parts /etc/cron.monthly

Если вы работаете за домашним компьютером преимущественно вечером, то время выполнения следует "переместить" на вечер:

02 20 * * * root run-parts /etc/cron.daily

22 20 * * 0 root run-parts /etc/cron.weekly

42 20 1 * * root run-parts /etc/cron.monthly

Кроме того, может потребоваться изменить день недели для команд, которые выполняются еженедельно (в приведенных примерах задан день недели 0 = Bс, а в воскресенье компьютер может быть выключен):

22 20 * * 1 root run-parts /etc/cron.weekly

В результате команды из каталога /etc/cron.weekly будут запускаться каждый понедельник в 20 часов 22 минуты.

7.6.2.3. Сценарии

Как уже было отмечено выше, в каталоги /etc/cron* помещаются сценарии, которые нужно выполнить в указанное время. Рассмотрим шаблон типичного сценария (листинг 7.4).

Листинг 7.4. Шаблон сценария

#!/bin/bash

команды

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

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

# chmod + имя_файла_сценария

7.6.2.4 Пользовательские файлы crontab

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

Пользовательские файлы crontab никак не влияют на общесистемный файл /etc/crontab, который редактируется только пользователем root.

7.6.3. Планировщик anacron: отдельный разговор

Как уже было отмечено, anacron - это ближайший родственник crond. Он создан для того, чтобы устранить некоторые недостатки crond. Предположим, вы хотите, чтобы антивирусная база обновлялась в понедельник, в 18.00. Но если в один прекрасный день вы еще не придете с работы в указанное время, компьютер останется выключенным и, следовательно, обновления не произойдет. В результате вы останетесь со старой базой (если, конечно, не запустите обновление вручную).

Планировщик Anacron контролирует выключения и перезагрузки компьютера, поэтому ваши задания не останутся невыполненными. Тем не менее, и у anacrontab есть недостатки,

• Пользователи не могут создавать свои расписания, системный файл /etc/anacrontab может редактировать только пользователь root.

• Планировщик crond более гибкий в настройке: вы можете указать часы и минуты, когда должна быть выполнена команда. В случае планировщика anacron можно указать только период, когда будет выполнена указанная команда, и допустимую задержку.

Формат файла /etc/anacrontab следующий: Период Задержка ID-задачи Команда

Пример файла anacrontab представлен в листинге 7.5.

Листинг 7.5. Пример файла /etc/anacrontab

# /etc/anacrontab: файл настройки для anacron

# См. anacron(8) и anacrontab(5) для более подробной инфoрмации

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries

1 5 cron.daily run-parts /etc/cron.daily

7 10 cron.weekly run-parts /etc/cron.weekly

30 75 cron.monthly run-parts /etc/cron.monthly

7.6.4. Планировщик atd

Теперь разберемся, как использовать планировщик atd - это совсем просто. Для создания нового задания используется команда:

at ‹время› [дата]

Если дата не указана, по подразумевается, что команды нужно выполнить сегодня. Время указывается в формате АМ/РМ. Например, если вам нужно выполнить команду в 9 утра, то нужно указать at 9 am. Если же нужно выполнить команду в 21.00, тогда нужно ввести команду at 9pm.

После того как, задав время, вы нажмете ‹Enter›, планировщик atd будет ждать, пока вы введете все необходимые команды, которые нужно выполнить в указанное время. Для завершения ввода перечня команд нужно нажать комбинацию клавиш ‹Clrl+D›.

Чтобы просмотреть очередь заданий, введите команду atq, a для удалении заданий используется команда atrm номер. Номер заданий можно узнать с помощью команды atq.

7.7. Система SELinux: краткое руководство

7.7.1. Система контроля доступа

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

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

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

Но обычные пользователи, несмотря на практически полное отсутствие прав доступа, тоже не совсем безопасны. Да, у обычных пользователей нет доступа к большинству файлов, но не к большинству программ. Обычный пользователь может, например, запустить компилятор gcc, если он установлен. Если пользователь имеет навыки программирования, то он запросто может написать программу, которая узурпирует большую часть процессорного времени или других системных ресурсов (это одна из самых распространенных атак на отказ - DoS-атак), Система не ограничивает использование программ обычными пользователями (конфигураторы являются системными утилитами, поэтому они не в счет).

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

Система контроля доступа позволяет устанавливать права доступа к файлам не только для отдельных пользователей, но и для отдельных процессов. Например, FTP-серверу ProFTPD не нужен доступ ко всем файлам из каталога /etc. Ему нужен доступ только к каталогу, содержащему его конфигурационные файлы - /etc/proftpd. Контроль доступа к файлам, если установлена система контроля доступа, осуществляется в два этапа.

1. Проверка прав доступа на уровне файловой системы. Если файловая система запрещает доступ к файлу, то дальнейшая проверка не проводится.

2. Проверка прав доступа на уровне SELinux. Если файловая система разрешила доступ к файлу, проводится дополнительная проверка на уровне SELinux.

SELinux (Security-Enhanced Linux - Linux с улучшенной безопасностью) - система принудительного контроля доступа. SELinux считается одной из самых совершенных (понятно, при правильной настройке) систем контроля доступа, обеспечивающих максимальную безопасность. Сейчас она входит в состав ядра Linux и поставляется в составе многих дистрибутивов, Но по-прежнему есть и такие дистрибутивы, в которых SELinux не используется.

Системе SELinux можно доверять только потому, что она была разработана агентством национальной безопасности США, а затем уже была передана миру OpenSource. Такая организация, как NSA, не могла сделать небезопасную систему.

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

7.7.2. Базовые понятия SELinux: сущность, роль и домен

Чтобы настроить SELinux, вам нужно ознакомиться с ее базовыми понятиями: сущность, роль и домен.

Сущность (identity) является частью контекста безопасности, который задает домены, в которые можно войти. Говоря более простым, языком, сущность определяет, что можно сделать. Например, сущность den определяет, что может сделать пользователь den.

Но сущность не является идентификатором или именем пользователя! Не нужно отождествлять имя пользователя с сущностью: есть имя пользователя den, а есть сущность den. Чтобы нам было понятнее откройте терминал и введите команду id. Вы получите такой вывод:

uid=500(den) gid=500(den) группы=500 (den) context=user_r:system_r:unconfined_t

Теперь введите команду su, а затем снова команду id. Вы получите следующий вывод (рис. 7.14):

uid=0(root) gid=0(root) группы=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_r:system_r:unconfined_t

Обратите внимание: UID (идентификатор пользователя) изменился, а сущность осталась прежней - user_r. Ради эксперимента, введите следующую команду:

/sbin/init 3


Рис. 7.14. Команда id om имени обычного пользователя

Вы перейдете на третий уровень запуска. Войдите в систему как пользователь root. Затем введите команду id, и вы получите следующий вывод (рис. 7.15):

uid=0(root) gid=0(root) группы=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh


Рис. 7.15. Команда id om имени пользователя root

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

Пора разобраться, что же такое роль и домен. Домен (domain) определяет привилегии процесса; он представляет собой список возможностей, т.е. действий, которые разрешены процессу. Описывать данные действия самостоятельно вам не придется, об этом уже позаботились разработчики Fedora, описав более 200 процессов, которые могут выполняться в операционной системе. Все остальные процессы, которые не описаны в политике безопасности, попадают в домен unconfined_t. Данные процессы не защищаются SELinux.

Иногда домен называют типом. Тип (type) - это то же самое, что и домен, но домен относится к процессам, а тип - к файлам, каталогам, сетевым сокетам.

Роль (role) задает список доменов, которые могут быть использованы. Вот пример описания роли в конфигурационном файле (об этом позже): role user_r types user_passwd_t

Данная запись означает, что роли user_r разрешен доступ к домену user_passwd_t, т.е. пользователям с этой ролью разрешено использовать программу passwd для смены своего пароля.

Говоря обобщенно, сущность определяет, какие домены и какие роли, могут быть использованы.

Контекст безопасности состоит из сущности, роли и домена. Контекст безопасности выводится в формате:

context=сущность;роль;домен

Команда id выводит как раз контекст безопасности.

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

7.7.3. Включение/выключение SELinux в Fedora

Включить или выключить SELinux (кстати, в Fedora SELinux по умолчанию включена) можно с помощью конфигуратора system-config-securitylevel. После запуска конфигуратора нужно в его окне перейти во вкладку Настройка SELinux (рис. 7.16) и задать режим работы SELinux.

Принудительный режим - нормальный режим работы, при котором SELinux будет запрещать доступ к объектам, если это необходимо.

Режим предупреждений - данный режим нужно использовать для отладки работы SELinux: доступ к объектам разрешается, но если SELinux считает, что при выполнении операции нарушена политика безопасности, то будет выведено предупреждение о том, что операция запрещена (предупреждение заносится в файл /var/ log/messages).

Выключен - SELinux не используется.

Рис. 7.16. Окно конфигуратора system-config-securitylevel

Учтите, что при каждом включении/выключении SELinux ваша файловая система будет перемаркирована (рис.7.17). В этой операции нет ничего страшного (при перемаркировке будут изменены контексты безопасности), но она может занять довольно много времени. Перемаркировка производится при первой перезагрузке после включения/выключения SELinux.

Рис. 7.17. Предупреждение о выполнении перемаркировки файловой системы

7.7.4. Каталог /etc/selinих

В каталоге /etc/selinux хранятся конфигурационные файлы и политики SELinux. Главный файл конфигурации - /etc/selinux/config (листинг 7.6)

Листинг 7.6. Главный файл конфигурации SELinux

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELinux=enforcing

# SELINUXTYPE= can take one of these two values:

# targeted - Only targeted network daemons are protected.

# strict - Full SELinux protection.

SELIHUXTYPE=targeted

Директива SELINUX может принимать три значения:

• enforcing - принудительный режим;

• permissive - режим предупреждений;

• disabled - SELinux выключена.

Теперь вы знаете, какой файл редактирует конфигуратор sys-tem-config-securitylevel.

Директива SELINUXTYPE позволяет выбрать тип защиты:

• targeted - будут защищены объекты, описанные в политике безопасности;

• strict - полная защита.

По умолчанию используется политика targeted. Файлы политики strict не установлены по умолчанию. Для их установки (если нужно) используется команда:

# yum install selinux-policy-strict

7.7.5. Управление SELinux

Для управления системой контроля доступом используется конфигуратор system-config-selinux (рис. 7.18). С помощью этого конфигуратора можно полностью настроить SELinux, но чаще всего вы будете посещать раздел Boolean, в котором задаются возможности той или иной сетевой службы - например, FTP-сервера, Web-сеpвepa, Х-сервера и т.д.

Рис. 7.18. Конфигуратор system-config-selinux

Также с помощью этого конфигуратора можно определить привилегии пользователей (User Privs) и администратора (Admin) (рис. 7.19).

Рис. 7.19. Привилегии пользователей

Каталог /selinux - это псевдофайловая система selinuxfs, которую можно использовать как для управления SELinux, так и для получения информации о работе SELinux. Но, как правило, данный каталог используется самой системой SELinux, а для изменения параметров системы намного удобнее использовать конфигуратор system-config-selinux.

7.7.6. Режим предупреждений

Как уже было отмечено, в режиме предупреждений в файл /var/log/messages выводятся предупреждения о запрещении доступа, но сам доступ к объекту не запрещается. Вывести все SELinux сделанные предупреждения можно с помощью команды:

# cat /var/log/messages | audit

Рассмотрим пример типичного сообщения о запрещении доступа к объекту (это не реально сделанное предупреждение, а просто пример предупреждения):

Oct 21 16:l0:l5 dhsilabs kernel: audit(2149208252_610:29):avc: denied {read} for pid=1554 comm="bash" name="/etc/shadow" dev=hda5 ino=13671 sсontext =root:system_r:hotplug_t tcontext-root:object_r:user_home_t tclass=file

Оно означает, что 21 октября в 16:10 на машине dhsilabs процесс bash (comm) с PID (идентификатор процесса) 1554 (pid) попытался открыть для чтения (read) файл /etc/shadow (name) с номером инода 13671 (ino), yстройство, на котором находился файл, называется hda5, контекст безопасности задается как scontext. Операция чтения была запрещена (denied).

7.8. Псевдофайловая система /proc

7.8.1. Кратко о /proc

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

Файловая система /proc находится в оперативной памяти компьютера, однако вы можете обращаться к файлам и подкаталогам каталога /proc так же, как и к остальным файлам на жестком диске. Единственное, что напоминает о ее "виртуальности" (файловая система /proc является виртуальной - Virtual File System) - это размер файлов. Посмотрите на размер любого файла из каталога /proc: он равен 0. Но если вы его откроете, то увидите, что файл содержит-таки информацию. Это объясняется тем, чти содержимое файла формируется "на лету" - сразу после получения запроса на открытие файла,

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

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

Как и в случае с обычными файлами, просмотреть информационный файл можно с помощью команды cat:

cat /proc/путь/файл [| less]

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

echo "значение" /proc/путь/файл

7.8.2. Некоторые информационные файлы

Рассмотрим некоторые информационные файлы, доступные в псевдофайловой системе /proc:

• /proс/version - содержит версию ядра;

• /proc/cmdline - позволяет просмотреть список параметров, которые были переданы ядру при загрузке;

• /proс/apuinfo - Содержит информацию о процессоре;

• /proc/meminfo - предоставляет информацию об использовании оперативной памяти;

• /proc/devices - содержит список устройств;

• /proc/filesystems - содержит список файловых систем, которые поддерживаются вашей системой;

• /proc/mounts - содержит список "подмонтированных" в данный момент файловых систем;

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

• /proc/swaps - список используемых разделов и файлов подкачки.

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

cat /proc/cpuinfо

Система выдаст в ответ следующую информацию:

processor: 0

vendor_id: GenuineIntel

cpu family: 6

model: 15

model name: Genuine Intel(R) CPU 2160 @ 1.80GHz

stepping: 2

cpu MHz: 1798.238

cache size: 1024 KB

physical id: 0

Siblings: 2

core id: 0

cpu cores: 2

fpu: yes

fpu_exception: yes

cpuid level: 10

wp: yes

flags: fpu vme de рsе tsc msr рае

mce cx8 apic sep mtrr pge mca cmov pat pse36 сlflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm

bogomips: 3599.18

сlflush size: 64

cache_alignment: 64

address sizes: 36 bits physical, 46 bits virtual

power management:

processor: 1

vendor_id: GenuineIntel

cpu family: 6

model: 15

model name: Genuine Intel(R) CPU 2160 @ 1.80GHz

stepping: 2

cpu МHz: 1798.238

cache size: 1024 KB

physical id: 0

siblings: 2

core id: 1

cpu cores: 2

fpu: yes

fpu_exception: yes

cpuid level: 10

wp: yes

flags: fpu vme de pse tsc msr pae mce сx8 apic sep mtrr pge

mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl est tm2 ssse3 cx1б xtpr lahf_lm

bogomips: 3595.87

clflush size: 64

cache_alignment: 64

address sizes: 36 bits physical, 48 bits virtual

power management:

Данная команда позволяет узнать:

• кто производитель процессора (vendor_id);

• модель процессора (model name);

• частоту процессора (cpu MHz);

• размер кэша первого уровня (cache size);

• другие параметры процессора.

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

7.8.3. Параметры ядра

В каталоге /proc/sys/kernel находятся файлы, позволяющие изменять некоторые важные параметры ядра. Перечислим некоторые (самые важные) файлы из этого каталога.

• ctrl-alt-del - задает реакцию системы на нажатие комбинации клавиш ‹Ctrl+Alt+Del›. Может содержать значение 0 ("мягкая перезагрузка", при которой управление передастся программе init) или 1 ("жесткая" перезагрузка, практически равносильная нажатию кнопки Reset на корпусе компьютера, поскольку никаких действий по деинициализации системы не производится).

• domainname - содержит сетевое доменное имя.

• hostname - содержит имя хоста.

• msgmax - максимальный размер сообщения (в байтах), которое может быть передано от одного процесса к другому при межпроцессном взаимодействии. Значение по умолчанию 8192. Если увеличить это значение, то увеличится размер ОЗУ, занимаемый операционной системой.

• panic - время в секундах, которое ядро будет ждать, прежде чем перезагрузить систему после вывода сообщения "kernel panic". По умолчанию - 0, т.е. перезагрузка не производится.

• printk - определяет, куда будут направлены сообщения в зависимости от их важности, В файле содержатся четыре значения, например, 6 4 1 7 (по умолчанию). Первое значение задает, сообщения с каким уровнем должны быть выведены на консоль (Console Log Level). Если уровень сообщения 6 и ниже (чем меньше число, тем больше приоритет), то это важные сообщения, и они будут выведены на консоль, второе значение задает приоритет для сообщений, для которых не указано значение приоритета, т.е. задает уровень приоритета по умолчанию. Третье значение задает номер самого высокого приоритета (это 1). Четвертое значение - это значение по умолчанию для первого. Более подробно обо всем этом вы можете прочитать в man syslog(2).

• shmall - максимальный размер (в байтах) разделяемой памяти, значение по умолчанию - 2097152.

• shmax - максимальный размер сегмента памяти (в байтах), допускаемый ядром. По умолчанию - 33554432.

• shmmni - максимальное число сегментов разделяемой памяти. По умолчанию - 4096.

• threads-max - максимальное число используемых ядром потоков. По умолчанию - 2048.

7.8.4. Параметры файловых систем

В каталоге /proc/sys/fs/ можно найти файлы, определяющие работу файловой системы:

• file-max - максимальное число одновременно открытых файлов, по умолчанию 4096.

• inode-max - максимальное число одновременно открытых инодов, по умолчанию 4096.

• super-max - максимальное количество заголовков суперблоков. У каждой "подмонтированной" файловой системы есть суперблок, следовательно, максимальное количество суперблоков равно максимальному количеству одновременно смонтированных файловых систем. Значениепо умолчанию - 256.

• super-nr - текущее количество суперблоков (файл используется только для чтения, писать в него нельзя).

7.8.5. Сетевые параметры

Каталог /proc/sys/net содержит файлы, определяющие работу сети.

• /proc/sуs/net/core/message_burst - можно использовать для предотвращения Dos-атаки, когда система заваливается сообщениями. Определяет время в десятых долях секунды, которое необходимо для записи нового соообщения, остальные сообщения, полученные за это время, будут проигнорированы. Значение по умолчанию - 50 (5 секунд).

• /proc/sys/net/core/message_cost - значимость каждого сообщения. Чем выше значение, тем больше сообщений будет проигнорировано. По умолчанию - 5.

• /proc/sys/net/core/netdev_max_backlog - максимальное число пакетов в очереди на обработку. Позволяет установить максимум, если сетевой интерфейс получает пакеты быстрее, чем ядро может их обработать. По умолчанию - 300.

• /proc/sys/net/core/optmem_max - максимальный размер буфера (в байтах) для одного сокета.

• /proc/sys/net/core/rmem_max - размер буфера для буфера получения информации (в байтах).

• /proc/sys/net/core/wmem_max - размер буфера для буфера отправки информации (в байтах).

• /proc/sys/net/ipv4 - относительно этого файла все очень подробно описано в документе /usr/src/linux/

Documentation/networking/ip-sysctl.txt.

7.8.6. Параметры виртуальной памяти

Каталог /proc/sys/vm содержит файлы, позволяющие изменить параметры виртуальной памяти.

• buffermem - позволяет управлять количеством общей системной памяти, которая будет использоваться как буферная память. В данном файле указываются три значения (через пробел): минимальный, средний и максимальный размер памяти (в %), которая может быть использована для буфера. По умолчанию: 2 10 60.

• freepages - содержит три значения, разделенные пробелами (512 768 1024 - по умолчанию). Если количество свободных страниц памяти достигнет первого значения, доступ к любому дополнительному количеству памяти будет иметь только ядро (а не другие процессы). Если количество свободных страниц будет меньше второго значения (768), ядро будет более активно освобождать память путем свопинга. То же самое и для третьего значения, только в этом случае ядро будет еще активнее.

• kswapd - управляет свопингом. Как и в предыдущем случае, в этом файле присутствуют три значения, разделенные пробелами (512 32 8). Первое значение - это максимальное количество страниц, которые ядро будет пытаться освободить за один раз. Второе - это минимальное количество попыток освобождения страницы во вpeмя свопинга. Третье - количество страниц, которое можно записать в своп. Чем больше это значение, тем больше данных будет записано на диск и меньше времени будет потрачено на поиск на диске. Но тут важно не перестараться, так как слишком большое значение окажет обратный эффект, поскольку увеличится очередь запросов.

7.8.7. Сохранение изменений

Понятно, что любые внесенные в указанные выше "файлы" изменения будут действовать только до перезагрузки компьютера, Сохранить изменения можно с помощью программы sysctl, точнее с помощью ее конфигурационного файла /etc/sysctl.conf.

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

# echo "50" › /prac/sys/vm/swappiness:

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

vm.swappiness = 50

Как видите, /proc/sys/ в начале имени файла отбрасывается, а все оставшиеся слеши заменяются точками.

Однако далеко не все дистрибутивы используют программу sysctl. Если в вашем дистрибутиве нет файла /еtс/sysctl.conf, то придется пойти другим путем. А именно: добавить команды, изменяющие /proc-файлы, в загрузочные сценарии системы, чтобы они выполнялись каждый раз при запуске системы.

Загрузка...