Você pode fazer com que seu script PHP crie um arquivo contendo as informações do usuário sem exigir acesso root. Esta informação deve ser criptografada para que não fique nada nua.
Em seguida, você pode ter um script bash com acesso root, que monitora o diretório em que as novas informações de usuário serão criadas pelo seu script PHP. se um novo arquivo existir, ele descriptografa e cria o novo usuário e, em seguida, exclui o arquivo após a criação bem-sucedida do usuário (por isso, ele não fica lá depois de ter sido concluído). Você gostaria que ele fosse muito preciso sobre quais dados seu script bash procura e aceita. Além disso, certifique-se de higienizar todos os campos no formulário do usuário para minimizar a chance de injeção de código mal-intencionado.
Eu não usei, mas o inotify parece ter sido projetado para essa finalidade.
link
Dessa forma, nada está acessando diretamente sua área raiz e você pode limitar o script bash a ser executado apenas se condições específicas forem atendidas, como quando um novo arquivo é criado, passa uma verificação de hash criada por seu script e contém os dados esperados. .. Deixe-nos saber como funciona e esperamos receber mais informações sobre a maneira mais segura de fazer isso.
Edit: Parece que o evento que você pode querer usar para inotify é IN_CREATE, que atuará quando um arquivo for criado no diretório assistido. Navegue pelo manual e tenho certeza de que você descobrirá uma maneira de fazer isso.
link
Edit: Você também pode ter um único arquivo aberto e editado pelo script PHP. Você definitivamente tem opções aqui, mas não posso fingir saber qual é o melhor método.