Apache не может получить доступ к файлу, пока у него есть разрешение

Apache не может получить доступ к файлу, пока у него есть разрешение

Я не хочу разрешать другим доступ на чтение, поэтому я добавил своего пользователя и apacheпользователя в группу под названием apachme, а затем установил эту группу для всех файлов и папок, apacheк которым я хочу иметь доступ, включая корень веб-страницы. Затем я предоставил группе и владельцу все разрешения. После этого apache по-прежнему не может получить доступ к файлам, не установив разрешение на чтение на allow all( rwxrwxr--(0774)).

Папка, содержащая файл индекса, ее владельцем является apacheгруппа apachmeи разрешенияrwxrwxr-x(0775)

0770 разрешение в деле

с этим я получаю ошибку 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 не определен, используются пользователь и группа по умолчанию.

  1. 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>

Связанный контент