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

Вид материалаРеферат

Содержание


Файловая система /proc
Файловая система /ргос
Таблица 6.1. Файлы каталога, описывающего состояние процесса Имя Содержимое
Подобный материал:
1   ...   20   21   22   23   24   25   26   27   ...   101

Заключение


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

Только суперпользователь может монтировать все, что захочет, туда, куда захочет. Остальным пользователям разрешается монтировать только файловые системы, указанные в файле /etc/fstab, при этом монтирование будет выполнено с учетом указанных в этом файле параметров. Таким образом, чтобы обеспечить безопасность монтирования, необходимо грамотно настроить записи этого файла.

6

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


В данной главе рассматриваются следующие вопросы: - файловая система /ргос;

- каталог /proc/sys;

- файловая система /dev/pts;

- соображения безопасности для /ргос.

Файловая система /ргос не похожа на все остальные файловые системы. За исключением /dev/pts (псевдотерминальные устройства или попросту псевдотерминалы, о которых рассказывается далее), все остальные файловые системы представляют собой ровно то, что предполагает сам термин «файловая система»: некоторым образом структурированный набор (система) файлов на некотором носителе. Все эти файлы существуют физически, даже псевдотерминалы, однако файловая система /ргос существует лишь во время работы операционной системы. И хотя псевдотерминалы, как и /ргос, прекращают свое существование при нормальном завершении работы, однако при грубом выключении питания соответствующие им файлы все-таки остаются на жестком диске (конечно же, в процессе следующего запуска системы эти файлы будут удалены с диска). В отличие от псевдотерминалов файловая система /ргос существует в оперативной памяти и больше нигде. Иначе говоря, файловая система /ргос — это иллюзия файловой системы, которая формируется и поддерживается операционной системой.

Файловая система /ргос


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

При желании можно скомпоновать ядро, в котором не будет поддержки /ргос, но в этом нет особого смысла. Очень многие программы и утилиты в процессе своего функционирования обращаются к файловой системе/ргос для получения необходимой информации о состоянии системы. Если механизм /ргос отсутствует в системе, все использующие его программы и утилиты либо не смогут работать, либо будут вынуждены получать необходимую информацию из других источников. Однако другие источники информации зачастую менее надежны и предлагают информацию в меньшем объеме. Чтобы убедиться в том, что поддержка /ргос добавлена в ядро, в процессе конфигурирования ядра следует перейти в меню File Systems и выбрать поддержку файловой системы /ргос (по умолчанию поддержка файловой системы /ргос включена). В файле .config поддержка /ргос включается благодаря наличию строки:

CONFIG_PROC_FS=y

Использовать поддержку /ргос в виде модуля нельзя.

Если поддержка /ргос в ядре уже имеется, то система готова использовать ее, однако, как и для других механизмов Linux, эту файловую систему можно включать и отключать. Активация и деактивация файловой системы /ргос осуществляется при помощи файла /etc/fstab. Поскольку /ргос является хотя и фиктивной, но файловой системой, то прежде чем ее можно будет использовать, она, как и любая другая файловая система, должна быть смонтирована. Для успешного монтирования любой файловой системы необходимо, чтобы существовал каталог, в который она монтируется, и /ргос здесь не исключение. Если удалить каталог /ргос, то монтировать ее будет некуда, и потому вместо /ргос вы получите сообщение об ошибке. Соответствующая запись файла /etc/fstab выглядит следующим образом: /ргос /ргос ргос defaults О О

На месте пути к файлу устройства здесь стоит /ргос, поскольку эта файловая система существует внутри ядра, а не на устройстве. Монтируется она в каталог / ргос, с типом ргос. В ее отношении никогда не выполняется каких-либо проверок, и она не попадает под действие команды dump. Действительно, большинство файлов в /ргос отображают сиюминутное состояние операционной системы и, как следствие, доступны только для чтения, поэтому их бессмысленно проверять или сохранять для дальнейшего восстановления. Исключение составляют файлы из /proc/sys, позволяющие изменять состояние системы и потому доступные и для записи, но восстановление этих файлов из резервной копии почти наверняка приведет систему в нестабильное состояние, так что резервное копирование им не нужно.

Файловая система /ргос очень динамична. Некоторые из ее частей меняются фактически постоянно, интенсивность изменений зависит от нагрузки на систему. Поэтому любые два снимка ее содержимого, скорей всего, будут различаться. На листинге 6.1. показан один из снимков содержимого /ргос.


Листинг 6.1. Содержимое /рте

dr-xr-xr-x 58 root root 0 Nov 15 19:01 .

drwxr-xr-x 21 root root 1024 Nov 15 12:02 ..

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1076

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1079

dr-xr-xr-x 3 dns dns 0 Nov 16 07:46 1088

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1092

dr-xr-xr-x 3 bin root 0 Nov 16 07:46 1094

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1176

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1181

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1190

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1202

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1263

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1270

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1271

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1284

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1286

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1287

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1288

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1317

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1318

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1319

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1320

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1321

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1363

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1371

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1372

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1373

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1374

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1375

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1618

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1619

dr-xr-xr-x 3 nobody nobody 0 Nov 16 07:46 1620

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1741

dr-xr-xr-x 3 root root 0 Nov 16 07:46 1800

dr-xr-xr-x 3 david david 0 Nov 16 07:46 1892

dr-xr-xr-x 3 root root 0 Nov 16 07:46 2

dr-xr-xr-x 3 root root 0 Nov 16 07:46 3

dr-xr-xr-x 3 root root 0 Nov 16 07:46 4

dr-xr-xr-x 3 root root 0 Nov 16 07:46 4856

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4858

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4914

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4915

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4917

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4963

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4964

dr-xr-xr-x 3 david david 0 Nov 16 07:46 4965

dr-xr-xr-x 3 root root 0 Nov 16 07:46 4967

dr-xr-xr-x 3 root root 0 Nov 16 07:46 4968

dr-xr-xr-x 3 root root 0 Nov 16 07:46 5

dr-xr-xr-x 3 root root 0 Nov 16 07:46 5038

-r--r--r-- 1 root root 0 Nov 16 07:46 apm

dr-xr-xr-x 4 root root 0 Nov 16 07:46 bus

-r--r--r-- 1 root root 0 Nov 16 07:46 cmdline

-r--r--r-- 1 root root 0 Nov 16 07:46 cpuinfo

-r--r--r-- 1 root root 0 Nov 16 07:46 devices

-r--r--r-- 1 root root 0 Nov 16 07:46 dma

-r--r--r-- 1 root root 0 Nov 16 07:46 fb

-r--r--r-- 1 root root 0 Nov 16 07:46 filesystems

dr-xr-xr-x 2 root root 0 Nov 16 07:46 fs

dr-xr-xr-x 4 root root 0 Nov 16 07:46 ide

-r--r--r-- 1 root root 0 Nov 16 07:46 interrupts

-r--r--r-- 1 root root 0 Nov 16 07:46 ioports

-r-------- 1 root root 134221824 Nov 16 07:46 kcore

-r-------- 1 root root 0 Nov 15 19:01 kmsg

-r--r--r-- 1 root root 0 Nov 16 07:46 ksyms

-r--r--r-- 1 root root 0 Nov 16 07:46 loadavg

-r--r--r-- 1 root root 0 Nov 16 07:46 locks

-r--r--r-- 1 root root 0 Nov 16 07:46 meminfo

-r--r--r-- 1 root root 0 Nov 16 07:46 misc

-r--r--r-- 1 root root 0 Nov 16 07:46 modules

-r--r--r-- 1 root root 0 Nov 16 07:46 mounts

dr-xr-xr-x 3 root root 0 Nov 16 07:46 net

-r--r--r-- 1 root root 0 Nov 16 07:46 partitions

-r--r--r-- 1 root root 0 Nov 16 07:46 pci

-r--r--r-- 1 root root 0 Nov 16 07:46 rtc

dr-xr-xr-x 2 root root 0 Nov 16 07:46 scsi

Irwxrwxrwx 1 root root 64 Nov 16 07:46 self -> 5038

-r--r--r-- 1 root root 0 Nov 16 07:46 slabinfo

-r--r--r-- 1 root root 0 Nov 16 07:46 stat

-r--r--r-- 1 root root 0 Nov 16 07:46 swaps

dr-xr-xr-x 9 root root 0 Nov 16 07:46 sys

dr-xr-xr-x 4 root root 0 Nov 16 07:46 tty

-r--r--r-- 1 root root 0 Nov 16 07:46 uptime

•r--r--r-- 1 root root 0 Nov 16 07:46 version

Первое, что бросается в глаза, это размер файлов. Размер практически всех файлов и каталогов в системе /ргос равен нулю. Ненулевой размер имеет файл self, являющийся символической ссылкой, и файл kcore, который соответствует системной памяти.

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

Более внимательное изучение листинга позволяет разделить его на две части: файлы и каталоги с числовыми именами и файлы и каталоги с именами символическими. Владельцем большинства числовых имен является root, но встречаются и имена с другими владельцами. На самом деле каждое такое число — это идентификатор процесса (Process ID, PID). Процессы с такими идентификаторами выполнялись в системе в момент, когда был получен этот листинг. Таким образом, для каждого работающего в системе процесса в каталоге /ргос существует подкаталог, имя которого совпадает с идентификатором этого процесса. В этом подкаталоге содержится информация об этом процессе. Выполнив команду ps а их, можно обнаружить, что разрешения в /ргос для каждого из процессов соответствуют владельцу и группе соответствующего процесса в списке процессов. На листинге 6.2. показано содержимое одного из таких подкаталогов:

Листинг 6.2. Содержимое некоторого каталога /ргос/РЮ

-r--r--r-- 1 root root 0 Nov 16 08:23 status

-r--r--r-- 1 root root 0 Nov 16 08:23 statm

-r--r--r-- 1 root root 0 Nov 16 08:23 stat

Irwx------ 1 root root 0 Nov 16 08:23 root -> /

-rw------- 1 root root 0 Nov 16 08:23 mem

рr--r--r-- 1 root root 0 Nov 16 08:23 maps

dr-x------ 2 root root 0 Nov 16 08:23 fd

Irwx----- 1 root root 0 Nov 16 08:23 exe -> /usr/sbin/klogd

-r-------- 1 root root 0 Nov 16 08:23 environ

Irwx----- 1 root root 0 Nov 16 08:23 cwd -> /

-r--r--r-- 1 root root 0 Nov 16 08:23 cmdline

dr-xr-xr-x 58 root root 0 Nov 15 19:01 ..

dr-xr-xr-x 3 root root 0 Nov 16 08:23 .

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

Таблица 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 может полностью отсутствовать, однако даже в этом случае в каталоге /ргос будет присутствовать пустой подкаталог ide2.

Тем, кто интересуется работой с /ргос на уровне системного программирования, следует заглянуть в /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 и т. д.

Далее, предположим, что по некоторым причинам система была переведена в однопользовательский режим (уровень выполнения 1), а все файловые системы размонтированы. После этого в системе были смонтированы корневая файловая система в режиме только для чтения и файловая система /ргос. После этого вы хотите монтировать гибкий диск с файловой системой vfat в режиме только для чтения. Так как корневая система доступна лишь для чтения, команда mount не сможет создать файл /etc/mtab, содержащий записи о монтированных файловых системах (в этом случае можно воспользоваться ключом -п, который предписывает команде mount не вносить запись о монтируемой системе в файл /etc/mtab). В результате если вы попробуете узнать о монтированных файловых системах при помощи команд df или mount, гибкий диск будет отсутствовать в списке монтированных файловых систем. В подобной ситуации достоверную информацию о монтированных файловых системах можно получить при помощи /ргос. Заглянув в файл /proc/filesystems, можно увидеть, что в системе включена поддержка vfat, а заглянув в файл /proc/mounts, вы узнаете о том, что именно в настоящий момент монтировано в системе.