O Apache é executado como um usuário específico (geralmente httpd), mas dependendo de como ele é configurado, o PHP pode ser executado como o mesmo ou um usuário diferente:
- Se o PHP for executado como um módulo, ele será o mesmo usuário que o Apache.
- Se o PHP for executado como um CGI (muito incomum), ele geralmente será executado como o mesmo usuário, a menos que o Apache esteja configurado para usar o suexec (nesse caso, o usuário estará na configuração).
- Se o PHP for executado como FastCGI, ele será executado como qualquer usuário que tenha sido configurado para ser executado como.
Isso é ainda mais complicado pelo suPHP, que é semelhante à situação com o CGI, exceto que o script é executado com o próprio arquivo de script.
As restrições aqui são:
-
Os dirs / files graváveis pelo servidor web uid (e o uid do PHP) devem ser muito limitados e onde eles são graváveis, considerações especiais devem ser feitas para evitar ataques de injeção de código.
-
Normalmente, os usuários normais não podem gravar arquivos como um uid diferente - e presumivelmente os arquivos de código PHP precisam ser mantidos (isto é, graváveis pelos usuários.
Note que se um arquivo PHP é executável pelo servidor da Web, não tem nada a ver com o bit executável em um arquivo (mas tem muito a ver com o bit executável no diretório que o contém).
Should I put the FTP user and the apache server into a group?
Provavelmente não. Eu recomendaria tratar o servidor / PHP como "outro" - para que qualquer conteúdo (incluindo PHP) seja acessível pelo servidor web, as permissões devem ser:
- usuário: leia, escreva
- group: depende da sua política
- outro lido
, ou seja, 0644 (como as permissões executáveis acima não são relevantes) e para diretórios:
- usuário: leia, escreva, execute
- group: depende da sua política
- outro: leia, execute
i.e. 0755