tftpd é executado como root, apesar da opção explícita “--user tftp”

2

Eu inicio meu tftp server com a opção --user tftp para que ele seja executado como usuário tftp em vez de root. No entanto, ps mostra que o processo ainda é executado como root

ps aux| grep tftp
root      2542  0.0  0.0  14856   324 ?        Ss   Jan11   0:00 /usr/sbin/in.tftpd --listen --user tftp -vvvvv -s -p --ipv4 /srv/tftp

man tftpd diz que:

--user username, -u username
    Specify  the username which tftpd will run as; the default is "nobody".  
    The user ID, group ID, and (if possible on the platform) the supple‐
    mentary group IDs will be set to the ones specified in the system 
    permission database for this username.

O usuário tftp existe no meu sistema:

getent passwd | grep tftp
tftp:x:104:108:tftp daemon,,,:/srv/tftp:/bin/false

O que poderia estar errado?

    
por Martin Vegter 01.02.2014 / 18:53

1 resposta

4

A partir do código-fonte, parece que o daemon TFTP somente libera privilégios de root após uma conexão ter sido feita.

Editar

No tftpd.c, em certo ponto há um

while (1) {

linha e, na parte inferior do loop, um processo filho é bifurcado:

    /*
     * 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 */

No código a seguir, em um certo ponto, a chamada setuid é feita para eliminar privilégios de root

    
por 01.02.2014 / 20:22