GNU/Linux >> Tutoriels Linux >  >> Linux

Restaurer l'autorisation exécutable pour la commande Chmod sous Linux

Je suis tombé sur un fil de discussion intéressant sur Twitter. Il s'agit d'une question d'entrevue. La question est - Que faites-vous si l'autorisation exécutable de la commande Chmod est supprimée accidentellement ? Comme vous le savez peut-être, le chmod (signifie Ch ange mod e) La commande est utilisée pour définir ou modifier les autorisations d'accès d'un fichier ou d'un répertoire dans les systèmes de type Unix. Ainsi, si l'autorisation exécutable de chmod est supprimée, vous ne pouvez attribuer les autorisations à aucun programme, y compris la commande chmod elle-même. Vous êtes assis dans un jury d'entretien et l'intervieweur vient de poser cette question. Alors, comment restaurer l'autorisation exécutable de la commande chmod sous Linux ?

"Je vais copier le binaire chmod à partir d'autres systèmes?", Vous pourriez répondre. Eh bien, on ne vous donne qu'un seul système. Vous ne pouvez donc pas copier le binaire chmod à partir d'autres systèmes. Vous pouvez répondre à nouveau, "Je vais définir le bit d'exécution à partir de perl.". L'intervieweur dit "Il n'y a pas d'interprètes sur votre machine.". Il n'y a pas non plus de connexion Internet/téléphone, vous ne pouvez donc pas non plus contacter qui que ce soit pour obtenir de l'aide. Dans une situation aussi grave, comment restaurer l'autorisation exécutable de la commande Chmod ? Si vous connaissez déjà la réponse, bravo à votre intelligence. Si vous n'êtes pas un penseur critique (comme moi !), veuillez lire ce qui suit.

Avertissement :

Veuillez ne pas essayer de supprimer l'autorisation d'exécution de la commande chmod dans un système de production. Essayez ceci dans une machine virtuelle ou une machine de test. C'est juste à des fins éducatives.

Que faites-vous si vous avez accidentellement supprimé l'autorisation d'exécution de la commande Chmod ?

Supposons que vous ayez accidentellement exécuté la commande suivante :

# chmod -x $(which chmod)

Ici, le -x flag supprimera l'autorisation d'exécution du programme donné. Dans notre cas, il s'agit de chmod.

Vous êtes très curieux et vous ne savez vraiment pas ce que fera cette commande. Maintenant, vous avez perdu l'autorisation d'exécution de la commande chmod. Il n'y a aucun moyen de restaurer à nouveau l'autorisation de l'exécutable chmod. Si vous essayez de définir une autorisation, utilisez la commande suivante :

# chmod +x $(which chmod)

Vous obtiendrez le message d'erreur suivant :

bash: /usr/bin/chmod: Permission denied

Même si vous vous déconnectez et essayez depuis d'autres utilisateurs sudo, vous ne pouvez pas attribuer d'autorisations à l'aide de la commande chmod :

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

Comment restaurer les autorisations chmod à leur état d'origine ? Eh bien, c'est plus facile que vous ne le pensez.

Restaurer l'autorisation exécutable pour la commande Chmod sous Linux

Il existe plusieurs façons de restaurer l'autorisation d'exécution de chmod. Ici, j'ai donné 7 méthodes.

Méthode 1 - Copier le contenu du binaire chmod vers d'autres binaires fonctionnels

N'oubliez pas que nous avons supprimé l'autorisation d'exécution de la commande chmod uniquement, mais pas l'autorisation des autres commandes. À droite? Oui! Les autres commandes ont toujours l'autorisation d'exécution. Nous pouvons donc résoudre ce problème en copiant le contenu de la commande chmod dans n'importe quelle autre commande exécutable, par exemple "mkdir", et restaurer l'autorisation exécutable chmod à son état d'origine.

Avant de copier, faisons une sauvegarde de la commande mkdir en utilisant la commande :

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

Copiez ensuite le contenu de /usr/bin/chmod vers /usr/chmod/mkdir en utilisant la commande "cat":

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

Maintenant, la commande mkdir est devenue une commande chmod (car nous avons copié le contenu de chmod dans le binaire mkdir).

Et ensuite, restaurez l'autorisation exécutable du binaire chmod réel à l'aide de la commande :

# mkdir +x /usr/bin/chmod

Vous pouvez également copier le contenu de mkdir dans le binaire chmod :

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

Enfin, restaurez la commande mkdir d'origine à partir de la sauvegarde :

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

Fait! Nous avons restauré avec succès l'autorisation d'exécution de la commande chmod.

Vérifiez si les autorisations exécutables sont restaurées avec la commande "ls":

# ls -l /usr/bin/chmod

Ou,

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

Notez les lettres "x" dans la sortie ci-dessus. Il indique l'autorisation d'exécution.

Vous pouvez également le vérifier en attribuant des autorisations exécutables à tout autre programme avec chmod comme ci-dessous :

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

C'est la méthode la plus simple puisque vous n'avez rien à mémoriser. Nous avons simplement copié le contenu de chmod dans d'autres commandes à l'aide de la commande cat, puis restauré l'autorisation d'exécution.

Je l'ai testé dans l'édition serveur Ubuntu 20.04. Dans d'autres distributions Linux, le fichier binaire chmod peut être disponible sous /bin/ annuaire. Vous pouvez trouver l'emplacement du binaire chmod à l'aide de la commande suivante :

$ which chmod

Ce n'est cependant pas seulement la voie. J'ai fait une recherche rapide sur Google et j'ai trouvé quelques méthodes supplémentaires. Vous devrez peut-être mémoriser les commandes suivantes.

Méthode 2 - Utilisation de la commande cp

C'est une autre façon de restaurer l'autorisation exécutable de chmod.

Dans cette méthode, nous utilisons la commande "cp" pour copier les attributs :

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

Méthode 3 – utilisation de l'éditeur de liens/chargeur GNU (ld)

Dans cette méthode, vous pouvez exécuter directement le chargeur "ld" et lui transmettre la commande que vous souhaitez exécuter comme ci-dessous :

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

Si vous utilisez des systèmes 32 bits, la commande serait :

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

Le chemin d'accès au chargeur peut dépendre de la distribution Linux que vous utilisez. Les commandes ci-dessus concernent Ubuntu et ses dérivés. Dans d'autres distributions, le chemin peut être différent :

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

Méthode 4 - Utilisation de setfacl

Nous pouvons restaurer les autorisations exécutables chmod à l'aide de la commande "setfacl".

Tout d'abord, modifiez l'ACL d'un fichier binaire chmod pour un utilisateur disposant des autorisations de lecture et d'exécution :

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

Ensuite, restaurez les autorisations chmod à celles d'origine :

# chmod +x $(which chmod)

Enfin, supprimez toutes les entrées ACL de chmod. Ceci est facultatif.

# setfacl -b /usr/bin/chmod

Si la commande setfacl n'est pas disponible, installez le package "acl". Par exemple, exécutez la commande suivante pour installer acl sur Debian, Ubuntu et ses dérivés :

# apt install acl

Méthode 5 - Utilisation de rsync

Rsync n'est pas seulement pour copier ou sauvegarder des fichiers et des répertoires entre les systèmes. Il peut également être utilisé pour attribuer des autorisations pour les fichiers.

Tout d'abord, copions le fichier binaire chmod à l'emplacement /tmp tout en attribuant des autorisations exécutables à tous, c'est-à-dire aux utilisateurs, groupes et autres :

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

Ensuite, vérifiez si l'autorisation exécutable est attribuée à chmod :

$ ls -l /tmp/chmod

Exemple de résultat :

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

Si les autorisations sont correctes, remplacez simplement le fichier d'origine par le fichier /tmp/chmod :

# mv /tmp/chmod /usr/bin

Méthode 6 - Utilisation de Busybox

Certaines distributions Linux récentes ont "Busybox" installé par défaut. À partir de la page de manuel Busybox,

BusyBox combine de minuscules versions de nombreux utilitaires UNIX courants en un seul petit exécutable. Il fournit des remplacements minimalistes pour la plupart des utilitaires que vous trouvez habituellement dans GNU coreutils, util-linux, etc. Les utilitaires de BusyBox ont généralement moins d'options que leurs cousins ​​GNU complets; cependant, les options incluses fournissent les fonctionnalités attendues et se comportent très bien comme leurs homologues GNU.

Pour restaurer l'autorisation d'exécution de Chmod avec busybox, exécutez :

# busybox chmod +x /usr/bin/chmod

Méthode 7 - Utilisation de Perl

Juste au cas où Perl serait disponible sur votre système, vous pouvez corriger les autorisations d'exécution de Chmod avec la commande :

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

Comme vous pouvez le constater, il s'agit d'un problème trivial qui peut être facilement résolu par les utilisateurs intelligents de Linux. Si vous êtes un utilisateur Linux en herbe ou intermédiaire, vous ne le comprendrez probablement jamais. Ce genre de questions peut être posé pour vérifier la présence d'esprit de la personne interrogée et comment il sort des sentiers battus. Grâce au fil Twitter susmentionné, j'ai appris quelque chose d'utile aujourd'hui. J'espère que cela vous sera également utile.

Lire connexe :

  • Comment rechercher des fichiers en fonction de leurs autorisations sous Linux
  • Comment copier des fichiers et modifier la propriété et les autorisations en même temps

Linux
  1. Introduction à la commande Linux chmod

  2. Commande Linux mv

  3. Linux du command

  4. Exemples de commande "chmod" de base sous Linux

  5. Linux :définir l'autorisation uniquement sur les répertoires

Commande W sous Linux

À la commande sous Linux

Commande Chmod sous Linux

Commande Chmod - Comment modifier les autorisations de fichiers sous Linux

Exemples de commandes Linux chmod

10 exemples de commandes Linux restorecon pour restaurer le contexte SELinux