Em primeiro lugar, não entendo o comando sudo que você está executando. sudo -u username
deve permitir que você, como usuário um, suote um comando como usuário dois, dizendo (como usuário um, neste exemplo, para executar o comando ls):
sudo -u usertwo ls
Peço desculpas se você tentou limpar seus comandos acima substituindo username
pelo nome de usuário real, mas não posso ter certeza de que fez isso, por isso preciso levantar este ponto primeiro.
Em segundo lugar, o sudo precisa ser configurado para permitir que um usuário execute uma série de comandos como outro usuário. Vamos começar permitindo que www-data sudo o comando ls como fribble do usuário; você poderia testar isso colocando
www-data ALL = (fribble) NOPASSWD: ls
no seu arquivo sudoers (substituindo um usuário real por fribble). Em seguida, tente fazer, digamos, ls -la /tmp
de dentro do seu script PHP e veja se você obtém uma listagem de diretórios.
Concordo com James Lawrie que não é uma boa ideia permitir que o usuário do www-data suponha comandos arbitrários, como usuários arbitrários, sem senha, mas se você esclarecer quais comandos você está tentando executar www-data, essa pode ser uma maneira sensata de fazer isso.
Editar:
você tentou com ls no arquivo sudoers e sudo -u user2 ls -al /tmp
no script PHP, e você obtém uma lista de diretórios, o que sugere strongmente que o sudo funciona bem com o PHP.
Para ter certeza, você poderia permitir /bin/touch
no arquivo sudoers, colocar sudo -u user2 touch /tmp/TESTFILE
no script PHP e depois executá-lo? Se um arquivo /tmp/TESTFILE
aparecer, de propriedade de user2, podemos ter certeza de que o sudo e o PHP funcionam bem juntos.
Devo confessar que se eu soubesse que você estava tentando sudo java, eu nunca teria respondido a pergunta original, porque eu acho que o java é um saco gigantesco e imprevisível de porcaria, que se comporta como um bebê completo se não t obter o ambiente que requer (e sudo higieniza rigorosamente o ambiente). Mas pelo menos o teste acima deve ajudá-lo a ter certeza de que, qualquer que seja o problema aqui, não é um problema com o PHP e o sudo não estarem funcionando bem juntos.