Com base no nome do arquivo RecvRawEth.c
que você postou no seu comentário acima, acredito que você esteja tentando usar soquetes brutos ( SOCK_RAW
). Este sempre requer que o programa seja executado como root porque os sockets raw têm o potencial de permitir que você ignore outros mecanismos de segurança, como a restrição em portos privilegiados .
Você realmente deve repensar este aplicativo. Muito poucos programas legitimamente requerem soquetes brutos. Há quase sempre uma maneira melhor.
Você está lançando pelo menos dois problemas adicionais no mix, que realmente é não é no Stack Exchange digite sites, mas vou abordá-los de qualquer maneira:
-
setuid
root
Você está tentando contornar a restrição de soquetes brutos marcando-o para ser executado como
root
, independentemente de quem realmente o tenha iniciado. Você está potencialmente abrindo um ou mais buracos de segurança ao fazer isso. Confie em mim: décadas de história do Unix nos dizem que complicados programas setuidroot
provavelmente terão problemas exploráveis. Pode levar muitos anos para encontrar e extirpar todos eles.Se você absolutamente precisa usar sockets raw e, assim, precisar de algum elemento do programa para ser executado como root, é melhor escrevê-lo como um scope limitado daemon . Ou seja, torne o programa o menor possível, fazendo apenas o mínimo absoluto que você deve fazer como
root
, mais o que for necessário para exportar as informações resultantes para um programa que esteja sendo executado com privilégios normais. -
Iniciar na inicialização
Se você criar um daemon, configurá-lo para ser executado na inicialização do sistema é trivial. Qualquer tutorial decente mostrando-lhe como criar um daemon irá para isso. No Ubuntu, acredito que isso signifique lidar com
systemd
.Quanto à parte da GUI, basta adicioná-la à inicialização da sessão .