如何在 OS X 上无需 root 运行 tnftpd?

如何在 OS X 上无需 root 运行 tnftpd?

我试图tnftpd在 OS X 上运行,这是 NetBSD 的 FTP 服务器,并且曾经是 OS X 的 FTP 服务器。我构建并安装了它苹果的来源。不幸的是,如果没有 root 权限,我似乎无法运行服务器。到目前为止,我的方法是让服务器在没有 root 权限的情况下工作:

  • 我尝试通过选项更改端口号-P,以确保它不使用特权端口。
  • 我尝试过摆弄配置文件,例如ftpd.confftpusers
  • 我也尝试过该-r选项(一旦用户登录就不允许 root 权限)。

所有这些尝试都没有成功。

一些例子来说明我的尝试:

$ 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

但是,如果我尝试这样的操作(这是我没有自定义配置的情况):

$ 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

我没有问题。

如何tnftpd在没有 root 权限的情况下运行服务器?有可能吗?

答案1

根据手册页tnftpd(8)

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

扫描ftpd.conf(5)显示没有明显的方法来摆弄侦听端口(与数据端口相反,这是不同的),所以让我们看看是否可以修改该services文件,这可能是一个坏主意。

$ 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
$ 

随着这个可怕的、可怕的克鲁格的影响,我们现在开始......(这是在默认安装ftpd在 10.11.6 系统上)ftpd/usr/libexec

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

它在非21端口上以非 root 身份运行:

$ 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)
$ 

我不知道这是否有效;你真的需要FTP吗

要撤消此更改,sudo mv /etc/services.oops /etc/services

相关内容