Есть программа работающая с цепочкой mangle iptables. При запуске правило устанавливается, при завершении удаляется. Для работы с mangle нужер рут, но в целях безопастности программа должна иметь полный доступ только когда это абсолютно неообходимо.На ум пришло только одно. На исполняемый файл устанавливаю suid флаг и после запуска программы, когда mangle iptable уже принят системой, сбрасываю рут привелегии следующим образом:
setuid(getuid());
Проблемма заключается в том, что при завершении программа должна убрать установленное правило. Но тк рут уже сброшен это сделать невозможно.
Может быть вы способ возвращения рут привелегий? setuid(0) естественно не работает :)
Запуск под рутом -> форк -> родитель waitpid(), потомок setuid(). по завершению как потомок отомрет родитель приберет за ним. :)
Хм, спасибо за идею. Только у меня треды в приложении, аналога waitpid для phtread случайно не знаете?
аналог - pthread_join.
не вижу оснований для беспокойства - в начале приложения до создания тредов - форк, потом треды.