Acabei de rodar uma caixa do Ubuntu 11.10 e depois corri apt-get install apache2 php5
para instalar o apache2 e o PHP 5 na caixa. Agora está funcionando como um "servidor web" e carrega o "Funciona!" página. Agora estou tentando reforçar a segurança e tenho as seguintes perguntas sobre servidores web linux:
- Quem o apache deve estar executando como?
- Em quais grupos esse usuário deve estar?
- Quais pacotes podem fazer o PHP (e Apache?) Rodar como o proprietário dos arquivos? (como em hosts da web compartilhados) Devo usar esses pacotes? Eles são fáceis / viáveis de manter em um sistema pequeno?
- Quais devem ser as permissões padrão para arquivos e pastas veiculados na Web com o apache em execução
www-data
? Para o apache / php sendo executado como usuário?
Fiz o seguinte no exame da configuração padrão:
Estrutura do arquivo
Quando eu cd /
faço uma ls -al
lista do conteúdo, vejo /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Se eu cd
em var
e não ls -al
vejo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Finalmente, por dentro /var/www
, vejo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Meu principal argumento é que até agora todos esses arquivos pertencem root:root
, os arquivos têm permissões de 644 e os diretórios têm permissões de 755.
Permissões do Apache
Se eu criar um arquivo como root /var/www/test.php
com o conteúdo:
<?php echo shell_exec('whoami');
e carregue esse arquivo em um navegador www-data
, que é o mesmo que o /etc/apache2/envvars
arquivo:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Se eu ps aux | grep -i apache
vejo o seguinte:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Então, quem está executando o apache? Parece que talvez o primeiro processo seja como root
, talvez do /etc/init.d/apache
script quando o sistema foi iniciado, e os outros como www-data
gerados desde o primeiro. Isso está correto?
Em seguida, se eu digitar, groups www-data
então vejo www-data : www-data
- então parece estar apenas no www-data
grupo. Eu estou supondo que esta é uma prática padrão também.
Hospedagem e segurança compartilhadas
Portanto, se eu entendo as coisas corretamente, se o apache está sendo executado como www-data
e quero que o apache possa ler um diretório, o x
bit precisa ser definido para o mundo (outro) group ( o+x
) e isso também precisa ser definido em todos os pais. diretórios por toda a cadeia ( www
, var
). E se eu quiser que o apache seja capaz de ler um arquivo, o o+r
bit precisará ser definido.
Infelizmente, acredito que isso introduz uma falha de segurança para vários aplicativos e / ou vários usuários na mesma caixa Linux: todos os arquivos da Web precisam ser legíveis pelo mundo e, portanto, também são acessíveis por outros aplicativos e outros usuários do sistema. Se um aplicativo instalado no sistema tivesse uma vulnerabilidade de segurança que permitisse entrada bruta e não validada do usuário, que era então executada pelo PHP, um invasor remoto poderia procurar todos os outros arquivos no sistema da web que fossem legíveis mundialmente. Da mesma forma, se a caixa tivesse vários usuários e um usuário conhecesse o caminho dos arquivos da web de outro usuário, ele poderia ler o conteúdo do arquivo (e ver coisas sensíveis, como cadeias de conexão de banco de dados, etc.).
Já ouvi falar de dois pacotes, suphp
e phpsuexec
que lidam com permitindo que os arquivos dos usuários para ser servido 'como eles' em um sistema compartilhado. Uma das vantagens disso é que ele permite que aplicativos da Web (como o Wordpress) criem e modifiquem arquivos - muito útil para adicionar temas, plugins e atualizar softwares. É claro que provavelmente é mais seguro fazer essas coisas manualmente, mas pode ser feito um compromisso talvez com um dos pacotes mencionados acima? Ou, possivelmente, usando chown
para tornar o grupo de diretórios do wordpress pertencer www-data
e definir o bit no grupo ( g+s
)?
Eu os usei apenas como o usuário final de uma empresa de hospedagem na web e, portanto, não conheço os detalhes deles, e se eles são razoáveis para instalar em um sistema pequeno ou se há algum outro medidas de segurança que eu deveria usar, mas pensei em mencioná-las aqui, pois elas parecem ser uma maneira possível de abordar algumas de minhas preocupações.
Voltar para as perguntas
- Quem o apache deve estar executando como?
- Em quais grupos esse usuário deve estar?
- Quais pacotes podem fazer o PHP (e Apache?) Rodar como o proprietário dos arquivos? (como em hosts da web compartilhados) Devo usar esses pacotes? Eles são fáceis / viáveis de manter em um sistema pequeno?
- Quais devem ser as permissões padrão para arquivos e pastas veiculados na Web com o apache em execução
www-data
? Para o apache / php sendo executado como usuário?