Wie behebe ich Sudo-Fehler auf meiner EC2-Instance, wenn ich den Befehl „sudo“ ausführe?

Lesedauer: 6 Minute
0

Ich habe die Datei /etc/sudoers auf meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance bearbeitet oder gelöscht. Anschließend erhalte ich Syntax- oder Sudo-Fehler, wenn ich Sudo-Befehle ausführe.

Kurzbeschreibung

Wenn du die Datei /etc/sudoers löscht oder falsch konfigurierst, treten die folgenden Syntax- oder Sudo-Fehler auf:

  • "/etc/sudoers:abc:x: syntax error" (/etc/sudoers:abc:x: Syntaxfehler)
  • "sudo: unable to open /etc/sudoers: No such file or directory" (sudo: /etc/sudoers kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis)
  • "sudo: no valid sudoers sources found, quitting" („sudo: keine gültige sudoers-Quellen gefunden, wird beendet“)
  • "sudo: error initializing audit plugin sudoers_audit" („sudo: Fehler beim Initialisieren des Audit-Plugins sudoers_audit“)

Wenn du eine dieser Fehlermeldungen erhältst, kannst du Benutzern oder Benutzergruppen keine Zugriffsberechtigungen für Systemressourcen gewähren. Um die Datei /etc/sudoers zu reparieren, hängst du die Stammfestplatte an eine Rettungs-Instance an. Wenn du eine Stammfestplatte nicht an eine Rettungs-Instance anhängen kannst, verwende Benutzerdaten, um die Datei zu ändern.

Lösung

Wenn du beim Ausführen von AWS Command Line (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Stammfestplatte an eine Rettungs-Instance anhängen

Es ist eine bewährte Methode, eine Stammfestplatte an eine Rettungs-Instance anzuhängen, um die Datei /etc/sudoers zu ändern.

**Voraussetzungen:**Wenn du eine Instance beendest oder startest, werden Daten auf Instance-Speicher-Volumes gelöscht. Sichere alle Daten, die du behalten möchtest, auf dem Instance-Speicher-Volume. Weitere Informationen findest du unter Root-Gerätetyp. Wenn du eine Instance beendest oder startest, ändert sich außerdem die öffentliche IP-Adresse der Instance. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an Ihre Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.

Gehe wie folgt vor, um eine Stammfestplatte an eine Rettungs-Instance anzuhängen:

  1. Erstelle ein neues Schlüsselpaar.

  2. Rufe die Volume-ID und den Gerätenamen für das Root-Volume der ursprünglichen Instance ab.

  3. Stoppe die ursprüngliche Instance.

  4. Starte eine Wiederherstellungs-Instance von einem Amazon Machine Image (AMI) mit derselben Linux-Betriebssystemversion (OS) in derselben Availability Zone.

  5. Trenne das Root-Volume von der ursprünglichen Instance und hänge es dann als sekundäres Volume an die Wiederherstellungs-Instance an.

  6. Stelle mit deinem neuen SSH-Schlüsselpaar eine Verbindung zur Wiederherstellungs-Instance her.

  7. Verwende den folgenden Befehl, um zum Root-Benutzer zu wechseln:

    [ec2-user ~]$ sudo su
  8. Führe den folgenden Befehl von der Wiederherstellungs-Instance aus, um den Namen und die Partition des Blockgeräts zu identifizieren:

    [root ~]$ lsblkNAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0    8G  0 disk
    └─xvda1 202:1    0    8G  0 part /
    xvdf    202:80   0  101G  0 disk
    └─xvdf1 202:81   0  101G  0 part
    xvdg    202:96   0   30G  0 disk

    Im vorherigen Beispiel sind die Volume-Gerätenamen /dev/xvda und /dev/xvdf partitionierte Volumes und /dev/xvdg ist kein partitioniertes Volume.
    Wenn dein Volume partitioniert ist, führe den folgenden Befehl aus, um die Partition /dev/xvdf1 anstelle des /dev/xvdf-Rohgeräts einzulegen:

    [root ~]$ mount -o nouuid  /dev/xvdf1 /mnt

    Wenn du eine auf dem AWS Nitro System basierende Instance verwendest, sieht der Name des Volume-Geräts ähnlich wie /dev/nvme[0-26]n1 aus. Wenn die Instance auf Nitro System mit NVMe erstellt wurde, lege die Partition im Verzeichnis /mnt ein. Verwende den Gerätenamen, den du mit dem Befehl lsblk identifiziert hast:

    [root ~]$ mount -o nouuid  /dev/nvme1n1p1 /mnt

    Weitere Informationen findest du unter Gerätenamen für Volumes auf Amazon EC2-Instances.

  9. Um die Datei /etc/sudoers als Backup von der Arbeits-Instance zu kopieren, führe den folgenden Befehl aus:

    [root ~]$ cp /etc/sudoers /mnt/etc/sudoers.bak
  10. Um eine Chroot-Umgebung im Verzeichnis /mnt zu erstellen, führe den folgenden Befehl aus:

[root ~]$ for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt

Im vorherigen Beispiel wurden die Verzeichnisse /dev, /proc, /sys und /run aus dem ursprünglichen Stammdateisystem per Bind-Mount eingelegt. Dies ermöglicht Prozessen, die in der Chroot-Umgebung ausgeführt werden, auf diese Systemverzeichnisse zuzugreifen. Um die Datei /etc/sudoers zu bearbeiten, führe den Befehl visudo in der Chroot-Umgebung aus:

[root ~]$ visudo

**Hinweis:**Du musst den Befehl visudo ausführen, um die sudoers-Datei zu bearbeiten. Der Befehl visudo sperrt die sudoers-Datei.
Wenn du durch den vorherigen Befehl Fehler erhältst, führe den folgenden diff-Befehl aus, um die Datei /etc/sudoers mit der neuen Datei /etc/sudoers.bak zu vergleichen:

[root ~]$ diff /etc/sudoers /etc/sudoers.bak

**Hinweis:**Wenn du vor der Bearbeitung der Datei keine benutzerdefinierten Änderungen vorgenommen hast, stelle die Datei /etc/sudoers.bak in /etc/sudoers wieder her. Um die Chroot-Umgebung zu verlassen, führe den folgenden Befehl aus:

[root ~]$ exit
  1. Führe den folgenden Befehl aus, um die Bereitstellung des Root-Volumes aufzuheben:
[root ~]$ umount -fl /mnt
  1. Trenne das Root-Volume, das als sekundäres Volume angehängt wurde, von der Wiederherstellungs-Instance. Hänge es dann erneut mit dem Gerätenamen aus Schritt 2 an die ursprüngliche Instance an.
  2. Starte die ursprüngliche Instance und überprüfe dann, ob die sudo-Befehle ordnungsgemäß funktionieren.

Benutzerdaten verwenden, um die Datei zu ändern

**Hinweis:**Die folgende Methode zur Problembehandlung verwendet die Benutzerdateneingabe. Um diese Methode zu verwenden, musst du ein Passwort für den Root-Benutzer festlegen.

Gehe wie folgt vor, um Benutzerdaten zum Ändern der Datei zu verwenden:

  1. Öffne die Amazon-EC2-Konsole.

  2. Wählen Sie im Navigationsbereich Instances und dann Ihre Instance aus.

  3. Wähle Instance-Status und dann Instance stoppen aus.

  4. Wähle unter Instance stoppen? die Option Stoppen aus.

  5. Lege ein temporäres Passwort für den Root-Benutzer fest.
    Beispiel:

                Content-Type: multipart/mixed; boundary="//"
                MIME-Version: 1.0
    
                --//
                Content-Type: text/cloud-config; charset="us-ascii"
                MIME-Version: 1.0
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment; filename="cloud-config.txt"
    
                #cloud-config
                cloud_final_modules:
                - [scripts-user, always]
    
                --//
                Content-Type: text/x-shellscript; charset="us-ascii"
                MIME-Version: 1.0
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment; filename="userdata.txt"
    
                #!/bin/bash
                chpasswd <<<"root:root"
                --//

    **Wichtig:**Dieses Passwort verwendet Klartext zur Weitergabe von Geheimnissen und ist nicht sicher. Stelle sicher, dass du das temporäre Passwort vom Root-Benutzer entfernst, nachdem du die Schritte zur Problembehandlung abgeschlossen hast.

  6. Starte die Instance und melde dich dann als ec2-user an.

  7. Um auf die Datei /etc/sudoers zuzugreifen, führe den folgenden pkexec-Befehl aus:

    pkexec /usr/sbin/visudo
  8. Gib das Passwort des Root-Benutzers ein und ändere dann die Datei /etc/sudoers.

  9. Führe einen sudo-Befehl aus, um zu überprüfen, ob Sudo ordnungsgemäß funktioniert.

  10. Stoppe die Instance.

Gehe wie folgt vor, um die Benutzerdatenwerte, einschließlich des Passworts des Root-Benutzers, mithilfe der Amazon EC2-Konsole zu löschen:

  1. Öffne die Amazon-EC2-Konsole.
  2. Wählen Sie im Navigationsbereich Instances und dann Ihre Instance aus.
  3. Wähle Aktionen und dann Instance-Einstellungen aus.
  4. Wähle Benutzerdaten bearbeiten aus und lösche dann alle Benutzerdaten.

Um die AWS-CLI-Schnittstelle zum Löschen der Benutzerdatenwerte, einschließlich des Passworts des Root-Benutzers, zu verwenden, führe den folgenden modify-instance-attribute-Befehl aus:

aws ec2 modify-instance-attribute --instance-id example-instance-id --user-data Value=""

**Hinweis:**Ersetze example-instance-id durch deine Instance-ID.

Führe den folgenden describe-instance-attribute-Befehl aus, um zu überprüfen, ob du die Benutzerdaten entfernt hast:

aws ec2 describe-instance-attribute --instance-id example-instance-id --attribute userData

**Hinweis:**Ersetze example-instance-id durch deine Instance-ID.

Nachdem du die Benutzerdaten gelöscht hast, starte die Instance.

Ähnliche Informationen

Warum kann ich keine Sudo-Befehle auf meiner EC2 Linux Instance ausführen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten