Я не хочу разрешать другим доступ на чтение, поэтому я добавил своего пользователя и apache
пользователя в группу под названием apachme
, а затем установил эту группу для всех файлов и папок, apache
к которым я хочу иметь доступ, включая корень веб-страницы. Затем я предоставил группе и владельцу все разрешения. После этого apache по-прежнему не может получить доступ к файлам, не установив разрешение на чтение на allow all( rwxrwxr--(0774)
).
Папка, содержащая файл индекса, ее владельцем является apache
группа apachme
и разрешенияrwxrwxr-x(0775)
с этим я получаю ошибку 500, изменение ее на 0774
позволит ей работать нормально
Они были нужны только для подтверждения того, под каким пользователем запущен Apache и что он был добавлен в группу.
решение1
С точки зрения безопасности, это не очень хорошая идея настраивать веб-страницы с одним и тем же пользователем Apache. Пользователь Apache должен иметь возможность читать веб-страницы, но не писать на них.
Таким образом, в стандартной конфигурации веб-структуры обычно доступны для чтения всем, а при необходимости записи в них обычно доступен для записи пользователю Apache, что является кошмаром с точки зрения безопасности.
Одним из способов избежать этого является установка/использование mod_ruid2.https://github.com/mind04/mod-ruid2
Что касается Debian, то достаточно сделать:
apt-get install libapache2-mod-ruid2
Обратите внимание, что пользователь Apache по умолчанию различается в зависимости от дистрибутива. В Debian это www-data, в RH/CentOS это apache, а в SuSE это wwwrun. С этого момента я буду называть его пользователем Apache по умолчанию.
Если вы не определите никаких директив в виртуальном хосте, он будет вести себя традиционным образом; в противном случае поведение будет изменено.
Идея заключается в том, чтобы запустить процесс в vhost с пользователем, имеющим права на vhost, и, таким образом, файлы будут иметь это владение, и, как вы хотите, другие пользователи не смогут их прочитать. Обычно вы определяете пользователя на vhost.
В директивах Virtualhost или Directory в vhost вы определяете пользователя и группу, которые будут активны для этого каталога. Пользователь:группапользователей — это то, что будет эффективными разрешениями, которые Apache будет использовать при доступе к виртуальному хосту/каталогу, и, таким образом, любой пользователь, принадлежащий к этой группе, сможет писать/видеть каталоги.
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
Таким образом, при записи каталогов теперь файлы могут быть созданы как 660 с владельцем user:usergroup, если они управляются группой пользователей. Аналогично, файлы также могут быть созданы другим пользователем с правами на чтение для всего мира; однако для записи это будет не пользователь Apache по умолчанию, а этот другой пользователь.
Преимущества mod_ruid2 таковы:
- в среде виртуального хостинга пользователи не могут читать файлы других пользователей;
- в качестве одного пользователя вы по-прежнему можете создавать файлы от имени другого пользователя, и ни пользователь Apache по умолчанию, ни пользователь ruid2 не смогут их перезаписать
- что еще важнее, теперь запись файлов будет выполняться пользователем ruid2, а не глобально пользователем Apache по умолчанию.
Со страницы github:
О mod_ruid2 — это модуль suexec для apache 2.0, 2.2 и 2.4, основанный на mod_ruid и mod_suid2.
- он работает только на Linux, потому что только ядро Linux реализовало требуемые возможности процесса. - он имеет лучшую производительность, чем mod_suid2, потому что ему не нужно убивать дочерние процессы httpd после одного запроса. он использует возможности ядра и после получения нового запроса снова выполняет suid. - есть некоторые проблемы с безопасностью, например, если злоумышленник успешно использует процесс httpd, он может установить эффективные возможности и setuid на root. я рекомендую использовать какой-нибудь патч безопасности в ядре (grsec) или что-то в этом роде.
-существуют два основных режима работы: stat и config 1. config - это режим по умолчанию, необходимо определить uid и gid. Если [ug]id не определен, используются пользователь и группа по умолчанию.
- stat httpd setuid и setgid для uid и gid запрошенного имени файла (скрипта)/каталога это хорошо, если вы используете mod_vhost_alias для виртуального хостинга
УСТАНОВКА 1. Загрузите и установите последнюю версию libcap отсюда 2. Запустите /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. Настройте httpd.conf 4. Перезапустите Apache
ПАРАМЕТРЫ КОНФИГУРАЦИИ: RMode config|stat (по умолчанию config) RUidGid user|#uid group|#gid - когда RMode - config, установите этот uid и gid
RMinUidGid user|#uid group|#gid - когда uid/gid < min uid/gid устанавливается на uid/gid по умолчанию RDefaultUidGid user|#uid group|#gid
RGroups group1 group2 - дополнительные группы, заданные через setgroups @none - очистить все ранее определенные группы.
RDocumentChrRoot — установка каталога chroot и корневого каталога документов внутри
ПРИМЕР:
<VirtualHost example.com> ServerAdmin [email protected] RDocumentChRoot /home /example.com/public_html ServerName example.com ServerAlias www.example.com RMode config # unnecessary since config is the default RUidGid user1 group1 RGroups apachetmp <Directory /home/example.com/public_html/dir> RMode stat </Directory> <Directory /home/example.com/public_html/dir/test> RMode config RUidGid user2 group2 RGroups groups1 </Directory> <Directory /home/example.com/public_html/dir/test/123> RUidGid user3 group3 </Directory> <Location /yustadir> RMode config RUidGid user4 user4 RGroups groups4 </Location>