Do ponto de vista da segurança, não é uma boa ideia configurar páginas da web com o mesmo usuário do Apache. O usuário do Apache deve ser capaz de ler as páginas da web, mas não de escrever para elas.
Como tal, na configuração padrão, é normal que as estruturas da web sejam legíveis por todos, e quando há necessidade de escrever, normalmente para ser gravável pelo usuário do Apache, o que é um pesadelo de segurança.
Uma das estratégias para evitar isso é instalar / usar mod_ruid2. link
Quanto ao Debian, é o suficiente para fazer:
apt-get install libapache2-mod-ruid2
Por favor, note que o usuário padrão do Apache varia com a distribuição. No Debian, é www-data, em RH / CentOS é apache e em SuSE, wwwrun. Eu vou me referir a ele de agora em diante como o usuário padrão do Apache.
Se você não definir nenhuma diretiva em um vhost, ela se comportará da maneira tradicional; caso contrário, o comportamento será alterado.
A idéia é ter um processo rodando no vhost com o usuário que tem direitos sobre o vhost e, como tal, os arquivos terão essa propriedade e, como você deseja, outros usuários não poderão ler eles. Normalmente você define um usuário por vhost.
Nas diretivas Virtualhost ou Directory em um vhost, você define o usuário e o grupo que estarão ativos para esse diretório. O usuário: usergroup é quais serão as permissões efetivas que o Apache usará ao acessar o host virtual / diretório, e como tal, qualquer usuário que pertença a esse grupo será capaz de escrever / ver os diretórios.
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
Assim, ao escrever os diretórios, agora os arquivos podem ser criados como 660 com a propriedade user: usergroup se eles forem gerenciados por um grupo de usuários. Da mesma forma, os arquivos também podem ser criados por outro usuário com permissões para ler para o mundo; no entanto, para escrever, não será o usuário padrão do Apache, mas sim esse outro usuário.
As vantagens do mod_ruid2 são:
- em um ambiente de hospedagem de hospedagem virtual, os usuários não podem ler os arquivos de outros usuários;
- em um único usuário, você ainda pode criar arquivos como outro usuário, e nem o usuário padrão do Apache nem o usuário do ruid2 poderão sobrescrevê-los
- mais importante, os arquivos gravados agora serão feitos com o usuário ruid2 e não mais globalmente com o usuário padrão do Apache.
Da página do github:
ABOUT mod_ruid2 is a suexec module for apache 2.0, 2.2 and 2.4, based on mod_ruid and mod_suid2
-it runs only on Linux because only the Linux kernel has implemented the required process capabilities. -it has better performance than mod_suid2 because it doesn't need to kill httpd children after one request. it makes use of kernel capabilites and after receiving a new request suids again. -there are some security issues, for instance if attacker successfully exploits the httpd process, he can set effective capabilities and setuid to root. i recommend to use some security patch in kernel (grsec), or something..
-there are two main operation modes: stat and config 1. config is default, you must define uid and gid. If no [ug]id is defined the default user and group are used.
- stat httpd setuid and setgid to uid and gid of requested filename(script)/directory this is good if you use mod_vhost_alias for virtual hosting
INSTALL 1. download and install latest libcap from here 2. run /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. configure httpd.conf 4. restart apache
CONFIGURE OPTIONS: RMode config|stat (default is config) RUidGid user|#uid group|#gid - when RMode is config, set to this uid and gid
RMinUidGid user|#uid group|#gid - when uid/gid is < than min uid/gid set to default uid/gid RDefaultUidGid user|#uid group|#gid
RGroups group1 group2 - additional groups set via setgroups @none - clear all previous defined groups.
RDocumentChrRoot - Set chroot directory and the document root inside
EXAMPLE:
<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>