Рис. 22.1. Диспетчер пакетов предоставляет информацию о серверах, установленных в системе
Проверка файлов запуска
Чтобы обнаружить серверы, присутствующие в системе, можно проверить следующие файлы.
• Конфигурационный файл суперсервера. При поиске серверов следует проверить конфигурационные файлы /etc/inetd.conf
и /etc/xinetd.conf
, а также файлы в каталоге /etc/xinetd.d
. Таким образом, вы найдете ссылки на все серверы, запускаемые посредством суперсервера. В конфигурационном файле inetd
строки, в начале которых стоит символ #
, представляют собой комментарии, поэтому серверы, указанные в них, не активны. Для суперсервера xinetd
запуск сервера запрещает запись disable = yes
.
• Сценарии запуска SysV. Можно найти серверы, запускаемые посредством сценариев просмотрев каталоги, предназначенные для размещения таких сценариев (обычно это каталог /etc/rc.d/rc?.d
или /etc/rc?.d
, где символ ?
означает уровень выполнения). Необходимую вам информацию предоставят имена файлов, находящихся в этих каталогах. Заметьте, что некоторые из программ, запускаемых посредством сценариев SysV, не являются серверами, поэтому, прежде чем запретить их выполнение, следует выяснить назначение этих программ.
• Локальные сценарии запуска. Во многих дистрибутивных пакетах для запуска локальных программ используются локальные сценарии. Файлы, содержащие их, обычно называются rc.local
или boot.local
. Локальными считаются такие программы, при инсталляции которых использовался нестандартный способ, отличающийся от подхода, принятого для данного дистрибутивного пакета. Чтобы обнаружить серверы, выполняющиеся в системе, надо просмотреть весь локальный сценарий.
Подробно вопросы запуска серверов, в том числе соглашения об именовании сценариев SysV, были рассмотрены в главе 4. Определить назначение сценариев запуска вам помогут такие инструменты, как ntsysv
и tksysv
. Кроме того, в некоторых системах (Caldera, Mandrake, Red Hat и TurboLinux) команда chkconfig --list
, заданная в командной строке, отображает состояние сценариев SysV, а в ряде случаев и назначение записей в конфигурационном файле xinetd
.
Проанализировав сценарии запуска и конфигурационный файл суперсервера, вы выясните, какие серверы выполняются в системе, однако ничего не узнаете об инсталлированных серверах. Как было сказано ранее, получить сведения о программах, которые были инсталлированы на компьютере, позволяет диспетчер пакетов. Кроме того, вы можете проверить все исполняемые файлы в системе, однако для этого необходимо затратить столько усилий, что данное решение нельзя считать приемлемым.
Анализ данных о процессах
Для обнаружения серверов может использоваться утилита ps
. Она возвращает информацию о. процессах, выполняющихся в системе. При запуске ps
можно указывать разные опции, но для выявления серверов достаточно ввести в командной строке ps ax
.
Объем информации, возвращаемой ps
, достаточно велик, поэтому имеет смысл перенаправить вывод в файл или передать данные, сгенерированные программой ps
, утилите more
или less
. Если вы ищете сведения о конкретном сервере, используйте утилиту grep
. Например, чтобы получить информацию о сервере sendmail
, надо ввести команду ps ах | grep sendmail
. Следует помнить, что утилита ps
предоставляет сведения как о серверах, так и о других программах. Ниже приведен фрагмент данных, сгенерированных программой ps
.
$ ps ax
PID TTY STAT TIME COMMAND
1 ? S 0:15 init [3]
502 ? S 0:05 named -u bind
520 ? S 0:01 cupsd
535 ? SW 0:00 [nfsd]
1741 pts/4 S 0:00 /bin/bash
4168 ? S 0:00 httpd
На самом деле в процессе выполнения программа ps
генерирует десятки и даже сотни строк. В данном примере удалена почти вся информация, кроме нескольких строк, иллюстрирующих работу этой утилиты. В первой строке программа ps
выводит сведения о процессе init
, для идентификации которого всегда используется номер 1. Данный процесс является корнем дерева, представляющего иерархию процессов в системе. Все остальные процессы порождаются либо непосредственно init
, либо его дочерними процессами. Процессы, имена которых помещаются в квадратные скобки, представляют собой процессы ядра. В данном примере процессом ядра является [nfsd]
. Как видно из его имени, [nfsd]
поддерживает функции сервера NFS, реализованного средствами ядра. Процессы named, cupsd
и httpd
представляют собой пользовательские процессы. О принадлежности их к серверам можно судить по двум признакам. Во-первых, имя каждого из них оканчивается буквой " d
", а во-вторых, эти процессы не связаны с терминалами (в поле TTY отображается символ ?
). В отличие от них, процесс /bin/bash
не является процессом сервера, так как в поле TTY выводится значение pts/4
, т.е. данный процесс связан с конкретным терминалом.
Читать дальше