我正在尝试通过 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.
当我检查 telnet 服务器时,它正在机器上运行。
# netstat -tulpn | grep :23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 1817/inetd
可能是什么问题?
答案1
in.telnetd
包中的二进制文件默认telnetd
作为非特权进程以用户身份运行远程登录,可能出于安全原因和特权分离:
# 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-stat 覆盖的数据库或软件包未完全安装。或者OP的telnetd在受限环境中运行。一些示例可能是安装的文件系统诺苏伊德,可能包括容器,或 AppArmor 或 SELinux 的不适当设置。
当然使用远程登录本身不应该被完成。曾经有一个可用于 telnet 的 SSL 版本客户和服务器,但考虑到它在 Debian 中不可用稳定的(但只有席德)它本身可能有问题。