От исходного кода казалось бы, что демон TFTP только отбрасывает полномочия пользователя root после того, как связь была установлена.
Править
В tftpd.c в определенный момент существует a
while (1) {
строка, и у основания цикла дочерний процесс разветвлена:
/*
* Now that we have read the request packet from the UDP
* socket, we fork and go back to listening to the socket.
*/
pid = fork();
if (pid < 0) {
syslog(LOG_ERR, "fork: %m");
exit(EX_OSERR); /* Return to inetd, just in case */
} else if (pid == 0)
break; /* Child exit, parent loop */
}
/* Child process: handle the actual request here */
В коде, который следует в определенный момент setuid
вызов сделан для отбрасывания полномочий пользователя root
Это делается самим ack
. ack
проверяет, подключен ли его стандартный выход к терминалу, и если нет, то печатает вывод в другом формате. Я думаю, что этот формат был выбран потому, что его легче обрабатывать приложениями, предназначенными для обработки текста (например, grep
или ack
).