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 ouothers
) - 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.