
Я запускаю экспериментальный веб-сервер Apache just-for-fun. Часть идеи этого сервера заключается в том, что он должен быть необычайно открыт для публики; например, корневая файловая система должна быть открыта для просмотра любым желающим. (И в самом деле, вот она:http://sylvester.s.zbasu.net/rootfs/) В результате безопасность отойдет на второй план.
Тем не менее, есть вещи, к которым Apache должен иметь доступ, но не публика. Пример, с которым я сталкиваюсь, — это сайт Django. Файл settings.py
должен быть доступен для чтения Apache, иначе Django не будет работать. Но settings.py
не должен быть доступен для чтения публике, поскольку содержит секретный ключ. Поэтому файл должен принадлежать www-data
, но Apache тем не менее должен отказаться обслуживать его.
Одним из возможных решений (спасибо ellipsis753
на Freenode) является создание специальной директивы, возможно, в файле .htaccess
, сообщающей Apache не обслуживать этот файл. Однако я полагаю, что если файл не может быть прочитан всеми пользователями, то, вероятно, он не должен обслуживаться и Apache.
Могу ли я указать Apache, что если файл недоступен для чтения всем, то его не следует обслуживать?
решение1
Если вы запускаете свое приложение Django под FastCGI или в режиме Daemon mod_wsgi, то вы можете запустить его как другого пользователя, а не того, под которым запущен Apache. Затем вы можете полностью удалить разрешение Apache и World на чтение любого файла, который вы не хотите обслуживать.
Например, обратите внимание, что ваш файл паролей/etc/shadow
уже недоступен, потому что у Apache нет разрешений на него, и он не доступен для чтения всем. Если вы создадите нового пользователя, например web-apps
, и добавите его WSGIDaemonProcess myapp user=web-apps ...
в конфигурацию Apache, то вы можете сделать так, чтобы приложение Django принадлежало пользователю web-apps
, а его файл конфигурации не доступен для чтения всем, как и shadow
файл, который уже доступен.