Как следует из названий цепочек, PREROUTING
выполняется сначала при получении пакета и, таким образом, маршрутизируется в зависимости от того, куда он идет (пункт назначения). После применения всех остальных правил маршрутизации цепочка POSTROUTING
определит, куда она идет, в зависимости от того, откуда она пришла (источник).
Например, на моем сервере все входящие порты, которые должны быть переадресованы (NAT), определены в цепочке PREROUTING
как DNAT
, а все пакеты, которые приходят из NAT, интерфейсы, пройти через цепочку POSTROUTING
как SNAT
, и, следовательно (в данном случае), пройти через цепочку фильтра FORWARD
.
В своей программе вы, вероятно, не позаботились о том, чтобы для реального и эффективного uid было установлено одно и то же значение. Gids также должны соответствовать gid root. Примерно так:
setuid(geteuid());
setgid(getegid());
См., Например, sue
(простая оболочка setuid / setgid).
Томас Дики абсолютно прав. Однако не делайте этого. Вместо этого используйте sudo
.
Создайте /etc/sudoers.d/change_root_pass
YOURUSERNAME ALL = (ALL) passwd root
(измените ИМЯ ПОЛЬЗОВАТЕЛЯ).