GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wiederherstellen der ausführbaren Berechtigung für den Chmod-Befehl in Linux

Ich bin auf einen interessanten Diskussionsthread gestoßen auf Twitter. Es geht um eine Interviewfrage. Die Frage ist - Was tun Sie, wenn die ausführbare Berechtigung des Chmod-Befehls versehentlich entfernt wird? Wie Sie vielleicht wissen, steht chmod (steht für Ch ange mod e) Der Befehl wird verwendet, um die Zugriffsberechtigungen einer Datei oder eines Verzeichnisses in Unix-ähnlichen Systemen festzulegen oder zu ändern. Wenn also die Ausführungsberechtigung von chmod entfernt wird, können Sie die Berechtigungen keinem Programm zuweisen, einschließlich des Befehls chmod selbst. Sie sitzen in einem Interviewpanel und der Interviewer hat gerade diese Frage gestellt. Wie stellen Sie also die ausführbare Berechtigung für den Befehl chmod unter Linux wieder her?

"Ich werde die chmod-Binärdatei von anderen Systemen kopieren?", könnten Sie antworten. Nun, Sie erhalten nur ein System. Sie können die chmod-Binärdatei also nicht von anderen Systemen kopieren. Sie können erneut antworten:"Ich werde das Ausführungsbit von Perl setzen.". Der Interviewer sagt:"Auf Ihrem Gerät sind keine Dolmetscher.". Es gibt auch keine Internet-/Telefonverbindung, daher können Sie auch niemanden um Hilfe bitten. Wie stellen Sie in einer solch schlimmen Situation die ausführbare Berechtigung des Chmod-Befehls wieder her? Wenn Sie die Antwort bereits kennen, Daumen hoch für Ihre Intelligenz. Wenn Sie kein kritischer Denker sind (wie ich!), lesen Sie bitte weiter.

Warnung:

Bitte versuchen Sie nicht, die Ausführungserlaubnis des chmod-Befehls in einem Produktionssystem zu entfernen. Probieren Sie dies in einer VM oder einem Testcomputer aus. Es dient lediglich Bildungszwecken.

Was tun Sie, wenn Sie versehentlich die Ausführungsberechtigung des Chmod-Befehls entfernt haben?

Nehmen wir an, Sie führen versehentlich den folgenden Befehl aus:

# chmod -x $(which chmod)

Hier das -x Flag entfernt die Ausführungsberechtigung des angegebenen Programms. In unserem Fall ist es chmod.

Sie sind sehr neugierig und wissen wirklich nicht, was dieser Befehl bewirken wird. Jetzt haben Sie die ausführbare Berechtigung des Befehls chmod verloren. Es gibt keine Möglichkeit, die ausführbare chmod-Berechtigung wieder wiederherzustellen. Wenn Sie versuchen, die Berechtigung festzulegen, verwenden Sie den folgenden Befehl:

# chmod +x $(which chmod)

Sie erhalten die folgende Fehlermeldung:

bash: /usr/bin/chmod: Permission denied

Selbst wenn Sie sich abmelden und es von anderen sudo-Benutzern versuchen, können Sie keine Berechtigungen mit dem chmod-Befehl zuweisen:

$ sudo chmod +x $(which chmod)
sudo: chmod: command not found

Wie stellen Sie die chmod-Berechtigungen wieder auf das Original zurück? Nun, es ist einfacher als Sie denken.

Wiederherstellen der ausführbaren Berechtigung für den Chmod-Befehl in Linux

Es gibt einige Möglichkeiten, die Ausführungsberechtigung für chmod wiederherzustellen. Hier habe ich 7 Methoden angegeben.

Methode 1 - Kopieren Sie den Inhalt der chmod-Binärdatei in andere funktionierende Binärdateien

Bitte denken Sie daran, dass wir nur die Ausführungsberechtigung des Befehls chmod entfernt haben, nicht jedoch die Berechtigung anderer Befehle. Recht? Ja! Die anderen Befehle haben weiterhin die Ausführungsberechtigung. Wir können dieses Problem also beheben, indem wir den Inhalt des Befehls chmod in einen beliebigen anderen ausführbaren Befehl kopieren, z. B. "mkdir", und die Berechtigung für die ausführbare chmod-Datei wieder auf das Original zurücksetzen.

Lassen Sie uns vor dem Kopieren eine Sicherungskopie des mkdir-Befehls erstellen, indem Sie den Befehl verwenden:

# cp /usr/bin/mkdir /usr/bin/mkdir.bak

Als nächstes kopieren Sie den Inhalt von /usr/bin/chmod nach /usr/chmod/mkdir mit dem "cat"-Befehl:

# cat /usr/bin/chmod > /usr/bin/mkdir

Jetzt wurde der mkdir-Befehl zum chmod-Befehl (weil wir den Inhalt von chmod in die mkdir-Binärdatei kopiert haben).

Stellen Sie dann die ausführbare Berechtigung der tatsächlichen chmod-Binärdatei mit dem folgenden Befehl wieder her:

# mkdir +x /usr/bin/chmod

Alternativ können Sie den Inhalt von mkdir zurück in die chmod-Binärdatei kopieren:

# mv /usr/bin/mkdir /usr/bin/chmod

Stellen Sie abschließend den ursprünglichen mkdir-Befehl aus der Sicherung wieder her:

# mv /usr/bin/mkdir.bak /usr/bin/mkdir

Erledigt! Wir haben die Ausführungsberechtigung für den Befehl chmod erfolgreich wiederhergestellt.

Überprüfen Sie, ob die Ausführungsberechtigungen mit dem Befehl „ls“ wiederhergestellt wurden:

# ls -l /usr/bin/chmod

Oder,

# ls -l $(which chmod)
-r-xr-xr-x 1 root root 63864 May 27 07:16 /usr/bin/chmod

Beachten Sie die Buchstaben "x" in der obigen Ausgabe. Es zeigt die Ausführungserlaubnis an.

Sie können dies auch überprüfen, indem Sie anderen Programmen mit chmod ausführbare Berechtigungen wie unten zuweisen:

# chmod +x ostechnix.sh
# ls -l
total 0
-rwxr-xr-x 1 root root 0 May 27 07:43 ostechnix.sh

Dies ist die einfachste Methode, da Sie sich nichts merken müssen. Wir haben einfach den Inhalt von chmod mit dem Befehl cat in andere Befehle kopiert und dann die Ausführungsberechtigung wiederhergestellt.

Ich habe es in Ubuntu 20.04 Server Edition getestet. In anderen Linux-Distributionen ist die chmod-Binärdatei möglicherweise unter /bin/ verfügbar Verzeichnis. Sie können den Speicherort der chmod-Binärdatei mit dem folgenden Befehl finden:

$ which chmod

Dies ist jedoch nicht nur der Weg. Ich habe eine schnelle Google-Suche durchgeführt und ein paar weitere Methoden gefunden. Möglicherweise müssen Sie sich die folgenden Befehle merken.

Methode 2 - Verwendung des cp-Befehls

Dies ist eine weitere Möglichkeit, die ausführbare Berechtigung für chmod wiederherzustellen.

Bei dieser Methode verwenden wir den Befehl „cp“, um die Attribute zu kopieren:

# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod

Methode 3 – GNU Linker/Loader (ld) verwenden

Bei dieser Methode können Sie den „ld“-Loader direkt ausführen und ihm den auszuführenden Befehl wie folgt übergeben:

# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod

Wenn Sie 32-Bit-Systeme verwenden, lautet der Befehl:

$ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod

Der Pfad zum Loader kann je nach verwendeter Linux-Distribution variieren. Die obigen Befehle gelten für Ubuntu und seine Derivate. In anderen Distributionen kann der Pfad anders sein:

# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod

Methode 4 - Verwendung von setfacl

Wir können die Berechtigungen für ausführbare chmod-Dateien mit dem Befehl „setfacl“ wiederherstellen.

Ändern Sie zuerst die ACL einer chmod-Binärdatei für Benutzer mit Lese- und Ausführungsberechtigungen:

# setfacl -m u::rx /usr/bin/chmod

Stellen Sie dann die chmod-Berechtigungen wieder auf die ursprünglichen zurück:

# chmod +x $(which chmod)

Entfernen Sie abschließend alle ACL-Einträge von chmod. Dies ist optional.

# setfacl -b /usr/bin/chmod

Wenn der Befehl setfacl nicht verfügbar ist, installieren Sie das Paket „acl“. Führen Sie beispielsweise den folgenden Befehl aus, um acl auf Debian, Ubuntu und seinen Derivaten zu installieren:

# apt install acl

Methode 5 – Verwendung von rsync

Rsync dient nicht nur zum Kopieren oder Sichern von Dateien und Verzeichnissen zwischen Systemen. Es kann auch verwendet werden, um Berechtigungen für Dateien zuzuweisen.

Lassen Sie uns zuerst die chmod-Binärdatei an den Speicherort /tmp kopieren, während wir allen, d. h. Benutzern, Gruppen und anderen, ausführbare Berechtigungen zuweisen:

# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x

Überprüfen Sie als Nächstes, ob die Ausführungsberechtigung chmod:

zugewiesen ist
$ ls -l /tmp/chmod

Beispielausgabe:

-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod

Wenn die Berechtigungen stimmen, überschreiben Sie einfach die Originaldatei mit /tmp/chmod file:

# mv /tmp/chmod /usr/bin

Methode 6 - Verwenden von Busybox

Einige neuere Linux-Distributionen haben "Busybox" standardmäßig installiert. Von der Busybox-Manpage

BusyBox kombiniert winzige Versionen vieler gängiger UNIX-Dienstprogramme in einer einzigen kleinen ausführbaren Datei. Es bietet minimalistischen Ersatz für die meisten Dienstprogramme, die Sie normalerweise in GNU Coreutils, util-linux usw. finden. Die Dienstprogramme in BusyBox haben im Allgemeinen weniger Optionen als ihre voll ausgestatteten GNU-Cousins; Die enthaltenen Optionen bieten jedoch die erwartete Funktionalität und verhalten sich sehr ähnlich wie ihre GNU-Pendants.

Führen Sie Folgendes aus, um die Chmod-Ausführungsberechtigung mit busybox wiederherzustellen:

# busybox chmod +x /usr/bin/chmod

Methode 7 - Verwenden von Perl

Nur für den Fall, dass Perl auf Ihrem System verfügbar ist, können Sie die Ausführungsberechtigungen von Chmod mit dem Befehl korrigieren:

# perl -e 'chmod 0755, "/usr/bin/chmod"'

Wie Sie sehen können, ist dies ein triviales Problem, das von intelligenten Linux-Benutzern leicht gelöst werden kann. Wenn Sie ein angehender oder fortgeschrittener Linux-Benutzer sind, werden Sie es wahrscheinlich nie herausfinden. Diese Art von Fragen könnten gestellt werden, um die Geistesgegenwart des Befragten zu überprüfen und wie er über den Tellerrand hinaus denkt. Dank des oben erwähnten Twitter-Threads habe ich heute etwas Nützliches gelernt. Hoffe, es ist auch für Sie nützlich.

Verwandte Lektüre:

  • So finden Sie Dateien basierend auf ihren Berechtigungen in Linux
  • So kopieren Sie Dateien und ändern gleichzeitig den Besitz und die Berechtigungen

Linux
  1. Einführung in den Linux-Befehl chmod

  2. Linux-mv-Befehl

  3. Linux-Du-Befehl

  4. Linux-chmod-Befehl

  5. 7 Chmod-Befehlsbeispiele für Anfänger

W-Befehl unter Linux

Bei Befehl unter Linux

Chmod-Befehl unter Linux

Chmod-Befehl – ​​So ändern Sie Dateiberechtigungen in Linux

Linux-Chmod-Befehlsbeispiele

10 Linux-restorecon-Befehlsbeispiele zum Wiederherstellen des SELinux-Kontexts