Also habe ich a chmod -x chmod
. Wie kann ich dieses Problem beheben? Wie gebe ich chmod Ausführungsrechte zurück?
Also habe ich a chmod -x chmod
. Wie kann ich dieses Problem beheben? Wie gebe ich chmod Ausführungsrechte zurück?
Antworten:
/lib64/ld-linux-x86-64.so.2
stattdessen verwenden. ldd /bin/chmod
sollte genau auflisten, welcher Linker ausgeführt werden soll.
man ld-linux.so
: "ld.so [und ld-linux.so] lädt die gemeinsam genutzten Bibliotheken, die von einem Programm benötigt werden, bereitet das Programm für die Ausführung vor und führt es dann aus." ( ld.so
gilt für a.out
ausführbare Dateien im Format und ld-linux.so
für das ELF-Format.)
ld-linux.so
ist eine Art ausführbares / Bibliotheks-Hybrid, eine Art statisch verknüpft, wird im Benutzerbereich ausgeführt und ist dafür verantwortlich, dynamisch verknüpfte ausführbare Dateien und all ihre Abhängigkeiten zu laden und sie dann auszuführen.
Verwenden Sie Python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
python -c "import os; os.chmod('/bin/chmod', 0755)"
Dies beruht auf der Tatsache, dass die Berechtigungen einer Zieldatei erhalten bleiben und nicht die der Quelldatei, wenn diese kopiert wird. Wir "leihen" die Berechtigungen von ls
:
cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod
cp
muss die -p Flagge haben
cp
ich die ausführbare Datei erstellt hatte, habe ich nur cat
den Inhalt von chmod
in die temporäre Datei eingefügt.
setfacl -m u::rx /bin/chmod
... gewährt dem Besitzer Ausführungsberechtigungen.
Aber der /lib/ld-linux.so.2
Trick ist ordentlich. :)
Das ist komisch ... Ich habe so etwas vor ein paar Tagen über einen Tweet von jemandem gesehen ...
Ich vermute, das ist keine echte Frage: http://www.slideshare.net/cog/chmod-x-chmod
erstelle ein neues chmod und verwende das für das original
umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
(umask 000;gcc -o foo foo.c)
wird ein foo
mit Modus 777 erstellt). Viele (die meisten?) Shells bestehen jedoch 0666, wenn sie Dateien zur Umleitung öffnen / erstellen. Dies bedeutet, dass diese Antwort unter vielen Shells nicht funktioniert.
chmod
!