So verwenden Sie Cloud-Config für Ihr erstes Server-Setup

Einführung

Mit der Einführung vonDigitalOcean metadata service können Sie mit der Konfiguration Ihrer Server beginnen, bevor Sie sich überhaupt anmelden. Kurz gesagt, der Metadatendienst ist ein HTTP-Speicherort, auf den Ihr Server während des Startvorgangs zugreifen kann.

Der Speicherort der Metadaten enthält grundlegende Daten zur Serverkonfiguration und -umgebung, z. B. Netzwerkadressen, Hostnamen usw. Während der Ersteinrichtung können diese Werte von einem Programm namenscloud-init abgerufen werden, um die Konfiguration wesentlicher Dienste zu erleichtern.

Die leistungsstärkste Funktion besteht darin, dass Sie ein Skript an den Metadatendienst übergeben können, wenn Sie einen Server mit einem Feld namensuser-data erstellen. Dies wird während des ersten Startvorgangs ausgeführt und ist sehr flexibel, sodass Sie alles ausführen können, was Sie als Skript ausführen können.

Der am häufigsten zu übergebende Skripttyp wird alscloud-config-Skript bezeichnet. Dies ist eine YAML-formatierte Datei, die einfache, lesbare Methoden zum Einrichten allgemeiner Konfigurationselemente per Deklaration bietet. Es kann auch beliebige Befehle für andere Aufgaben ausführen.

In diesem Handbuch werden wir anhand eines einfachen Beispiels mit dem DigitalOcean-Metadatendienst und dencloud-config-Dateien vertraut gemacht. Wir werden einige der im Leitfadeninitial server setup for Ubuntu 14.04beschriebenen Schritte neu erstellen, um dies zu demonstrieren.

Tore

Um die Schritte inUbuntu 14.04 initial server setup guide erfolgreich zu replizieren, müsste unser Skript eine Reihe von Aufgaben ausführen.

Dies sind die grundlegenden Aufgaben, die in der obigen Anleitung ausgeführt werden:

  • Ändern Sie das Passwort des Root-Benutzers

  • Erstellen Sie einen neuen Benutzer

  • Erstellen Sie das Passwort des neuen Benutzers

  • Geben Sie dem neuen Benutzer root-Rechte

  • (Optional) Ändern Sie den Port, den der SSH-Dämon überwacht

  • (Optional) Schränken Sie die Anmeldung bei Root-SSH ein

  • (Optional) Lassen Sie unseren neuen Benutzer ausdrücklich zu

Ändern der Ziele zur Bewältigung der Umwelt

Für unsere Server, die mit einercloud-config-Datei erstellt wurden, müssen wir unsere Ziele ein wenig ändern. Alle Informationen, die über einecloud-config-Datei übergeben werden, sind fürany Benutzer des Systems während der gesamten Lebensdauer des Servers zugänglich.

Dies führt zu einer Reihe von Sicherheitsproblemen, die verstanden und behoben werden müssen. Einige Dinge zu beachten sind:

  • Alle incloud-config übergebenen Informationen sind für jeden Benutzer im System zugänglich. Legen Sie nichts Vertrauliches in diecloud-config-Dateien.

  • Sie können das Kennwort für vorhandene Benutzer festlegen, müssen es jedoch im Nur-Text-Format übergeben.

  • Für neue Benutzer können Sie eine gehashte Version eines Kennworts übergeben, aber diese Hashes können mit moderner Hardware sehr leicht gebrochen werden.

Vor diesem Hintergrund sollte unser Setup alles tun, um zu vermeiden, dass Kennwörter in irgendeiner Form in der Dateicloud-configfestgeschrieben werden. Wir können unsere Ziele an die spezifischen Anforderungen unserer Bereitstellungsumgebung anpassen.

Unsere angepasste Strategie sieht ungefähr so ​​aus:

  • Legen Sie kein Passwort fest und geben Sie biscloud-config keine SSH-Schlüssel für das Root-Konto an (alle SSH-Schlüssel, die über die DigitalOcean-Schnittstelle hinzugefügt wurden, werden weiterhin wie gewohnt hinzugefügt).

  • Erstellen Sie einen neuen Benutzer

  • Legen Sie kein Kennwort für das neue Benutzerkonto fest

  • Richten Sie den SSH-Zugriff für das neue Benutzerkonto ein

  • Erteilen Sie dem neuen Benutzer die Berechtigung sudo ohne Kennwort, um administrative Änderungen vorzunehmen.

  • (Optional) Ändern Sie den Port, den der SSH-Dämon überwacht

  • (Optional) Schränken Sie die Anmeldung bei Root-SSH ein (insbesondere, wenn Sie keine SSH-Schlüssel über die DigitalOcean-Schnittstelle einbinden).

  • (Optional) Lassen Sie unseren neuen Benutzer ausdrücklich zu

Neben dem Entfernen der Kennwörter für beide Konten besteht die drastischste Änderung darin, dass das neue Kontosudo verwenden darf, ohne ein Kontokennwort einzugeben. Dies ist erforderlich, da wir keine Root-Anmeldungen zulassen und kein Kontokennwort für unseren neuen Benutzer festlegen.

Nachdem sich der neue Benutzer angemeldet hat, kann er auf sichere Weise ein Kennwort festlegen und die sudo-Berechtigungen ändern, sodass bei Bedarf ein Kennwort erforderlich ist.

Beginnen wir mit diesen angepassten Zielen.

Verwenden von Cloud-Config-Dateien

Die Dateicloud-configist im Grunde eine YAML-Datei, die bestimmte Anweisungen versteht. YAML ist ein Datenserialisierungsformat, das für den Menschen gut lesbar ist und das Verstehen und Bearbeiten vereinfacht.

YAML-Dateien basieren auf einigen Regeln für die Formatierung:

  • Einrückung mit Leerzeichen gibt die Struktur und Beziehung der Elemente zueinander an. Elemente, die stärker eingerückt sind, sind Unterelemente des ersten Elements mit einer niedrigeren Einrückungsebene darüber.

  • Listenmitglieder können durch einen führenden Strich identifiziert werden.

  • Assoziative Array-Einträge werden mit einem Doppelpunkt (:) gefolgt von einem Leerzeichen und dem Wert erstellt.

  • Textblöcke werden eingerückt. Verwenden Sie das Pipe-Zeichen (|) vor dem Block, um anzugeben, dass der Block unverändert gelesen werden soll, wobei die Formatierung beibehalten wird.

Die erste Zeile einercloud-config-Datei muss eine spezielle Kennung enthalten, damit das Programmcloud-initweiß, dass es sich bei der Datei um einecloud-config-Datei handelt. Das sieht so aus:

#cloud-config

Dies muss alleine in die allererste Zeile gestellt werden. Diecloud-config-Datei muss beim Erstellen des Servers angegeben werden. Dies kann auf zwei verschiedene Arten erreicht werden.

Beachten Sie, dass der Metadatendienst nur in Regionen verfügbar ist, in denen Cloud 1.5 bereitgestellt wird. Darüber hinaus ist die Version von cloud-init, die für die Verwendung des Benutzerdatenfelds erforderlich ist, derzeit nur in Ubuntu 14.04 und CentOS 7 sowie in Anwendungsimages verfügbar, die auf diesen Releases basieren.

Über die Bedienfeldschnittstelle gibt es ein optionales Kontrollkästchen zum Aktivieren von Benutzerdaten. Wenn Sie dies auswählen, wird ein Textfeld angezeigt, in das Sie die Dateicloud-configeinfügen können:

DigitalOcean user data

Wenn Sie die API verwenden, kann das JSON-Objekt, das während einer Erstellungsanforderung übergeben wird, ein Feld mit dem Namenuser_data verwenden. Beispielsweise könnten Sie ein JSON-Objekt übergeben, das ungefähr so ​​aussieht:

{
    "name": "test",
    "private_networking": true,
    "region": "nyc3",
    "size": "512mb",
    "image": "ubuntu-14-04-x64",
    "user_data":"#cloud-config
        config_data
        more_config"
    "ssh_keys":[ 12345,56789 ]
}

Beide Methoden funktionieren in der Praxis genau gleich. Verwenden Sie also die für Sie am besten geeignete Methode.

Einrichten des neuen Benutzerkontos

Als erstes müssen wir unser neues Benutzerkonto konfigurieren.

Hier werden fast alle Arbeiten stattfinden. Das Root-Konto hat standardmäßig kein Passwort, daher müssen wir dort kein Passwort "aufheben".

Erstellen Sie den neuen Benutzer

Um einen neuen Benutzer zu erstellen, verwenden wir die Direktiveusers. Dies wird eine Liste aller neuen Konten enthalten, die wir erstellen möchten. Da wir nur ein einziges Konto erstellen, haben wir eine Liste mit einem. Um dem Leitfaden zu folgen, auf den wir verlinkt haben, nennen wir dieses neue Kontodemo.

Denken Sie daran, wir müssen unserecloud-config-Dateien mit#cloud-config allein in der ersten Zeile beginnen. Bisher sieht unsere Datei so aus:

#cloud-config
users:
  - name: demo

Wenn wir zusätzliche Benutzer hinzufügen möchten, können Sie ein Element darunter platzieren und horizontal an diesem ausrichten. Beginnen Sie dabei erneut mit einem Bindestrich:

#cloud-config
users:
  - name: demo
  - name: second_user

Jeder der Bindestriche gibt ein separates Benutzerkonto an, unter dem wir die Details des Benutzers hinzufügen können (was wir in Kürze tun werden). Wir erstellen jedoch nur einen einzelnen Benutzer. Daher wird diese zweite Zeile in diesem Handbuch nicht angezeigt.

Autorisierte Schlüssel hinzufügen

Um sich ohne Passwort in diesem neuen Konto anzumelden, müssen wir einen oder mehrere unserer öffentlichen SSH-Schlüssel bereitstellen. Diese werden derauthorized_keys-Datei des neuen Benutzers im Verzeichnis.sshin seinem Ausgangsverzeichnis hinzugefügt.

Dies wird mit der Direktivessh-authorized-keyserreicht, die ein Unterelement des Eintragsusersist. Grundsätzlich bedeutet dies, dass wir es an dername-Richtlinie ausrichten, aber keinen Bindestrich geben, da dies nicht der Beginn eines neuen Benutzereintrags ist.

Der Eintragssh-authorized-keysenthält tatsächlich eine Liste von Schlüsseln. Auf diese Weise können Sie der Datei mehr als einen öffentlichen SSH-Schlüssel hinzufügen. Wenn Sie beispielsweise ein SSH-Schlüsselpaar für Ihren Laptop, Ihren Desktop und Ihren Computer bei der Arbeit haben, können Sie alle diese als separate Elemente in die Listessh-authorized-keysaufnehmen.

Um den Inhalt Ihres öffentlichen Schlüssels von Ihrem lokalen Computer abzurufen, können Sie Folgendes eingeben:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]

Sie können dann den gesamten Inhalt als Element unter unseren Eintragssh-authorized-keyseinfügen. Öffentliche SSH-Schlüssel können offen veröffentlicht werden, sodass dies kein Sicherheitsrisiko darstellt:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]

Wenn Sie zusätzliche Schlüssel hinzufügen möchten, können Sie einen weiteren Bindestrich gefolgt vom zweiten öffentlichen Schlüssel hinzufügen:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - key_one
      - key_two

Fügen Sie hier alle Schlüssel hinzu, mit denen Sie sich bei diesem Konto anmelden möchten.

Richten Sie Sudo Access ein

Der nächste Schritt besteht darin, den Zugriff vonsudoauf unser neues Konto zu konfigurieren. Zur Wiederholung konfigurieren wir den passwortlosensudo-Zugriff, da wir aus Sicherheitsgründen kein Passwort für dieses Konto festlegen.

Um den Zugriff zu konfigurieren, werden wir zwei separate Schritte ausführen.

Zuerst erstellen wir den Eintrag, den wir für die Dateisudoersverwenden möchten. Unsere Änderungen werden tatsächlich in eine separate Datei im Verzeichnis/etc/sudoers.d geschrieben, die/etc/sudoers beim Parsen enthält.

Der Eintrag, den wir erstellen müssen, muss nicht den Benutzernamen enthalten, dacloud-init intelligent genug ist, um den Kontonamen aus den Eintragsinformationen herauszufinden. Die Direktive, die wir verwenden müssen, istsudo, was mit unseren anderen Level-Direktiven vonusersübereinstimmt.

In unserem Handbuch sieht es folgendermaßen aus, da wir die Fähigkeit vonsudoohne Kennwort konfigurieren:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']

Dadurch wird eine Datei im Verzeichnis/etc/sudoers.d mit dem Namen90-cloud-init-users erstellt. In dieser Datei sieht der Eintrag folgendermaßen aus:

demo ALL=(ALL) NOPASSWD:ALL

Das zweite, was wir tun werden, ist, unseren Benutzer zur Gruppesudohinzuzufügen. Dies ist nicht unbedingt erforderlich, da wir einen Eintrag für unser neues Konto haben, der nachsudo analysiert wird. Dies gibt uns jedoch mehr Flexibilität.

Später möchten wir möglicherweise manuell ein Kennwort für unseren Benutzer festlegen und dieses Kennwort fürsudo Befehle benötigen. Wenn sich unser Benutzer bereits in der Gruppesudobefindet, müssen wir lediglich ein Kennwort festlegen und den Eintrag in der Datei90-cloud-init-usersentfernen.

Um eine zusätzliche Gruppe hinzuzufügen, können wir die Direktivegroupsverwenden:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo

Dies erleichtert den Übergang zu einem traditionelleren Setup vonsudo. Wie das geht, zeigen wir Ihnen am Ende dieses Leitfadens.

Legen Sie die Shell-Umgebung fest

Standardmäßig haben neu erstellte Benutzer ihre Standard-Shell auf die sehr einfache/bin/sh-Shell eingestellt.

Dies ist eine viel reduzierte Umgebung, als die meisten Menschen es gewohnt sind. Daher möchten wir die Shell-Umgebung vonbashfür unseren neuen Benutzer manuell angeben.

Dies kann mit der Direktiveshellinnerhalb des Level-Elementsuserserreicht werden. Alles, was wir tun müssen, ist, auf den vollständigen Pfad der ausführbaren Datei vonbashzu verweisen:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash

Wir haben unsere neue Benutzerkonfiguration abgeschlossen. Wir können jetzt mit den optionalen Schritten fortfahren, mit denen unser SSH-Daemon gesperrt wird.

Konfigurieren und Sperren des SSH-Daemons (optional)

Die nächsten Schritte können hilfreich sein, um die Sicherheit zu erhöhen. Sie können einen oder alle nach Belieben implementieren. Weitere Informationen zu diesen Optionen finden Sie in der von uns automatisierten Anleitung. Wir zeigen Ihnen, wie Sie die einzelnen Elemente mit zwei verschiedenen Methoden implementieren.

Alle Änderungen, die wir vornehmen müssen, befinden sich in der Datei/etc/ssh/sshd_config. Um es noch einmal zu wiederholen: Die Änderungen, an denen wir interessiert sind, sind:

  • (Optional) Ändern Sie den Port, den der SSH-Dämon überwacht

  • (Optional) Schränken Sie die Anmeldung bei Root-SSH ein (insbesondere, wenn Sie keine SSH-Schlüssel über die DigitalOcean-Schnittstelle einbinden).

  • (Optional) Lassen Sie unseren neuen Benutzer ausdrücklich zu

Diese Einstellungen können implementiert werden, indem folgende Änderungen in der Dateisshd_configvorgenommen werden:

  • Port4444

  • PermitRootLoginno

  • AllowUsersdemo

Es gibt zwei Ansätze, um diese Änderungen vorzunehmen. Die erste besteht darin, die Datei vollständig neu zu schreiben, indem die gesamte Konfigurationsdatei in unserercloud-config-Datei angegeben wird. Die zweite Möglichkeit besteht darin, die Änderungen mithilfe gängiger Linux-Textdienstprogramme strategisch vorzunehmen.

Beide haben ihre Vorteile und beide weisen unterschiedliche Richtlinien incloud-config auf. Wir werden uns der Reihe nach darum kümmern.

Konfigurieren des SSH-Daemons durch Bereitstellen einer neuen Konfigurationsdatei

Die erste Strategie, um die gewünschten Änderungen vorzunehmen, besteht darin, die Datei vollständig mit dem gewünschten Inhalt neu zu schreiben.

Auf diese Weise haben wir die vollständige Kontrolle über die Datei, unabhängig davon, was standardmäßig dort verfügbar ist. Die Methodik ist einfach und es ist leicht, die Ergebnisse unserer Maßnahmen vorwegzunehmen.

Um eine neue Datei auf die Festplatte zu schreiben, können wir die Direktivewrite_filesverwenden. Dies ist eine Direktive der obersten Ebene, daher sollte sie außerhalb des Abschnittsusersplatziert werden, in dem wir zuvor gearbeitet haben.

Wir liefern eine Liste (dargestellt durch einen Bindestrich für jedes Element) von Dateien, die wir schreiben möchten.

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
write_files:
  - item_one
  - item_two

In unserem Fall schreiben wir nur eine Datei. Für jede Datei geben wir Details zu den Änderungen an, die wir vornehmen möchten. Beispielsweise können Siepath,content,owner,permissions und sogarencoding verwenden.

Standardmäßig ist der Eigentümer von Dateien, die mit dieser Methode erstellt wurden, root und die Berechtigungen sind644, genau das, was wir wollen. Wir müssen also nur die Direktivenpath undcontent angeben.

path ist nur der Speicherort im Dateisystem, an dem die Datei geschrieben werden soll.

Für diecontent möchten wir den gesamten Inhalt der Datei so bereitstellen, wie er ist. Denken Sie daran, dass wir das Pipe-Zeichen (|) verwenden können, um einen Textblock zu übergeben, der seine Formatierung beibehält.

Für den Inhalt unserersshd_config-Datei verwenden wir nur den Standardinhalt ohne Kommentare (der Kürze halber) mit den Änderungen, die wir vornehmen wollten. Der vollständige Abschnitt zum Umschreiben unserer Datei sieht folgendermaßen aus:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
write_files:
  - path: /etc/ssh/sshd_config
    content: |
         Port 4444
         Protocol 2
         HostKey /etc/ssh/ssh_host_rsa_key
         HostKey /etc/ssh/ssh_host_dsa_key
         HostKey /etc/ssh/ssh_host_ecdsa_key
         HostKey /etc/ssh/ssh_host_ed25519_key
         UsePrivilegeSeparation yes
         KeyRegenerationInterval 3600
         ServerKeyBits 1024
         SyslogFacility AUTH
         LogLevel INFO
         LoginGraceTime 120
         PermitRootLogin no
         StrictModes yes
         RSAAuthentication yes
         PubkeyAuthentication yes
         IgnoreRhosts yes
         RhostsRSAAuthentication no
         HostbasedAuthentication no
         PermitEmptyPasswords no
         ChallengeResponseAuthentication no
         X11Forwarding yes
         X11DisplayOffset 10
         PrintMotd no
         PrintLastLog yes
         TCPKeepAlive yes
         AcceptEnv LANG LC_*
         Subsystem sftp /usr/lib/openssh/sftp-server
         UsePAM yes
         AllowUsers demo

Dadurch wird der Inhalt von/etc/ssh/sshd_config vollständig durch den neuen Inhalt ersetzt, den wir bereitgestellt haben. Dies ist die Standarddateisshd_configfür Ubuntu, in der nur die oben genannten Elemente geändert wurden.

Dies ist eine Methode, um Änderungen am SSH-Dämon vorzunehmen.

Konfigurieren des SSH-Daemons durch gezielte Änderungen

Die zweite Möglichkeit, diesshd_config-Datei zu ändern, besteht in gezielten Änderungen. Linux-Systeme verfügen über eine Reihe leistungsstarker Tools zur Textbearbeitung, mit denen wir nur die Änderungen vornehmen können, die wir benötigen.

Um beliebige Befehle auszuführen, verwenden wir eine Direktive namensruncmd, mit der wir jeden Befehl auf dem System ausführen können. Jeder Befehl ist ein Listenelement unter der Direktive. Diese können entweder als Zeichenfolgen angegeben werden, die den gesamten Befehl darstellen, oder als Array mit dem Befehl und allen Optionen als Elementen.

Wir werden den Befehlsed verwenden, der für String-Ersetzungen gemacht wird. Obwohl Sie mehrere Operationen an einen einzelnensed-Befehl übergeben können, führen wir für jedensed-Befehl eine einzelne Operation aus. Auf diese Weise können wir Probleme einfacher beheben. Alle unseresed-Befehle bearbeiten die vorhandenesshd_config-Datei.

Unser erster Befehlsedändert die Zeile, in der der Überwachungsport konfiguriert ist. Wir identifizieren dies, indem wir nach einer Zeile suchen, die mit „Port“ beginnt. Wir werdensed anweisen, die gesamte Zeile (angegeben durch den regulären Ausdruck^.*$) durch unserePort 4444-Konfiguration zu ersetzen:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' etc/ssh/sshd_config

Unsere nächstesed-Zeile ändert die Direktive "PermitRootLogin", indem sie am Anfang einer Zeile nach dieser Zeichenfolge sucht. Wir werden noch einmal die gesamte Zeile ersetzen, diesmal durchPermitRootLogin no:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config

Der nächste Befehlsed fügt am Ende der Datei eine Zeile hinzu, da die Datei derzeit keine Anweisung "AllowUsers" enthält. Wir tun dies, indem wir die letzte Zeile (angegeben durch "$") abgleichen und die benötigte Zeile anhängen.

Danach müssen wir den SSH-Daemon neu starten, damit unsere Änderungen weitergegeben werden. Wir können dies einfach mit dem Upstart-Befehl "restart" tun:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
  - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
  - restart ssh

Dies sollte ausreichen, um die erforderlichen Änderungen an unserer Datei vorzunehmen und den Dienst neu zu starten.

Fertiges Produkt

Wir haben jetzt alle unsere angepassten Ziele mit der Dateicloud-configerreicht. Sie können Ihren Server entweder über das Bedienfeld erstellen oder die API verwenden, um einen Server hochzufahren.

Wenn Sie sich für die Verwendung der API entscheiden, sieht die Nutzlast der Beispieldaten möglicherweise folgendermaßen aus:

{"name": "your_droplet_name",
"private_networking": true,
"region": "nyc3",
"size": "512mb",
"image": "ubuntu-14-04-x64",
"user-data": "#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
  - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
  - restart ssh"}

Fehlerbehebung

Wenn Sie Probleme haben, damit Ihrecloud-config-Datei ordnungsgemäß funktioniert, können Sie in den Protokolldateien nach Hinweisen suchen.

Diese befinden sich in:

  • /var/log/cloud-init.log: Die tatsächlichen Prozessprotokolle für die Verarbeitung der Konfigurationsdateien durch Cloud-Init.

  • /var/log/cloud-init-output.log: Alle Ausgaben, die durch die Verarbeitung der Konfiguration erzeugt werden, finden Sie hier.

Normalerweise finden Sie einige gute Informationen darüber, was passiert ist, indem Siegrep zum Durchsuchen dieser Dateien verwenden.

Wenn Sie in die Situation geraten sind, dass Sie sich aufgrund einiger Konfigurationsprobleme nicht mehr bei dem von Ihnen erstellten Server anmelden können, sollten Sie den Server zerstören und erneut starten. Zur Fehlerbehebung ist es manchmal erforderlich, vorübergehend einen Testserver mit einem Root-Kennwort in dercloud-config-Datei einzurichten, damit Sie sehen können, was falsch läuft.

Dies kann erreicht werden, indem Sie so etwas in Ihrecloud-config aufnehmen:

#cloud-config
chpasswd:
  list: |
    root:yourpassword
  expire: False
. . .

Auf diese Weise können Sie sich über die DigitalOcean-Konsole anmelden, die nicht auf SSH angewiesen ist. Denken Sie daran, dass jedes Kennwort, das Sie hier eingeben, für jeden Benutzer auf Ihrem Server während der gesamten Lebensdauer Ihres Systems lesbar ist. Zerstören Sie dieses Droplet, nachdem Sie das Problem ermittelt haben. Sie können dann einen anderen Server mit der korrigiertencloud-config-Datei starten.

Einrichten von traditionellem Sudo-Zugriff

Wenn Sie nach der Bereitstellung Ihres Servers einen konventionelleren, kennwortauthentifiziertensudo-Zugriff konfigurieren möchten, können Sie problemlos die folgenden Schritte ausführen:

Zunächst müssen Sie ein Passwort für das neue Konto festlegen. Die einzige Möglichkeit, dies zu tun, besteht darin,without mit dem aktuellen Passwort (das nicht existiert) übersudo einzugeben. Sie müssen am Ende des Befehls den Namen Ihres neuen Benutzerkontos angeben, um das root-Passwort nicht festzulegen:

sudo passwd demo

Nachdem Sie ein Kennwort für Ihr Konto haben, stellen Sie sicher, dass Sie sich tatsächlich in der Gruppesudobefinden. Dies kann durch Eingabe erfolgen:

groups
demo sudo

Wenn Sie noch nicht in der Gruppesudoind, können Sie sich selbst hinzufügen, indem Sie Folgendes eingeben:

sudo usermod -a -G sudo demo

Bearbeiten Sie nun die Datei90-cloud-init-users mit dem Befehlvisudo, indem Sie die Datei als Argument übergeben:

sudo visudo -f /etc/sudoers.d/90-cloud-init-users

Kommentieren Sie die mit Ihrem Benutzer verknüpfte Zeile aus oder entfernen Sie sie:

#demo ALL=(ALL) NOPASSWD:ALL

Speichern und schließen Sie die Datei. Ihr Konto benötigt jetzt Ihr Passwort, um die Befehle vonsudoauszuführen.

Fazit

Die Verwendung voncloud-config-Dateien zum Abschließen der Erstkonfiguration Ihrer Server kann einfach sein und Ihnen auf lange Sicht Zeit sparen. Die Dateien sind einfach zu optimieren, und der Aufbau einer Reihe unterschiedlicher Konfigurationen bietet Ihnen große Flexibilität bei der schnellen Einrichtung von Servern.

Durch Kombinieren voncloud-config mit einem traditionelleren Konfigurationsmanagementsystem, nachdem die Maschine online geschaltet wurde, können Sie neue Maschinen schnell und einfach genau in den gewünschten Zustand bringen.