Segurança para um servidor web para várias pessoas?

2

Eu tenho um servidor web apache configurado onde várias pessoas têm seus sites hospedados, principalmente sites baseados em php.

O problema é que, quando essas pessoas carregam seus arquivos de sites, ele tem permissões de leitura para todos, para que todos possam ler os arquivos de todos, incluindo arquivos que incluem dados do usuário do banco de dados.

Eles ssh no servidor e 'cat' arquivos de outras pessoas, mas até mesmo a desativação do SSH não resolve o problema porque eles podem publicar um código php que faz algo parecido com isto

echo file_get_contents( '/home/someotheruser/public_html/config.php' );

Qual é a melhor abordagem para resolver isso?

    
por user1091856 16.03.2014 / 03:05

1 resposta

2

Os dois únicos métodos que eu estou ciente de onde você pode configurar isso para que o Apache possa ver o número X do conteúdo dos usuários, mas esses mesmos usuários são cegos para o conteúdo uns dos outros é usar um grupo Unix separado para cada usuário, que o Apache também é um membro ou através de ACLs.

Método 1 - usando grupos

Coloque simplesmente cada usuário em seu próprio grupo único (group1, group2, etc.). Em seguida, adicione o Apache a cada um desses grupos. Isso pode ser feito usando chgrp e chmod para fornecer aos diretórios e arquivos os grupos apropriados + permissões. Você provavelmente desejará configurar o bit GUID nesses diretórios também, para que todos os novos arquivos adicionados tenham o grupo apropriado atribuído automaticamente.

NOTA: Esse método pode ser quebrado pelos usuários com bastante facilidade, sem quebra irrevogável, apenas quebrado, para que seus arquivos não possam mais ser vistos pelo Apache. Eu sugeriria fornecer a eles alguns aliases ou scripts para ajudar a manter seus diretórios.

Método 2 - usando ACLs

Você pode adicionar o ID do grupo do Apache aos diretórios de conteúdo de cada usuário assim.

Exemplo

$ whoami
saml

$ groups
saml wheel wireshark

configure um diretório com perms + ownershiphips

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

antes

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

definir permissões

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Observe o + no final, o que significa que esse diretório tem ACLs aplicadas a ele.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

depois

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

Aviso com as permissões padrão ( setfacl -Rdm ) definidas para que as permissões sejam ( r-x ) por padrão ( g:apache:rx ). Isso força qualquer arquivo novo a ter apenas o r habilitado.

    
por 16.03.2014 / 13:35