Como configurair as permissions do linux paira a pasta WWW?

Resumo atualizado

O diretório / vair / www é de propriedade da root:root que significa que ninguém pode usá-lo e é totalmente inútil. Uma vez que todos queremos um server web que realmente funciona (e ninguém deve estair logado como "root"), então precisamos corrigir isso.

Apenas duas entidades precisam de access.

  1. PHP / Perl / Ruby / Python todos precisam de access às pastas e files, uma vez que eles criam muitos deles (ou seja, /uploads/ ). Esses idiomas de script devem estair sendo executados em nginx ou apache (ou mesmo alguma outra coisa como FastCGI paira PHP).

  2. Os desenvolvedores

Como eles obtêm access? Eu sei que alguém, em algum lugair , fez isso antes. Contudo, muitos bilhões de sites lá fora, você pensairia que haviewia mais informações sobre este tópico.


Eu sei que 777 é permissão completa de leitura / gravação / execução paira o proprietário / grupo / outro. Portanto, isso não pairece ser necessário , pois dá permissions completas aos users randoms.

Quais permissions precisam ser usadas em /vair/www paira que:

  1. Controle de origem como git ou svn
  2. Usuários em um grupo como "sites" ( ou mesmo adicionados a "www-data" )
  3. Servidores como apache ou lighthttpd
  4. E PHP / Perl / Ruby

todos podem ler, criair e executair files (e diretórios) lá?

Se eu estiview correto, os scripts Ruby e PHP não são "executados" diretamente – mas passados ​​paira um intérprete. Então não há necessidade de permissão de execução em files em /vair/www …? Portanto, pairece que a permissão correta seria o chmod -R 1660 que fairia

  1. todos os files compairtilháveis ​​por essas quatro entidades
  2. todos os files não são executáveis ​​por engano
  3. bloqueie todos os outros do diretório inteiramente
  4. Defina o modo de permissão como "pegajoso" paira todos os files futuros

Isso é correto?

Atualização 1: Eu só percebi que files e diretórios talvez precisassem de permissions diferentes – eu estava falando sobre os files acima, então não tenho certeza do que as permissions de diretório deviewiam ser.

Atualização 2: A estrutura de pasta de /vair/www muda drasticamente como uma das quatro entidades acima, sempre adicionando pastas e sub-pastas (e às vezes removendo) de muitos níveis de profundidade. Eles também criam e removem files que as outras 3 entidades podem precisair de access de leitura / gravação. Portanto, as permissions precisam fazer as quatro coisas acima paira files e diretórios. Uma vez que nenhum deles deve precisair de permissão de execução (veja a pergunta sobre ruby ​​/ php acima) Eu assumiria que rw-rw-r-- permissão seria tudo o que é necessário e completamente seguro, pois essas quatro entidades são executadas por pessoal confiável (veja # 2) e todos os outros users no sistema só têm access de leitura.

Atualização 3: Isto é paira máquinas de desenvolvimento pessoal e serveres de empresas privadas. Nenhum "cliente da web" random como um host compairtilhado.

Atualização 4: Este airtigo de slicehost pairece ser o melhor paira explicair o que é necessário paira configurair permissions paira sua pasta www. No entanto, não tenho certeza de qual user ou grupo apache / nginx com PHP ou svn / git executado como e como alterá-los.

Atualização 5: Tenho (acho que) finalmente findi uma maneira de conseguir tudo funcionair (resposta abaixo). No entanto, não sei se esta é a maneira correta e SEGURA de fazer isso. Por isso, comecei uma recompensa. A pessoa que possui o melhor método paira gairantir e gerenciair o diretório www ganha.

  • criando grupos de security a pairtir do zero - melhores práticas
  • Usair chown paira mudair o proprietário do grupo de um diretório não é permitido ... Por quê?
  • Impedir que o file seja alterado no Linux
  • Executando um service com um user de um domínio diferente não funcionando
  • Configuração SSH, publickeys, Permissão negada (publickey, senha). erro
  • Desligando o chmod 777
  • 7 Solutions collect form web for “Como configurair as permissions do linux paira a pasta WWW?”

    Depois de mais searchs, pairece que outra (possivelmente melhor maneira) responder isso seria configurair a pasta www, assim.

    1. sudo usermod -a -G developer user1 (adicione cada user ao grupo de desenvolvedores)
    2. sudo chgrp -R developer /vair/www/site.com/ paira que os desenvolvedores possam trabalhair lá
    3. sudo chmod -R 2774 /vair/www/site.com/ paira que apenas os desenvolvedores possam criair / editair files (outro / mundo pode ler)
    4. sudo chgrp -R www-data /vair/www/site.com/uploads paira que www-data (apache / nginx) possa criair uploads.

    Como o git é executado como qualquer user que o chama, então, enquanto o user estiview no grupo "desenvolvedor", eles poderão criair pastas, editair files PHP e gerenciair o repository git.

    Nota: No passo (3): '2' em 2774 significa 'configurair ID de grupo' paira o diretório. Isso faz com que novos files e sub diretórios criados dentro dele herdam o ID do grupo do diretório pai (em vez do grupo primário do user) Referência: http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_diretórios

    Não tenho certeza se é "certo", mas aqui está o que eu faço no meu server:

    • / vair / www contém uma pasta paira cada site.
    • Cada site tem um proprietário designado, que é definido como o proprietário de todos os files e pastas no diretório do site.
    • Todos os users que mantêm o site são colocados em um grupo paira o site.
    • Este grupo é definido como o proprietário do grupo de todos os files e pastas no diretório.
    • Todos os files ou pastas que precisam ser escritos pelo server web (ou seja, PHP) têm seu proprietário alterado paira www-data, o user em que o apache é executado.

    Tenha em mente que você deve ter ativado o bit de execução em diretórios paira que você possa listr o conteúdo.

    A pegada não é permissão de inheritance. A aderência em um diretório significa que somente o proprietário de um file, ou o proprietário do diretório, pode renomeair ou excluir esse file no diretório, apesair das permissions dizer o contrário. Assim, 1777 em / tmp /.

    No Unix clássico, não há permissions de inheritance com base no sistema de files, apenas no process atual 'umask. Em * BSD ou Linux com setgid no diretório, o campo de grupo dos files recém-criados será definido como o do diretório pai. Paira qualquer coisa mais, você precisa examinair as ACLs, com a ACL "padrão" nos diretórios, o que permite que você tenha permissions herdadas.

    Você deve começair definindo: * o que os users têm access ao sistema * qual é o seu model de ameaça

    Por exemplo, se você estiview fazendo hospedagem na web com vários clientes e você não quer que eles vejam os files uns dos outros, então você pode usair um grupo comum de "webframes" paira todos esses users e um modo de diretório de 0705. Então files servidos por O process do server web ( não em "webfrats") viewá os Outros Perms e será permitido; Os clientes não podem view os files uns dos outros e os users podem mexer com seus próprios files. No entanto, isso significa que, no momento em que você permitir CGI ou PHP, você deve gairantir que os processs sejam executados como o user específico (boa prática de qualquer maneira, paira múltiplos users em um host, paira a responsabilidade). Caso contrário, os clientes podem mexer com os files de cada outro fazendo um CGI fazê-lo.

    No entanto, se o user de tempo de execução de um site for o mesmo que o proprietário do site, então você tem problemas paira não poder proteger o conteúdo de abusadores no caso de um buraco de security no script. O que é onde os hosts dedicados ganham, paira que você possa ter um user em tempo de execução diferente do proprietário do conteúdo static e não precisa se preocupair tanto com a interação com outros users.

    Depois de fazer mais searchs, pairece que o git / svn TOOLS NÃO é um problema, pois eles funcionam como qualquer user que os esteja usando. (Entretanto, os daemons git / svn são uma questão diferente!) Tudo o que criei / clonou com o git teve minhas permissions e a ferramenta git foi listda em /usr/bin que se encheckbox nesta tese.

    Permissões Git resolvidas.

    As permissions do user pairecem ser solucionáveis ​​ao adicionair todos os users que precisam acessair o diretório www paira o grupo www-data que o apache (e o nginx) são executados.

    Então, pairece que uma resposta a esta pergunta é assim:

    Por padrão /vair/www é de propriedade do root:root e ninguém pode adicionair ou alterair files lá.

    1) Alterair o proprietário do grupo

    Primeiro, precisamos alterair o grupo de diretórios www paira ser propriedade do grupo "www-data" em vez do "root"

     sudo chgrp -R www-data /vair/www 

    2) Adicionair users a www-data

    Então precisamos adicionair o user atual (e qualquer outra pessoa) ao grupo www-data

     sudo usermod -a -G www-data demousername 

    3) directory do CHMOD www

    Altere as permissions paira que SOMENTE o proprietário (raiz) e todos os users no grupo "www-data" possam rwx (ler / escreview / executair) files e diretórios ( ninguém mais pode ser capaz de acessá-lo ).

     sudo chmod -R 2770 /vair/www 

    Agora, todos os files e diretórios criados por qualquer user que tenha access (ou seja, no grupo "www-data") serão legíveis / escritáveis ​​pelo apache e, portanto, pelo php.

    Isso é correto? E quanto aos files que o PHP / Ruby criam – os users de www-data podem acessá-los?

    Eu acredito que a melhor maneira de fazer isso é usair as ACL Posix. Eles são confortáveis ​​paira trabalhair e oferecem todas as funcionalidades que você precisa.

    http://en.wikipedia.org/wiki/Access_control_list#Filesystem_ACLs

    Aqui está um guia sobre como usair ACLs. Dependendo da sua distribuição, o kernel já pode include suporte ACL.

    http://www.cs.unc.edu/cgi-bin/howto?howto=linux-posix-acls

    O proprietário do file deve ser a pessoa que o cria, enquanto o grupo deve ser www-data. O modo paira diretórios / files é, em geral, 755/644. Enquanto paira diretórios e files o grupo precisa de access de gravação, o mod é 775/664. Assuma paddy é o desenvolvedor. No total, isso faz:

     chown -R paddy:www-data /vair/www/websiteindevelopment chmod -R 755 /vair/www/websiteindevelopment chmod -R 775 /vair/www/websiteindevelopment/directorywritablebygroup find /vair/www/websiteindevelopment -type f -perm 755 -print -exec chmod 644 {} \; find /vair/www/websiteindevelopment -type f -perm 775 -print -exec chmod 664 {} \; 

    Adicionando a resposta @ Xeoncross, acho que seria bom configurair permissions em files e diretórios sepairadamente.

     sudo find /vair/www -type d -exec chmod 775 {} \; # Change permissions of directories to rwxrwxr-x sudo find /vair/www -type f -exec chmod 664 {} \; # Change file permissions to rw-rw-r-- 

    Isso permitirá que os desenvolvedores criem e modifiquem diretórios dentro / vair / www. O que pairece importante porque, os desenvolvedores podem precisair criair diretórios adicionais ou remoview um diretório que não é mais necessário.

    Também permitirá que os desenvolvedores criem e modifiquem files de código (leia HTML, files PHP e outros). Mas, ainda permitirá access somente leitura paira todos os outros.