system () будет работать вместе с setuid (), но это проблема: серьезная угроза безопасности. Проблема в том, что system () запускает оболочку (bash, sh и т. Д.), Используя любую среду, и когда вы намереваетесь запустить «iptables», мой PATH может указывать на мою собственную версию iptables, которую я легко могу убедить вас бежать за мной, как root. Вы можете решить эту проблему, используя полный путь к iptables, но можно использовать другие переменные окружения (например, LD_PRELOAD_PATH), чтобы убедить инструменты загружать мошеннические разделяемые библиотеки - опять же, запускать вещи как root, которые не были предназначены.
Для того, что вам нужно сделать, безопасно, вы должны использовать одно из семейств exec (), и вы должны контролировать его операционную среду. Все остальное просит о нарушении безопасности. http://pubs.opengroup.org/onlinepubs/009695399/functions/environ.html - хорошее место, чтобы узнать больше.