В своей программе вы, вероятно, не позаботились о том, чтобы для реального и эффективного uid было установлено одно и то же значение. Gids также должны соответствовать gid root. Примерно так:
setuid(geteuid());
setgid(getegid());
См., Например, sue
(простая оболочка setuid / setgid).
Вы не можете использовать mkfifo
для копирования или перемещения файлов, нет. mkfifo
создает именованный канал. Вы можете использовать канал для организации передачи данных в другое место, и иногда именованный канал является единственным или более удобным способом. Некоторые решения, использующие mkfifo
, можно найти на этом сайте . Но канал обычно бесполезен, если вы только хотите, чтобы данные заканчивались в другом месте :, для этого достаточно перенаправления.
Если вы хотите извлечь файлы из tar-архива и поместить их в место, отличное от пути внутри архива, именованные каналы вам совсем не помогут. Вместо этого используйте параметр --transform
GNU tar или параметр -s
BSD tar или pax, чтобы переписать пути к файлам во время извлечения.