posix_setuid(1500)
altera apenas o UID para 1500. Isso não lhe dá permissão para acessar o arquivo. O motivo pelo qual você pode acessar o arquivo quando está logado como usuário regular é que você não tem apenas o UID 1500, mas também o grupo 1500 e os grupos suplementares 27 e 33. Ter o grupo suplementar 33 ( www-data
) é o que faz com que você tenha acesso ao arquivo.
Você provavelmente deveria estar fazendo isso:
posix_initgroups("jonny", 1500);
posix_setuid(1500);
O pedido é importante: depois que você abrir mão da permissão do root chamando posix_setuid
, não poderá mais definir suas credenciais para que não funcionem no outro pedido.
Note que a documentação para posix_initgroups
provavelmente está errada (como muitas coisas na Mundo PHP). Ele diz que "Calcula a lista de acesso do grupo", mas eu acho que ele realmente se comporta como a função POSIX que ele referencia, o que, se verdadeiro, significaria que ele não apenas o calcula, mas o configura.