Como executo um programa como ninguém?
Pergunta
Quero que um processo com privilégios de usuário (não root) inicie novos processos como usuário nobody
.Eu tentei uma ligação direta para setuid
que falha com -1 EPERM
sobre Ubuntu 8.04
:
#include <sys/types.h>
#include <unistd.h>
int main() {
setuid(65534);
while (1);
return 0;
}
Como devo fazer isso?
Solução
Você vai requerem assistência e muita confiança do administrador do sistema.Usuários comuns não são capazes de executar o executável de sua escolha em nome de outros usuários, ponto final.
Ela pode adicionar sua inscrição a /etc/sudoers
com as configurações adequadas e você poderá executá-lo como sudo -u nobody
.Isso funcionará tanto para scripts quanto para executáveis binários.
Outra opção é que ela faça chown nobody
e chmod +s
em seu executável binário e você poderá executá-lo diretamente.Esta tarefa deve ser repetida sempre que seu executável for alterado.
Isso também pode funcionar para scripts se você criar um pequeno executável auxiliar que simplesmente faça exec("/home/you/bin/your-application")
.Este executável pode ser transformado em suid-nobody (veja acima) e você pode modificá-lo livremente your-application
.
Outras dicas
Até onde eu sei, você não pode, a menos que seja root ou tenha o sudo configurado para permitir a troca de usuários.Ou você pode fazer com que seu executável tenha o bit suid configurado e não seja de propriedade de ninguém.Mas isso também requer acesso root.
O usuário 'ninguém' ainda é um usuário.Não tenho certeza de qual é o seu raciocínio ao fazer o programa ser executado como ninguém, pois isso não adicionará nenhuma segurança adicional.É mais provável que você se abra para outros problemas.
Eu seguiria a recomendação do squadette de usar um aplicativo auxiliar.
calife
é uma alternativa para sudo
.
Calife é um pequeno programa que permite que um administrador de sistema UNIX se torne root (ou outro usuário) em suas máquinas sem fornecer a senha de root, mas a sua própria.
Eu corri pelo setuid-sandbox projeto hoje enquanto leio LWN, que faz o que procuro da maneira correta.