⚠
WARNING
⚠Esse é um risco de segurança inerente e tem um lote de potencial para ir para o sul a qualquer momento. Eu recomendaria muito contra essa configuração, mas tudo bem.
Não me responsabilizo por nada que aconteça como resultado de você ter seguido algo fornecido neste post, nem aconselho você a seguir este sistema. Isso é principalmente para fins educacionais / de pesquisa.
O Linux tem algo conhecido como setuid
que permite que qualquer programa (como sudo
) seja executado com privilégios maior que o atual usuário em execução. Você pode escrever um script de shell para fazer tudo o que precisa.
A partir daí, porque os scripts de shell não podem ser setuid
, você precisa converter isso em um binário. Você pode usar algo como shc
para isso.
Uma vez que você tenha seu pseudo-binário do shell (nome do exemplo: bootstrap_user
) contendo tudo o que você precisa, você pode fazer algumas alterações divertidas para prepará-lo. Ou seja, isso:
-
Defina a propriedade
root
e o grupowww-data
.chown root:www-data ./bootstrap_user
-
Atribua permisses RWX para proprietrio (raiz), leia e execute para grupo, nenhum para ningum:
chmod 750 ./bootstrap_user
-
Mova o binário para algum lugar em que o PHP possa
exec()
it. -
Por fim, adicione o
setuid
bit a ele, para que ele seja executado como root:chmod u+s ./bootstrap_user
Em PHP, você pode agora chamar bootstrap_user
como seu executável, passando quaisquer parâmetros requeridos. Certifique-se de ter cuidado para escapar e higienizar a entrada.