Главная страница
Навигация по странице:

  • 7.1. Основные настройки

  • 7.2. Модули

  • 7.3. Права доступа

  • Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69


    Скачать 3.69 Mb.
    НазваниеМихаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
    Дата13.03.2022
    Размер3.69 Mb.
    Формат файлаpdf
    Имя файлаlinux_glazami_xakera_3-e_izd.pdf
    ТипДокументы
    #394477
    страница20 из 35
    1   ...   16   17   18   19   20   21   22   23   ...   35
    Глава 7
    WEB-cервер
    Несмотря на то, что изначально сеть создавалась для обмена файлами, с по- явлением первого браузера популярность WWW-страниц начала расти не по дням
    , а по часам. Сейчас уже трудно себе представить не только Интернет, но и Интранет без WEB-страниц.
    Для того чтобы пользователь смог просматривать с вашего узла хотя бы про- стейшие
    WEB-странички, необходим WEB- или HTTP-сервер. Уже долгое время самым распространенным из них является Apache. Трудно точно ска- зать
    , какая доля серверов работает на Apache, но можно с уверенностью утверждать
    , что их больше половины. Хотя для Linux существуют и другие
    WEB-серверы (например, TUX), когда говорят о WEB-сервере под Linux, подразумевают именно Apache. Да и в Windows можно очень часто встретить именно
    Apache, хотя в последнее время большую популярность стал полу- чать
    Microsoft IIS.
    Apache — абсолютно бесплатный сервер, который распространяется по ли- цензии
    GNU и доступен не только для UNIX-систем, но и для ОС Windows.
    Официальный сайт разработчиков — www.apache.org, где, помимо HTTP- сервера
    , можно найти еще ряд других проектов. Почему этот сервер стал так популярен
    ? Неужели так повлиял фактор халявы? Бесплатность, конечно, соблазнительна
    , но качество превыше всего. Сервер Apache располагает гро- мадным количеством возможностей и при этом обладает следующими нема- ловажными особенностями:
    ˆ
    безопасность
    — многие профессионалы относят его к разряду самых за- щищенных
    ;
    ˆ
    надежность
    — в сочетании с ОС Linux WEB-сервер может работать без перезагрузок годами, а если и случаются перезагрузки, то, чаще всего, для обновления системы;

    Глава
    7
    240
    ˆ
    неприхотливость
    — работает с минимальной нагрузкой на систему (не требует особых ресурсов);
    ˆ
    производительность
    — высокая скорость отклика и обработки запросов пользователей
    На основе Apache строят серверы, которые доступны 99,9% времени в год.
    Многие корпорации вверяют ему свои важные данные, и мне неизвестны случаи
    , когда кто-нибудь пожалел об этом. Да что там говорить, мои WEB- сайты работают у хостера на серверах с Apache.
    Единственный недостаток, который отмечают пользователи, — это слож- ность конфигурирования. Приходится редактировать текстовый файл, а так как настроечных параметров огромное количество, то это может оказаться утомительным занятием. При этом очень сложно гарантировать, что все на- стройки будут сделаны оптимальными и безопасными, ведь очень легко упустить что-либо или банально опечататься. Да, в некоторых случаях кон- фигурационные файлы не так наглядны, как графические утилиты, но это дело привычки. Очень многие администраторы, наоборот, предпочитают именно текстовый формат настроек.
    В
    этой книге мы не сможем рассмотреть все возможные параметры, потому что их слишком много. Мы коснемся только основных, и поговорим о том, что может сказаться на производительности и безопасности сервера. Рас- сматриваемого материала хватит в 99,9% случаев, и лично мне никогда не приходилось изменять ничего из того, что мы опустим.
    7.1.
    Основные
    настройки
    Основные настройки сервера Apache располагаются в файле /etc/httpd/conf/ httpd.conf (для некоторых дистрибутивов — в /etc/httpd.conf). Здесь хранятся настройки
    WEB-сервера, его виртуальных серверов и программных модулей.
    Для
    Red Hat Linux, а именно он взят за основу в этой книге, все рассматри- ваемые параметры сервера находятся в этом файле, если явно не указано дру- гое расположение.
    За счет прямого редактирования файла конфигурации можно добиться мак- симально безопасной и быстрой работы. Рассмотрим основные параметры
    WEB-сервера:
    ˆ
    ServerType
    — тип сервера, может принимать значения inetd или standalone
    Если выбрать inetd
    , то некоторые параметры игнорируются, и использу- ются значения из конфигурации демона inetd
    (см. разд. 5.4);
    ˆ
    ServerRoot
    — корневая директория, в которой находятся файлы конфигу- раций и журналы;

    WEB-c
    ервер
    241
    ˆ
    Timeout
    — предельное время ожидания в секундах для получения и от- правки пакетов;
    ˆ
    Port
    — порт, на котором будет работать сервис. По умолчанию и для об- щедоступных серверов используется значение
    80
    . Но для закрытых серверов, которыми пользуется узкий круг людей, можно изменить значение, например, на
    10387
    . В этом случае в качестве адреса страницы надо использовать URL типа
    ИмяСервера:10387 (например, www.linux.com:10387/index.htm). Таким образом
    , не зная порта, злоумышленник не сможет проникнуть в систему, пока не просканирует весь диапазон портов и не выяснит, что 10387 — это порт
    WEB-сервера. Это простейшая, но достаточно эффективная защита от скриптеров, которые обладают минимумом знаний о безопасности и
    взламывают компьютеры только с помощью сплоитов, написанных дру- гими хакерами;
    ˆ
    ServerTokens
    — характер информации об установленном программном обеспечении
    , возвращаемый сервером. По умолчанию при любом обра- щении к серверу он возвращает заголовок с подробной информацией о
    системе, которая включает версии Apache, ОС Linux и всех имеющихся модулей
    . Если хакер узнает, что на сервере установлена старая версия ин- терпретатора
    PHP (или любой другой программы), то на взлом уйдет на- много меньше времени. Болтливые параметры необходимо отключать, а
    информацию о сервере прятать.
    ServerTokens может принимать одно из следующих значений:

    Full
    — отображать полную информацию о сервере и установленных модулях
    , включая их версии. Самое опасное для сервиса — это исполь- зование именно этого параметра;

    Min
    — показать минимум сведений (только название сервера и уста- новленные модули). Иногда даже такой простой список без версий мо- жет сказать хакеру слишком много;

    ProductOnly
    — только название сервера, в нашем случае Apache вернет свое имя (apache) без указания версий. Вот это как раз то, что нам нужно.
    Очень опытные администраторы могут даже подменить имя сервера, но для этого необходимо будет перекомпилировать исходные коды
    Apache. Заголовок хранится в файле include/ap_releas.h в виде следую- щих двух строк:
    #define SERVER_BASEPRODUCT "Apache"
    #define SERVER_BASEVERSION "2.2"
    Подставьте имя какого-либо другого сервера. Желательно, чтобы оно было похоже на реальность, иначе профессиональный хакер сразу за- метит обман.

    Глава
    7
    242
    В
    более ранних версиях Apache расположение файла было другим, но мы же договорились, что устанавливаем только последние версии;
    ˆ
    HostnameLookups
    — флаг, отвечающий за проведение преобразования IP- адресов в доменные имена для логов и CGI-программ. Если установлено значение on
    , то IP-адрес клиента, запросившего данные с сервера, будет преобразован в доменное имя, иначе будет использоваться IP-адрес. Если в
    этом нет необходимости, для повышения быстродействия можно уста- новить значение off
    ;
    ˆ
    User и
    Group
    — имя пользователя и группа, с правами которого будет ра- ботать сервис. По умолчанию в Linux используется имя и группа apache.
    Этот пользователь и группа должны обладать минимальными правами в
    системе, которые только необходимы для работы WEB-сервера и его модулей
    . Ничего лишнего разрешать им нельзя;
    ˆ
    ErrorLog и
    CustomLog
    — местоположение журналов;
    ˆ
    LogLevel
    — степень подробности составления журнала. Можно указать одно из следующих значений: emerg
    , alert
    , crit
    , error
    , warn
    , notice
    , info
    , debug
    ;
    ˆ
    KeepAlive
    — разрешение обрабатывать несколько запросов за одно со- единение
    . По умолчанию этот параметр выключен (
    off
    ), и для получения каждого файла требуется отдельное соединение. Это неэффективно и при- водит к лишнему расходу ресурсов. Допустим, что пользователь запросил страницу с 10 картинками. В ответ на это браузер клиента откроет 11 со- единений с WEB-сервером (одно для получения документа html и 10 — для картинок документа). Если включить этот параметр, то за одно под- ключение может быть обработано несколько запросов;
    ˆ
    MaxKeepAliveRequests
    — максимальное число запросов, которое может быть выполнено в течение одного соединения;
    ˆ
    KeepAliveTimeout
    — время ожидания очередного запроса от одного и то- го же клиента (в секундах). Если за указанный период запрос не поступит, то соединение завершается;
    ˆ
    MaxClients
    — максимальное количество клиентов, которые могут под- ключиться одновременно. Если сделать это значение слишком большим, то злоумышленник сможет произвести атаку DoS (отказ от обслужива- ния
    ), открыв слишком много соединений, с которыми не справится сер- вер
    . По умолчанию установлено
    150
    , но этого будет достаточно только для небольшого сервера. Apache способен обработать намного больше даже на слабеньком железе. Вы должны указать такое значение, при кото- ром сервер сможет обрабатывать максимальное число запросов и при этом успешно работать (не зависнуть) с предельной загрузкой;

    WEB-c
    ервер
    243
    ˆ
    MaxRequestsPerChild
    — число запросов, которое позволено обрабатывать дочернему процессу до переполнения. Если Apache (или используемые им библиотеки
    ) допускает утечку памяти или других ресурсов, то во избежа- ние проблем при длительной непрерывной работе сервера дочерний про- цесс при переполнении будет принудительно завершен. На большинстве систем это не требуется, но некоторые ОС (например, Solaris) страдают заметными утечками в библиотеках.
    7.2.
    Модули
    При настройке сервиса Apache очень важным звеном являются модули.
    Их загрузка описана в конфигурационном файле /etc/httpd/conf/httpd.conf следующим образом:

    LoadModule perl_module modules/libperl.so

    В
    первой строке проверяется параметр
    HAVE_PERL
    . Если он установлен, то команда
    LoadModule загружает модуль modules/libperl.so, необходимый для интерпретации сценариев на языке Perl.
    Следом идет подключение модулей, которое похоже на загрузку, но исполь- зуется команда
    AddModule
    :

    AddModule mod_perl.c

    По умолчанию загружаются все установленные модули или те, которые включены в дистрибутив. Но это не оптимально, потому что разработчик не может знать, что нам понадобится. Я бы посоветовал загружать только то, что вам действительно нужно. Например, воспользовавшись ошибкой в сце- нарии
    PHP, злоумышленник может выполнять какие-либо команды на серве- ре
    . Хорошие сайты используют какой-то один язык WEB-программирования:
    Perl, PHP или Python, и вы должны оставить только тот модуль, который не- обходим
    , а остальные отключить.
    Я
    рекомендую взять на вооружение для программирования PHP, потому что он гибок в настройках и может обеспечить большую безопасность. Да и по моему опыту, злоумышленники чаще используют Perl для создания rootkit
    (набор администратора или программа, которая позволяет выполнять необ- ходимые хакеру действия на удаленной системе) на взломанной системе.
    Но это мое мнение, которое отнюдь не претендует на истину в последней ин- станции
    . Хороший программист на Perl сможет легко написать программу,

    Глава
    7
    244
    которая будет абсолютно безопасной и доставит много хлопот хакеру. На лю- бом языке, даже самом "дырявом", можно написать суперзащищенную про- грамму
    , а на самом проверенном — наделать дыр. Это полностью зависит от программиста и его умений.
    Неиспользуемые модули необходимо отключить, это значительно сузит воз- можности злоумышленника. Ничего не напоминает вам такая рекомендация?
    Да
    , это снова самое важное правило: лишняя программа — враг администра- тора и дополнительная дверь для хакера.
    Обязательно уделите внимание рассмотрению загружаемых модулей и уда- лите или закомментируйте то, что не нужно. Сделав это, вы повысите безо- пасность
    WEB-сервера более чем на 50%. Почему? Если Python хакерами ис- пользуется редко, то Perl и PHP очень популярны. Получается, что у вас в
    системе две большие двери. Если закрыть хотя бы одну, то останется ровно половина
    7.3.
    Права
    доступа
    В
    этом разделе нам предстоит познакомиться с основными параметрами фай- ла конфигурации /etc/httpd/conf/httpd.conf. Они отвечают за права доступа, относящиеся к директориям, и имеют следующий вид:

    Order allow,deny
    Allow from all
    или
    , например, такой:

    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .your-domain.com

    Первое объявление разрешает доступ к определенной директории на диске
    (в данном случае /var/www/html), а второе — ограничивает доступ к вирту- альной директории (в приведенном примере http://servername/server-status), разрешая его только клиентам из домена your-domain.com.
    Если вы знакомы с HTML (HyperText Markup Language, язык разметки ги- пертекста
    ) или XML (Extensible Markup Language, расширенный язык раз- метки
    ), то такое объявление будет вам знакомо и более-менее понятно без

    WEB-c
    ервер
    245
    дополнительных пояснений. Для тех, кто не в курсе, я сделаю несколько пояс- нений на примере директорий. Объявление начинается со следующей строки:

    В
    угловых скобках указывается ключевое слово
    Directory и путь к каталогу, права доступа к которому нужно изменить. Это начало описания, после кото- рого идут команды, определяющие права. Блок заканчивается строкой:

    Параметры доступа к директории могут быть описаны не только в файле
    /etc/httpd/conf/httpd.conf, но и в файле .htaccess, который может находиться в
    указанном каталоге. Сам файл требует отдельного рассмотрения (см.
    разд
    . 7.5.1), а сейчас вы должны только знать, что разрешения, указанные в
    конфигурации WEB-сервера, могут быть переопределены.
    При задании прав доступа следует иметь в виду, что Apache просматривает разрешения и запреты для всех директорий, находящихся в иерархии выше запрошенной
    . При определении прав доступа к директории сперва опреде- ляются права доступа к корневой директории, которые затем могут быть пе- реопределены правами доступа к любой поддиректории, лежащей в пути к
    запрошенному документу. Это позволяет эффективно управлять правами.
    Поскольку мы думаем о безопасности, надо вспомнить наше основное прави- ло
    — запрещено все, что не разрешено явно. Поэтому имеет смысл поместить в
    файл httpd.conf следующие строки:

    Order deny,allow
    Deny from all
    которые запрещают доступ к любым файлам, а затем открыть доступ только к
    тем папкам, к которым он необходим. Теперь, если на сервере создать но- вую директорию, а права доступа к ней не прописать, то доступ будет закрыт, кроме тех случаев, когда директория создана внутри папки с уже открытым доступом
    Теперь рассмотрим, как задаются права доступа. Для этого используются следующие директивы:
    ˆ
    Allow from параметр
    — определяет, с каких хостов можно получить доступ к указанной директории. В качестве параметр можно использовать одно из следующих значений:

    all
    — разрешает доступ к директории всем;

    доменное имя
    — определяет домен, с которого можно получить доступ к
    директории. Например, можно указать domain.com
    . В этом случае

    Глава
    7
    246
    только пользователи этого домена смогут получить доступ к директории через
    WEB. Если какая-либо папка содержит опасные файлы, с которы- ми должны работать только вы, то лучше ограничить доступ своим до- меном или только локальной машиной, указав
    Allow from localhost
    ;

    IP адрес
    — сужает доступ к директории до определенного IP-адреса. Это очень удобно, когда у вашего компьютера есть выделенный адрес, и вы хо- тите обеспечить доступ к каталогу, содержащему администраторские сце- нарии
    , только для себя. Адрес может быть как полным, так и неполным, что позволяет ограничить доступ к директории определенной сетью;

    env=ИмяПеременной
    — разрешает доступ, если определена указанная переменная окружения. Полный формат директивы:
    Allow from env=
    ИмяПеременной
    ;
    ˆ
    Deny from параметр
    — запрещение доступа к указанной директории. Па- раметры такие же, как у команды
    Allow from
    , только в данном случае за- крывается доступ для указанных адресов, доменов и т. д.;
    ˆ
    Order параметр
    — очередность, в которой применяются директивы allow и
    deny
    . Может использоваться два варианта:

    Order deny,allow
    — изначально все разрешено, потом проверяются запреты
    , но они могут быть обойдены при помощи разрешений. Реко- мендуется использовать только на общих директориях, в которые поль- зователи могут самостоятельно закачивать файлы, например, свои изо- бражения
    ;

    Order allow,deny
    — сначала все запрещено, вслед за этим проверяют- ся разрешения, он они могут быть обойдены запретами. Рекомендуется применять для всех директорий со сценариями или для всех каталогов, где находятся файлы, используемые определенным кругом лиц, напри- мер
    , администраторские сценарии;
    ˆ
    Require параметр
    — позволяет задать пользователей, которым разрешен доступ к каталогу. В качестве параметра можно указывать:

    user
    — имена пользователей (или их ID), которым разрешен доступ к каталогу
    . Например,
    Require user robert FlenovM
    ;

    group
    — названия групп, пользователям которых позволен доступ к ка- талогу
    . Директива работает так же, как и user
    ;

    valid-user
    — доступ к директории разрешен любому аутентифициро- ванному пользователю;
    ˆ
    Satisfy параметр
    — если указать значение any
    , то для ограничения дос- тупа используется или логин/пароль, или IP-адрес. Для идентификации пользователя по двум условиям одновременно надо задать all
    ;

    WEB-c
    ервер
    247
    ˆ
    AllowOverride параметр
    — определяет, какие директивы из файла
    .htaccess в указанном каталоге могут перекрывать конфигурацию сервера.
    В
    качестве параметр можно указать одно из следующих значений:
    None
    ,
    All
    ,
    AuthConfig
    ,
    FileInfo
    ,
    Indexes
    ,
    Limit и
    Options
    ;
    ˆ
    AuthName
    — домен авторизации, который должен использовать клиент при определении имени и пароля;
    ˆ
    Options параметры
    — определяет возможности WEB-сервера, которые доступны в данном каталоге. Если у вас есть директория, в которую поль- зователям разрешено закачивать картинки, то вполне логичным является запрет на выполнение в ней любых сценариев. Не надо надеяться, что вы сумеете программно запретить загрузку любых файлов кроме изображе- ний
    . Хакер может найти способ закачать злостный код и выполнить его в
    системе. С помощью опций можно сделать так, чтобы сценарий не вы- полнился
    WEB-сервером.
    В
    качестве аргумента параметры указывается
    All
    , что означает разреше- ние всех опций, кроме
    MultiViews
    ,
    None
    , что запрещает все опции, или комбинация из следующих значений:

    ExecCGI
    — разрешено выполнение CGI-сценариев. Чаще всего для это- го используется отдельная директория /cgi-bin, но и в ней можно опре- делить отдельные поддиректории, в которых запрещено выполнение;

    FollowSymLinks
    — позволяет использовать символьные ссылки. Убе- дитесь
    , что в директории нет опасных ссылок и их права не избыточны.
    Мы уже говорили в разд. 3.1.3, что ссылки сами по себе опасны, по- этому с ними нужно обращаться аккуратно, где бы они ни находились;

    SymLinksIfOwnerMatch
    — следовать по символьным ссылкам, только если владельцы целевого файла и ссылки совпадают. При использова- нии символьных ссылок в данной директории лучше указать этот па- раметр вместо
    FollowSymLinks
    . Если хакер сможет создать ссылку на каталог
    /etc и проследует по ней из WEB-браузера, то это вызовет серь- езные проблемы в безопасности;

    Includes
    — использовать SSI (Server Side Includes, включения на сто- роне сервера);

    IncludesNOEXEC
    — использовать SSI, кроме команд exec и include
    Если вы не используете в сценариях CGI эти команды, то данная опция предпочтительнее предыдущей;

    Indexes
    — отобразить список содержимого каталога, если отсутствует файл по умолчанию. Чаще всего пользователи набирают адреса в уко- роченном формате, например,
    1   ...   16   17   18   19   20   21   22   23   ...   35


    написать администратору сайта