warum funktioniert die While-Schleife vom Terminal aus, wenn ld-2.17.so keine Ausführungsberechtigung hat?

warum funktioniert die While-Schleife vom Terminal aus, wenn ld-2.17.so keine Ausführungsberechtigung hat?

In meiner vorherigen Frage„chmod 666 ld-2.17.so“ ausgeführt – wie kann ich es wiederherstellen?Ich habe gefragt, ld-2.17.sowie ich die Leseberechtigung wiederherstellen kann, wenn ich sie ändere, da ich dann überhaupt nichts ausführen kann, was diese Bibliotheken erfordert.

Und ich bekam die Antwort wie folgt:

Wenn Sie über eine ausführbare Datei verfügen, in die Sie schreiben können, können Sie den Inhalt von ld.so mit dem Lesebefehl der Bash in diese Datei kopieren:

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

Ich habe es versucht und es hat funktioniert. Was mich jedoch verwirrt, ist, warum diese whileSchleife funktioniert, wenn /bin/bashsie selbst eine Bibliothek erfordert lib64/ld-2.17.so, wie man im Folgenden sehen kann:

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)

Kann mir bitte jemand erklären, warum bashder Code vom Terminal aus ohne das funktionierte /lib64/ld-2.17.so? Bedeutet das auch, dass ich bashvom Terminal aus auch dann eine leere ausführbare Datei erstellen kann, wenn /lib64/ld-2.17.soich keine Berechtigungen habe?

Danke

Antwort1

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

verwendet nur integrierte Shell-Funktionen, sodass keine neuen Prozesse gestartet werden müssen. Das Wiederherstellungsszenario geht davon aus, dass Sie bereits eine Shell ausführen. Da diese bereits ausgeführt wird, spielen ihre Berechtigungen auf der Festplatte und die ihrer Bibliotheken keine Rolle mehr.

Unter diesen Umständen könnten Sie keine neue Shell starten, die geänderten Berechtigungen wirken sich jedoch nicht auf aktuell laufende Vorgänge aus.

Wenn die Datei, aus der Sie lesen möchten,NEINBerechtigungen, dies funktioniert nur, wenn Sie sich in einer Root-Shell befinden. Andernfalls schlägt die Umleitung ld-2.17.sofehl, da Sie eine nicht lesbare Datei nur lesen können, wenn Sie Root sind. (SELinux usw. ignoriere ich hier.)

verwandte Informationen