Выявление ненужныхсерверов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478

Задачу выявления ненужных серверов можно разбить на две подзадачи: идентифика­ция серверов, присутствующих в системе, и принятие решения о том, какие из них могут быть отключены без вреда для системы. Обе эти подзадачи можно решить различными способами. Применяя для обнаружения серверов разные подходы, вы увеличиваете свои шансы на успех.

Обнаружение серверов, присутствующих в системе

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

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

Для обнаружения серверов, присутствующих в системе, может быть использована си­стема управления пакетами. Если при установке программ вы пользовались исключитель­но диспетчером пакетов, то в базе данных диспетчера содержится информация о каждой программе, которая была инсталлирована на компьютере. Просмотрев описание пакета, содержащееся в базе, можно определить, является ли установленная программа сервером и насколько она необходима для работы системы. В качестве примеров инструменталь­ных средств управления пакетами можно привести инструмент GNOME RPM, который используется в системе Red Hat, YaST - в SuSE, и Storm Package Manager (часть дистри­бутивного пакета Storm, используемая в системе Debian). Окно GNOME RPM, предназна­ченное для просмотра инсталлированных пакетов, показано на рис. Выбрав пакет, вы сможете прочитать его описание. Некоторые диспетчеры пакетов распределяют информа­цию, которая хранится в базе, по категориям, однако на практике, чтобы найти серверы, присутствующие на компьютере, надо просмотреть все категории. Диспетчеры пакетов не позволяют выявить серверы, для инсталляции которых были использованы tar-архивы или исходные коды. Кроме того, такой подход не дает возможности ответить на вопрос, выполняется ли сервер в системе. (Сервер, который был инсталлирован, но не запущен, создает гораздо меньшую угрозу безопасности системы, чем сервер, выполняющийся на компьютере. Реальная опасность возникнет лишь в том случае, если впоследствии будет установлена конфигурация системы, предполагающая запуск сервера.)

Проверка файлов запуска

Чтобы обнаружить серверы, присутствующие в системе, можно проверить следующие файлы.

• Конфигурационный файл суперсервера. При поиске серверов следует проверить конфигурационные файлы /etc/inetd. conf и /etc/xinetd. conf, а также файлы в каталоге /etc/xinetd. d. Таким образом, вы найдете ссылки на все сер­веры, запускаемые посредством суперсервера. В конфигурационном файле inetd строки, в начале которых стоит символ #, представляют собой комментарии, поэто­му серверы, указанные в них, не активны. Для суперсервера xinetd запуск сервера запрещает запись disable = yes.

• Сценарии запуска SysV. Можно найти серверы, запускаемые посредством сцена­риев просмотрев каталоги, предназначенные для размещения таких сценариев (обычно это каталог/etc/гс. d/rc? . йшш /etc/гс? . d, где символ ? означает уровень выполнения). Необходимую вам информацию предоставят имена файлов, находящихся в этих каталогах. Заметьте, что некоторые из программ, запускаемых посредством сценариев SysV, не являются серверами, поэтому, прежде чем запре­тить их выполнение, следует выяснить назначение этих программ.

• Локальные сценарии запуска. Во многих дистрибутивных пакетах для запуска локальных программ используются локальные сценарии. Файлы, содержащие их, обычно называются г с. 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] поддерживает функции сервера NFS, реализованного средствами ядра. Процессы named, cupsd и httpd представляют собой пользовательские процес­сы. О принадлежности их к серверам можно судить по двум признакам. Во-первых, имя каждого из них оканчивается буквой а во-вторых, эти процессы не связаны с терми­налами (в поле TTY отображается символ ?). В отличие от них, процесс /bin/bash не является процессом сервера, так как в поле TTY выводится значение pts/4, т. е. данный процесс связан с конкретным терминалом.

Определив процессы серверов с помощью ps, надо отыскать документацию на те сер­веры, назначение которых вам неизвестно. Для этого следует ввести команду man имя, указав в качестве параметра имя интересующего вас процесса. Кроме того, постарайтесь найти исполняемый файл с именем, совпадающим с именем процесса. Это позволит вас проследить, какой пакет использовался для его инсталляции. Для получения информа­ции о пакете введите команду rpm -qf путь__к_файлу. (В системе Debian для этого используется команда dp kg -S путь к_файлу.)

Используя ps, не забывайте, что эта утилита не отображает сведения о серверах, кото­рые не выполнялись в момент ее запуска. Например, если сервер запускается с помощью суперсервера и во время вызова ps ни один из клиентов не работал с ним, вы не полу­чите информацию об этом сервере. Данная утилита также не предоставит сведений о тех серверах, работа которых была временно завершена.

Использование

При использовании ps для поиска серверов возникает проблема, состоящая в том, что данная утилита не сообщает, используется ли данный сервер для поддержки сетевого взаимодействия. Получить эту информацию вам поможет программа netstat. Данная программа возвращает данные о сетевых соединениях. Подобно ps, при запуске netstat могут указываться различные опции. Для информации о серверах можно исполь-

зовать команду netstat -1р. Опция -1 сообщает утилите netstat о том, что она должна анализировать порты, через которые серверы ожидают поступление запросов, а опция -р задает вывод имен серверов, связанных с этими портами. Как и ps, утилита netstat генерирует большой объем данных, поэтому желательно перенаправить вывод в файл или передать входные данные программе less или more.

Несмотря на то что netstat является чрезвычайно полезным инструментом, при использовании этой программы необходимо помнить, что для серверов, запускаемых по­средством суперсервера, netstat будет генерировать неверные данные. Сообщая о том, какой сервер ожидает обращение через определенный порт, она вместо имени сервера выведет имя суперсервера.

Использование программ сканирования

Мощными инструментами, которые можно использовать для поиска серверов, выпол­няющихся в системе, являются внешние программы сканирования. В качестве приме­ров подобных программ можно привести Nessus (http://www.nessus.org), SAINT {http: //www. wwdsi. com/saint/) и Nmap (http: / /www. insecure. org/nmap/). Программа сканирования выполняется на любой машине, связанной по сети с компью­тером, подлежащим проверке. Некоторые из таких инструментов, помимо информации о серверах, выводят также данные об используемой операционной системе, а также сведения о наличии недостатков в защите серверов. Для поиска серверов в большин­стве случаев достаточно ввести имя сканирующей программы и указать имя компьюте­ра, который следует проверить. Например, соответствующая команда может иметь вид nmap gingko. threeroomco. com. В результате вы получите список портов и имен серверов, связанных с ними.

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

сервер в вашей системе, опытный хакер позаботится о том, чтобы скрыть следы своего

вмешательства. Чтобы вы не смогли обнаружить изменения в системе, он постарается заменить средства диагностики (например, netstat) своими программами. Внешняяпрограмма сканирования, вероятнее всего, даст вам реальную информацию о серверах, выполняющихся в системе.

ВНИМАНИЕ  Программы сканирования портов часто используются компьютерными взлом-f которые пытаются обнаружить уязвимые места в защите системы.

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

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

сложных программ, а также энтузиастов, чье увлечение программированием гра­ничит с фанатизмом. Смысл, вкладываемый в слово хакер, обычно становится

ясным из контекста.

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

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

Определение необходимости сервера

Получив список серверов, вам предстоит определить, какие из них необходимы для работы системы. Решить эту задачу не всегда просто. Если администратор не имеет большого опыта работы с Linux, он вполне может посчитать ненужным сервер, жизненно

важный для функционирования системы. Выяснить, какие из серверов нужны, а какие нет,

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

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

машинах, обслуживаемых этим сервером.

Необходимо соблюдать осторожность при отключении процессов, связанных с реги­страцией пользователей. Даже если компьютер не выполняет функции сервера регистра­ции, удаление одного из серверов, описанных в главах 13 и 14, может стать причиной серьезной проблемы, для разрешения которой придется перезагрузить компьютер с гиб­кого диска. Особенно осторожно следует отключать процессы регистрации, запускаемые посредством сценариев SysV.

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