Como posso alterar o proprietário de um processo?

Como posso alterar o proprietário de um processo?

Olá, acabei de concluir um teste técnico no Ubuntu e me deparei com um problema em que precisei alterar o usuário do processo PHP para consertar um site quebrado. Acredito que o usuário era "foo", mas precisava ser "www-data". No final me disseram que "chown the process" era a solução, só quero saber como fazer isso para referência futura.

Da mesma forma que você escolheria o usuário de um arquivo (presumo), mas apenas para um processo. Eu procurei e procurei, mas me pergunto se estou procurando o comando errado? Ou isso seria alterado em um arquivo de configuração em algum lugar, talvez?

Desde já, obrigado!

Responder1

Não é possível alterar externamente o usuário ou grupo de um processo em execução no Linux. O que você pode fazer é alterar a configuração do que estiver executando para usar o novo usuário na próxima vez que for executado. Isso depende de como você instalou e configurou o PHP (ou melhor, o que quer que esteja executando o PHP para você - apache, php-fpm, etc.).

Responder2

Você não pode fazer isso cara, se você puder gentilmente compartilhar conosco. verifique este link: https://stackoverflow.com/questions/37401774/change-owner-of-a-currently-running-process

Responder3

Na verdade, esta é uma falha de design do kernel do Linux, pois as alterações de credenciais ocorrem apenas no disco, mas não na memória. Especificamente, quando as credenciais (UID, GID ou lista de grupos suplementares) são alteradas, todos os processos existentes continuarão a usar suas credenciais anteriores e a desfrutar do acesso aos dados concedidos anteriormente. E não existe uma única função de API para propagar alterações de credenciais em todo o sistema (ou seja, em todos os processos). Como resultado desse defeito, nenhum programa de nível de usuário pode fazer o que você deseja. Você precisa de um módulo do kernel para fazer isso. Acabei de tentar fazer um e funciona em programas simples. (https://github.com/xuancong84/supgroup)

No entanto, em geral, não é uma boa ideia fazer isso porque, em geral, um programa pode ter muitas interações, por exemplo, identificadores de arquivos abertos, processos/threads filhos em execução em outros núcleos da CPU, pipes vinculados, dispositivos abertos, etc. alterar o UID/GID durante a execução pode levar a muitos comportamentos indefinidos, entre os quais alguns podem causar erros (por exemplo, tubo quebrado, comunicação de E/S abortada), alguns podem ser perigosos (por exemplo, falha do sistema). Eu testei que este programa funciona em programas simples (como nc -l 8080), mas em um programa muito maior e complexo executando muitos threads em muitos núcleos de CPU e núcleos CUDA de GPU, com intensa atividade de rede e atividade de E/S de disco, não tenho certeza do que acontecerá.

informação relacionada