Não é possível gravar um arquivo quando estiver no mesmo grupo usando PHP posix_setuid ()

0

Estou executando um processo PHP a partir do root que chama posix_setuid(1500); e depois tenta abrir um arquivo output.log

O ls -l output.log mostra esta saída:

-rwxrwxr-x 1 www-data www-data 2294376 Mar 19 12:05 output.log

O comando id da minha conta de usuário (jonny) mostra esta saída:

uid=1500(jonny) gid=1500(jonny) groups=1500(jonny),27(sudo),33(www-data)

Mesmo depois de mudar o uid para jonny, por que o processo PHP não é capaz de gravar no arquivo output.log?

    
por user5858 19.03.2015 / 07:47

1 resposta

1

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.

    
por 19.03.2015 / 07:56

Tags