Como executar o tnftpd sem raiz no OS X?

2

Estou tentando executar tnftpd no OS X, que é o servidor FTP do NetBSD e costumava ser o servidor FTP do OS X. Eu construí e instalei a partir de fontes da Apple . Infelizmente, parece que não posso executar o servidor sem privilégios de root. Estas foram minhas abordagens até agora para fazer o servidor funcionar sem privilégios de root:

  • Tentei alterar o número da porta por meio da opção -P , para garantir que não usa portas privilegiadas.
  • Eu tentei brincar com arquivos de configuração, como ftpd.conf e ftpusers .
  • Eu também tentei a opção -r (que não permite privilégios de root uma vez usuário efetua login).

Todas essas tentativas foram em vão.

Alguns exemplos para ilustrar minhas tentativas:

$ ftpd -lnD  # exit code is 0, but 'ps' shows no server running
$ ftpd -lnDr # supposed to drop root privileges, but same as above
$ # let's try running on a different port...
$ ftpd -lnDr -P 50001 # exit code still 0, but no dice

No entanto, se eu tentar algo assim (este é um cenário em que não tenho configurações personalizadas):

$ sudo ftpd -lnD
Password:
$ ps aux | grep -i ftpd
root            21998   0.0  0.0  4298888    720   ??  Ss   10:41PM   0:00.00 ftpd -lnD

Eu não tenho problemas.

Como posso executar o servidor tnftpd sem privilégios de root? É mesmo possível?

    
por GDP2 11.10.2017 / 04:51

1 resposta

1

De acordo com a página man tnftpd(8)

                                                            ... The server
 uses the TCP protocol and listens at the port specified in the ''ftp''
 service specification; see services(5).

e uma varredura através de ftpd.conf(5) não mostra nenhum meio óbvio de mexer com a porta de escuta (ao contrário da porta de dados, que é diferente) então vamos ver se podemos modificar o arquivo services , que provavelmente é ruim ideia.

$ sudo perl -i.oops -pe 's/^(ftp\s+21)/${1}21/' /etc/services
$ grep 2121 /etc/services
ftp              2121/udp     # File Transfer [Control]
ftp              2121/tcp     # File Transfer [Control]
scientia-ssdb   2121/udp    # SCIENTIA-SSDB
scientia-ssdb   2121/tcp    # SCIENTIA-SSDB
nupaper-ss      12121/tcp   # NuPaper Session Service
nupaper-ss      12121/udp   # NuPaper Session Service
$ 

E com esta horrível e horrível kluge efetuada agora começamos ftpd ... (isso é em um sistema 10.11.6 que tem ftpd instalado por padrão sob /usr/libexec )

$ /usr/libexec/ftpd -lnDr -P 50001
$

E ele está sendo executado como não-raiz na porta não- 21 :

$ pgrep -lf ftpd
35258 /usr/libexec/ftpd -lnDr -P 50001
$ lsof -P -p 35258 | grep 2121
ftpd    35258 jhqdoe    4u   IPv4 0x817b7cd1effd8d7f       0t0      TCP *:2121 (LISTEN)
ftpd    35258 jhqdoe    5u   IPv6 0x817b7cd1effa3107       0t0      TCP *:2121 (LISTEN)
$ 

Se isso funciona ou não, eu não sei; você realmente precisa de FTP ?

Para desfazer essa alteração, sudo mv /etc/services.oops /etc/services

    
por 11.10.2017 / 16:28