telnetdがTERM変数に任意のデータを受け入れるように強制する方法は?

telnetdがTERM変数に任意のデータを受け入れるように強制する方法は?

次の構文を使用して、TERM変数内で追加データを転送する必要があります。

TERM=xterm:VAR1=data1:var2=data2:...

サーバー側では、このデータは実際の変数に分類されます。ただし、Debian の Telnet サーバーは、TERM 変数に ":" または "=" が追加された接続を閉じます。

Debian は:

# uname -a
Linux server 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u2 (2016-01-02) x86_64 GNU/Linux

TERM変数で異常な文字をチェックしないようにサーバーを設定する方法はありますか?

編集 - 注:

これは、SCOとAIXの間でこのように動作するレガシー環境です。これで、TERM変数のすべてのデータを受け入れるLinuxサーバーを追加する必要があります。

答え1

これはよく考慮された安全な選択です。ただし、この変数を渡すようにtelnetdサーバーを構成できますが、TERMその値は小文字に変換されます。有効な値の実際TERMの確認は、それ自体ではなく、in.telnetdサーバーから呼び出されるログインプログラムによって実行されます。telnetloginログインを続行する前に、変数をアンラップする中間シェルスクリプトなどの他のログインプログラムを実行するようにtelnetdサーバーを構成できます。たとえば、これをテストするには、/tmp/mytelnetlogin次の内容を含むファイルを作成します。

#!/bin/bash
export MYTERM=$TERM
export TERM=dumb
exec /usr/lib/telnetlogin "$@"

実行してみてくださいchmod +x。次に、ポート9999でtelnetdの独自のテストバージョンを実行します。

sudo sudo -u telnetd /usr/sbin/in.telnetd -debug 9999 -L /tmp/mytelnetlogin

環境の変数を使用して接続します。

TERM='A=1:b=2' telnet localhost 9999

ログインプロンプトが表示され、ログインすると値が表示され、echo $MYTERM正常a=1:b=2に機能することができます。明らかに、実際のソリューションのためには、スクリプトではなく-Lオプションを置く必要があります。/etc/inetd.conf/tmp

これはtelnetloginsetuid-rootプログラムであり、ユーザーIDから呼び出されると予想されますtelnetd。これはinetd、サーバーがrootではなくユーザーとして実行され、rootとしてのみログインできるようにするためです。

このセキュリティ対策を無視したい場合は、in.telnetdrootとして実行して標準ログインを実行させることができます。これにより、変数を操作するための/bin/login中間スクリプトは必要ありません。mytelnetloginたとえば、

sudo /usr/sbin/in.telnetd -debug 9999 -L /bin/login

関連情報