Qual é o risco associado ao configurar permissão de arquivo / diretório para 0777?

6

Atualmente, não estou conseguindo fazer upload de um arquivo para uma pasta da web. Não importa o que eu faça, mesmo configurando as permissões da pasta para 0777, não consigo carregar o arquivo para ele. Por curiosidade, procurei o risco associado ao definir as permissões de arquivo como 0777.

Encontrou uma pergunta aqui , mas não tinha a resposta que eu estava procurando.

Eu estou completamente inconsciente neste assunto. Quais são os riscos associados?

    
por Starx 19.04.2011 / 14:33

4 respostas

7

A configuração de 0777 em um folder (e estou falando de uma pasta aqui, não de um arquivo) não envolve riscos de segurança de execução, como alguns afirmam.

Execute is needed on a directory to access the inode information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.

Veja o link

Os riscos são:

  • qualquer pessoa pode ler arquivos nesta pasta (desde que o próprio arquivo tenha a permissão r no usuário / grupo que está tentando lê-lo ou others )
  • qualquer pessoa pode criar arquivos nesta pasta (e, opcionalmente, executá-los, mas apenas aqueles criados por esse usuário específico)
  • qualquer pessoa pode excluir arquivos pertencentes a outras pessoas nesta pasta (seus arquivos não estão protegidos, seja qual for o proprietário / permissão que tenham)

Se você quiser proteger alguns arquivos, você tem que criar outra pasta com permissões "normais" (rw para você apenas, ou rw para você e seu grupo) e colocar seus arquivos nela.

Por outro lado, ninguém poderia transformar um arquivo não executável em executável (chmod não é permitido se você não possui o arquivo).

Quais são os riscos?

Algumas pessoas acham que o 0777 é herdado por todos os arquivos da pasta. Isso está errado . Você não pode editar um arquivo se não tiver a permissão w apenas porque sua pasta pai é 0777. Você não pode ler um arquivo se ele não tiver a permissão r .

Como protegê-lo?

Se você tiver acesso a algum shell ou se o seu cliente FTP permitir que você altere o proprietário dos arquivos e você souber de qual proprietário você precisa, crie a pasta e defina seu proprietário para o processo do apache (geralmente, nobody , daemon ou apache ) e apenas definir 0700 permissões. O problema é que outros usuários, como você ao navegar usando seu cliente FTP, não poderão ler os arquivos criados posteriormente pelo PHP, o que não é necessariamente um problema.

OK, mas e os arquivos?

Não estou falando sobre os riscos inerentes à files execução porque não há motivo para você querer forçar a permissão x em um arquivo que não deve ser executado em primeiro lugar.

Se algum aplicativo da web precisar gravar em um arquivo existente, configurá-lo como 0666 (ou 0600 se o proprietário for o usuário do apache) é suficiente.

    
por 19.04.2011 / 14:59
2

Todos que têm acesso à pasta (ou seja, a permissão x em todas as pastas do caminho) podem ler, modificar e executar o arquivo.

Se for algo realmente executável, há um alto risco de usuários mal-intencionados adicionarem códigos inválidos e esperar que você os execute para fazer algum código maligno (como criar uma cópia de bash definida como setuid e executável pelo atacante).

Se você estiver em hospedagem compartilhada, verifique se 0770 não é suficiente - se o seu usuário de FTP estiver no mesmo grupo que o servidor web, será suficiente. Nesse caso, os riscos mencionados acima geralmente não se aplicam, já que você nunca executará coisas em uma pasta de destino de upload e o PHP tem open_basedir para impedir que outros usuários acessem seus arquivos. No entanto, se o host também suportar script CGI (por exemplo, usando Perl), isso pode ser facilmente contornado.

    
por 19.04.2011 / 14:38
0

Provavelmente não estou respondendo a sua pergunta sobre os riscos, mas posso imaginar por que você não pode escrever.

Provavelmente a pasta pai não tem acesso de gravação para esse usuário ...

use algo na linha de chmod ugo+w whateverfile na pasta pai de forma recursiva até poder criar arquivos:

    
por 19.04.2011 / 14:40
0

Supondo que você já descartou algumas configurações básicas de segurança do PHP (open_basedir restrictions et al) - a depuração e error_reporting(E_ALL); (certifique-se de registrar erros em vez de exibi-los em sistemas de produção) são bastante úteis para verificar isso: p.

Se você definir as permissões de pasta como 777 (gravável pelo mundo) e um processo ainda não puder gravar nessa pasta, pode haver uma implementação de MAC em execução que impeça exatamente esse tipo de coisa (o SELinux ou o AppArmor provavelmente são candidatos você está usando o Linux). Se for esse o caso, alterar as políticas que eles impõem ajudará a resolver esse problema. Definir uma pasta mundialmente gravável é um possível problema de segurança (especialmente quando a pasta em questão é exposta ao mundo externo) e também pode ser evitada.

    
por 19.04.2011 / 15:16