Résolution des problèmes liés aux autorisations

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

Echec de Sudo to Root User avec "sudo : /usr/bin/sudo must be own by uid 0 and have the setuid bit" Erreur

Une fois connecté à une instance Oracle Linux en tant qu'utilisateur opc et que vous tentez 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 propriété et les droits d'accès sur le fichier binaire sudo. Etant donné que le fichier /usr/bin/sudo doit appartenir à root, les fichiers binaires ne peuvent pas être exécutés.

Pour résoudre ce problème, vous devez rétablir les valeurs d'origine des droits d'accès et de propriété des utilisateurs et des groupes des fichiers du package sudo, telles que définies dans la base de données RPM.

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

Si SSH root est activé ou si vous disposez du mot de passe root :

  1. Connectez-vous via SSH à l'instance en tant qu'utilisateur root ou utilisez la commande su pour obtenir les privilèges root.
  2. Réinitialisez la propriété :
    rpm --setugids sudo
  3. Réinitialiser les droits d'accès :
    rpm --setperms sudo
  4. Vérifiez les autorisations :
    ls -l /usr/bin/*sudo*
    La sortie affiche la propriété root 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 afin de vérifier que le problème est résolu :
    sudo -s

Si l'accès SSH root est désactivé et que vous ne disposez pas du mot de passe root :

Etant donné que le binaire sudo est inutilisable, vous ne pouvez pas exécuter ces commandes directement à partir de l'instance en tant qu'utilisateur opc. Procédez comme suit pour récupérer l'accès à l'aide d'une instance de secours :

  1. A l'aide de la console, arrêtez l'instance concernée. Ouvrez le menu de navigation, puis sélectionnez Compute. Sous Compute, sélectionnez Instances. Sélectionnez l'instance à récupérer.
  2. Détachez le volume d'initialisation de l'instance. Sous Stockage, sélectionnez le volume d'initialisation. Dans le menu, sélectionnez Copier l'ID de ressource. Notez l'ID de ressource à utiliser ultérieurement. Dans le menu, sélectionnez Détacher le volume d'initialisation. Confirmez que vous souhaitez dissocier le volume d'initialisation.
  3. Créez une instance de secours avec une image de plate-forme de système d'exploitation Oracle Linux, avec la plus petite forme disponible, dans le même domaine de disponibilité et le même compartiment que l'instance affectée.
  4. Attachez le volume d'initialisation détaché à l'instance de secours :
    1. Dans les détails de l'instance de secours, sous Stockage, sous Volumes de blocs attachés, sélectionnez Attacher un volume de blocs.
    2. Entrez l'OCID de volume et fournissez l'ID de ressource de volume d'initialisation que vous avez copié précédemment.
    3. Sélectionnez 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. Passez à l'utilisateur root :
    sudo -s
  7. Identifiez l'appareil du volume de blocs attaché :
    lsblk
    ou
    fdisk -l
    Le périphérique correspond au chemin de périphérique que vous avez noté lors de l'ajout du volume de blocs.
  8. Créez un point d'assemblage et montez la partition racine, par exemple :
    mkdir /mnt/recovery
    mount /dev/sdb1 /mnt/recovery
  9. Répertoires du système de montage lié :
    for dir in /dev /proc /sys /run; do mount --bind $dir /mnt/recovery$dir; done
  10. Effectuez une opération Chroot dans le système des fichiers monté :
    chroot /mnt/recovery
  11. Réinitialisez la propriété :
    rpm --setugids sudo
  12. Réinitialiser les droits d'accès :
    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 la racine de l'instance de secours :
    exit
  16. Arrêtez l'instance de secours.
  17. Détachez le volume d'initialisation de l'instance de secours.
  18. Attachez le volume d'initialisation à l'instance d'origine en tant que volume d'initialisation.
  19. Démarrez l'instance d'origine et connectez-vous en tant qu'utilisateur opc.
  20. Utilisez la commande sudo pour basculer vers l'utilisateur root afin de vérifier que le problème est résolu :
    sudo -s