Isso é muito parecido com a minha pergunta "Executar cgi-script em linha de comando como usuário www? " (FreeBSD).
Aqui está o problema: O usuário '_www' tem um shell definido como /usr/bin/false
. De acordo com a manpage "A falsa utilidade sempre sai com um código de saída diferente de zero". su _www
sempre falhará, por design.
Isso é feito por motivos de segurança. Se alguém conseguir executar com sucesso uma exploração remota contra _www, qual conta é usada para executar seus aplicativos da Web, eles encontrarão um shell que sai imediatamente. Se este shell fosse deixado como algo como /bin/sh
, então o usuário _www seria capaz de executar muitos comandos na linha de comando, e isso seria ruim para a segurança. Portanto, é definido como /usr/bin/false
para limitar os danos causados por qualquer comprometimento em seu servidor da web. Não é aconselhável desabilitar isso.
No entanto, definir o shell _www como /usr/bin/false
também significa que o usuário '_www' não pode executar comandos na linha de comando. Mesmo um comando simples como whoami
falhará:
# su _www whoami
# echo $?
1
A solução também usa sudo
, não su
. Este exemplo simples mostra que agora posso executar comandos simples, como usuário '_www':
# sudo -u _www id
uid=70(_www) gid=70(_www) groups=70(_www)
Você também precisará garantir que o usuário _www possa ler o arquivo. Mas se você é capaz de executar este arquivo usando o servidor web Apache, então as permissões já estão corretas.