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 ルートです。 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 オーバーライドデータベースまたはパッケージが完全にインストールされていません。またはOPTelnet限られた環境で実行してください。いくつかの例は、マウントされたファイルシステムです。ノスイド、コンテナ、またはAppArmorまたはSELinuxの不適切な設定を含めることができます。
もちろん使用リモートログインそれ自体で行うべきではありません。 Telnetに使用できるSSLバージョンがありました。顧客そして仕える人しかし、Debian では使用できないことを考えると安定(しかしシード)自体に問題がある可能性があります。