Linux

Telnet 連接到 Debian 機器被拒絕

  • August 25, 2020

我正在嘗試通過 telnet 連接 Debian 8 機器,但出現如下所示的登錄錯誤

# telnet 192.168.88.48 
Trying 192.168.88.48... 
Connected to 192.168.88.48.
Escape character is '^]'. 
Debian GNU/Linux 8 login: Cannot possibly work without effective root
Connection closed by foreign host. 

當我檢查遠端登錄伺服器時,它正在機器上工作。

# netstat -tulpn | grep :23 
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 1817/inetd

可能是什麼問題?

預設情況下,包中的in.telnetd二進製文件作為使用者telnetdtelnetd的非特權程序執行,可能是出於安全原因和權限分離:

# grep telnet /etc/inetd.conf 
telnet      stream  tcp nowait  telnetd /usr/sbin/tcpd  /usr/sbin/in.telnetd

然後它使用一個輔助程序來處理實際登錄。此幫助程序程序是 setuid root。在 Debian 8 系統上會給出(除了文件的日期和大小,與 Debian 10 相同):

# dpkg -S /usr/lib/telnetlogin
telnetd: /usr/lib/telnetlogin
# ls -l /usr/lib/telnetlogin
-rwsr-xr-x. 1 root telnetd 8112 Jul 22  2008 /usr/lib/telnetlogin

如果您將此幫助程序的 setuid 位刪除,您將得到 OP 的錯誤消息。

這個 setuid 位通常在包的安裝後設置在/var/lib/dpkg/info/telnetd.postinst

if [ -z "$(dpkg-statoverride --list /usr/lib/telnetlogin)" ]; then
  chown root:telnetd /usr/lib/telnetlogin
  chmod 4754 /usr/lib/telnetlogin
fi

例如,set-uid 位可能已被手動刪除、在dpkg-statoverride的數據庫中覆蓋或軟體包未完全安裝。或者 OP 的in.telnetd在受限環境中執行。一些範例可能是使用nosuid掛載的文件系統,可能包括容器,或者使用 AppArmor 或 SELinux 的設置不充分。

當然,永遠不要使用telnetd本身。曾經有一個 SSL 版本可用於 telnet clientserver,但考慮到它在 Debian stable(但只有sid)中不可用,它可能本身就有問題。

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