Osx
如何在 OS X 上不使用 root 執行 tnftpd?
我正在嘗試
tnftpd
在 OS X 上執行,它是 NetBSD 的 FTP 伺服器,曾經是 OS X 的 FTP 伺服器。我從Apple 的來源建構並安裝了它。不幸的是,我似乎無法在沒有 root 權限的情況下執行伺服器。到目前為止,這些是我讓伺服器在沒有 root 權限的情況下工作的方法:
- 我嘗試通過該
-P
選項更改埠號,以確保它不使用特權埠。- 我試過擺弄配置文件,例如
ftpd.conf
和ftpusers
.- 我也試過這個
-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