Ter daemons, por exemplo, um servidor da Web, executado como um usuário não-raiz, oferece uma camada de proteção se esse executável específico for comprometido. (Observe que os servidores "bifurcação", como apache
, têm um processo executado como subprocessos root e worker que não. Isso é necessário para que apache
possa se vincular a um número de porta privilegiado (< 1024).)
Se o seu servidor da web for apache
, por exemplo, e for executado como www-data:www-data
, alguém que encontrar e aproveitar uma exploração poderá ter os mesmos privilégios que o usuário www-data
ou www-data
. Ele também pode acessar somente os arquivos de propriedade de www-data
user, de propriedade do grupo www-data
, ou do mundo legível / gravável / executável.
Ter scripts PHP modificáveis (por exemplo, permissão de gravação) por www-data
significaria que um invasor que acessasse o daemon HTTP poderia substituir esse script por qualquer código que desejasse. Os scripts PHP não devem precisar ser modificáveis por www-data
, a menos que sejam gravados incorretamente ou não sejam executados no contexto de um servidor da Web (o que é raro).
Você pode querer certos diretórios modificáveis se o aplicativo salva dados ou usa o sistema de arquivos. Eu costumo ligar simbolicamente a algo fora do sistema de arquivos principal. Mesmo assim, para uma segurança completa, você não quer que www-data:www-data
seja capaz de escrever novos arquivos em qualquer coisa que seu daemon HTTP chame de PHP. apache
, através do uso de .htaccess
files e <Directory>
stanzas nos arquivos de configuração pode ser configurado para não executar o PHP em certos diretórios - se você quiser ser realmente abrangente sobre isso.