GNU/Linux >> Linux Esercitazione >  >> Linux

Ripristina l'autorizzazione eseguibile al comando Chmod in Linux

Mi sono imbattuto in un interessante thread di discussione su Twitter. Si tratta di una domanda di intervista. La domanda è:Cosa fare se l'autorizzazione eseguibile del comando Chmod viene rimossa accidentalmente? Come forse saprai, chmod (sta per Ch ange mod e) il comando viene utilizzato per impostare o modificare i permessi di accesso di un file o di una directory in sistemi simili a Unix. Quindi, se il permesso eseguibile di chmod viene rimosso, non puoi assegnare i permessi a nessun programma, incluso il comando chmod stesso. Sei seduto in un pannello di intervista e l'intervistatore ha appena posto questa domanda. Quindi, come ripristinare l'autorizzazione eseguibile al comando chmod in Linux?

"Copierò il binario chmod da altri sistemi?", potresti rispondere. Bene, ti viene dato un solo sistema. Quindi non puoi copiare il binario chmod da altri sistemi. Puoi rispondere di nuovo:"Imposterò il bit di esecuzione da perl.". L'intervistatore dice "Non ci sono interpreti sulla tua macchina.". Inoltre non c'è connessione Internet/telefono, quindi non puoi nemmeno contattare nessuno per chiedere aiuto. In una situazione così terribile, come si ripristina l'autorizzazione eseguibile del comando Chmod? Se conosci già la risposta, un grande in bocca al lupo alla tua intelligenza. Se non sei un pensatore critico (come me!), continua a leggere.

Avviso:

Per favore non provare a rimuovere il permesso di esecuzione del comando chmod in un sistema di produzione. Provalo in una macchina virtuale o in una macchina di prova. È solo a scopo educativo.

Cosa fai se hai rimosso accidentalmente il permesso eseguibile del comando Chmod?

Supponiamo che tu abbia eseguito accidentalmente il seguente comando:

# chmod -x $(which chmod)

Qui, il -x flag rimuoverà l'autorizzazione eseguibile del programma specificato. Nel nostro caso, è chmod.

Sei molto curioso e non sai davvero cosa farà questo comando. Ora hai perso l'autorizzazione eseguibile del comando chmod. Non c'è modo di ripristinare nuovamente l'autorizzazione eseguibile chmod. Se provi a impostare l'autorizzazione, il seguente comando:

# chmod +x $(which chmod)

Verrà visualizzato il seguente messaggio di errore:

bash: /usr/bin/chmod: Permission denied

Anche se esci e provi da altri utenti sudo, non puoi assegnare autorizzazioni usando il comando chmod:

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

Come ripristinare i permessi di chmod al suo originale? Bene, è più facile di quanto pensi.

Ripristina l'autorizzazione eseguibile per il comando Chmod in Linux

Esistono alcuni modi per ripristinare l'autorizzazione di esecuzione su chmod. Qui ho indicato 7 metodi.

Metodo 1:copia il contenuto di chmod binary su altri binari funzionanti

Ricorda che abbiamo rimosso solo l'autorizzazione eseguibile del comando chmod, ma non l'autorizzazione di altri comandi. Giusto? Sì! Gli altri comandi hanno ancora l'autorizzazione eseguibile. Quindi, possiamo risolvere questo problema copiando il contenuto del comando chmod su qualsiasi altro comando eseguibile, ad esempio "mkdir", e ripristinando l'autorizzazione eseguibile chmod al suo originale.

Prima di copiare, eseguiamo un backup del comando mkdir usando il comando:

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

Quindi copia il contenuto di /usr/bin/chmod in /usr/chmod/mkdir usando il comando "cat":

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

Ora, il comando mkdir è diventato come comando chmod (perché abbiamo copiato il contenuto di chmod in mkdir binary).

E quindi, ripristina l'autorizzazione eseguibile del binario chmod effettivo usando il comando:

# mkdir +x /usr/bin/chmod

In alternativa, puoi copiare il contenuto di mkdir nel binario chmod:

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

Infine, ripristina il comando mkdir originale dal backup:

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

Fatto! Abbiamo ripristinato con successo l'autorizzazione di esecuzione al comando chmod.

Verifica se le autorizzazioni eseguibili vengono ripristinate con il comando "ls":

# ls -l /usr/bin/chmod

Oppure,

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

Nota le lettere "x" nell'output sopra. Indica il permesso di esecuzione.

Puoi anche verificarlo assegnando autorizzazioni eseguibili a qualsiasi altro programma con chmod come di seguito:

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

Questo è il metodo più semplice poiché non devi memorizzare nulla. Abbiamo semplicemente copiato il contenuto di chmod su altri comandi usando il comando cat e quindi ripristinato l'autorizzazione di esecuzione.

L'ho testato nell'edizione server di Ubuntu 20.04. In altre distribuzioni Linux, il file binario chmod potrebbe essere disponibile in /bin/ directory. Puoi trovare la posizione binaria di chmod usando il seguente comando:

$ which chmod

Questo, tuttavia, non è solo il modo. Ho fatto una rapida ricerca su Google e ho trovato altri metodi. Potrebbe essere necessario memorizzare i seguenti comandi.

Metodo 2 - Utilizzo del comando cp

Questo è un altro modo per ripristinare l'autorizzazione eseguibile su chmod.

In questo metodo, utilizziamo il comando "cp" per copiare gli attributi:

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

Metodo 3:utilizzo del linker/loader GNU (ld)

Con questo metodo, puoi eseguire direttamente il caricatore "ld" e passargli il comando che desideri eseguire come di seguito:

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

Se utilizzi sistemi a 32 bit, il comando sarebbe:

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

Il percorso del caricatore potrebbe dipendere molto dalla distribuzione Linux in uso. I comandi precedenti sono per Ubuntu e i suoi derivati. In altre distribuzioni, il percorso potrebbe essere diverso:

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

Metodo 4 - Utilizzo di setfacl

Possiamo ripristinare i permessi eseguibili di chmod usando il comando "setfacl".

Innanzitutto, modifica l'ACL di un file binario chmod per l'utente con autorizzazioni di lettura ed esecuzione:

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

Quindi, ripristina le autorizzazioni di chmod a quelle originali:

# chmod +x $(which chmod)

Infine, rimuovi tutte le voci ACL di chmod. Questo è facoltativo.

# setfacl -b /usr/bin/chmod

Se il comando setfacl non è disponibile, installa il pacchetto "acl". Ad esempio, esegui il seguente comando per installare acl su Debian, Ubuntu e i suoi derivati:

# apt install acl

Metodo 5:utilizzo di rsync

Rsync non è solo per la copia o il backup di file e directory tra i sistemi. Può essere utilizzato anche per assegnare autorizzazioni per i file.

Per prima cosa, copiamo il file binario chmod nella posizione /tmp mentre assegniamo i permessi eseguibili a tutti, ovvero utenti, gruppi e altri:

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

Quindi, controlla se l'autorizzazione eseguibile è assegnata a chmod:

$ ls -l /tmp/chmod

Risultato di esempio:

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

Se i permessi sono OK, sovrascrivi semplicemente il file originale con /tmp/chmod file:

# mv /tmp/chmod /usr/bin

Metodo 6:utilizzo di Busybox

Alcune recenti distribuzioni Linux hanno "Busybox" installato per impostazione predefinita. Dalla pagina man di Busybox,

BusyBox combina versioni minuscole di molte utilità UNIX comuni in un unico piccolo eseguibile. Fornisce sostituzioni minimaliste per la maggior parte delle utilità che di solito trovi in ​​GNU coreutils, util-linux, ecc. Le utilità in BusyBox generalmente hanno meno opzioni rispetto ai loro cugini GNU con funzionalità complete; tuttavia, le opzioni incluse forniscono la funzionalità prevista e si comportano in modo molto simile alle loro controparti GNU.

Per ripristinare l'autorizzazione di esecuzione di Chmod con busybox, eseguire:

# busybox chmod +x /usr/bin/chmod

Metodo 7 - Utilizzo di Perl

Nel caso in cui Perl sia disponibile sul tuo sistema, puoi correggere i permessi di esecuzione di Chmod con il comando:

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

Come puoi vedere, questo è un problema banale che può essere facilmente risolto dagli utenti Linux intelligenti. Se sei un utente Linux in erba o intermedio, probabilmente non te ne accorgi mai. Questo tipo di domande potrebbe essere poste per verificare la presenza mentale dell'intervistato e come pensa fuori dagli schemi. Grazie al suddetto thread di Twitter, oggi ho imparato qualcosa di utile. Spero sia utile anche a te.

Lettura correlata:

  • Come trovare i file in base alle loro autorizzazioni in Linux
  • Come copiare file e modificare contemporaneamente la proprietà e le autorizzazioni

Linux
  1. Introduzione al comando Linux chmod

  2. Comando Linux mv

  3. Comando Linux chmod

  4. comando IP Linux

  5. comando cd di Linux

Comando W in Linux

Al comando in Linux

Comando Chmod in Linux

Comando Chmod:come modificare le autorizzazioni dei file in Linux

Esempi di comandi chmod di Linux

10 Esempi di comandi Linux restorecon per ripristinare il contesto SELinux