Consortium Deamonicum
Я где-то читал, что администрирование UNIX - это на 60% знание конфигурационных файлов в /etc, на 20% - логов в /tmp и /var, на 10% файловой системы /proc, и только уделяется 10% остальным корневым каталогам. Пожалуй, это действительно так. Ведь в каталоге /etc находятся практически все управляющие файлы вашей системы. Если здесь я буду указывать файл shadow, то следует понимать, что он имеет полное название /etc/shadow. А если rc.d/rc1 - то /etc/rc.d/rc1. Управление Windows сводится, согласно их "frendly" и "easy-to-use", к постановке галок и нажатиям кнопок, а сам интерфейс подобен наколотым в разных местах пометочным листам. Если вам вдруг, захочется заглянуть поглубже, то, скорее всего, это не удастся, а если вы вдруг запортите один из листочков, то придется "переустанавливать систему". Управление Linux и UNIX аналогично тетради, которая всегда лежит в одном и том же месте и заполнена страничками-файлами. Для того чтобы получить полный доступ к возможностям системы достаточно прочесть эту тетрадь. Для облечения чтения этой тетради, на ее полях написаны примечания и комментарии. Если вдруг испортите одну из страничек, то просто создайте новую.Администрирование UNIX системы сводится к нескольким основным моментам - это обеспечение нормального функционирования системы, работы пользователей и работы сетевых служб, а также установка новых программ и патчей. Обеспечение работы пользователей на сегодняшний день почти полностью автоматизировано специальными программами, например adduser.
Не рекомендуется менять эти настройки вручную через простой текстовый редактор, поскольку он может поменять не то, что нужно (например, маску доступа), а как раз то, что необходимо, вы забудете изменить.
Система предоставляет удобный интерфейс, который позволяет создать пользователя (в этом работа администратора сравнима с божественной), убить (а в этом с работой киллера), закрыть доступ к системе в течение определенного времени (это уже работа тюремного надзирателя), а также сделать массу неприятных для них штук. А потому пароль рута - это самая желаемая цель любого хакера. Следует очень внимательно оберегать этот секрет, не доверяя никому. (Автор и его друзья, в бытность юзерами, 4 раза по разным причинам угадывали пароли админов.)
Для обеспечения достаточной безопасности существует система теневых паролей. Они находятся в файле shadow, доступ к которому имеет только root. Каждый раз, когда кто-либо вводит логин и пароль, активируется механизм PAM (Pluggable Authentication Modules). Он разработан в связи с тем, что многим программам требуется авторизация пользователя, как например login, ftp, telnet и др. После получения пароля, модуль PAM, который имеет приоритет root'а, выполняет его шифрование, а затем сравнивает с зашифрованным значением из файла shadow. Это шифрование одностороннее, т.е. зная шифр нельзя узнать пароль, по крайней мере, в ближайшие 10000000 лет. Однако существует механизм позволяющий подобрать пароль при известном шифре (например, программой crack) с помощью простого перебора, если доступен файл shadow. Для защиты от таких взломов, shadow имеет владельца root, и маску доступа 600.
Другим механизмом защиты от пользователей реализованным в adduser, является система дисковых квот. Каждый юзер любит набить свой каталог всяким хламом, игрушками и порнухой. Если диск переполняется, то могут случатся самые неожиданные вещи, вроде полного отказа системы. А потому следует устанавливать квоты таким образом, чтобы в полностью заполненном состоянии оставалось не менее 20% свободного места. Имеется 2 вида квот - мягкие и жесткие. Нарушение жестких квот невозможно, тогда как при нарушении мягкой квоты пользователю выдается предупреждение о том, что через определенный промежуток времени следует освободить незаконно занимаемое дисковое пространство. По истечении этого срока пользователь просто не может зайти в систему, а админ получает сообщение о превышение мягкой квоты пользователем lamer.
Админ должен защищаться и сам. Существует несколько простых методов безопасности, которые должен выполнять любой root. Во-первых, никогда не следует заходить в систему под логином root. Для того, чтобы нормально работать как root, существует простая программка su (SuperUser). Если в shell ввести su, а затем пароль root'а, то можно получить все необходимые возможности. Никогда не следует отходить от открытого компьютера, не забывайте про logout. Пользоваться su следует очень осторожно, только по необходимости, затем немедленно logout. Пароль админа должен быть уникальный (шедевры вроде kozlik4 оставьте при себе), и нигде более не употребляться и не записываться.
Не менее серьезную дыру в безопасности представляют собой альтернативные загрузочные устройства, как-то флоппик и привод CD-ROM. Для простой работы они обычно не нужны, а потому их очень полезно отключить. Не следует в этом деле доверяться паролю на биосе, поскольку большинство материнских плат, помимо паролей для administrator и user, имеет еще и пароль для manufacturer (который, понятно, не меняется). Пускай юзеры пользуются новейшим достижением компьютерной мысли, более известным как локальная сеть.
Я малость отвлекся на больную тему всех админов, но продолжу. В директории /etc находится большое количество разнообразных файлов, а не только shadow. Есть там и развлекательные вещи. К таким несерьезным (но очень интересным) настройкам относятся issue и motd. В issue приглашение, которое выводится перед login. В серьезных системах это обычно ее описание, или, проще говоря, самореклама местного админа, для остальных - сообщение вроде "Заходи тихо, проси мало, уходи быстро". Файл motd содержит сообщения, которые в произвольном порядке получает пользователь сразу после входа в систему. В Windows есть аналогичное Tip of day, или "Сообщение дня", как правило, глупое и скучное. А в файл motd можно сунуть все что угодно, а не только приторную радость операционной системы от вашего присутствия, например полторы сотни коротких анекдотов или законы Мерфи. Мне даже известен один слабо одомашненный компьютер, который виртуозно ругался матом. Если вы только начинаете знакомиться с системой, то сначала следует "поменять мебель", т.е. motd или issue.
В конце предыдущего раздела я обещал подробно рассказать о конфигурации загрузчика lilo. Он управляется конфигурационным файлом lilo.conf. Поскольку lilo умеет загружать не только Linux, но и другие операционные системы вроде Windows, DOS, OS/2 и т.д., то его конфигурация должна учитывать и их особенности. Файл lilo.conf имеет заголовок, который описывает общую работу загрузчика и секции по каждой операционной системе.
#Файл lilo.conf
#Заголовок
#
#Положение загрузчика, в данном случае в начале диска
boot=/dev/hda1
#Положение корневой файловой системы (не путать с администратором)
root=/dev/hda2
#map-файл, создается автоматически
map=/boot/map
#Графический режим загрузки
vga=normal
#Задержка для выбора
delay=30
#Секции
#Linux
image=/boot/bzImage-2.4.4label=linux-2.4.4#Windows, содержит указатель на загрузчик и таблицу разделов
#Не забудьте указать следующую строку
read-only
#Команда, подаваемая ядру Linux
append="ether=10,300,eth0"
other=/dev/hda3table=/dev/hda#Old Linux kernel
label=win
image=/boot/oldkernellabel=oldkernel
read-only
append="ether=10,300,eth0"
После того, как вы внесли какие-нибудь изменения в lilo.conf, следует их активизировать, запустив загрузчик командой lilo или /sbin/lilo. В команде,подаваемой ядру, обычно содержится информация об активных сетевых интерфейсах. Обратите особое внимание, на то что в этой строке запрещены пробелы. Если в ней присутствует пробел, то ядро воспримет это как следующую строку!
Ядро приводит к запуску основного процесса системы init - это предок всех процессов, остальные процессы являются его потомками. Каждый процесс имеет свой номер и приоритет, номер init - 1 (один). Но сам по себе init конечно не знает, какие процессы ему следует запустить. Для этого служит группа файлов (понятно, в каталоге /etc). Основной файл этой группы называется inittab, и он определяет уровни выполнения. Каждая строка в этом файле имеет вид
id:runlevel:action:process
А все строки, начинающиеся с #, считаются комментариями. (Короткое замечание о комментариях. Они так обозначаются практически везде, это не C. Всегда читайте комментарии, в них часто написано гораздо больше полезного и интересного, чем в мануалах. Всегда когда меняете какой-либо параметр, сначала закомментируйте старое значение, а потом пишите новое.)
Теперь подробнее о inittab
- id - Параметр строки, каждая строка должна иметь уникальный id.
- runlevel - Уровни исполнения, обозначаются числом от 0 до 6.
- action - Действие выполнения, различаются множественные и однократные.
- process - Имя запускаемого процесса.
Иногда требуется, чтобы уже работающая система перечитала inittab без перезгрузки. Выполните команду kill -HUP 1. init также управляет выключением и перезагрузкой системы. Значения runlevel отвечают следующему
0 - Выключение системы.
1 - Однопользовательский режим.
2-4 - Различные режимы нормальной работы.
5 - Загрузка с графической средой.
6 - Перезагрузка.
Когда init запускается, он ищет в inittab строку, которая определяет уровень загрузки по умолчанию
id:5:initdefault:
В данном случае, это загрузка с графической оболочкой. Для работающей системы параметр initdefault меняется командой telinit. Менять остальные параметры сценариев загрузки требуется редко, и для этого надо знать язык программирования shell.
В средневековье была наука под названием "демонология". Предметом ее изучения была связь демонов с человеком, поскольку тогда считалось, что человек не может познать связь демонов между собой. Но работа с Linux вынуждает заниматься именно этим. Демоны существуют в каждом компьютере, на котором стоит операционная система семейства UNIX. (Windows демоны переименованы в сервисы, т.е. в слуг или рабов, однако называть всех демонов слугами неправильно, есть огромное количество диких демонов.) Демоны запускаются процессом init и живут до того, как их не прикончит Бог (root) или плановый Армагеддон (shutdown). Демоны управляют практически всем в системе, и внутренними ресурсами и сетевыми соединениями. Запускаясь, демон сообщает об этом, также он сообщает, удалось ли это ему. Кстати, это противоречит спецификациям Microsoft pc99 и pc2001, согласно которым, человек не должен знать, какие сервисы в данный момент находятся в системе. Вот и думай после этого, кто демон, а кто слуга. Я приведу сокращенный список домашних (т.е. несетевых) демонов, а потом опишу некоторые подробнее.
crond | Большой Демон Времени. Выполняет периодические команды. |
anacrond | Малый Демон Времени. |
atd | Демон Часов, выполняет однократные команды, заданные на определенное время. |
gpm | Демон Консольной Мыши. Вообще говоря, не нужен, поскольку мышь в X Windows работает без некого, а в "чистой" консоли мышь пользуются крайне редко. |
kerneld | Демон Ядра. |
moduled | Демон Модулей Ядра. |
syslogd | Демон-Архивариус. Записывает все что происходит, необходим для работы. |
lpd | Демон Печати, управляет принтерами. |
pcmciad | Демон PCMCIA-устройств. |
dbflush | Демон Синхронизации Файловой Системы. |
autofsd | Демон Монтирования Файловых Систем. |
Для удобства восприятия и удовлетворения идеологии устройства в UNIX передаются файлами. Это так называемые специальные файлы, или файлы устройств. Каждый файл имеет описание, и если обычный файл помещает его в заголовке, то файл устройства прячет его в драйвере. Существует соглашение, что все используемые файлы устройств находятся в каталоге /dev. Их там очень много, это произошло не потому, что у вашего компьютера так много устройств, а для того, чтобы пользователю не приходилось их добавлять самостоятельно. Непосредственно работать с файлами устройств приходится крайне редко, а если и приходится, то работа эта полностью автоматизирована. Полезно пожалуй знать что для этого существуют скрипты /dev/MAKEDEV и /dev/MAKEDEV.local. Однако довольно часто приходится обращаться к этим устройствам, а потому полезно знать как расшифровываются их названия. Я приведу несколько примеров по которым легко это понять
/dev/hda | IDE Primary Master |
/dev/hdb | IDE Primary Slave |
/dev/hdc | IDE Secondary Master |
/dev/hda1 | Первый раздел на hda |
/dev/cdrom | обычно мягкий линк на обнаруженный CD-ROM |
/dev/fd0 | первый дисковод |
/dev/ttyS0 | COM1 |
/dev/ttyS1 | COM2 |
/dev/ps2mouse | обычно мышь PS/2 |
/dev/nv | видеокарта nVIDIA |
/dev/nvidia1 | видеокарта nVIDIA в понимании nVIDIA |
/dev/modem | обычно мягкий линк на порт модема (не рекомендуется) |
и т.д. Список очень большой. Все устройства делятся на 2 типа - блочные и символьные. Чтение/запись на блочные устройства может проводиться блоками через буфер, в то время как символьные работают только напрямую. Пример блочного устройства - винчестер, дисковод. А символьные устройства это мышь, клавиатура и видеокарта. Ошибка, которую совершают большинство перешедших с Windows, это работа с блочным устройством напрямую. Заметьте, что это не ошибка для системы, такая работа тоже возможна, но результат может здорово отличаться от ожидаемого. Например, команда
cp /home/newbieroot/myfile /dev/hdb1
с привилегиями root'а запросто уничтожит файловую систему на первом разделе диска hdb (или диска d: в DOS), поскольку скопирует файл myfile в устройство /dev/hdb1 ПОСИМВОЛЬНО, начиная с первого сектора!