Dépannage des autorisations

Consultez les informations suivantes pour résoudre les problèmes d'autorisation dans une instance Oracle Linux sur Oracle Cloud Infrastructure.

Échec de Sudo to Root User avec "sudo : /usr/bin/sudo doit appartenir à l'uid 0 et avoir le bit setuid" Erreur

Après vous être connecté à une instance Oracle Linux en tant qu'utilisateur opc et avoir essayé de passer à l'utilisateur root, l'erreur suivante s'affiche :

[opc@<oracle-linux-instance-name> ~]$ sudo su - 

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

Ce problème se produit si un utilisateur ou un processus a modifié la responsabilité et les autorisations du fichier binaire sudo et que le fichier /usr/bin/sudo doit être sous la responsabilité de root, les fichiers binaires ne peuvent pas être exécutés.

Pour résoudre ce problème, vous devez réinitialiser la responsabilité et les autorisations des utilisateurs et des groupes des fichiers de l'ensemble sudo à leurs valeurs initiales telles que définies dans la base de données RPM.

Les connexions SSH directes en tant qu'utilisateur root sont désactivées par défaut sur les instances Oracle Cloud Infrastructure pour des raisons de sécurité. Toutefois, si l'accès SSH racine est explicitement activé sur l'instance, ou si vous avez défini le mot de passe racine et que vous pouvez utiliser su pour accéder directement au compte racine, vous pouvez résoudre le problème directement :

Si root SSH est activé ou si vous avez le mot de passe root :

  1. Accédez par SSH à l'instance en tant qu'utilisateur root ou utilisez la commande su pour obtenir les privilèges root.
  2. Réinitialiser la responsabilité :
    rpm --setugids sudo
  3. Réinitialisez les autorisations :
    rpm --setperms sudo
  4. Vérifiez les autorisations :
    ls -l /usr/bin/*sudo*
    La sortie affiche la propriété racine et le bit setuid sur sudo, par exemple :
    -rwsr-xr-x. 1 root root 151424 ... /usr/bin/sudo
  5. Quittez la session racine.
  6. Utilisez la commande sudo pour passer à l'utilisateur root pour vérifier que le problème est résolu :
    sudo -s

Si l'accès SSH racine est désactivé et que vous n'avez pas le mot de passe racine :

Comme le fichier binaire sudo est inutilisable, vous ne pouvez pas exécuter ces commandes directement à partir de l'instance en tant qu'utilisateur opc. Utilisez la procédure suivante pour récupérer l'accès à l'aide d'une instance de secours :

  1. À l'aide de la console, arrêtez l'instance concernée. Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances. Sélectionnez l'instance à récupérer.
  2. Détachez le volume de démarrage de l'instance. Sous Stockage, sélectionnez le volume de démarrage. Dans le menu, sélectionnez Copier l'ID ressource. Notez l'ID ressource à utiliser ultérieurement. Dans le menu, sélectionnez Détacher un volume de démarrage. Confirmez que vous voulez détacher le volume de démarrage.
  3. Créez une instance de secours avec une image de plate-forme de système d'exploitation Oracle Linux, avec la forme disponible la plus petite, dans le même domaine de disponibilité et le même compartiment que l'instance concernée.
  4. Attachez le volume de démarrage détaché à l'instance de secours :
    1. Dans les détails de l'instance de secours, sous Stockage, sous Volumes par blocs attachés, sélectionnez Attacher un volume par blocs.
    2. Entrez l'OCID du volume et indiquez l'ID ressource du volume de démarrage que vous avez copié précédemment.
    3. Sélectionner le type d'accès "Lecture/Écriture"
    4. Ajoutez le volume et notez le chemin du périphérique.
  5. Connectez-vous à l'instance de secours en tant qu'utilisateur opc.
  6. Passer à la racine :
    sudo -s
  7. Identifier le périphérique du volume par blocs attaché :
    lsblk
    ou
    fdisk -l
    Le périphérique correspond au chemin que vous avez noté lors de l'ajout du volume par blocs.
  8. Créez un point de montage et montez la partition racine, par exemple :
    mkdir /mnt/recovery
    mount /dev/sdb1 /mnt/recovery
  9. Répertoires système de montage de liaison :
    for dir in /dev /proc /sys /run; do mount --bind $dir /mnt/recovery$dir; done
  10. Racine dans le système de fichiers monté :
    chroot /mnt/recovery
  11. Réinitialiser la responsabilité :
    rpm --setugids sudo
  12. Réinitialisez les autorisations :
    rpm --setperms sudo
  13. Quittez le chroot :
    exit
  14. Démontez les systèmes de fichiers :
    for dir in /dev /proc /sys /run; do umount /mnt/recovery$dir; done
    umount /mnt/recovery
  15. Quittez root sur l'instance de secours :
    exit
  16. Arrêtez l'instance de secours.
  17. Détachez le volume de démarrage de l'instance de secours.
  18. Rattachez le volume de démarrage à l'instance initiale en tant que volume de démarrage.
  19. Démarrez l'instance initiale et connectez-vous en tant qu'utilisateur opc.
  20. Utilisez la commande sudo pour passer à l'utilisateur root pour vérifier que le problème est résolu :
    sudo -s