1時間前に私mv /lib64/libtinfo.so.5 /lib64/libtinfo.so.5.bak
と他の人がssh
サーバーに障害を引き起こしました。エラーメッセージは次のとおりです。
-bash: 共有ライブラリの読み込みエラー: libtinfo.so.5: 共有オブジェクトファイルを開けません。そのファイルやディレクトリはありません。 10.60.242.30への接続が閉じられました。
このファイルをもう一度変更したいと思います。sudo mv /lib64/libtinfo.so.5.bak /lib64/libtinfo.so.5
bash:共有ライブラリの読み込みエラー:libtinfo.so.5:共有オブジェクトファイルを開けませんでした:そのファイルまたはディレクトリがありません。
デッドロックのsudo
ようですlibtinfo.so.5
。
私はそれを試しましたが、LD_PRELOAD=./libtinfo.so.5.bak sudo mv /lib64/libtinfo.so.5.bak /lib64/libtinfo.so.5
動作しません。
誰でも私を助けることができますか?
答え1
引数のリストを見てそれを解釈するためにシェルが必要だと判断するmv
ので失敗します。sudo
その他シンプルコマンドが機能する可能性があります(たとえば、クイックチェックでsh
実行中に中間が表示されないsudo visudo
)。その場合は、単純なプログラムを作成してコンパイルし、を使用して実行できますsudo
。たとえば、次のようになります。
#include <stdlib.h>
int main(void)
{
rename("/lib64/tinfo.5.bak", "/lib64/tinfo.5" );
return 0;
}
もう一つの可能性はPerlのようなスクリプトですが、ncursesに依存しないようです。
$ ldd `path perl`
linux-vdso.so.1 => (0x00007ffd0f9f6000)
libperl.so.5.14 => /usr/lib/libperl.so.5.14 (0x00007fcfc33ba000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcfc31b6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcfc2f34000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcfc2d18000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcfc298b000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fcfc2754000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcfc373c000)
サーバーに物理的にアクセスできる場合は、この回避策は必要ありません。必要(リカバリDVDをロードしてオフラインでサーバーを回復できるからです。)これを行わずにSSHアクセス権がある場合(Amazon AWSなど)、同様の回避策を使用する必要があります。
追加資料:
- コンソール出力を取得し、インスタンスを再起動します。(Amazon)