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

Lesedauer: 4 Minute
0

Wenn ich Sudo-Befehle auf meiner Amazon Elastic Compute Cloud (Amazon EC2)-Linux-Instance ausführe, erhalte ich eine Fehlermeldung.

Kurzbeschreibung

Der folgende Fehler kann auftreten, wenn Sie versuchen, Sudo-Befehle auf einer Amazon-EC2-Linux-Instance auszuführen:

  • „/usr/bin/sudo muss der uid 0 gehören und das Bit setuid gesetzt haben“

Dieser Fehler tritt auf, wenn ein Benutzer, der kein Root-Benutzer ist, Besitzer der Datei /usr/bin/sudo ist. Die Datei /usr/bin/sudo muss root:root als Besitzer haben.

  • Der Fehler „sudo: /etc/sudoers ist weltweit beschreibbar“

Dieser Fehler tritt auf, wenn die Datei /etc/sudoers die falschen Berechtigungen hat. Die Datei sudoers darf nicht weltweit beschreibbar sein. Wenn eine Datei weltweit beschreibbar ist, können beliebige Personen in die Datei schreiben. Standardmäßig ist der Dateimodus für die Datei sudoers auf 0440 gesetzt. Dadurch können der Besitzer und die Gruppe die Datei lesen, und es ist niemandem gestattet, in die Datei zu schreiben.

Verwenden Sie die serielle EC2-Konsole oder ein Benutzerdatenskript, um diese Fehler zu korrigieren.

Lösung

Verwenden der seriellen EC2-Konsole

Wenn Sie die serielle EC2-Konsole für Linux aktiviert haben, können Sie damit Probleme mit unterstützten Nitro-basierten Instance-Typen beheben. Die serielle Konsole hilft Ihnen bei der Behebung von Problemen bei Startvorgängen, Netzwerkkonfigurationen und SSH-Konfigurationen. Die serielle Konsole stellt eine Verbindung zu Ihrer Instance her, ohne dass eine funktionierende Netzwerkverbindung erforderlich ist. Sie können die Amazon-EC2-Konsole oder AWS Command Line Interface (AWS CLI) verwenden, um auf die serielle Konsole zuzugreifen.

Bevor Sie die serielle Konsole verwenden, gewähren Sie auf Kontoebene Zugriff auf die Konsole. Erstellen Sie anschließend AWS Identity and Access Management (IAM)-Richtlinien, die Ihren IAM-Benutzern Zugriff gewähren. Außerdem muss jede Instance, die die serielle Konsole verwendet, mindestens einen passwortbasierten Benutzer enthalten. Wenn Sie nicht auf Ihre Instance oder die serielle Konsole zugreifen können, folgen Sie den Anweisungen im Abschnitt Methode 2: Verwenden eines Benutzerdatenskripts. Informationen zur Konfiguration der seriellen EC2-Konsole für Linux finden Sie unter Konfigurieren des Zugriffs auf die serielle EC2-Konsole.

Hinweis: Wenn beim Ausführen von Befehlen in AWS CLI Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

Verwenden eines Benutzerdatenskripts

Verwenden Sie ein Benutzerdatenskript, um Sudo-Fehler in den folgenden Distributionen zu beheben:

  • Auf Red Hat basierende Distributionen wie SUSE, CentOS, Amazon Linux 1, Amazon Linux 2, Amazon Linux 2023, und RHEL
  • Debian-basierte Distributionen wie Ubuntu

Wichtig: Dieses Verfahren erfordert, dass Sie die EC2-Instance beenden und neu starten. Dies kann zu Datenverlusten, anderen gestoppten Instances und Änderungen an der öffentlichen IP-Adresse führen. Weitere Informationen finden Sie unter Was passiert, wenn Sie eine Instance stoppen.

  1. Öffnen Sie die Amazon-EC2-Konsole und wählen Sie Ihre Instance aus.

  2. Wählen Sie Aktionen, Instance-Status, Stoppen.
    Hinweis: Wenn Sie Stoppen nicht wählen können, ist entweder die Instance bereits gestoppt oder ihr Root-Gerät ist ein Instance-Speicher-Volume.

  3. Wählen Sie Aktionen, Instance-Einstellungen und Benutzerdaten bearbeiten.

  4. Kopieren Sie das folgende Skript, fügen Sie es in das Feld Benutzerdaten bearbeiten ein und klicken Sie auf Speichern. Achten Sie darauf, das gesamte Skript zu kopieren. Fügen Sie beim Einfügen des Skripts keine zusätzlichen Leerzeichen ein:
    Distributionen auf Basis von Red Hat

    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
    PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
    rpm --setugids sudo && rpm --setperms sudo
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    Hinweis: Die letzten beiden Befehlszeilen stellen die Berechtigungen, den Besitzer und die Gruppe für die benutzerdefinierten Sudo-Sicherheitsrichtlinien-Plugins im Verzeichnis /etc/sudoers.d/ wieder her.
    Debian-basierte Distributionen

    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
    /bin/chown root:root /usr/bin/sudo
    /bin/chmod 4111 /usr/bin/sudo
    /bin/chmod 644 /usr/lib/sudo/sudoers.so
    /bin/chmod 0440 /etc/sudoers
    /bin/chmod 750 /etc/sudoers.d
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    Die letzten beiden Befehlszeilen stellen die Berechtigungen, den Besitzer und die Gruppe für die benutzerdefinierten Sudo-Sicherheitsrichtlinien-Plugins im Verzeichnis /etc/sudoers.d/ wieder her.
    Wichtig: Die Berechtigungen für /usr/bin/sudo unterscheiden sich je nach Linux-Distribution. Bevor Sie Ihre Berechtigungen dauerhaft festlegen, überprüfen Sie die Berechtigungen einer Instance mit einem ähnlichen Betriebssystem. Führen Sie ls -l /usr/bin/sudo aus und verwenden Sie dann die Berechtigungen in diesem Beispiel als Referenz.
    Stellen Sie sicher, dass es sich bei Ihrer Referenz-Instance um eine Neuinstallation und nicht um eine Produktions-Instance handelt, damit diese Datei unverändert bleibt.

  5. Starten Sie die Instance und stellen Sie dann über SSH eine Verbindung zur Instance her.
    **Hinweis:**Wenn Sie einen Syntaxfehler erhalten, finden Sie weitere Informationen unter Wenn ich die Datei sudoers auf meiner EC2 Instance bearbeite, erhalte ich Syntaxfehler, wenn ich Sudo-Befehle ausführe. Wie behebe ich das?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten