
In meiner vorherigen Frage„chmod 666 ld-2.17.so“ ausgeführt – wie kann ich es wiederherstellen?Ich habe gefragt, ld-2.17.so
wie 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 while
Schleife funktioniert, wenn /bin/bash
sie 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 bash
der Code vom Terminal aus ohne das funktionierte /lib64/ld-2.17.so
? Bedeutet das auch, dass ich bash
vom Terminal aus auch dann eine leere ausführbare Datei erstellen kann, wenn /lib64/ld-2.17.so
ich 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.so
fehl, da Sie eine nicht lesbare Datei nur lesen können, wenn Sie Root sind. (SELinux usw. ignoriere ich hier.)