1

Я хочу изменить сетевые конфигурации, такие как DHCP, IP-адрес и т.д. Программно.

Но я не хочу запускать мое приложение от имени пользователя root. Итак, мой вопрос: каков общий подход к решению этой проблемы? Это вообще возможно?

Может быть, есть какая-нибудь группа, которой разрешено делать это без получения каких-либо других прав? Или я должен «разбить» файлы конфигурации на специальную группу и добавить пользователя в эту группу?

В связи с этим (если это не по теме, скажите мне, и я открою еще один вопрос): цель - встроенное устройство, и приложение должно быть единственным, доступным для пользователя. Есть ли хорошая (лучшая) практика? Должен ли я создать специального пользователя для этого приложения. Любые советы приветствуются.

3 ответа3

1

Если вы используете NetworkManager на своем компьютере, вы можете использовать NM-CLI.

nmcli - это инструмент командной строки для управления NetworkManager и получения его статуса. Это не подразумевается как замена nm-апплета или других подобных клиентов. Скорее, это дополнительная утилита для этих программ. Основное использование nmcli - на серверах, безголовых компьютерах или просто для опытных пользователей, предпочитающих командную строку.

   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.
1

Вы можете установить возможности в вашей программе. Это позволило бы ему выполнять определенные привилегированные задачи без необходимости полного запуска от имени пользователя root . Рассматриваемая возможность здесь 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.

Вы найдете больше информации о возможностях в man-страницах functions (capabilities(7) и setcap(8) .

Чтобы обеспечить это еще больше, в случае, если вам нужно только определенное подмножество пользователей, чтобы иметь возможность запускать эту программу, вы можете поместить этих пользователей в группу, chgrp вашу программу в эту группу и chmod ее до 0750 .

0

Если ваше целевое устройство поддерживает его, возможно, стоит использовать механизм setuid

http://en.wikipedia.org/wiki/Setuid

Некоторым программам нужны привилегии суперпользователя, и что вы делаете с setuid, так это то, что исполняемый файл принадлежит корню и имеет установленный бит setuid, поэтому, когда другой пользователь выполняет его, исполняемый файл запускается с привилегиями root.

Но также обратите внимание, что

Из-за потенциальных проблем безопасности многие операционные системы игнорируют атрибут setuid при применении к исполняемым сценариям оболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .