Пользовательский модуль Apache, где разместить собственный файл журнала?

У меня есть модуль Apache, который действует как фильтр безопасности, который позволяет запросам проходить или нет. Это модуль, сделанный на заказ, я не хочу использовать какой-либо существующий модуль.

У меня собственно два вопроса:

  1. Модуль имеет собственный лог-файл. Я думаю, что лучшее место должно быть в /var/log/apache2/, но, поскольку процесс Apache работает с пользователем www-data, он не может создавать файлы по этому пути. Я хочу найти решение для файла журнала таким образом, чтобы оно не было слишком навязчивым (с точки зрения безопасности) для типичного веб-сервера. Где было бы лучше всего и какие атрибуты безопасности должны быть установлены?

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

Спасибо, Сезан.


person cezane    schedule 06.08.2014    source источник


Ответы (1)


Apache сначала запускается под суперпользователем и выполняет инициализацию модуля (вызов функции module_struct::register_hooks). Там вы можете создать файлы журналов и либо chown их в www-data, либо оставить дескриптор файла открытым, чтобы позже использовать его из рабочих процессов forked и setuided.

(И если вам нужна альтернатива, я думаю, что также можно войти в систему с помощью syslog и настроить его для перенаправления ваших сообщений журнала в ваш файл журнала).

В рабочем процессе вы уже работаете как пользователь www-data, поэтому вы мало что можете сделать для дополнительной защиты выполнения. Например, насколько мне известно, вы не можете setuid передать другому пользователю или chroot защитить файловую систему.

Что вы можете сделать для повышения безопасности, так это использовать системный брандмауэр. Например, в AppArmor вы можете сообщить операционной системе, какие двоичные файлы может выполнять ваш модуль Apache, не давая ей выполнять любые нежелательные двоичные файлы. И вы можете ограничить доступ к файловой системе этого двоичного файла, запретив ему доступ к www-data файлам, которые ему не принадлежат.

person ArtemGr    schedule 07.08.2014
comment
Я забыл, что сначала Apache запускается как root. А мне кажется, что register_hooks (особенно child_init) вызывается после форка, чтобы инициализировать модуль. Я проверю это. Большое спасибо за подсказку! - person cezane; 07.08.2014
comment
Да, функция, зарегистрированная с помощью ap_hook_child_init, выполняется после setuid, но функция register_hooks выполняется как root. - person ArtemGr; 07.08.2014