De sua saída, parece que está acontecendo o seguinte:
- Seu aplicativo está sendo executado como root.
- É capaz de mudar grupos para um grupo com menor privilégio
- Ele está tentando mudar para um usuário com privilégios mais baixos, mas está falhando.
Primeiro, seteuid como o conjunto de syscalls define o errno que informará o erro real. É melhor imprimir isso como parte de sua mensagem de erro para obter o motivo real da falha.
No entanto, é mais provável que seja um erro de permissão. Erros de permissão, tanto quanto você pode dizer que eles têm permissão para fazer a ação (que é estranho como root, uma vez que eles deveriam ser capazes de fazer qualquer coisa) é uma indicação de que o selinux (ou serviço semelhante como apparmour) está funcionando. Eles são os únicos serviços que eu conheço que podem bloquear o usuário root de alguma ação.
A maneira mais rápida de saber se o selinux está errado (não estou tão familiarizado com o apparmour) é verificar se ele está ligado (isto é, "forçando")
sestatus
e, em seguida, verificar negações de avc no log de auditoria
sudo grep avc /var/log/audit/audit.log
Se isso retornar alguma coisa, o selinux está bloqueando alguma coisa. Você pode provar que é selinux definindo temporariamente ti como permissivo com o seguinte
sudo setenforce 0
Se você agora é capaz de fazer o que você precisa, então é definitivamente selinux. Você tem duas opções agora; permanentemente definido o selinux como permissivo reduzindo a segurança do seu sistema (desencorajado) ou gerando as regras exigidas pelo seu aplicativo .