</VirtualHost>
Рассмотрим только основные параметры, которые указываются при описании виртуального сервера:
□ ServerAdmin — E-mail администратора, которому будут направляться сообщения об ошибках;
□ DocumentRoot — директория, в которой расположен корневой каталог сайта;
□ ServerName — имя сервера. Если оно не указано, то используется локальный IP-адрес сервера.
Директивы ErrorLog и CustomLog нам уже знакомы. После этого в нашем примере идет указание прав доступа на директорию /var/www/your_server/, которая является корнем для виртуального Web-сервера. Разрешения можно устанавливать как внутри объявления виртуального сервера, так и вне его.
За более подробной информацией обратитесь к документации по Apache.
7.5. Замечания по безопасности
В конфигурационном файле /etc/httpd/conf/httpd.conf есть несколько директив, которые позволяют управлять безопасностью. Эти же команды можно указывать в файле .htaccess. Давайте их рассмотрим:
□ AuthType параметр — тип аутентификации. В качестве параметра можно использовать одно из значений: Basic или Digest;
□ AuthGroupFile параметр — файл, в котором хранится список групп пользователей;
□ AuthUserFile параметр — файл, содержащий имена пользователей и пароли. Этот список лучше формировать утилитой htpasswd;
□ AuthAuthoritative параметр — способ проверки прав. По умолчанию директива включена (on). Если директива выключена (off), а пользователь не указал имя, то его аутентификация осуществляется другими модулями, например по IP-адресу;
□ AuthDBMGroupFile и AuthDBMUserFile — аналогичны AuthGroupFile и AuthUserFile, но в качестве параметра указывается файл в формате базы данных Berkley-DB.
Эти команды помогут вам настроить идентификацию пользователей при обращении к определенным директориям. Например, если у вас есть каталог, работа с которым разрешена только авторизованными пользователями, то можно указать файл паролей, в соответствии с которым доступ к файлам будет запрещен самим сервером.
7.5.1. Файлы .htaccess
Если какая-либо директория Web-сервера должна иметь особые права, то лучше создать в этом каталоге файл .htaccess. Разрешения, описанные в таком файле, действуют на директорию, в которой он находится. Рассмотрим пример содержимого файла .htaccess:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /pub/home/flenov/passwd
Require valid-user
В данном файле для текущей директории указывается тип аутентификации Basic. Это значит, что будет использоваться окно для ввода имени и пароля. Текст, указанный в директиве AuthName, отобразится в заголовке окна. На рис. 7.2 приведен пример такого окна.
Рис. 7.2. Окно запроса имени и пароля
Директива AuthUserFile задает файл, в котором находится база имен и паролей пользователей сайта. Последняя команда Require в качестве параметра использует значение valid-user. Это значит, что файлы в текущей директории смогут открыть только те пользователи, которые прошли аутентификацию.
Вот таким простым способом можно запретить неавторизованный доступ к директории, содержащей секретные данные или сценарии администратора.
Как я уже говорил, в файле .htaccess могут находиться и директивы типа allow from, которые мы рассматривали выше (см. разд. 7.3).
Например, если нужно разрешить доступ только с определенного IP-адреса, то в файле может содержаться следующая строка:
allow from 101.12.41.148
Если объединить защиту директивой allow from и требование ввести пароль, то задача хакера по взлому сервера сильно усложнится. Здесь уже недостаточно знания пароля, необходимо иметь конкретный IP-адрес для обращения к содержимому директории, а это требует значительных усилий.
Эти же параметры можно указывать и в файле httpd.conf, например:
<directory /путь>
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /pub/home/flenov/passwd
Require valid-user
</directory>
Чем будете пользоваться вы, зависит от личных предпочтений. Мне больше нравится работать с файлом .htaccess, потому что настройки безопасности будут храниться в той же директории, на которую устанавливаются права. Но это небезопасно, потому что хакер может получить возможность прочитать этот файл, а это лишнее.
Использование централизованного файла httpd.conf дает преимущества, т.к. он находится в директории /etc, которая не входит в корень Web-сервера и должна быть запрещена для просмотра пользователям.
7.5.2. Файлы паролей
Теперь нам предстоит узнать, как создаются файлы паролей и как ими управлять. Директива AuthUserFile для хранения информации об авторизации использует простой текстовый файл, в котором содержатся строки следующего вида:
flenov:{SHA}lZZEBt.Py4/gdHsyztjUEWb0d90E=
В этой записи два параметра, разделенных двоеточием. Сначала указано имя пользователя, а после разделителя — зашифрованный по алгоритму MD5 пароль. Формировать такой файл вручную сложно и не имеет смысла, поэтому для облегчения жизни администраторов есть утилита htpasswd. С помощью этой программы создаются и обновляются имена и пароли для базовой аутентификации Web-сервером HTTP-пользователей.
Удобство программы состоит в том, что она может шифровать пароли и по алгоритму MD5, и с помощью системной функции crypt(). В одном файле могут находиться записи с паролями обоих типов.
Если вы храните имена и пароли в формате базы данных DBM (для указания этого в файле .htaccess используется директива AuthDBMUserFile), то для управления БД нужно применять команду dbmmanage.
Давайте рассмотрим, как пользоваться программой htpasswd. Общий вид вызова команды выглядит следующим образом:
htpasswd параметры файл имя пароль
Пароль и имя файла являются необязательными, и их наличие зависит от указанных опций. Давайте посмотрим основные ключи, которые нам доступны:
□ -c — создать новый файл. Если указанный файл уже существует, то он перезаписывается, и старое содержимое теряется. Пример использования команды:
htpasswd -c .htaccess robert
После выполнения этой директивы перед вами появится приглашение ввести пароль для нового пользователя robert и подтвердить его. В результате будет создан файл .htaccess, в котором будет одна запись для пользователя robert с указанным вами паролем;
□ -m — использовать модифицированный Apache алгоритм MD5 для паролей. Это позволит переносить созданный файл на любую другую платформу (Windows, Unix, BeOS и т.д.), где работает Web-сервер Apache. Такой ключ удобен, если у вас разнородная сеть, и один файл с паролями используется на разных серверах;
□ -d — для шифрования будет применяться системная функция crypt();
□ -s — применить SHA-шифрование (на базе алгоритма хэширования), которое используется на платформе Netscape;
□ -р — не шифровать пароли. Я не рекомендую устанавливать этот флаг, потому что он небезопасен;
□ -n — не вносить никаких изменений, а только вывести результат на экран.
Для добавления нового пользователя можно выполнить команду без указания ключей, а передать в качестве параметров только имена файла и пользователя:
htpasswd .htaccess Flenov
У команды htpasswd есть два ограничения: в имени пользователя не должно быть символа двоеточия, и пароль не может превышать 255 символов. Оба условия достаточно демократичны и с ними можно смириться. Из моих знакомых такой длинный пароль пока еще никто не захотел устанавливать, а задавать имя пользователя с двоеточием редко кому приходит на ум.
7.5.3. Проблемы авторизации
Авторизация — это слишком простой способ обеспечения безопасности. При передаче пароли шифруются простым кодированием Base64. Если хакер сможет перехватить пакет, содержащий имя пользователя и пароль, то он прочитает эту информацию через пять секунд. Для расшифровки Base64 не нужно подбирать пароль, достаточно выполнить одну функцию, которая декодирует практически моментально.
Для создания реально безопасного соединения необходимо сначала зашифровать весь трафик. Для этого может использоваться stunnel или уже готовый протокол HTTPS, который использует SSL. О нем мы еще поговорим в разд. 10.9.
7.5.4. Обработка на сервере
HTML-файлы могут обрабатываться прямо на сервере (так же, как выполняются файлы PHP). С одной стороны, это удобно, потому что код PHP можно будет вставлять в файлы с расширением htm, с другой стороны, HTML-файлы далеко небезопасны, и если хакер сможет их изменять, то сервер окажется под угрозой.