O Apache não pode acessar o arquivo enquanto tiver permissão

O Apache não pode acessar o arquivo enquanto tiver permissão

Não quero permitir que outras pessoas tenham acesso de leitura, então adicionei meu usuário e o apacheusuário a um grupo chamado apachmee, em seguida, configurei esse grupo para todos os arquivos e pastas aos quais desejo apacheter acesso, incluindo a raiz da página da web. Em seguida, dei todas as permissões ao grupo e ao proprietário. Depois disso, o apache ainda não consegue acessar os arquivos sem definir a permissão de leitura para permitir todos ( rwxrwxr--(0774)).

A pasta que contém o arquivo de índice, de propriedade apachedo grupo apachmee das permissõesrwxrwxr-x(0775)

Permissão 0770 em arquivo

com isso recebo um erro 500, alterá-lo para 0774permitirá que funcione bem

testes

Estes eram apenas para confirmar em qual usuário o Apache estava sendo executado e se ele havia sido adicionado ao grupo.

Responder1

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 escrever nelas.

Como tal, na configuração padrão, é normal que as estruturas web sejam legíveis por todos, e quando há necessidade de escrever, normalmente sejam escritas pelo utilizador Apache, o que é um pesadelo de segurança.

Uma das estratégias para evitar isso é instalar/usar o mod_ruid2.https://github.com/mind04/mod-ruid2

Quanto ao Debian, basta fazer:

apt-get install libapache2-mod-ruid2

Observe que o usuário padrão do Apache varia de acordo com a distribuição. No Debian é www-data, no RH/CentOS é apache e no SuSE é wwwrun. 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, ele se comportará da maneira tradicional; caso contrário, o comportamento será alterado.

A ideia é 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 se desejar, outros usuários não poderão lê-los. 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á ativo para aquele diretório. O user:usergroup são as permissões efetivas que o Apache usará ao acessar o host/diretório virtual e, como tal, qualquer usuário que pertença a esse grupo poderá 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 de user:usergroup se forem gerenciados por um grupo de usuários. Da mesma forma, os arquivos também podem ser criados por outro usuário com permissão de leitura para todo o mundo; entretanto, para escrita, não será o usuário padrão do Apache, mas sim esse outro usuário.

As vantagens do mod_ruid2 são então:

  • em um ambiente 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 ruid2 poderão sobrescrevê-los
  • mais importante ainda, 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.

Na página do github:

SOBRE mod_ruid2 é um módulo suexec para apache 2.0, 2.2 e 2.4, baseado em mod_ruid e mod_suid2

-é executado apenas no Linux porque apenas o kernel do Linux implementou os recursos de processo necessários. -tem melhor desempenho que mod_suid2 porque não precisa matar filhos httpd após uma solicitação. ele faz uso dos recursos do kernel e depois de receber uma nova solicitação é enviado novamente. -existem alguns problemas de segurança, por exemplo, se o invasor explorar com sucesso o processo httpd, ele poderá definir recursos efetivos e setuid para root. eu recomendo usar algum patch de segurança no kernel (grsec), ou algo assim.

-existem dois modos de operação principais: stat e config 1. config é o padrão, você deve definir uid e gid. Se nenhum [ug]id for definido, o usuário e o grupo padrão serão usados.

  1. stat httpd setuid e setgid para uid e gid do nome do arquivo (script)/diretório solicitado, isso é bom se você usar mod_vhost_alias para hospedagem virtual

INSTALAR 1. baixe e instale o libcap mais recente aqui 2. execute /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. configure httpd.conf 4. reinicie o apache

OPÇÕES DE CONFIGURAÇÃO: RMode config|stat (o padrão é config) RUidGid user|#uid group|#gid - quando RMode é config, defina para este uid e gid

RMinUidGid user|#uid group|#gid - quando uid/gid é < que min uid/gid definido como padrão uid/gid RDefaultUidGid user|#uid group|#gid

RGroups group1 group2 - grupos adicionais definidos via setgroups @none - limpa todos os grupos definidos anteriormente.

RDocumentChrRoot - Defina o diretório chroot e a raiz do documento dentro

EXEMPLO:

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

informação relacionada