Permissões e grupos de arquivos / pastas no Linux com o Apache

1

Estou tentando aprender sobre permissões no servidor web linux com o apache.

Algumas pistas para o sistema:
O servidor com o qual tenho que brincar é baseado no Fedora. O Apache é executado como apache: apache. Para permitir, e. php para gravar em um arquivo o arquivo precisa ser chmod 777. 755 não é sufficiant.

O que eu estou querendo saber é basicamente como configurar permissões como elas deveriam estar, por exemplo, um "host compartilhado".

Meu principal problema é que, se eu definir uma permissão para que um usuário não possa acessar a pasta home de outro, o apache também não poderá ler a pasta public_html.

Para manter os usuários fora eu preciso configurar o chmod 700. Mas para deixar o apache ler eu preciso ter pelo menos uma execução no mundo, então um 701 basicamente funciona, mas não deixa algum usuários em.

Então, eu estou realmente presa no que fazer. Estive pensando em adicionar o usuário do apache ao frous grours abaixo para evitar ter que adicionar o world execute flag, mas isso é ruim? Deve ser o contrário, os usuários nos grupos abaixo também devem estar no grupo apache?

Eu pretendia ter 4 grupos:

1. webapp
mesmo que dev_int, mas é o único que pode ir dentro da pasta webapp / live para faça uma atualização do repo.

2. dev_int
pode ler, escrever e executar tudo na "web root", incluindo os dois abaixo, mas nada fora da raiz da web

3. dev_ext
pode ler escrever e executar em todas as pastas do cliente, mas não pode acessar nada fora da raiz do webapp

4. clientes
Contas básicas de ftp. Tem uma pasta pessoal com um public_html, mas não pode acessar nenhuma outra pasta base

Um exemplo de estrutura de pastas:

  • webroot nenhum usuário nos grupos mencionados pode sair daqui
    • some_project : somente dev_int
    • webapp
      • ao vivo : somente webapp
      • encenando : dev_int e: dev_ext
      • clientes : dev_int e: dev_ext
        • client_1 : dev_int,: dev_ext e client1: clients
          • public_html
    • dev
      • developer_1 developer_1: dev_int OR: dev_ext
        • public_html
por phobia 26.06.2010 / 02:09

2 respostas

1

Eu recomendaria ver as duas opções a seguir:

  1. Usando um módulo de multiprocessamento para o Apache (como o mpm-itk , que permite avaliar um UID específico e GID para cada VHost, o que permitiria executar o Apache com os privilégios necessários para cada diretório e aumentaria um pouco a segurança, já que os processos do Apache seriam executados com acesso mais restrito ao sistema de arquivos.

  2. Usando listas de controle de acesso do sistema de arquivos (algumas informações podem ser encontradas, por exemplo, em Documentação doRHEL ). Essa é uma boa solução, porque todos os usuários podem preservar seus privilégios (e ficar isolados de outros usuários), mas você pode conceder direitos ao Apache para acessar seus diretórios public_html .

Você também pode combinar as duas soluções para configurar um ambiente altamente isolado. Eu estava feliz em usar as duas abordagens combinadas em um servidor com poucas centenas de contas de shell e poucas VHosts separadas para várias páginas da web.

    
por 27.05.2013 / 11:44
0

Se você estiver usando a instalação do yum do apache 2, poderá colocar os arquivos da página da web em qualquer lugar. Eu uso /var/www/html/DomainName.com para armazenar cada arquivo de domínios virtuais. Eu mantenho a informação sobre os domínios em um arquivo separado, em vez de httpd.conf, então não tenho que percorrer todo o arquivo se tiver que editá-lo.

A última linha dos meus arquivos httpd.conf é:

Include /etc/httpd/conf/domains.conf

Aqui faz parte de um script que eu uso para criar novas doações.

DOMAIN=$1 
USERNAME=$2 
mkdir /var/www/html/$DOMAIN 
useradd -g apache  $USERNAME 
chown $USERNAME:    /var/www/html/$DOMAIN 
cd /home/$USERNAME 
ln -s /var/www/html/$DOMAIN www

echo "Adding httpd entry" 

echo "  " >>    /etc/httpd/conf/domains.conf 
echo "<VirtualHost *:80>" >>    /etc/httpd/conf/domains.conf
echo "      ServerAdmin webmaster@$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      DocumentRoot /var/www/html/$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerName $DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerAlias www.$DOMAIN" >>   /etc/httpd/conf/domains.conf
echo "      ErrorLog logs/$DOMAIN-error_log" >>   /etc/httpd/conf/domains.conf
echo "      CustomLog logs/$DOMAIN-access_log common" >>   /etc/httpd/conf/domains.conf 
echo "</VirtualHost>" >> /etc/httpd/conf/domains.conf 

Espero que isso ajude.

    
por 27.06.2010 / 11:13