/ binが別の場所にバインドされると、Telnetは接続を拒否します。

/ binが別の場所にバインドされると、Telnetは接続を拒否します。

予想通り、ファームウェアが読み取り専用のルーターで作業しています。彼らが使用するビジボックスは元のツールのシンプルなバージョンなので、必要なすべてのツールにアクセスすることはできません。このルーターにはUSBポートもあるので、USBスティックに/binをバインドすると、私が望む結果を得ることができると思いました。したがって、次のコマンドを使用してバインドします。

cp -r /bin /mnt/<device-id>/
mount --rbind /mnt/<device-id>/bin /bin

その後、busyboxをリポジトリのフルバージョンに置き換えました。私はmispのために事前に作成された最新のバイナリを使用しています。

さて、予想通り、Business Boxはすべてのコンポーネントを備えていますが、他のデバイスでTelnetを実行できず、Telnetが切断された場合は再接続して取得できません。

$ telnet 192.168.1.1
login:
escape char:
Connection closed by foreign host.

これにより、まだbusyboxをバインド解除できない問題があります。削除しようとすると使用中です。基本的にbashとして使用しているので、これは予想されます。

$ umount /bin
umount: /bin: device is busy.

私は手がかりがありません。誰かが私を助けることを願っています。

ベストアンサー1

私が経験している問題を見つけました。まず、前述したように、Telnetを使用して再接続することはできません。これは、busyboxとtelnetコマンドを制御する親プロセスがあるためです。フォアグラウンドで別のtelnetdプロセスを作成しようとすると、次のエラーが発生します。

$ telnetd -F
telnetd: bind: Address already in use

まず、ポート23(telnetdのデフォルトポート)を使用してプロセスを確認しました。

$ netstat -lntup | grep 23
tcp        0      0 0.0.0.0:1234           0.0.0.0:*             LISTEN      2697/agent
tcp        0      0 0.0.0.0:23             0.0.0.0:*             LISTEN      362/pc

したがって、/binフォルダを別の場所にバインドすると、pcプロセスが混乱します。したがって、telnetdセッションを作成できず、ポート23を使用します。これは、起動時にほとんどの構成のみを担当するためです。このプロセスIDが終了するのを見る唯一の時間は、ファームウェアアップデートプロセスが開始されたときです。それにもかかわらず、プロセスを終了してtelnetdを再起動しました。

$ kill -9 362
$ telnetd

今はうまくいきますが、見苦しいパッチなので、別のアプローチを使用しました。もちろん、他のポートでtelnetdを実行することも可能ですが、/binフォルダはまったくバインドしないことにしました。

パスの前にインストール場所を追加することにしました。したがって、私が実行しているすべてのbusyboxコマンドはインストール場所にあります。実行するコマンドを最初にPATHで見つけたからです。したがって、パスに複数のbusyboxがあっても何の害もありません。新しいbusyboxがあるとしましょう/mnt/<device-id>/bin

$ for i in `./busybox --list`; do ln -s busybox $i; done
$ PATH=/mnt/<device-id>/bin:$PATH

これで、すべての新しいbusyboxコマンドが期待どおりに機能します。バインディングは不要になり、システムプロセスは終了しなくなります。

ちなみに、質問投稿でumount /binフォルダを整理できないと言いました。その理由は、私が思ったものとまったく一致しているようです。別のbusyboxインスタンスを使用すると、実際にフォルダのバインド/binが解除されます。

おすすめ記事