LINUX Navigator, часть 2

Ghoort, 16.06.2002, 3DNews.ru

1. Вступление
2. Пароли
3. Инсталляция
4. Ядро
5. Опции ядра
6. Администрирование
7. Файловая система
8. Настройка сети
9. Заключение

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

Работа с дисками, файловыми системами и другими блочными устройствами для Linux здорово отличается от аналогичной работы для Windows. Это опять же связано с идеологическими требованиями, с которых я начал. Корневая файловая система - та, которая предоставляет точку отсчета для всех файловых систем в Linux. Для всех файловых систем применяется так называемый механизм монтировки (я знаю, что Windows тоже монтирует файловые системы, но доступ человека к этому процессу крайне ограничен). Это означает, что любая файловая система перед работой должна быть зарегистрирована ядром. В разделе, посвященном ядру, было описано незначительное количество типов файловых систем, поддерживаемых Linux, всего их более 40. Каждая файловая система имеет свой набор параметров, которые можно менять для более эффективной работы (а иногда следует менять просто для работы). Эти параметры свои для каждой файловой системы, и некоторые из них ядро умеет определять самостоятельно. Для тех же, которые ядро не определяет, существует файл fstab. Пусть вас не обманывает его кажущаяся простота - количество параметров, которые можно в него вносить, порядка тысячи. Правда, для обычного домашнего компьютера с файловыми системами для Linux и DOS/Windows вполне можно обойтись десятком.

Поскольку пользователь не должен знать о физической структуре компьютера, то каждый раздел на жестком диске, дисководы для флоппи и CD-ROM, а также каждый стриммер, или иной носитель информации, представляется простым каталогом. Выбор этого каталога - дело администратора, но обычно следуют соглашению о том, что каждый неродной для Linux раздел находится в поддиректории директории /mnt. Для этого в ней создаются директории вроде diskc, cdrom, floppy. После монтирования файловой системы эти директории будут называться точками монтирования. Туда можно записать все что угодно, но после монтирования эти данные станут недоступными, хотя место на диске занимать будут. А потому этого делать не рекомендуется. (Существовало предложение о решении проблемы скрытой массы Галактики, как о гипотетической галактике записанной в Пространство до монтирования нашей.) Эту информацию тоже полезно внести в fstab.

#fstab
#устройство# точка монтирования тип опции fs_freq и fs_passno
/dev/hda3 / ext2 defaults 0 1
/dev/hda4 /proc swap defaults 0 2
/dev/hda1 /boot ext2 defaults 0 2
/dev/hda2 /mnt/diskc vfat auto, exec, nosuid, async 0 0
none /proc proc defaults 0 0
/dev/hdc /mnt/cdrom iso9660 user, noauto, ro 0 0
/dev/fd0 /mnt/floppy auto user, noauto 0 0

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

mount -t <тип> -o <опции> <устройство> <каталог>

Структура этого файла отвечает на естественные вопросы "Что?", "Куда?" и "Каким образом?". На последний вопрос отвечают столбцы со третьего по пятый. Самый интересный столбец, это столбец опций.

Общие опции

async Ввод/вывод осуществляется асинхронно. Задано по умолчанию.
sync Ввод/вывод осуществляется синхронно. Устанавливайте для ненадежных носителей, иногда полезно ставить для дисководов.
atime Обновляется время обращения к файлу. Задано по умолчанию.
auto Система монтируется автоматически.
noauto Система монтируется только вручную.
dev Файлы устройств интерпретируются устройствами.
nodev Обратно предыдущему.
exec Разрешено исполнение файлов.
noexec Исполнение запрещено.
suid Включены флаги SUID и SGID.
nosuid Обратно предыдущему.
user Обычный пользователь может смонтировать систему, правда с параметрами по умолчанию noexec, nosuid, nodev.
nouser Правом монтировки обладает только root
rw Чтение и запись.
ro Только чтение.
defaults Означает rw, suid, dev, exec, auto, nouser, async. В 95% случаев достаточно этой опции для ext2.

Опций, специфичных для ext2, очень много и описывать их большого смысла не имеет, поскольку ядро их определяет корректно. Теперь некоторые опции для vfat (FAT с длинными именами) и ntfs, вредительские и ненужные я опускаю.

umask=nnn Маска доступа по умолчанию. Для этой и следующей опции по умолчанию используется для FAT пользователь, смонтировавший систему, а для NTFS - root.
uid=n, gid=n GID и UID владельца по умолчанию.
codepage=866 Кодировка родного языка для FAT (показан русский)
quiet Изменения UNIX-атрибутов не происходит и не приводит к ошибке.
uni_xlate Заменять Unicode-символы. Практически всегда следует указывать. Позволяет правильно работать с пробелами в названии файлов.
iocharset=koi8-r Кодировка родного языка для Linux (так же показан русский)

Опции для ISO9660 (или CDFS) автоматически корректно определяются для каждого диска, включая поддержку расширений для работы с длинными именами RockRidge и Joliet. Также к числу часто используемых типов файловых систем относится NFS (Network File System). Она позволяет монтировать каталоги с удаленных компьютеров по сети. Большая часть ее настроек опивается в разделе об установке сети, поскольку они специфичны именно для этого. Также я не буду описывать файловые системы Ext3 (журналируемое расширение Ext2), ReiserFS (наиболее вероятный преемник семейства Ext), и DFS (DVD File System), хотя они тоже достаточно важны, поскольку для Ext3 и ReiserFS практически полностью решены проблемы с кэшированием.

В последнем столбце стоят 2 числа - fs_freq и fs_passno. fs_freq может принимать значение 0 и 1, и отвечает за создание резервной копии раздела в случае сбоя системы. Это полезно на больших корпоративных серверах с RAID'ом и для системных программистов, разрабатывающих модули для ядра. Остальным не требуется. fs_passno определяет порядок проверки файловой системы при первичной загрузке системы. Число 1 обязательно следует указывать для корневой файловой системы. Если вы захотите проверять что-нибудь кроме нее, то ставьте число 2, в противном случае - 0.

Такое монтирование файловых систем имеет свои ограничения. Первое ограничение связано с кэшированием записи в файловую систему. Дело в том, что нельзя извлекать носитель информации до того как его не размонтировали. Если вы просто читали с него, то это часто полбеды. А вот если еще и писали... Последствия могут быть самыми неожиданными, вплоть до полной остановки системы из-за не вовремя вынутой дискеты. Причем именно дисковод являются самым незащищенным носителем. (Это одна из причин, по которым я считаю, что дисководу не место в профессиональной машине.) Привод CD защищается режимом Read-Only и блокировкой лотка. Блокировка лотка приводит к тому, что нажатие на клавишу eject на панели привода не возымеет никакого действия до тех пор, пока не размонтируете файловую систему диска. Другое ограничение это то, что для работы со сменным носителем приходится каждый раз набирать команду mount.

Частично эти ограничения позволяет обойти автомонтирщик. Это программа, которая монтирует сменный носитель при обращении к нему. Для того, чтобы использовать автомонтировщик, следует включить его поддержку в ядре. Самый распространенный автомонтировщик это autofs. Он управляется файлом auto.master. Структура auto.master

#каталог	управляющий файл
/mnt		/etc/auto.misc

Каждый раз, когда происходит обращение к каталогу /mnt, запускается автомонтировщик с управляющим файлом /etc/auto.misc.

#auto.misc
#подкаталог	опции			:устройство
cdrom		-fstype=iso9660	:/dev/hdc
floppy		-fstype=auto		:/dev/fd0

Тогда при дальнейшем обращении к /mnt/cdrom происходит запуск mount для устройства /dev/hdc с указанными опциями. Указание в опциях файловой системы для носителя обязательно, остальные опции могут браться из fstab.

Проведение проверок дисков является необходимостью, независимо от используемой файловой и операционной систем. В Linux для этого служит целый набор команд. Команда badblocks проводит проверку поверхности диска на читаемость и записываемость, она действует независимо от используемой файловой системы. Для ее выполнения файловую систему необходимо размонтировать (ГРАБЛИ! все проверки дисков это ПОСИМВОЛЬНЫЕ команды), а затем отдать команду

badblocks /dev/hda3 > /tmp/bblcks3

После этого вся информация о поврежденных участках поступит в файл /tmp/bblcks3. Это необходимо, т.к. далее она понадобится для проверки файловой системы.

Проверка файловой системы на носителях проводится различными (ПОСИМВОЛЬНЫМИ!) командами, в зависимости от типа файловой системы (есть общая fsck, которая занимается только тем, что вызывает специфическую, и для работы требует указывать тип файловой системы). Обычно требуется только e2fsck. Она проводит проверку суперблока файловой системы, структуры директории, а также может проводить проверку читаемости поверхности. Однако последнее не требуется, если вы использовали команду badblocks. Еще раз обращу ваше внимание на то, что для запуска проверки файловая система должна быть размонтирована, или, в крайнем случае, смонтирована read-only.

e2fsck -l /tmp/bblcks3 /dev/hda3

Тогда при проверке будет предпринята попытка перенести информацию с поврежденного блока на целый. Иногда это удается.

Любимое занятие всех счастливых обладателей операционной системы Windows, после переустановки этой системы, это форматирование диска. Существует поверье, что это спасает от многих несчастий, например, от плохо устанавливающихся драйверов. Для Linux создание файловой системы (а здесь именно так называется форматирование) занятие не менее важное. Например, если вы купили новый винчестер, или захотели записать CD. Создание файловой системы ext2 проводится командой mke2fs (существует выводок утилит и для других файловых систем серии mkfs -t, мне приходилось видеть версию mkntfs, способную работать с дискетами, CD-R, и ZIP, что невозможно в Win2k/XP). Если перед созданием файловой системы выполнена команда badblocks, то имеет смысл запустить ее с параметрами

mke2fs -l /tmp/bblcks3 /dev/hda3

Для более точного управления файловой системой ext2 применяется команда tune2fs. Она позволяет менять настройки самой файловой системы, которые могут понадобиться для некорневой (а иногда и корневой) файловой системы ext2. Например, максимальное время и количество монтирований между проверками, предельный уровень фрагментации, управление кэшированием и резервированное для root'а пространство. Так же для управления и надзора за ext2 служат команды

quota Надзор за исполнением дисковых квот
df Свободное пространство на диске
du Структура диска
sync Принудительная синхронизация, т.е. запись кэша на носители

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

0. Подготовка системы для работы с CD-R/RW.
1. Создание файла, который станет образом диска.
2. Внесение информации в образ диска.
3. Выжигание образа диска.

Пункт ?0 состоит из перекомпиляции ядра с добавлением необходимых опций, установки программы rdrecord (что обычно сделано) и загрузки ядра с дополнительным параметром командной строки, например "hdc=ide-scsi" для писалки на Secondary Master. Будем считать его выполненным.

Создание файла также не представляет проблемы, если у вас есть 700MB свободного пространства. Командой dd создается пустой файл. Параметры этой команды определяются болванкой и наличием/отсутствием overburn (в смысле "разбирайтесь сами, что я вам все разжевывать должен").

dd if=/dev/zero of="/tmp/cdimage" bs=1024k count=650

В нем создается файловая система iso9660 (можно создать любую другую, например ext2, fat или ntfs, но прочесть такие диски будет можно только под Linux)

mkisofs /tmp/cdimage

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

mount -t iso9660 -o loop=/dev/loop1 /tmp/cdimage /mnt/cdrw

После это вы просто записываете желаемые файлы в директорию /mnt/cdrw. В этом состоит весь второй этап. В последнем или третьем этапе происходит непосредственно запись.

cdrecord -v speed=8 -data /tmp/cdimage

В большинстве дистрибутивов установка программ автоматизирована с помощью системы пакетов. Системами пакетов управляют пакетные менеджеры, самый удачный из которых - rpm (Redhat Packet Manager). Он устанавливается на многих дистрибутивах, а не только на Red Hat Linux. Есть и другие пакетные менеджеры, но их возможности только частично покрывают возможности rpm. Наиболее удобной возможностью rpm является прослеживание взаимосвязи между отдельными пакетами. Все пакеты rpm имеют специальную форму, в которой пишутся их названия.

имя-версия-модификация.архитектура.rpm

Имя - это название упакованного файла, версия и модификация отвечают за новизну и оригинальность, а архитектура показывает, для какого процессора скомпилирован данный код. Архитектура может быть самая разная, постарайтесь найти свою. С параметром архитектуры src пакуются исходные коды, которые придется компилировать, а noarch означает, что пакет заработает для Windows (обычно в таких пакетах документация). Параметры команды rpm могут быть следующие:

rpm -i [опции] <пакет>	Установка пакета.
rpm -U [опции] <пакет>	Обновление пакета.
rpm -e [опции] <пакет>	Удаление пакета.

Дополнительные опции для установки и обновления

-oldpackage - Разрешить замену нового старым.
-replacefiles - Разрешить замену любых файлов. Будьте осторожны.
-replacepkgs - Устанавливать пакет, даже если он уже установлен.
-force - Все три предыдущих вместе.
-nodeps - Не проверять зависимости перед установкой.
-allfiles - Устанавливать все файлы, не обращая внимание, на их возможное отсутствие.
-notrigger - Запретить триггеры (программы, которые запускаются автоматически после установки).
-excludedocs - Не устанавливать документацию.
-includedocs - Обратно предыдущему.
-test - Только проверить будущую установку.

Дополнительные опции для удаления:

-allmatches - Удаление всех версий пакета.
-noscript - Запрет preunistall и postuninstall.
-nodeps - Не проверять зависимости.
-notrigger - Запрет триггеров.
-test - Только проверка.

Управляется rpm файлом rpmrc. Менеджеры пакетов очень удобны, не следует только ставить несколько разных на одну систему. В пакетах rpm например распространяются драйвера для видеокарт nVIDIA. Тогда если у вас чистый дистрибутив, вам следует только скачать с сайта www.nvidia.com необходимые пакеты и установить, как описано в файле Nvidia Linux Driver Installation. Установка этого драйвера отличается от обычной, а потому расскажу, как она происходит. Она делится на 2 основных этапа - установка драйвера видеокарты и библиотеки GLX. Библиотека GLX это библиотека функций OpenGL для Linux и XFree86 4. Сначала прочтите файл readme, поверьте, лучшего описания драйвера я не встречал никогда. Загрузитесь без графической оболочки (режим init 4), и выполните

rpm -i NVIDIA_kernel-1.5-2880.i386.rpm

Это ставится драйвер nVIDIA. Его название kernel немного обескураживает, но думаю, можно сделать скидку на манию величия разработчиков. Он распространяется в виде откомпилированного модуля для ядра (все нужные функции в ядре Linux указали?). При установке запустятся триггеры, которые создадут устройства /dev/nvidia1, /dev/nvidia2, /dev/nvidia3 и /dev/nvidia4. А также добавят новый ядреный модуль в список загружаемых. Имейте в виду, что для работы GLX вам потребуется версия графической оболочки X Window XFree86 не ниже 4. В противном случае Quake III Arena, Return to Castle Wolfenstein и др. не запустятся.

rpm -i NVIDIA_GLX-1.0-2880.i386.rpm

Самым последним (и самым сложным) является внесение изменений в конфигурационный файл X Window. Это файл /etc/X11/XF86Config-4. Не перепутайте, есть похожий XF86Config, он не подойдет. В этом файле необходимо заменить строку

device "nv"
на
device "nvidia"
А строки
Load "dri"
Load "GLcore"

закомментируйте. Запустите X командой startx и работайте (в смысле играйте). Однако этот простой метод не подойдет, если вы поставили иную версию ядра, отличную от стандартной для данного дистрибутива. Тогда самым лучшим выходом будет установка драйвера из архива. Библиотеки NVIDIA_GLX это не касается.

Для этого скачайте файл NVIDIA_kernel-1.0-2880.tar.gz и распакуйте командой

tar xzf	kernel-NVIDIA_1.0-21880.tar.gz
После это в получившемся каталоге выполните команду
make install

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

Установка программ для пакетных систем - занятие несложное, не требуется даже знать где находится сама программа, ссылки на нее обычно автоматически появляются сами в /bin или /usr/bin. Однако есть класс программ, о которых следует поговорить отдельно. Я говорю об играх. На мой взгляд, столь сильная популярность Windows на отечественном рынке не связана ни с простотой установки, ни с легкостью управления, ни даже с доступностью в ларьках у метро. Первые два это просто не правда, а второе - следствие Главной Причины. Главная причина - это Огромное Количество Разнообразных Игрушек на Рынках Нашей Бескрайней Родины. Большинство статьей, посвященных операционным системам, говорят "система XXX предназначена для игр и медиа, система YYY для научных расчетов, система ZZZ - исключительно для сети". Никому из них, видимо, даже не приходит в голову, что операционная система, которая НЕ предназначена для работы ВСЕХ ВОЗМОЖНЫХ программ, просто не нужна. Так же и с Linux, но если пройти по рынкам, скорее всего вы игр не найдете (а если найдете, напишите мне, я тоже туда схожу). Тем не менее, игры есть, и достать их не сложно, достаточно скачать из Интернета.

Для того чтобы получить игрушку для Linux, зайдите на сайт производителя игры и скачайте демку для Linux, которую установите в директорию к полной версии игры для Windows. (Я считаю унизительным использование эмуляторов.) Иногда после этого следует убрать остатки демки. Для Quake III после такой установки, в основной директории игры появляются файл quake3.x86 и поддиректория q3demo. Эту поддиректорию можно (но не обязательно) стереть для сохранения места, поскольку она больше не имеет значения для самой игры. Причем версия для Windows сохранилась, поскольку сохранился файл quake3.exe. Есть способ удобнее, но сложнее. Необходимый файл quake3.x86 также можно вынуть из патча для Linux.

С Unreal Tournament все незначительно сложнее. UTdemo для Linux не следует сразу устанавливать в директорию полной игры, установите во временную. Вам потребуется только поддиректория System демки, которую и перенесите в основную директорию полной игры. Самым последним этапом установки UT является установка последнего патча, также с сайта производителя, для того чтобы не произошел конфликт версий. Найти большое количество демок можно на сайте компании Loki Games, производителя и портера игр для Linux, по адресу http://www.loki.com.

8. Настройка сети

"Барышня, дайте срочно Смольный!"

Для начала настроим простую рабочую станцию. Имеется локальная сеть Ethernet с протоколом TCP/IP. Первоначально требуется скомпилировать ядро с соответствующими драйверами. Первоначально требуется поставить в соответствии IP?адресу имя компьютера (если у вашего компьютера оно есть), для в файле /etc/hosts требуется добавить строку

#IP		полное имя			псевдоним
127.0.0.1	localhost.localdomain	 	localhost
195.14.21.11	blade.hell.com			blade

Первая строка это комментарий, вторая это описание loopback и третья это добавленная нами строка для сети. Дальнейшее конфигурирование происходит при помощи команды ifconfig, она предназначена для сопоставления сетевого интерфейса и IP?адреса. Она имеет следующий синтаксис

ifconfig <interface> [[-net -host] <address> [parameters]]

Интерфейсы для Ethernet устройств называются как eth0, eth1, и т.д. Адрес сопоставляемый интерфейсу берется либо из файла /etc/hosts (ключ -host) или из /etc/network (ключ -network). Файл /etc/network является аналогом файла /etc/hosts и предназначен для сопоставления адреса и имени для сегмента сети. parameters может принимать следующие значения


up Включение интерфейса (ставится по умолчанию).
down Выключение, обратно параметру up.
netmask <mask> Присваивает маску подсети, по умолчанию ставится равной классу подсети, в данном случае 255.255.255.0.
pointopoint <address> Используется только для интерфейсов "точка-точка", например PLIP или SLIP.
broadcast <address> Для установки широковещательного адреса, отличного от стандартного.
metric <address> Предназначен для установлении ненулевой метрики, имеет смысл ставить только для роутера.
mtu <bytes> Максимальная единица передачи данных. Для Ethernet по умолчанию равна 1500, хотя при плохой или загруженной линии ее можно уменьшить.
arp Включает ARP (Address Resolution Protocol) для обратного сопоставления имени по IP, обычно не нужен.
-arp Выключает ARP.
promisc Режим захвата ВСЕХ пакетов, мечта всякого хакера.
-promisc Выключает режим захвата.

После этого следует добавить маршрут в таблицу маршрутизации, для этого предназначена команда route. Ее синтаксис имеет вид

route [add del] [-net -host] <target> [parameters]

Параметр <target> обозначает сеть (при ключе -net) и может браться из файла /etc/network. Если настраивать маршрутизацию на отдельный компьютер, то следует использовать ключ -host. А parameters может принимать значения аналогичные параметрам ifconfig, с дополнением параметра gw (gateway).

Следующим этапом настройки, является установка шлюза. Шлюз предназначен для соединения различных сетей. Если в вашей сети этим компьютером является компьютер с именем shield и адресом 195.14.21.13, то следует добавить в список hosts его характеристики, а затем использовать команду route с параметром gw. Например

route add -net 199.221.14.0 gw shield

После всего написанного стало простым настроить шлюз, для этого нужно только настроить два интерфейса по отдельности и присвоить им уникальные IP-адреса. Полезно так же добавить оба в /etc/hosts.

Если вы все это настроили один раз, то после перезагрузки все настройки потеряются. Для это чтобы избежать этого следует включать команды ifconfig и route в сценарий загрузки сети rc.inet1 точно также как вы только что их набирали. Однако способ, когда в каждом компьютере приходится создавать один и тот же файл, не является изящным. Более удобные средства предоставляют демон gated (это аналог демона Максвелла) и метод proxy ARP (Address Resolution Protocol). Демон gated занимается тем, что динамически создает таблицу маршрутов в системе. Он необходим для больших сетей и работы с линиями "точка-точка", которые меняются динамически.

Самым мощным по сей день средством обеспечения безопасности служит так называемый firewall. Это компьютер или просто программа, которая закрывает доступ к сетевым службам и протоколам тем кому не положено. Для этого имеется минимум 2 управляющих файла: /etc/hosts.deny и /etc/hosts.allow. Структура этих файлов очень проста, в каждом только 2 столбца: сервис и хост (если вы умеете программировать консоль, то можно добавить третий столбец, но ТОЛЬКО ЕСЛИ УМЕЕТЕ). Для любого компьютера, который не служит сервером в Интернете, файл /etc/hosts.deny имеет очень простой вид

ALL:ALL

После этого можно добавить нужные адреса в файл /etc/hosts.allow.
Для проверки служит команда netstat. Она имеет следующие ключи


-r таблица маршрутизации ядра
-n при отображении заменяются имена IP-адресами
-i статистические данные используемых интерфейсов
-a полные данные всех известных интерфейсов, включая ненастроенные
-t, -u, -w, -x активные сокеты TCP, UDP, RAW или UNIX

Так же для проверки служат команды ping и traceroute. Они посылают пакеты на компьютер указанный вами в значении параметров, а затем отображают статистику.

Однако простой установкой сокета мало кто ограничивается. Нужно еще настроить сетевых демонов. Для помощи в продвижении демонологии служит файл /etc/inetd.conf, это управляющий файл суперсервера демонов Интернета. С точки зрения демонологии словом "Интернет" называют самое большое из известных скопление демонов, как диких, так и домашних. Все записи в этом файле имеют вид


#service type protocol wait user server cmdline
#Внеш
login stream tcp nowait root /usr/sbin/rlogin in.rlogin
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd
ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tfpd
#И т.д.
#Внут
daytime stream tcp nowait root internal
time stream tcp nowait root internal #И т.п.

Теперь пояснения.


service Название службы, все названия содержатся в файле /etc/services
type Тип сокета, однозначно связан с протоколом, stream для tcp, dgram для udp (User Datagram Protocol, для некоторых служб гораздо удобнее TCP).
protocols Название протокола, требуется установленный драйвер в ядре и запись в файле /etc/protocols
wait Режим приема-передачи. Обычно ставится nowait для дуплексного режима приема-передачи дейтаграмм, но для некоторых сервисов требуется wait. Для сокетов типа stream следует всегда указывать nowait.
user Под этим именем будет запущен соответствующий сервис. Не следует запускать сетевую службу под более высокой, чем требуемая, привилегией. Например, службу tftp ВСЕГДА следует запускать как nobody.
server Полное имя программы. Если сервис внутренний, то следует указать intelrnal. Внутренние сервисы служат для взаимодействия программ внутри компьютера. Кроме того, ОЧЕНЬ ПОЛЕЗНО для всех сервисов на протоколе TCP/IP использовать единый демон /usr/sbin/tcpd. Это несколько увеличит нагрузку на процессор, но значительно улучшит безопасность. (в примере не так)
cmdline Командная строка запуска, обычно просто ссылка на файл с этой строкой. Для внутренних сервисов строка не требуется.

Файл этот достаточно большой, и я не написал и четверти его строк. Но если вы откроете его, то увидите, что большинство строк закомментированы. Это связано с соображениями безопасности. Ни для кого (кроме разработчиков очередного "безопасного" продукта из Micro$oft) не секрет, что есть сетевые сервисы, которые содержат дыры и есть сервисы, которые даже без дыр не способны хоть что-то засекретить. Среди программистов и root'ов существует поверье, что известных дыр не содержит только самая последняя версия сервиса. Однако бывает что это не верно. Например, я специально привел строку с сервисом tftp (Trivial FTP), он предназначен для загрузки бездисковых рабочих станций, а на деле являет собой незатыкаемую дыру. Обычно, для того чтобы он корректно и относительно безопасно работал, сеть, в которой он устанавливается, делают полностью закрытой от внешнего мира файерволом. На самом загрузочном компьютере создают специальный дисковый раздел, в который только tftp и сможет адресоваться. Затем присваивают ему категорию nobody, а номера ethernet карточек фиксируют. Также опасным является сервис finger, поскольку он предоставляет информацию о работе компьютера всему миру. Нешифрованные авторизуемые службы ftp и telnet это вообще целая песнь хакера, их не ловит только ленивый.

Работа сетевого демона несколько отличается от работы обычного демона. Обычный домашний демон большую часть своей жизни спит и просыпается только для совершения необходимой работы при получении сигнала от ядра. Демон же сетевой спит редко и мониторит подотчетный ему сетевой интерфейс. При поступлении на этот интерфейс требования о соединении, демон немедленно раздваивается. Одна его локальная копия продолжает мониторить интерфейс, а другая обрабатывает соединение. После закрытия соединения локальная копия уничтожается. Исходя из этого следует строить политику запуска сетевых демонов. Службы, запуск которых обрабатывается редко, следует поручить демону tcpd, а специфическим демонам - часто используемые службы. Например, служба telnet даже в самом активно посещаемом MUD'е запускается не чаще одного - двух раз в минуту, а служба http на www-сервере средней нагрузке обрабатывает несколько десятков, а то и сотен, запросов в минуту.

Записывать все известные компьютеры в файл /etc/hosts занятие неблагодарное, а потому его полезно перепоручить компьютеру. Обычно этим занимается демон named. На самом деле это не самостоятельный демон, а часть большой библиотеки, называемой библиотекой резолвера. Задачей этой библиотеки является выполнение двух функций языка C - gethostbyname() и getnamebyhost(). Очень полезно иметь этого демона не только на сервере имен всей сети, но и на каждом компьютере, поскольку локальный демон named позволяет кешировать работу общего и разгружает сеть. Местный резолвер управляется несколькими файла, самый простой и самый важный из них - /etc/host.conf. Число его параметров очень ограничено


order Порядок опроса служб разрешения имен. Может иметь только 3 значения bind (запросить сервер DNS), hosts (искать в файле /etc/hosts) и nis (поиск в базе NIS). Может принимать все три значения одновременно.
multi Имеет значения on или off. Если стоит on, то хосты из списка /etc/hosts могут иметь несколько IP-адресов.
nospoof Тоже имеет два значения on и off, позволяет бороться с подложными именами хостов.
alert Употребляется после включения антиспуфинга в предыдущем пункте.
trim Необязательный параметр, значение которого имя домена. Полезен, если хост является членом нескольких доменов.

Для того чтобы использовать удаленный сервер имен DNS (параметр order имеет значение bind), необходимо указать, где этот сервер находится. Для этого служит файл /etc/resolv.conf, в котором только 2 параметра domain и nameserver. Значением domain является домен, в котором работает хост. А значением nameserver является IP-адрес сервера имен. Можно указывать не более трех серверов имен, причем порядок их просмотра определяется их положением в списке. Если этот файл отсутствует, то предполагается что сервер имен работает локально.

Локальный демон named управляется несколько нестандартным файлом /etc/named.boot (в нем коментарии обозначаются ;). Для примера

;/etc/named.boot для blade.hell.net
directory	/tmp/named
;порядок	домен				файл
cache		.				named.ca
primary	hell.net.			named.hosts
primary	0.0.127.in-addr.arpa.		named.local
primary	14.195.in-addr.arpa.		named.rev
;и т.д.

Перед описанием параметров обратите внимание как здесь пишутся имена, задом наперед, вместо неизвестной части ставится .in-addr.arpa., причем ОБЯЗАТЕЛЬНО заканчивается на точку. В этом файле ВСЕГДА должна присутствовать строка о loopback интерфейсе 127.0.0.1, как о primary, иначе многие ваши внутренние программы полезут наружу и никогда не вернутся. Теперь остальные параметры


directory Определяет каталог в который будут складываться данные, можно указать несколько.
primary Информация о зоне этого домена загружается из указанного файла.
secondary Параметров всегда три, имя домена, имя файла и имя первичного (primary) сервера. Сначала просматривается файл, затем идет обращение к первичному серверу. После получения информации, она заносится в указанный файл. Первичных серверов можно указать несколько, порядок их опроса определяется порядком записи.
cache Обязательно должен присутствовать, в качестве параметров идут имя домена и имя файла. Причем в качестве одного из доменов всегда должна быть указана точка (.).
forwarders Список серверов, к которым можно перенаправить запрос.
slave Если указан этот параметр, то named только перенаправляет запросы.

Получить информацию с другого компьютера в сети можно только с помощью обычных сетевых протоколов. Для этого служит еще и RPC (Remote Procedure Call). Основных применения для RPC два - это NIS (Network Information Service) и NFS (Network File System). Есть еще два побочных, понятно последствия творчества Microsoft, IIS (Internet Information Service) и SMB (сервер NetBIOS для сетей UNIX). NIS (и IIS) служит для получения информации по сети, например, с его помощью можно организовать общие пароли для всех компьютеров в локальной сети. А NFS (и SMB) служит для получения доступа к удаленным каталогам, как к локальным. Локальная сеть, организованная на NIS и NFS, очень легка для администрирования и работы, пользователь даже не должен знать, где расположен компьютер с его личным каталогом, а где с необходимой программой, он просто садится за ближайший. К сожалению, та версия NIS, с которой имел дело я, была сильно устаревшей, не обеспечивала режима теневых паролей, шифрованных соединений и надежной авторизации. Потому я напишу только об NFS.

Для того чтобы можно было начинать работу с томами (здесь это слово аналогично "удаленная файловая система") NFS, следует запустить демона NFS и установить поддержку NFS в ядре. Демоны NFS запускаются не через суперсервер демонов Интернета, а самостоятельно, через сценарий загрузки. Для этого в файле /etc/rc.d/rc.inet2 должна быть запись

if [ -x /usr/sbin/rpc.mountd ]; then
	/usr/sbin/rpc.mountd; echo -n " mountd"
fi
if [ -x /usr/sbin/rpc.nfs ]; then
	/usr/sbin/rpc.nfsd; echo -n " nfsd"
fi
if[ -x /usr/sbin/rpc.ugidd ]; then
	/usr/sbin/rpc.mountd; echo -n " ugidd"
fi

Первый блок запускает монтировщика (он обычно включен по умолчанию), второй - NFS (он обычно закомментирован), третий - демона имен и групп ugidd.

Для управления подключением клиентов, на сервере создается управляющий файл /etc/exports. Только прописанные в этом файле клиенты имеют доступ к тому NFS на сервере. Обычно он имеет следующий вид

#/etc/exports на сервере blade
/home/users	bow(rw, kerberos), arrow(rw, kerberos), riposte(rw, kerberos)
/usr/games	bow(ro), arrow(ro), riposte(ro), blaze(ro)

Структура этого файла понятна (не путать с понятием "интуитивно понятно"), первый столбец - каталог на сервере, второй - список клиентов с параметрами. В названиях можно употреблять символы * и ? если строка клиентов пуста, то доступ открыт всем. Параметры могут иметь следующие значения


rw Доступ для чтения и записи.
ro Доступ только для чтения. По умолчанию установлен.
kerberos Требования авторизации протоколом kerberos.
insecure Не требуется авторизации.
rpc-secure Использование стандарта закрытого RPC.
root_squash Отменяет права root'а, очень полезный флажок.
no_root_squash Обратный к предыдущему. Обратите внимание, что на большинстве систем стоит по умолчанию, представляя собой колоссальную дыру в безопасности.
unix-rpc Требование авторизации в рамках домена.
map_identify Этот режим оставляет без изменения цифровые gid и uid. Обычно включен по умолчанию.
map_deamon Обратный к предыдущему. Позволяет иметь различные gid и uid на клиенте и сервере, требует запущенного демона ugidd.
Следующие 2 параметра управляют линками на смонтированном удаленном томе. Какой из них у вас включен по умолчанию, обычно заранее сказать нельзя, просто проверьте.
link_relative Конвертирует линки из абсолютных в относительные, например линк /usr/games/q3a/quake.x86, находящийся в каталоге /usr/games/links/, превратится в ../q3a/quake.x86, если монтируется /usr/games/. После этого измененный линк будет работать в подмонтированном каталоге.
link_absolute Линки остаются без изменений, на деле требуется достаточно редко.

Теперь можно приступить к монтированию тома NFS клиентом. Для этого используется уже знакомый файл /etc/fstab. В него следует внести строки вида


#том точка монтирования тип параметры
blade:/home/users /home/users nfs hard, timeo=20
blade:/usr/games /games nfs intr, timeo=12

Где параметры могут быть следующими


rsize=n, wsize=n Размер пакетов клиента NFS, по умолчанию равен 1024. Менять не рекомендуется.
timeo=n Время ожидания запроса клиентом в долях секунды. По умолчанию равно 7.
hard Том монтируется жестко. Если на таком томе превышено время ожидания, то на консоль выдается предупреждение, а монтировщик будет по-прежнему пытаться установить связь.
soft Противоположен предыдущему, после достижения предельного времени том размонтируется.
intr Прерывает вызовы клиента, если сервер долгое время не доступен. Используется с параметром hard.

После этого можно монтировать том вручную или посредством автомонтировщика autofs.

Я описал лишь малую часть работы демонов Интернета и демонов RPC. Например, в последнее время стали повсеместно использоваться алгоритмы шифрования и надежной авторизации, устойчивые к перехвату пакетов хакером. Это демоны sshd (Secured SHell), slogind (Secured LOGIN) и другие. Так же я не коснулся такого вопроса как организация Интернет-сервера с демоном httpd, сервером Apache и других Интернет-служб. Не ограничиваются описанными и применения RPC, это очень мощная система, которая позволяет легко (например, одной командой export DISPLAY=blade) устанавливать достаточно сложные соединения, вроде Remote Desktop Connection из арсенала Windows2000. При этом не требуется передавать все содержимое рабочего стола, если вам требуется лишь запустить одну программу. В общем, это самостоятельное творчество, которому могут помочь только собственные усилия.

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

Если соединение осуществляется с помощью протокола PPP (а сегодня это почти всегда так), то этим соединением управляет демон pppd. Это необычный демон, он отличается от всех предыдущих тем, что ЛЮБОЙ пользователь может им управлять (даже guest). Осуществляется управление с помощью аргументов командной строки и управляющих файлов. Этих файлов может быть много, один основной, и по одному на каждого юзера. Основной файл называется /etc/ppp/options, а пользовательские файлы .rcppp, и содержатся они в домашних каталогах. Правило здесь следующее: параметры для всех файлов одинаковые, но в первую очередь просматриваются параметры из основного файла, затем из пользовательских. Параметры основного файла общедоступны и общеприняты, т.е. каждый пользователь их употребляет, но не может изменить. Параметры же пользовательских файлов личные, т.е. только владелец их знает и может изменять. Таким образом, пароли следует хранить в пользовательских файлах, а настройки модема - в общем.


/dev/ttyS0 Имя модема, если модем единственный, то следует писать в основной файл, если модемов несколько, то можно оставить на усмотрение пользователей.
crtscts Включает аппаратное разрешение передачи, без этого режима скорость будет ограничена до 9600. Пишите в основной.
defaultroute Включает маршрут PPP в качестве маршрута по умолчанию. Можно оставить на произвол пользователей, только если вы уверены в их знаниях.
auth Требует авторизации при подключении к вашему компьютеру. Обязательно следует указывать в основном файле.
lock Блокирует используемый канал. Тоже обязательно следует указывать в основном файле.
domain Имя домена. Необходим для авторизации по протоколу CHAP, который для простого соединения с Интернетом через провайдера не используется.
modem Указывает демону на работу именно с модемом, пользователи ВСЕГДА забывают это слово.
-detach Демон после соединения переходит в фоновый режим, указывайте в основном файле.
noipdefault Демон pppd в присутствии этого параметра обязан назначить для соединения тот IP, который ему предложит удаленный компьютер. Оставьте на усмотрение пользователям, только если уверены, что они не забудут его указать.
silent После указания этого параметра демон pppd будет работать в режиме сервера, т.е. после установления физического соединения будет ждать, когда с клиента поступит первый пакет. connect "сценарий" Параметр, который обязан принимать какое-либо значение. Каждый сценарий содержит номер телефона, имя и пароль пользователя. Эту строку ОБЯЗАН задавать пользователь.

Так же в качестве параметров при желании можно указать требуемую скорость соединения, IP-адрес своего хоста и IP-адрес удаленного. Последние параметры частично противоречат параметру noipdefault, и записываются как local_addr:remote_addr. Кроме того для работы в режиме сервера требуется настроить последовательный порт таким образом, что бы он не отсылал полученные команды назад, как эхо. Для этого следует отдать следующие команды для порта

mesg n
stty -echo

Таким образом для дозвона до провайдера можно использовать следующий сценарий (если все необходимые параметры находятся в /etc/ppp/options)

pppd connect "my_scenario"

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


demand Параметр "дозвона по требованию", соединение ppp0 будет создано, но connect запустится лишь после того как он потребуется.
active_filter Значение этого параметра управляет настройками трафика, без него демон будет реагировать на каждый исходящий бит.
holdoff <t> Время в секундах между дозвонами.
idle <t> Время через которое демон повесит трубку при отсутствии трафика.

Есть еще 2 файла, которые управляют демоном pppd, они называются /etc/ppp/ip-up и /etc/ppp/ip-down. Их назначение это маршрутизация в удаленную сеть при помощи протокола PPP. Они используют те же параметры, что и описанные файлы, и если вы используете PPP только для связи с Интернетом, то их можно оставить как есть.

Тогда для пользователя основным станет создание и запуск сценария его соединения. Этот процесс давно автоматизирован с помощью специальных программ, которые разные в разных дистрибутивах Linux. Но иногда может возникнуть необходимость создания или запуска сценария вручную. Для следует создать файл с названием вроде my_scenario. А для параметра connect указать значение "chat -f my_scenario". chat это программа общения с модемом по принципу диалога, ключ -f означает, что этот диалог берется из файла. Пример части такого файла

ATZ
OK	ATDT3208080
CONNECT	' '
ogin: ghoort
word: forget
При его запуске на модем посылается команда ATZ (инициализация), затем он ожидает ответа OK. После его получения, программа chat высылает телефонный номер ATDT3208080 в импульсном наборе, и ждет ответа CONNECT. После получения ответа, она не делает ничего, на что указывает пустая строка. Получение приглашения ogin: приводит к ответу ghoort, причем такой вид не ошибка, это требуется, поскольку буквы L и l здесь различаются. Затем вводится пароль.

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

И жили они долго и счастливо...

Развитие индустрии сказалось и на Linux. Хотя и есть люди, которые ругают Linux (кстати, обоснованно) за шатание из стороны в сторону, постоянное переписывание уже готовых частей ядра, не достаточно быстрое добавление новых и необходимых, да мало ли за что... Юниксовая братия уже разделилась на 2 направления - BSD и SysV, которые различаются структурой ядра и методами межпроцессовых коммуникаций. Начинает оформляться течение, которое требует интеграции графической среды на уровень ядра, хотя бы на уровне модуля (к этим отщепенцам отношусь и я). И многое другое. Но в последние годы появилось новое идеологическое требование, которое - просто хорошо забытое старое.

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

А все-таки интересно, будет ли версия Microsoft Office для Linux?



Источник - LinuxBegin.ru
http://linuxbegin.ru

Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article141.html