Linux
Telnet 連接到 Debian 機器被拒絕
我正在嘗試通過 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 client和server,但考慮到它在 Debian stable(但只有sid)中不可用,它可能本身就有問題。