ld-2.17.soに実行権限がない場合、端末でwhileループを実行できるのはなぜですか?

ld-2.17.soに実行権限がない場合、端末でwhileループを実行できるのはなぜですか?

前の質問では"chmod 666 ld-2.17.so"を実行 - どのように修復しますか?ld-2.17.so読み取り権限を変更すると、これらのライブラリが必要な操作を実行できないため、どのように復元できるかを尋ねられます。

私が得た答えは次のとおりです。

書き込み可能な実行可能ファイルがある場合は、bashの読み取りを使用してld.soの内容をファイルにコピーできます。

while IFS= read -d '' -r line; do printf "%s\0" "$line"; done > executable-file < /lib64/ld-2.17.so

試してみましたが、うまくいきました。しかし、私が混乱しているのは、whileこのループ/bin/bash自体に以下のようなライブラリが必要な場合にlib64/ld-2.17.so機能する理由です。

ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007ffc54dee000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f6fb9bbe000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f6fb99ba000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6fb95f6000)
    /lib64/ld-linux-x86-64.so.2 (0x000055ec142f5000)

bash誰かがなくても端末でコードが機能している理由を教えてもらえますか/lib64/ld-2.17.so?これは、許可なくbash端末/lib64/ld-2.17.soで空の実行可能ファイルを生成できることを意味しますか?

ありがとう

ベストアンサー1

while IFS= read -d '' -r line; do 
    printf "%s\0" "$line"
done > executable-file < /lib64/ld-2.17.so

シェル組み込みのみが使用されるため、新しいプロセスを開始する必要はありません。回復シナリオでは、すでに実行されているシェルがあり、ディスクに対する権限とライブラリの権限はもはや重要ではないと想定しています。

この場合、新しいシェルを起動することはできませんが、現在実行中のすべてのエントリは変更された権限の影響を受けません。

読みたいファイルにいいえ権限がない場合は、ルートシェルにある場合にのみ機能します。そうしないと、ld-2.17.sorootではないと読み取れないファイルを読み取ることができないため、リダイレクトは失敗します。 (ここではSELinuxなどを無視しています。)

おすすめ記事