Брандмауэры и специальное программное обеспечение



Pdf просмотр
страница11/42
Дата15.02.2017
Размер6.16 Mb.
Просмотров3726
Скачиваний0
ТипАнализ
1   ...   7   8   9   10   11   12   13   14   ...   42
Таблица 6.1. Файлы каталога, описывающего состояние процесса
Имя
Содержимое
cmdline
Аргументы командной строки cwd
Ссылка на рабочий каталог (каталог, из которого была выполнена породившая процесс команда) environ
Переменные окружения ехе
Ссылка на исполняемый файл процесса fd
Каталог, содержащий дескрипторы файлов процесса, ссылки на другие файлы и т. п.
1г-х----- 1 root root
64 Dec 13 08:56 0 -> /dev/null l-wx-----
1 root root
64 Dec 13 08:56 1 -> /var/log/xdm-errors l-wx-----
1 root root
64 Dec 13 08:56 2 -> /var/log/xdm-errors lrwx-----
1 root root
64 Dec 13 08:56 3-> socket:[1556] lrwx-----
1 root root
64 Dec 13 08:56 5 -> socket:[573] maps
Исполняемые файлы и библиотеки, отображенные в память процесса mem
Память процесса root
Ссылка на корневой каталог процесса (обычно /) stat
Состояние процесса statm
Состояние памяти процесса status
Состояние процесса в понятном для человека виде (формат файлов stat и statm не понятен для человека)
Что касается второй части листинга — файлов с символьными именами, — то большинство перечисленных в нем имен должны быть вам понятны. О характере содержимого этих файлов можно догадаться, взглянув на имя. Файл interrupts (прерывания), например, содержит ровно то, что и предполагает его название: список всех прерываний и устройств, использующих их. Определенная информация содержится также в подкаталогах. Структура каталога /ргос на всех системах практически одинакова. Присутствие некоторого подкаталога для определенной конфигурации может оказаться бессмысленным, однако из соображений стандартизации этот подкаталог все равно будет присутствовать в
/ргос, просто он будет абсолютно пустым. Например, даже если в вашей системе нет никаких устройств
SCSI, все равно вы сможете обнаружить в каталоге /ргос подкаталог scsi, который будет пустым. В системе, базирующейся на SCSI, контроллер IDE может полностью отсутствовать, однако даже в этом случае в каталоге /ргос будет присутствовать пустой подкаталог ide
2

Тем, кто интересуется работой с /ргос на уровне системного программирования, следует заглянуть в
/usr/src/linux/include/linux/proc_fs.h. Данный файл содержит описания структур данных и функций, позволяющих представлять /ргос в виде дерева в памяти и динамически добавлять в эту систему новые элементы. Еще одним источником информации о /ргос является файл документации /usr/src/ linux/Documentation/proc.txt. И хотя в этом файле собрана далеко не вся информация о /ргос, это единственный более или менее полноценный документ, посвященный данной файловой системе.
При монтировании /ргос создаются все поддерживаемые данной системой каталоги, но не файлы.
Файлы создаются только для тех механизмов, которые действительно включены в состав ядра. Например, если поддержка звука была включена в ядро, а значит, присутствует в системе постоянно, то связанный с ней файл sound будет создан непосредственно при монтировании /ргос. Если же поддержка звука реализована в виде отдельных модулей, то соответствующий файл появится в /ргос лишь после загрузки необходимых для поддержки звука модулей. И до тех пор, пока не будет загружен модуль конкретной звуковой карты, этот файл будет пустым. После же загрузки такого модуля из этого файла можно будет узнать, какой модуль был загружен и с какими параметрами
3

Это верно и для других подсистем, таких как ррр, slip и т. д. Связанные с этими подсистемами каталоги всегда будут присутствовать в /ргос, тогда как соответствующие файлы могут отсутствовать. В качестве другого примера рассмотрим привод SCSI CD-ROM, поддерживаемый при помощи модуля. Пусть это будет модуль aha!54x компании Adaptec. Если этот модуль не загружен и привод CD-ROM является единственным SCSI устройством в системе, то изначально каталог /proc/scsi будет абсолютно пустым — в нем не будет существовать ни одного файла. После загрузки модуля aha!54x в этом каталоге появятся два файла: scsiO и sda (или sd(b|c|d), в зависимости от конфигурации устройства). В этих файлах будут содержаться всевозможные сведения об этом устройстве. Затем, после монтирования компакт-диска, появятся новые записи в /proc/filesystems и т. д.

2
Однако, судя по исходным текстам, созданием каталогов в /ргос занимаются сами подсистемы, так что если нет поддержки SCSI, то и нет каталога scsi. Поэтому либо автор попросту не прав, либо «соображения стандартизации» относятся не к Linux в целом, а к дистрибутиву Caldera. — Примеч. перев.

1,2,3
В 2.4 я /proc/sound не нашел. По крайней мере, в 2.2 мне удалось, причем достаточно быстро, найти место в исходниках, где создается этот файл, а вот в 2.4 — нет. — Примеч. перев.

Далее, предположим, что по некоторым причинам система была переведена в однопользовательский режим (уровень выполнения 1), а все файловые системы размонтированы. После этого в системе были смонтированы корневая файловая система в режиме только для чтения и файловая система /ргос. После этого вы хотите монтировать гибкий диск с файловой системой vfat в режиме только для чтения. Так как корневая система доступна лишь для чтения, команда mount не сможет создать файл /etc/mtab, содержащий записи о монтированных файловых системах (в этом случае можно воспользоваться ключом -п, который предписывает команде mount не вносить запись о монтируемой системе в файл /etc/mtab). В результате если вы попробуете узнать о монтированных файловых системах при помощи команд df или mount, гибкий диск будет отсутствовать в списке монтированных файловых систем. В подобной ситуации достоверную информацию о монтированных файловых системах можно получить при помощи /ргос. Заглянув в файл
/proc/filesystems, можно увидеть, что в системе включена поддержка vfat, а заглянув в файл /proc/mounts, вы узнаете о том, что именно в настоящий момент монтировано в системе.
Каталог /proc/sys
Среди всех прочих каталогов /ргос каталог sys является особенным. Для построения ядра с поддержкой фильтрации пакетов необходимо также включить в ядро поддержку такой вещи, как sysctl
(system control). Для этого в конфигурационном меню следует выбрать General Setup > Sysctl support. По умолчанию поддержка sysctl включена, то есть в файле конфигурации присутствует строка:
CONFIG_SYSCTL-y
Если в ядре присутствуют поддержка sysctl и поддержка /ргос и если файловая система /ргос смонтирована, то в каталоге /ргос появляется подкаталог sys, содержащий в себе несколько файлов и подкаталогов. В отличие от остальной файловой системы /ргос, которая предназначена только для чтения, каталог /proc/sys содержит в себе файлы, в которые можно записывать информацию.
ПРИМЕЧАНИЕ
В новых ядрах, содержащих поддержку mttr, в корне /ргос располагается файл mttr, в который также можно
производить запись. Более того, это единственный файл в /ргос, если не считать символические ссылки и kcore,
обладающий ненулевым размером, поэтому его можно считать исключением из общего правила.
Файлы каталога /proc/sys позволяют изменять состояние (параметры работы) ядра прямо в процессе его функционирования. Данной возможностью пользуются многие программы. Например, после запуска сервера XFree86 вы не сможете инициировать завершение работы системы при помощи комбинации клавиш Ctrl+Alt+Del, не переключившись предварительно на виртуальный терминал. Система ведет себя так потому, что Х-сервер записал значение 0 в файл /proc/sys/ kernel/ctrl-alt-del и тем самым запретил перезагрузку при нажатии этой комбинации клавиш. Виртуальный терминал, наоборот, записывает в этот файл значение 1 и, таким образом, разрешает использование комбинации Ctrl+Alt+Del привычным для вас образом.
Кроме того, вы можете модифицировать файлы каталога /proc/sys напрямую. Если вы считаете, что можете настроить ядро лучше, чем это обеспечивается настройками по умолчанию, то с помощью /proc/sys вы сможете изменить настройки множества подсистем, включая виртуальную память, файловые системы и сетевые подсистемы, на которые приходится основная масса изменяемых через /proc/sys параметров. Более того, иногда это попросту необходимо. Например, чтобы включить механизм перенаправления IP (IP forwarding), нужно записать в файл /proc/sys/net/ipv4/ip_forward значение 1 (если перенаправление IP выключено, в этом файле содержится значение 0). По умолчанию в этом файле содержится 0. Очевидно, что без поддержки /ргос и sysctl включить перенаправление IP в процессе работы ядра не удастся. Значение этого параметра (как, впрочем, и других подобных параметров), используемое по умолчанию, определено в исходных кодах ядра. Конечно, вы можете отредактировать исходные файлы ядра таким образом, чтобы по умолчанию механизм перенаправления IP был включен, однако это не самая лучшая идея. Кроме очевидных неудобств, связанных с переходом на новую версию ядра, в результате подобных изменений могут возникнуть проблемы и с текущим ядром. Значения параметров по умолчанию являются безопасными, иначе говоря, они специально подобраны так, чтобы скомпилированное с их использованием ядро нормально функционировало на большинстве самых разнообразных компьютеров. Потому если вы займетесь редактированием исходного кода ядра и будете изменять изначальные значения параметров работы какой-нибудь жизненно важной подсистемы, например виртуальной памяти, вы можете получить ядро, которое невозможно будет использовать на многих компьютерах, в том числе и на вашем. Гораздо правильней будет оставить исходные тексты в покое, а для управления параметрами работы ядра использовать другие способы (например, конфигурационные файлы или систему /proc/sys).

ВНИМАНИЕ
В результате изменения значений некоторых файлов из каталога /proc/sys (в особенности в подкаталоге vm)
система может перейти в нестабильное состояние, поэтому прежде чем менять параметры работы какой-либо
подсистемы, рекомендуется сначала внимательно прочитать документацию /ргос, содержащуюся в каталоге
/usr/src/linux/Documentation.
В ядрах версий 2.4х файловая система /ргос существенно не изменится. Некоторые файлы будут называться по-другому, возможно, изменятся значения по умолчанию для некоторых параметров, возможно, появятся новые каталоги, но произойдет это не потому, что старая структура /ргос обладала недостатками или приводила к проблемам с безопасностью, а вследствие структурных изменений самого ядра. Если меняется само ядро, значит, меняется и его отображение через файловую систему /ргос.
Файловая система /dev/pts
Файловая система /dev/pts является одним из улучшений, появившихся в ядрах серии 2.1х. Она пришла смену псведотерминалам в стиле BSD, то есть устройствам /dev/pty?, дабы устранить некоторые их недостатки. Совместное существование обоих этих механизмов в одной системе невозможно: либо вы используете /dev/pty?, либо /dev/pts. В OpenLinux предпочтение отдано стилю /dev/pts.
Чтобы активизировать файловую систему /dev/pts, необходимо настроить два конфигурационных параметра ядра и добавить в файл /etc/fstab одну дополнительную запись. Первый параметр ядра устанавливается при помощи пункта Character devices > Unix98 PTY support. Там же можно указать и максимальное число псевдотерминалов, доступных для одновременного использования. По умолчанию можно использовать не более 256 псевдотерминалов, но при необходимости, например для серверных систем, это число можно изменить вплоть до максимального значения, указанного в справке. Для архитектуры Intel максимальное допустимое значение равно 2048.
CONFIG_UNIX98_PTYS=y
Второй параметр находится в меню File systems и называется /dev/pts file system for Unix98 PTYs. Без него система будет продолжать использовать псевдотерминалы в стиле BSD.
CONFIG_DEVPTS_FS=y
После получения ядра с поддержкой файловой системы /dev/pts эту файловую систему необходимо активизировать, для чего в /etc/fstab нужно поместить следующую строку:
devpts /dev/pts devpts gid=5,mode=620 0 О
Если заместить файл /etc/fstab, устанавливаемый Caldera OpenLinux 2.2 или выше, файлом /etc/fstab для ядра 2.0.x, то вы получите неработоспособную систему, поскольку она не сможет создать необходимые устройства. Эти устройства создаются в каталоге /dev/pts прямо в процессе функционирования системы и нумеруются.
Приведенная здесь запись в файле /etc/fstab означает, что файловая система находится на устройстве devpts, точкой ее монтирования является /dev/pts, тип файловой системы — devpts, монтируется она с GID, равным 5, что соответствует системному пользователю tty, а режим доступа rw--w----. Режим 620 позволяет другим пользователям пересылать на данный псевдотерминал сообщения и эквивалентен команде mesg=y.
Чтобы запретить посылку сообщений на данный псевдотерминал, нужно выполнить команду mesg=n или изменить его режим на 600.
В результате открытия нового сеанса telnet, xterm и т. п. в файловой системе /dev/pts создается новое устройство. Максимальное количество таких устройств определяется, как уже говорилось, при конфигурации ядра. При закрытии сеанса соответствующее ему устройство удаляется из каталога /dev/pts.
Соображения безопасности для /ргос
Файловая система /ргос является источником важной информации обо всей системе. Любой, у кого есть полный доступ к /ргос, может воспользоваться этим механизмом для получения самых разных сведений о системе, а также для изменения параметров ее работы при помощи файлов /proc/sys.
Однако если внимательно проанализировать конфигурацию на доступ к файлам из /ргос, то можно увидеть, что непривилегированные пользователи могут извлечь из /ргос очень мало информации помимо той, которую они могут получить при помощи различных утилит. Все действительно важные файлы, содержащие чувствительную информацию, обычному пользователю недоступны. Ну а если рассматривать ситуацию со злоумышленником, получившим привилегии суперпользователя, то /ргос относится к тем вещам, о которых следует беспокоиться в последнюю очередь. Злоумышленник и так может делать с
системой все что угодно, поэтому информация из /ргос ему, скорей всего, малоинтересна.
Разумеется, непривилегированные пользователи не смогут ничего сделать и с файлами из /proc/sys.
Отказ от использования /ргос как таковой, равно как и отказ от использования /proc/sys, не приведет к улучшению безопасности, а лишь значительно усложнит администрирование системы. Файловая система
/ргос была разработана не просто так, а потому, что она делает взаимодействие с системой более удобным как для человека, так и для различных утилит.
ВНИМАНИЕ
Не следует делать резервное копирование содержимого /ргос. Причин тому несколько. Одна из них заключается в
том, что в силу особенностей этой файловой системы сама по себе операция восстановления /ргос с ленты является
бессмысленной и ненужной. Поэтому не стоит тратить на резервное копирование /ргос время и пространство на
ленте. Ленты следует хранить в надежном месте, поскольку важные системные файлы, содержащиеся на них,
например /etc/shadow и т. д., могут быть восстановлены на другой системе.
Для файловой системы devpts тоже есть некоторые соображения, связанные с безопасностью.
Правом чтения из файлов псевдотерминалов должны обладать только их владельцы (устанавливаемый по умолчанию режим 620 обеспечивает это). Обладая правом чтения такого файла, пользователь получает возможность читать коды клавиш, пересылаемых данному псевдотерминалу из буфера клавиатуры. Таким образом можно перехватывать пароли в момент их ввода пользователем. Подобная опасность угрожает многим файлам устройств, однако по умолчанию все они создаются с использованием корректной конфигурации разрешений на доступ, благодаря чему подобных опасностей удается избежать.

Заключение
В этой главе речь шла о файловой системе /ргос, являющейся окном, через которое можно наблюдать за состоянием и работой ядра операционной системы. Кроме того, в ней рассказывалось о каталоге
/proc/sys, позволяющем управлять параметрами ядра во время его функционирования.
После этого мы рассмотрели еще одну не совсем обычную файловую систему -devpts, которая реализует поддержку псевдотерминалов стандарта Unix98 PTY. И хотя потенциально файлы псевдотерминалов могут быть использованы для «прослушивания» вводимой через них информации, соответствующий режим в /etc/ fstab делает это невозможным.

Процесс загрузки


7
В данной главе рассматриваются следующие вопросы:
- процесс начальной загрузки ОС;
- программа init
- файл /etc/inittab и инициализация в стиле System V;
- сценарии инициализации.
Чтобы понять, как именно можно нарушить защиту системы во время начальной загрузки, необходимо хорошо представлять себе, как именно загружается операционная система и какие процедуры при этом выполняются. Для квалифицированного взломщика, имеющего физический доступ к системе, загрузка — это время, когда система защищена менее всего. Консольные атаки будут рассмотрены в следующей главе, а в данной главе мы рассмотрим собственно процесс начальной загрузки и инициализации системы.
В системе Caldera Open Linux инициализация осуществляется в стиле System V, альтернативой которому является стиль BSD. Это два основных стиля, используемых для инициализации систем Unix и
Linux. Стиль BSD основан на использовании нескольких больших сценариев, обеспечивающих всю инициализацию, тогда как стиль System V базируется на концепции уровней выполнения (runlevels) и наборе небольших сценариев инициализации. Сценарии инициализации используются для запуска и остановки демонов (фоновых процессов) при переходе с одного уровня выполнения (также называемого
состоянием системы — system state — или просто состоянием — state) на другой. Соответственно, для каждого демона или подсистемы имеется свой сценарий, и все такие сценарии хранятся в специально отведенном для этого каталоге, который будет рассмотрен во всех подробностях далее. Всего имеется семь уровней выполнения, от 0 до 6, каждый из которых соответствует некоторому режиму функционирования системы, но зачастую не все из них используются. Новичкам, особенно пришедшим в Linux из мира DOS или Windows, такой подход к инициализации может показаться несколько запутанным, однако это всего лишь плата за гибкость, недоступную для инициализации в стиле BSD.
В BSD, наоборот, все инициализирующие действия запрятаны внутрь нескольких больших сценариев. Этот стиль инициализации является характерной особенностью дистрибутива Slackware. И хотя в настоящее время стиль BSD не так популярен, как стиль System V, он решает ту же задачу, что и стиль
System V, только несколько иным способом. В Slackware имеется всего два режима: S (от single user), означающий однопользовательский режим, и М (от multiuser), означающий многопользовательский режим.
Но несмотря на это и Slackware, и Caldera пользуются для инициализации одними и теми же исполняемыми файлами. Различие проявляется на более высоком уровне: на уровне файла конфигурации программы init
(файла inittab).
Процесс загрузки
Все компьютеры семейства х86 загружаются одинаково. Детали этого процесса для целей данного текста значения не имеют и потому будут опущены. Процесс загрузки представляет собой последовательность событий, начинающуюся с включения питания. Обычно после этого начинает выполняться проверка оборудования, известная как POST (Power On Self Test), во время которой подсистемы компьютера проверяются на наличие проблем, мешающих его нормальному функционированию, таких как плохая память и прочее. Как правило, успешное завершение этого теста сопровождается одиночным гудком из динамика компьютера. Два гудка или более означают наличие проблемы. По количеству гудков можно определить причину проблемы.
После успешного завершения POST запускается небольшая программа-загрузчик, которая, в свою очередь, запускает загрузчик побольше. Этот второй загрузчик последовательно просматривает все места,
в которых может содержаться загрузочный код операционной системы, и запускает на выполнение первый найденный. Обычно порядок просмотра следующий: загрузочный сектор гибкого диска, загрузочный сектор первого жесткого диска, загрузочный сектор компакт-диска в первом приводе CD-ROM. Изменение порядка просмотра осуществляется при помощи параметров BIOS, для доступа к которым следует нажать специальную клавишу (F2, Del или Insert) во время выполнения POST.
Обнаружив загрузочный сектор, в котором содержится загрузочный код ОС, система перемещает его в память и запускает на выполнение. В большинстве Linux систем это будет код LILO (от Linux Loader).
LILO — это программа, позволяющая пользователю выбрать, какую из установленных на компьютере операционных систем (или различных ядер Linux) следует загрузить. Загрузчик LILO удобно использовать в случае, если на компьютере установлено несколько разных ОС (например, Linux и Windows), но даже если система всего одна, загрузчик LILO позволяет выбрать один из нескольких вариантов конфигурации этой системы. Будучи написан специально для Linux, загрузчик LILO позволяет передавать дополнительные аргументы ядру или программе init.

ПРИМЕЧАНИЕ
В данном тексте обсуждается архитектура Intel. В других архитектурах, таких как Spare или Alpha, используются
похожие загрузчики, но с другими именами, например SILO (Spare) или MILO (Alpha) и т. д.
После того как пользователь сделает свой выбор, LILO загружает ядро ОС. Подробное обсуждение процесса загрузки ядра выходит за рамки этой книги, достаточно сказать, что это многоступенчатый процесс. Как правило, на диске образ ядра хранится в сжатом виде, а при загрузке в память он разжимается.
В мире Linux принято использовать букву z как признак того, что данный образ является сжатым, например vmlinuz, zImage или bzImage. Отсюда следует, что, в отличие от DOS, образ ядра считывается с диска лишь во время загрузки. После загрузки никаких обращений к образу ядра на диске не делается, поэтому удаление или модификация соответствующего файла никак не влияет на функционирующее ядро. Для вступления в силу изменений, затронувших образ ядра на диске, система должна быть перезагружена.
Кроме того, по размеру образа ядра на диске нельзя сказать, сколько места оно займет в памяти.
init — место, откуда начинается инициализация системы
После того как ядро было загружено в память, систему можно считать работающей. Однако пользы от ее работы не слишком много, поскольку взаимодействием с пользователями ядро не занимается.
Получив управление, ядро запускает одну (и только одну) программу: init. Эта программа отвечает за выполнение всех остальных процедур и является родителем всех процессов. Передав управление init, ядро переходит к выполнению своей обычной функции менеджера системы, то есть к управлению пространством ядра и распределению ресурсов между процессами.
ПРИМЕЧАНИЕ
Под пространством ядра (kernel space) понимается память и функции, принадлежащие исключительно ядру. Эта
память является защищенной. Дополнительным к пространству ядра является пространство пользователя (user
space), в котором выполняются все программы, запущенные пользователями (включая суперпользователя).
Начав работу, программа init обращается к расположенному в каталоге /etc файлу inittab (от
initialization table — таблица инициализации) для получения значений конфигурационных параметров. Для отсутствующих в нем параметров используются значения по умолчанию, но только если они не были переопределены из командной строки. Листинг 7.1 показывает содержимое файла inittab, используемого в
OpenLinux 2.3.
СОВЕТ
Суффикс tab в названии таких файлов, как inittab, fstab, mtab и т. д., означает, что файл представляет собой
таблицу, как правило, конфигурационную. В случае с inittab в ней содержится информация об инициализации
системы, примерно как в файле config.sys в DOS.




Поделитесь с Вашими друзьями:
1   ...   7   8   9   10   11   12   13   14   ...   42


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал