Altere as configurações de rede programaticamente sem raiz

1

Eu quero alterar configurações de rede como dhcp, endereço IP e assim por diante programaticamente.

Mas o que eu não quero, é rodar meu aplicativo como root. Então, minha pergunta é: o que seria uma abordagem comum para resolver isso? Isso é possível?

Existe algum grupo que tenha permissão para fazer isso sem obter outros direitos? Ou eu deveria "chown" os arquivos de configuração para um grupo especial e adicionar o usuário a esse grupo?

Relacionado com isso (Se isso estiver fora do tópico, diga-me e eu abrirei outra pergunta): O destino é um dispositivo incorporado e o aplicativo deve ser o único acessível pelo usuário. Existe alguma boa (melhor) prática? Devo criar um usuário especial para esse aplicativo. Qualquer sugestão é apreciada.

    
por exilit 26.03.2014 / 17:31

3 respostas

1

Você pode definir recursos em seu programa. Isso permitiria executar certas tarefas privilegiadas sem a necessidade de executar completamente como root . A capacidade em questão aqui é CAP_NET_ADMIN :

CAP_NET_ADMIN
    Perform various network-related operations:
     * interface configuration;
     * administration of IP firewall, masquerading, and accounting;
     * modify routing tables;
     * bind to any address for transparent proxying;
     * set type-of-service (TOS)
     * clear driver statistics;
     * set promiscuous mode;
     * enabling multicasting;
     * use  setsockopt(2)  to set the following socket options: SO_DEBUG, SO_MARK,
       SO_PRIORITY (for a priority outside the range 0 to 6), SO_RCVBUFFORCE,  and
       SO_SNDBUFFORCE.

Você encontrará mais informações sobre os recursos nas páginas de manual capabilities(7) e setcap(8) .

Para garantir isso ainda mais, caso você precise apenas de um subconjunto específico de usuários para executar este programa, você pode colocar esses usuários em um grupo, chgrp seu programa neste grupo e chmod em 0750 .

    
por 26.03.2014 / 19:30
1

Se você estiver usando o NetworkManager no seu computador, poderá usar NM-CLI .

nmcli is a command-line tool for controlling NetworkManager and getting its status. It is not meant as a replacement of nm-applet or other similar clients. Rather it's a complementary utility to these programs. The main nmcli's usage is on servers, headless machines or just for power users who prefer the command line.

   The use cases comprise:

   --  Initscripts: ifup/ifdown can utilize NetworkManager via nmcli
       instead of having to manage connections itself and possible
       interfere with NetworkManager.

   --  Servers, headless machines: No GUI is available; then nmcli is used
       to talk directly to NetworkManager and control only system-wide
       connections.

   --  User sessions: For this case, nmcli can talk to nm-applet to find
       user connections.  It can still talk directly to NetworkManager for
       manipulating these connections.  As nmcli doesn't have direct
       access to user configuration data in GConf, nm-applet handles that
       itself.  That may, for example, cause the applet to pop up keyring
       dialogs when secrets are needed.
    
por 26.03.2014 / 17:53
0

Se o seu dispositivo alvo suportar, o mecanismo setuid pode ser o caminho a seguir

link

Alguns programas precisam de privilégios de root, e o que você faz com o setuid é que o arquivo executável pertence ao root e tem o conjunto setuid-bit, então quando outro usuário o executa, o executável é executado com privilégios de root.

Mas também note que

Due to potential security issues, many operating systems ignore the setuid attribute when applied to executable shell scripts.

    
por 26.03.2014 / 17:44