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