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