次の構文を使用して、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
これはtelnetlogin
setuid-rootプログラムであり、ユーザーIDから呼び出されると予想されますtelnetd
。これはinetd
、サーバーがrootではなくユーザーとして実行され、rootとしてのみログインできるようにするためです。
このセキュリティ対策を無視したい場合は、in.telnetd
rootとして実行して標準ログインを実行させることができます。これにより、変数を操作するための/bin/login
中間スクリプトは必要ありません。mytelnetlogin
たとえば、
sudo /usr/sbin/in.telnetd -debug 9999 -L /bin/login