Osx

如何在 OS X 上不使用 root 執行 tnftpd?

  • October 11, 2017

我正在嘗試tnftpd在 OS X 上執行,它是 NetBSD 的 FTP 伺服器,曾經是 OS X 的 FTP 伺服器。我從Apple 的來源建構並安裝了它。不幸的是,我似乎無法在沒有 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 權限的情況下執行伺服器?甚至可能嗎?

根據手冊頁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
$ 

有了這個可怕的、可怕的 kluge 影響,我們現在開始ftpd……(這是在ftpd預設安裝在 10.11.6 系統上/usr/libexec

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

它在 not-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

引用自:https://unix.stackexchange.com/questions/397337