One place for hosting & domains

      Sie

      So sichern, wiederherstellen und migrieren Sie eine MongoDB-Datenbank unter Ubuntu 20.04


      Der Autor hat den COVID-19 Relief Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      MongoDB ist eine der beliebtesten NoSQL-Datenbank-Engines. Es ist bekannt für seine Skalierbarkeit, Robustheit, Zuverlässigkeit und Benutzerfreundlichkeit. In diesem Artikel werden Sie eine Beispiel-MongoDB-Datenbank sichern, wiederherstellen und migrieren.

      Beim Importieren und Exportieren einer Datenbank werden Daten in einem für Menschen lesbaren Format verarbeitet, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Sicherungs- und Wiederherstellungsvorgänge von MongoDB MongoDB-spezifische Binärdaten, wodurch nicht nur die Konsistenz und Integrität Ihrer Daten, sondern auch die spezifischen MongoDB-Attribute erhalten bleiben. Daher ist es für die Migration normalerweise vorzuziehen, Backup und Wiederherstellung zu verwenden, solange das Quell- und das Zielsystem kompatibel sind.

      Voraussetzungen

      Bevor Sie diesem Tutorial folgen, stellen Sie bitte sicher, dass Sie die folgenden Voraussetzungen erfüllen:

      Sofern nicht anders angegeben, sollten alle Befehle, für die in diesem Tutorial-Root-Berechtigungen erforderlich sind, als Nicht-Root-Benutzer mit Sudo-Berechtigungen ausgeführt werden.

      Schritt 1 — Verwenden von JSON und BSON in MongoDB

      Bevor Sie mit diesem Artikel fortfahren, ist ein grundlegendes Verständnis der Angelegenheit erforderlich. Wenn Sie Erfahrung mit anderen NoSQL-Datenbanksystemen wie Redis haben, können Sie bei der Arbeit mit MongoDB einige Ähnlichkeiten feststellen.

      MongoDB verwendet die Formate JSON und BSON (binäres JSON) zum Speichern seiner Informationen. JSON ist das für Menschen lesbare Format, das sich perfekt zum Exportieren und eventuell zum Importieren Ihrer Daten eignet. Sie können Ihre exportierten Daten mit jedem Tool, das JSON unterstützt, einschließlich eines einfachen Texteditors, weiter verwalten.

      Ein Beispiel-JSON-Dokument sieht folgendermaßen aus:

      Example of JSON Format

      {"address":[
          {"building":"1007", "street":"Park Ave"},
          {"building":"1008", "street":"New Ave"},
      ]}
      

      JSON ist zum Arbeiten praktisch, unterstützt jedoch nicht alle in BSON verfügbaren Datentypen. Dies bedeutet, dass es bei Verwendung von JSON zu einem sogenannten „Verlust der Wiedergabetreue“ der Informationen kommt. Zum Sichern und Wiederherstellen ist es besser, das binäre BSON zu verwenden.

      Zweitens müssen Sie sich nicht um die explizite Erstellung einer MongoDB-Datenbank kümmern. Wenn die für den Import angegebene Datenbank noch nicht vorhanden ist, wird sie automatisch erstellt. Noch besser ist die Struktur der Sammlungen (Datenbanktabellen). Im Gegensatz zu anderen Datenbank-Engines wird in MongoDB die Struktur beim Einfügen des ersten Dokuments (Datenbankzeile) automatisch neu erstellt.

      Drittens kann das Lesen oder Einfügen großer Datenmengen, wie z. B. die Aufgaben dieses Artikels, in MongoDB ressourcenintensiv sein und einen Großteil Ihrer CPU, Ihres Arbeitsspeichers und Ihres Speicherplatzes beanspruchen. Dies ist entscheidend, da MongoDB häufig für große Datenbanken und Big Data verwendet wird. Die einfachste Lösung für dieses Problem besteht darin, die Exporte und Sicherungen während der Nacht oder außerhalb der Stoßzeiten auszuführen.

      Viertens kann die Informationskonsistenz problematisch sein, wenn Sie einen ausgelasteten MongoDB-Server haben, auf dem sich die Informationen während des Datenbankexports oder -sicherungsprozesses ändern. Eine mögliche Lösung für dieses Problem ist die Replikation, die Sie möglicherweise in Betracht ziehen, wenn Sie mit dem Thema MongoDB fortfahren.

      Während Sie die Import- und Exportfunktionen zum Sichern und Wiederherstellen Ihrer Daten verwenden können, gibt es bessere Möglichkeiten, um die vollständige Integrität Ihrer MongoDB-Datenbanken sicherzustellen. Um Ihre Daten zu sichern, sollten Sie den Befehl mongodump verwenden. Zum Wiederherstellen verwenden Sie mongorestore. Sehen wir uns an, wie sie funktionieren.

      Schritt 2 – Verwenden von mongodump zum Sichern einer MongoDB-Datenbank

      Lassen Sie uns zuerst das Sichern Ihrer MongoDB-Datenbank behandeln.

      Ein wesentliches Argument für mongodump ist --db, das den Namen der Datenbank angibt, die Sie sichern möchten. Wenn Sie keinen Datenbanknamen angeben, sichert mongodump alle Ihre Datenbanken. Das zweite wichtige Argument ist --out, das das Verzeichnis definiert, in das die Daten gespeichert werden. Lassen Sie uns beispielsweise die newdb-Datenbank sichern und im Verzeichnis /var/backups/mongobackups speichern. Im Idealfall haben wir jedes unserer Backups in einem Verzeichnis mit dem aktuellen Datum wie /var/backups/mongobackups/10-29-20.

      Erstellen Sie zuerst dieses Verzeichnis /var/backups/mongobackups:

      • sudo mkdir /var/backups/mongobackups

      Führen Sie dann mongodump aus:

      • sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`

      Sie werden eine Ausgabe wie diese sehen:

      Output

      2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

      Beachten Sie, dass wir im obigen Verzeichnispfad das Datum + „%m-%d-%y“ verwendet haben, das automatisch das aktuelle Datum abruft. Auf diese Weise können wir Backups im Verzeichnis wie /var/backups/10-29-20/ erstellen. Dies ist besonders praktisch, wenn wir die Backups automatisieren.

      An diesem Punkt verfügen Sie über eine vollständige Sicherung der newdb-Datenbank im Verzeichnis /var/backups/mongobackups/10-29-20/newdb/. Dieses Backup verfügt über alles, um newdb richtig zu restaurieren und ihre sogenannte „Treue“ zu erhalten.

      In der Regel sollten Sie regelmäßige Sicherungen durchführen, vorzugsweise wenn der Server am wenigsten ausgelastet ist. Auf diese Weise können Sie den Befehl mongodump als Cron-Job festlegen, sodass er regelmäßig ausgeführt wird, z. B. jeden Tag um 03:03 Uhr.

      Um dies zu erreichen, öffnen Sie Crontab, Cron’s Editor:

      Beachten Sie, dass Sie beim Ausführen von sudo crontab die Cron-Jobs für den Root-Benutzer bearbeiten. Dies wird empfohlen, da die Crons für Ihren Benutzer möglicherweise nicht ordnungsgemäß ausgeführt werden, insbesondere wenn für Ihr Sudo-Profil eine Passwortüberprüfung erforderlich ist.

      Fügen Sie in die Crontab-Eingabeaufforderung den folgenden mongodump-Befehl ein:

      crontab

      3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
      

      Im obigen Befehl lassen wir das Argument --db absichtlich weg, da Sie typischerweise alle Ihre Datenbanken gesichert werden möchten.

      Abhängig von Ihrer MongoDB-Datenbankgröße wird Ihnen möglicherweise bald der Speicherplatz mit zu vielen Backups ausgehen. Aus diesem Grund wird auch empfohlen, die alten Backups regelmäßig zu bereinigen oder zu komprimieren.

      Um beispielsweise alle Backups zu löschen, die älter als sieben Tage sind, können Sie den folgenden Bash-Befehl verwenden:

      • find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;

      Ähnlich wie beim vorherigen mongodump-Befehl können Sie diesen auch als Cron-Job hinzufügen. Er sollte kurz vor dem Start des nächsten Backups ausgeführt werden, z. B. um 03:01 Uhr. Öffnen Sie zu diesem Zweck crontab erneut:

      Fügen Sie danach die folgende Zeile ein:

      crontab

      1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
      

      Speichern und schließen Sie die Datei.

      Wenn Sie alle Aufgaben in diesem Schritt ausführen, wird eine ordnungsgemäße Backup-Lösung für Ihre MongoDB-Datenbanken sichergestellt.

      Schritt 3 – Verwenden von mongorestore zum Wiederherstellen und Migrieren einer MongoDB-Datenbank

      Wenn Sie Ihre MongoDB-Datenbank aus einem früheren Backup wiederherstellen, wird die genaue Kopie Ihrer MongoDB-Informationen zu einem bestimmten Zeitpunkt erstellt, einschließlich aller Indizes und Datentypen. Dies ist besonders nützlich, wenn Sie Ihre MongoDB-Datenbanken migrieren möchten. Zum Wiederherstellen von MongoDB verwenden wir den Befehl mongorestore, der mit den binären Backups funktioniert, die mongodump produziert.

      Lassen Sie uns unsere Beispiele mit der newdb-Datenbank fortsetzen und sehen, wie wir sie aus dem zuvor erstellten Backup wiederherstellen können. Wir geben zuerst den Namen der Datenbank mit dem Argument --nsInclude an. Wir verwenden newdb.* zum Wiederherstellen aller Sammlungen. Um eine einzelne Sammlung wie Restaurants wiederherzustellen, verwenden Sie stattdessen newdb.restaurants.

      Wenn wir dann --drop verwenden, stellen wir sicher, dass die Zieldatenbank zuerst weggelassen wird, sodass das Backup in einer sauberen Datenbank wiederhergestellt wird. Als letztes Argument geben wir das Verzeichnis des letzten Backups an, das in etwa so aussieht: /var/backups/mongobackups/10-29-20/newdb/.

      Sobald Sie ein zeitgestempeltes Backup haben, können Sie dieses mit folgendem Befehl wiederherstellen:

      • sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

      Sie werden eine Ausgabe wie diese sehen:

      Output

      2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead 2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir 2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json 2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson 2020-10-29T19:25:46.130+0000 no indexes to restore 2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents) 2020-10-29T19:25:46.130+0000 done

      Im obigen Fall stellen wir die Daten auf demselben Server wieder her, auf dem wir das Backup erstellt haben. Wenn Sie die Daten auf einen anderen Server migrieren und dieselbe Technik verwenden möchten, sollten Sie das Backup-Verzeichnis, in unserem Fall /var/backups/mongobackups/10-29-20/newdb/, auf den anderen Server kopieren.

      Zusammenfassung

      Sie haben jetzt einige wichtige Aufgaben im Zusammenhang mit dem Sichern, Wiederherstellen und Migrieren Ihrer MongoDB-Datenbanken ausgeführt. Kein Produktions-MongoDB-Server sollte jemals ohne eine zuverlässige Backup-Strategie wie die hier beschriebene ausgeführt werden.



      Source link

      So bearbeiten Sie die Sudoers-Datei


      [*]

      Einführung

      Die Trennung von Berechtigungen ist eines der grundlegenden Sicherheitsparadigmen, die in Linux- und Unix-ähnlichen Betriebssystemen implementiert sind. Normale Benutzer arbeiten mit eingeschränkten Berechtigungen, um den Umfang ihres Einflusses auf ihre eigene Umgebung und nicht auf das breitere Betriebssystem zu reduzieren.

      Ein spezieller Benutzer namens root verfügt über Super-Benutzer-Berechtigungen. Dies ist ein Administratorkonto ohne die Einschränkungen, die für normale Benutzer gelten. Benutzer können Befehle mit Super-Benutzer- oder root-Berechtigungen auf verschiedene Arten ausführen.

      In diesem Artikel wird erläutert, wie Sie root-Berechtigungen korrekt und sicher erhalten. Ein besonderer Schwerpunkt liegt dabei auf der Bearbeitung der Datei /etc/sudoers.

      Wir werden diese Schritte auf einem Ubuntu 20.04-Server ausführen, aber die meisten modernen Linux-Distributionen wie Debian und CentOS sollten auf ähnliche Weise funktionieren.

      In diesem Leitfaden wird davon ausgegangen, dass Sie die hier beschriebene Ersteinrichtung des Servers bereits abgeschlossen haben. Melden Sie sich als regulärer Benutzer ohne root-Berechtigung bei Ihrem Server an und fahren Sie unten fort.

      Hinweis: Dieses Tutorial befasst sich ausführlich mit der Eskalation von Berechtigungen und der sudoers-Datei. Wenn Sie einem Benutzer nur sudo-Berechtigungen hinzufügen möchten, lesen Sie unsere Schnellstart-Tutorials zum Erstellen eines neuen Sudo-fähigen Benutzers für Ubuntu und CentOS.

      So erhalten Sie root-Berechtigungen

      Es gibt drei grundlegende Möglichkeiten, um root-Berechtigungen zu erhalten, die sich in ihrem Entwicklungsstand unterscheiden.

      Anmelden als root-Benutzer

      Die einfachste und unkomplizierteste Methode zum Abrufen von root-Berechtigungen besteht darin, sich direkt als root-Benutzer bei Ihrem Server anzumelden.

      Wenn Sie sich bei einem lokalen Computer anmelden (oder eine Out-of-Band-Konsolenfunktion auf einem virtuellen Server verwenden), geben Sie an der Anmeldeaufforderung root als Benutzernamen ein und geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

      Wenn Sie sich über SSH anmelden, geben Sie den root-Benutzer vor der IP-Adresse oder dem Domänennamen in Ihrer SSH-Verbindungszeichenfolge an:

      • ssh root@server_domain_or_ip

      Wenn Sie keine SSH-Schlüssel für den root-Benutzer eingerichtet haben, geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

      Verwenden Sie su, um ein root-Benutzer zu werden

      Die direkte Anmeldung als root-Benutzer wird normalerweise nicht empfohlen, da es einfach ist, das System für nicht administrative Aufgaben zu verwenden, was gefährlich ist.

      Der nächste Weg, um Superuser-Berechtigungen zu erhalten, ermöglicht es Ihnen, jederzeit der root-Benutzer zu werden, wie Sie es benötigen.

      Wir können dies tun, indem wir den Befehl su aufrufen, der für „Ersatzbenutzer“ steht. Geben Sie Folgendes ein, um root-Berechtigungen zu erhalten:

      Sie werden aufgefordert, das Kennwort des root-Benutzers einzugeben. Anschließend werden Sie in eine root-Shell-Sitzung versetzt.

      Wenn Sie die Aufgaben abgeschlossen haben, für die root-Berechtigungen erforderlich sind, kehren Sie zu Ihrer normalen Shell zurück, indem Sie Folgendes eingeben:

      Verwenden Sie sudo, um Befehle als root-Benutzer auszuführen

      Der letzte Weg, um root-Berechtigungen zu erhalten, den wir diskutieren werden, ist mit dem Befehl sudo.

      Mit dem Befehl sudo können Sie einmalige Befehle mit root-Berechtigungen ausführen, ohne eine neue Shell erstellen zu müssen. Es wird wie folgt ausgeführt:

      Im Gegensatz zu su fordert der Befehl sudo das Passwort des aktuellen Benutzers an, nicht das root-Passwort.

      Aufgrund seiner Auswirkungen auf die Sicherheit wird Sudo-Zugriff Benutzern standardmäßig nicht gewährt und muss eingerichtet werden, bevor er ordnungsgemäß funktioniert. In unseren Schnellstart-Tutorials zum Erstellen eines neuen Sudo-fähigen Benutzers für Ubuntu und CentOS erfahren Sie, wie Sie einen Sudo-fähigen Benutzer einrichten.

      Im folgenden Abschnitt werden wir ausführlicher erläutern, wie Sie die Sudo-Konfiguration ändern können.

      Was ist Visudo?

      Der Befehl sudo wird über eine Datei unter /etc/sudoers konfiguriert.

      Warnung: Bearbeiten Sie diese Datei nie mit einem normalen Texteditor! Verwenden Sie stattdessen immer den Befehl visudo!

      Da eine falsche Syntax in der Datei /etc/sudoers zu einem Systembruch führen kann, bei dem es nicht möglich ist, erhöhte Berechtigungen zu erhalten, ist es wichtig, den Befehl visudo zum Bearbeiten der Datei zu verwenden.

      Der Befehl visudo öffnet wie gewohnt einen Texteditor, überprüft jedoch beim Speichern die Syntax der Datei. Dies verhindert, dass Konfigurationsfehler sudo-Vorgänge blockieren. Dies ist möglicherweise Ihre einzige Möglichkeit, root-Berechtigungen zu erhalten.

      Traditionell öffnet visudo die Datei /etc/sudoers mit dem vi-Texteditor. Ubuntu hat visudo jedoch so konfiguriert, dass stattdessen der nano-Texteditor verwendet wird.

      Wenn Sie ihn wieder in vi ändern möchten, geben Sie den folgenden Befehl ein:

      • sudo update-alternatives --config editor

      Output

      There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

      Wählen Sie die Zaus, die der Auswahl entspricht, die Sie treffen möchten.

      Unter CentOS können Sie diesen Wert ändern, indem Sie Ihrem ~/.bashrc die folgende Zeile hinzufügen:

      • export EDITOR=`which name_of_editor`

      Geben Sie die Datei ein, um die Änderungen zu implementieren:

      Nachdem Sie visudo konfiguriert haben, führen Sie den Befehl aus, um auf die Datei /etc/sudoers zuzugreifen:

      So bearbeiten Sie die Sudoers-Datei

      In Ihrem ausgewählten Texteditor wird die Datei /etc/sudoers angezeigt.

      Ich habe die Datei von Ubuntu 18.04 kopiert und eingefügt, wobei Kommentare entfernt wurden. Die Datei CentOS /etc/sudoers enthält viele weitere Zeilen, von denen einige in diesem Leitfaden nicht behandelt werden.

      /etc/sudoers

      Defaults        env_reset
      Defaults        mail_badpass
      Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
      
      root    ALL=(ALL:ALL) ALL
      
      %admin ALL=(ALL) ALL
      %sudo   ALL=(ALL:ALL) ALL
      
      #includedir /etc/sudoers.d
      

      Werfen wir einen Blick darauf, was diese Zeilen bewirken.

      Standardzeilen

      In der ersten Zeile „Defaults env_reset“ wird die Terminalumgebung zurückgesetzt, um alle Benutzervariablen zu entfernen. Dies ist eine Sicherheitsmaßnahme, mit der potenziell schädliche Umgebungsvariablen aus der sudo-Sitzung entfernt werden.

      In der zweiten Zeile, wird mit dem Befehl Defaults mail_badpass das System angewiesen, Benachrichtigungen über fehlerhafte sudo-Passwortversuche an den konfigurierten mailto-Benutzer zu senden. Standardmäßig ist dies das root-Konto.

      Die dritte Zeile, die mit „Defaults Secure_path=…“ beginnt, gibt den Pfad an (die Stellen im Dateisystem, nach denen das Betriebssystem nach Anwendungen sucht), die für sudo-Operationen verwendet werden. Dies verhindert, dass Benutzerpfade verwendet werden, was schädlich sein kann.

      Benutzerberechtigungszeilen

      Die vierte Zeile, die die sudo-Berechtigungen des root-Benutzers vorschreibt, unterscheidet sich von den vorhergehenden Zeilen. Schauen wir uns an, was die verschiedenen Felder bedeuten:

      • root ALL=(ALL:ALL) ALL Das erste Feld gibt den Benutzernamen an, für den die Regel gilt (root).

      • root ALL=(ALL:ALL) ALL Das erste „ALL“ gibt an, dass diese Regel für alle Hosts gilt.

      • root ALL=(ALL:ALL) ALL Dieses „ALL“ gibt an, dass der root-Benutzer Befehle wie alle Benutzer ausführen kann.

      • root ALL=(ALL:ALL) ALL Dieses „ALL“ gibt an, dass der root-Benutzer Befehle wie alle Gruppen ausführen kann.

      • root ALL=(ALL:ALL) ALL Das letzte „ALL“ gibt an, dass diese Regeln für alle Befehle gelten.

      Dies bedeutet, dass unser root-Benutzer jeden Befehl mit sudo ausführen kann, solange er sein Passwort angibt.

      Gruppenberechtigungszeilen

      Die nächsten beiden Zeilen ähneln den Benutzerberechtigungszeilen, geben jedoch sudo-Regeln für Gruppen an.

      Namen, die mit % beginnen, geben Gruppennamen an.

      Hier sehen wir, dass die Administratorgruppe jeden Befehl als jeder Benutzer auf jedem Host ausführen kann. Ebenso hat die sudo-Gruppe die gleichen Berechtigungen, kann aber auch wie jede andere Gruppe ausgeführt werden.

      Inklusive Zeile /etc/sudoers.d

      Die letzte Zeile könnte auf den ersten Blick wie ein Kommentar aussehen:

      /etc/sudoers

      . . .
      
      #includedir /etc/sudoers.d
      

      Sie **beginnt mit einem #, das normalerweise einen Kommentar anzeigt. Diese Zeile zeigt jedoch tatsächlich an, dass Dateien im Verzeichnis /etc/sudoers.d ebenfalls bezogen und angewendet werden.

      Dateien in diesem Verzeichnis folgen denselben Regeln wie die Datei /etc/sudoers. Jede Datei, die nicht mit ~ endet und keinen . enthält, wird gelesen und an die sudo-Konfiguration angehängt.

      Dies ist hauptsächlich für Anwendungen gedacht, die die sudo-Berechtigungen bei der Installation ändern möchten. Wenn Sie alle zugehörigen Regeln in einer einzigen Datei im Verzeichnis /etc/sudoers.d ablegen, können Sie leicht erkennen, welche Berechtigungen welchen Konten zugeordnet sind, und Anmeldeinformationen einfach umkehren, ohne die Datei /etc/sudoers direkt bearbeiten zu müssen.

      Wie bei der Datei /etc/sudoers selbst sollten Sie Dateien im Verzeichnis /etc/sudoers.d immer mit visudo bearbeiten. Die Syntax zum Bearbeiten dieser Dateien lautet:

      • sudo visudo -f /etc/sudoers.d/file_to_edit

      So geben Sie einem Benutzer Sudo-Berechtigungen

      Die häufigste Operation, die Benutzer beim Verwalten von sudo-Berechtigungen ausführen möchten, besteht darin, einem neuen Benutzer allgemeinen sudo-Zugriff zu gewähren. Dies ist nützlich, wenn Sie einem Konto vollen Administratorzugriff auf das System gewähren möchten.

      Der einfachste Weg, dies auf einem System zu tun, das mit einer Allzweck-Verwaltungsgruppe wie dem Ubuntu-System in diesem Leitfaden eingerichtet ist, besteht darin, den betreffenden Benutzer zu dieser Gruppe hinzuzufügen.

      Unter Ubuntu 20.04 verfügt die sudo-Gruppe beispielsweise über vollständige Administratorrechte. Wir können einem Benutzer dieselben Berechtigungen gewähren, indem wir ihn der Gruppe wie folgt hinzufügen:

      • sudo usermod -aG sudo username

      Der Befehl gpasswd kann auch verwendet werden:

      • sudo gpasswd -a username sudo

      Beides wird dasselbe bewirken.

      Unter CentOS ist dies normalerweise die wheel-Gruppe anstelle der sudo-Gruppe:

      • sudo usermod -aG wheel username

      Oder unter Verwendung von gpasswd:

      • sudo gpasswd -a username wheel

      Wenn das Hinzufügen des Benutzers zur Gruppe unter CentOS nicht sofort funktioniert, müssen Sie möglicherweise die Datei /etc/sudoers bearbeiten, um den Gruppennamen zu kommentieren:

      /etc/sudoers

      . . .
      %wheel ALL=(ALL) ALL
      . . .
      

      So richten Sie benutzerdefinierte Regeln ein

      Nachdem wir uns mit der allgemeinen Syntax der Datei vertraut gemacht haben, erstellen wir einige neue Regeln.

      So erstellen Sie Alias-Dateien

      Die sudoers-Datei kann einfacher organisiert werden, indem Dinge mit verschiedenen Arten von „Aliases“ gruppiert werden.

      Zum Beispiel können wir drei verschiedene Benutzergruppen mit überlappender Mitgliedschaft erstellen:

      /etc/sudoers

      . . .
      User_Alias      GROUPONE = abby, brent, carl
      User_Alias      GROUPTWO = brent, doris, eric,
      User_Alias      GROUPTHREE = doris, felicia, grant
      . . .
      

      Gruppennamen müssen mit einem Großbuchstaben beginnen. Wir können dann Mitgliedern von GROUPTWO erlauben, die apt-Datenbank zu aktualisieren, indem wir eine Regel wie die folgende erstellen:

      /etc/sudoers

      . . .
      GROUPTWO    ALL = /usr/bin/apt-get update
      . . .
      

      Wenn Sie keinen Benutzer/keine Gruppe angeben, die wie oben ausgeführt werden soll, ist sudo standardmäßig der root-Benutzer.

      Wir können Mitgliedern von GROUPTHREE erlauben, den Computer herunterzufahren und neu zu starten, indem wir einen „Befehls-Alias“ erstellen und diesen in einer Regel für GROUPTHREE verwenden:

      /etc/sudoers

      . . .
      Cmnd_Alias      POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
      GROUPTHREE  ALL = POWER
      . . .
      

      Wir erstellen einen Befehls-Alias namens POWER, der Befehle zum Ausschalten und Neustarten des Computers enthält. Wir erlauben dann den Mitgliedern von GROUPTHREE, diese Befehle auszuführen.

      Wir können auch Aliase „Ausführen als“ erstellen, die den Teil der Regel ersetzen können, der den Benutzer angibt, der den Befehl ausführen soll:

      /etc/sudoers

      . . .
      Runas_Alias     WEB = www-data, apache
      GROUPONE    ALL = (WEB) ALL
      . . .
      

      Auf diese Weise kann jeder, der Mitglied von GROUPONE ist, Befehle als www-Datenbenutzer oder Apache-Benutzer ausführen.

      Denken Sie daran, dass spätere Regeln frühere Regeln überschreiben, wenn ein Konflikt zwischen beiden besteht.

      So sperren Sie Regeln

      Es gibt eine Reihe von Möglichkeiten, wie Sie mehr Kontrolle darüber erlangen können, wie sudo auf einen Anruf reagiert.

      Der dem mlocate-Paket zugeordnete Befehl updateb ist auf einem Einzelbenutzersystem relativ harmlos. Wenn wir Benutzern erlauben möchten, es mit root-Berechtigungen auszuführen, ohne ein Passwort eingeben zu müssen, können wir eine Regel wie die folgende festlegen:

      /etc/sudoers

      . . .
      GROUPONE    ALL = NOPASSWD: /usr/bin/updatedb
      . . .
      

      NOPASSWD ist ein „Tag“, das bedeutet, dass kein Passwort angefordert wird. Es hat einen Begleitbefehl namens PASSWD, der das Standardverhalten ist. Ein Tag ist für den Rest der Regel relevant, es sei denn, es wird später von seinem „Twin“ -Tag außer Kraft gesetzt.

      Zum Beispiel können wir eine Zeile wie diese haben:

      /etc/sudoers

      . . .
      GROUPTWO    ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
      . . .
      

      Ein weiteres hilfreiches Tag ist NOEXEC, mit dem in bestimmten Programmen gefährliches Verhalten verhindert werden kann.

      Beispielsweise können einige Programme, wie z. B. less, andere Befehle erzeugen, indem man dies über seine Benutzeroberfläche eingibt:

      !command_to_run
      

      Dies führt grundsätzlich jeden Befehl aus, den der Benutzer mit denselben Berechtigungen erteilt, unter denen less ausgeführt wird, was sehr gefährlich sein kann.

      Um dies einzuschränken, könnten wir eine Zeile wie die folgende verwenden:

      /etc/sudoers

      . . .
      username  ALL = NOEXEC: /usr/bin/less
      . . .
      

      Verschiedene Informationen

      Es gibt einige weitere Informationen, die beim Umgang mit sudo nützlich sein können.

      Wenn Sie in der Konfigurationsdatei einen Benutzer oder eine Gruppe als „Ausführen als“ angegeben haben, können Sie Befehle als diese Benutzer mithilfe der Flags -u bzw. -g ausführen:

      • sudo -u run_as_user command
      • sudo -g run_as_group command

      Praktischerweise speichert sudo Ihre Authentifizierungsdaten standardmäßig für einen bestimmten Zeitraum in einem Terminal. Dies bedeutet, dass Sie Ihr Passwort erst erneut eingeben müssen, wenn dieser Timer abgelaufen ist.

      Wenn Sie diesen Timer aus Sicherheitsgründen löschen möchten, wenn Sie mit dem Ausführen von Verwaltungsbefehlen fertig sind, können Sie Folgendes ausführen:

      Wenn Sie andererseits den Befehl sudo „vorbereiten“ möchten, damit Sie später nicht dazu aufgefordert werden, oder Ihren sudo-Mietvertrag erneuern möchten, können Sie jederzeit Folgendes eingeben:

      Sie werden aufgefordert, Ihr Passwort einzugeben, das für spätere sudo-Verwendungen zwischengespeichert wird, bis der sudo-Zeitrahmen abläuft.

      Wenn Sie sich nur fragen, welche Berechtigungen für Ihren Benutzernamen definiert sind, können Sie Folgendes eingeben:

      Dadurch werden alle Regeln in der Datei /etc/sudoers aufgelistet, die für Ihren Benutzer gelten. Dies gibt Ihnen eine gute Vorstellung davon, was Sie mit sudo als Benutzer tun dürfen oder nicht.

      Es gibt viele Fälle, in denen Sie einen Befehl ausführen und dieser fehlschlägt, weil Sie vergessen haben, ihm sudo voranzustellen. Um zu vermeiden, dass Sie den Befehl erneut eingeben müssen, können Sie eine Bash-Funktion nutzen, die „letzten Befehl wiederholen“ bedeutet:

      Das doppelte Ausrufezeichen wiederholt den letzten Befehl. Wir haben sudo vorangestellt, um den nicht privilegierten Befehl schnell in einen privilegierten Befehl umzuwandeln.

      Für ein bisschen Spaß können Sie Ihrer /etc/sudoers-Datei mit visudo die folgende Zeile hinzufügen:

      /etc/sudoers

      . . .
      Defaults    insults
      . . .
      

      Dies führt dazu, dass sudo eine dumme Beleidigung zurückgibt, wenn ein Benutzer ein falsches Passwort für sudo eingibt. Wir können sudo -k verwenden, um das vorherige zwischengespeicherte sudo-Passwort zu löschen und es auszuprobieren:

      Output

      [sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

      Zusammenfassung

      Sie sollten nun ein grundlegendes Verständnis für das Lesen und Ändern der sudoers-Datei und einen Überblick über die verschiedenen Methoden haben, mit denen Sie root-Berechtigungen erhalten können.

      Denken Sie daran, dass Superuser-Berechtigungen regulären Benutzern aus einem bestimmten Grund nicht gewährt werden. Es ist wichtig, dass Sie verstehen, was jeder Befehl tut, den Sie mit root-Berechtigungen ausführen. Übernehmen Sie die Verantwortung nicht leichtfertig. Erfahren Sie, wie Sie diese Tools am besten für Ihren Anwendungsfall verwenden und nicht benötigte Funktionen sperren können.

      [*]
      [*]Source link

      So importieren und exportieren Sie eine MongoDB-Datenbank unter Ubuntu 20.04


      Der Autor hat den COVID-19 Relief Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      MongoDB ist eine der beliebtesten NoSQL-Datenbank-Engines. Es ist berühmt für seine Skalierbarkeit, Leistung, Zuverlässigkeit und Benutzerfreundlichkeit. In diesem Artikel zeigen wir Ihnen, wie Sie Ihre MongoDB-Datenbanken importieren und exportieren.

      Wir sollten klarstellen, dass unter Import und Export diejenigen Vorgänge zu verstehen sind, die Daten in einem für Menschen lesbaren Format verarbeiten, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Sicherungs- und Wiederherstellungsvorgänge MongoDB-spezifische Binärdaten, wodurch die Konsistenz und Integrität Ihrer Daten sowie deren spezifische MongoDB-Attribute erhalten bleiben. Daher ist es für die Migration normalerweise vorzuziehen, Backup und Wiederherstellung zu verwenden, solange das Quell- und das Zielsystem kompatibel sind.

      Backup-, Wiederherstellungs- und Migrationsaufgaben gehen über den Rahmen dieses Artikels hinaus. Weitere Informationen finden Sie unter So sichern Sie eine MongoDB-Datenbank unter Ubuntu 20.04.

      Voraussetzungen

      Um dieses Tutorial zu absolvieren, benötigen Sie Folgendes:

      Schritt 1 — Importieren von Informationen in MongoDB

      Um zu erfahren, wie Informationen in MongoDB importiert werden, verwenden wir eine beliebte Beispiel-MongoDB-Datenbank über Restaurants. Sie ist im .json-Format und kann mit wget wie folgt heruntergeladen werden:

      • wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

      Sobald der Download abgeschlossen ist, sollten Sie eine Datei mit dem Namen primer-dataset.json (12 MB Größe) im aktuellen Verzeichnis haben. Importieren wir die Daten aus dieser Datei in eine neue Datenbank namens newdb und in eine Sammlung mit dem Namen Restaurants.

      Verwenden Sie den Befehl mongoimport wie folgt:

      • sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

      Das Ergebnis sieht folgendermaßen aus:

      Output

      2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/ 2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import

      Wie der obige Befehl zeigt, wurden 25359 Dokumente importiert. Da wir keine Datenbank mit dem Namen newdb haben, hat MongoDB sie automatisch erstellt.

      Überprüfen wir den Import.

      Stellen Sie eine Verbindung mit der neu erstellten newdb-Datenbank her:

      Sie sind nun mit der newdb-Datenbankinstanz verbunden. Beachten Sie, dass sich Ihre Eingabeaufforderung geändert hat, was anzeigt, dass Sie mit der Datenbank verbunden sind.

      Zählen Sie die Dokumente in der Sammlung Restaurants mit dem Befehl:

      Das Ergebnis zeigt 25359, was die Anzahl importierter Dokumente ist. Für eine noch bessere Überprüfung können Sie das erste Dokument aus der Sammlung Restaurants wie folgt auswählen:

      Das Ergebnis sieht folgendermaßen aus:

      [secondary label Output]
      {
          "_id" : ObjectId("5fac3d937f12c471b3f26733"),
          "address" : {
              "building" : "1007",
              "coord" : [
                  -73.856077,
                  40.848447
              ],
              "street" : "Morris Park Ave",
              "zipcode" : "10462"
          },
          "borough" : "Bronx",
          "cuisine" : "Bakery",
          "grades" : [
              {
                  "date" : ISODate("2014-03-03T00:00:00Z"),
                  "grade" : "A",
                  "score" : 2
              },
      ...
          ],
          "name" : "Morris Park Bake Shop",
          "restaurant_id" : "30075445"
      }
      

      Eine solche detaillierte Überprüfung kann Probleme mit den Dokumenten wie ihrem Inhalt, der Codierung usw. enthüllen. Das Format json verwendet UTF-8-Codierung und Ihre Exporte und Importe sollten in dieser Codierung vorhanden sein. Denken Sie daran, wenn Sie die json-Dateien manuell bearbeiten. Andernfalls verarbeitet MongoDB dies automatisch für Sie.

      Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie exit an die Eingabeaufforderung ein:

      Sie werden als non-root user zur normalen Befehlszeilenaufforderung zurückgegeben.

      Schritt 2 — Exportieren von Informationen aus MongoDB

      Wie bereits erwähnt, können Sie durch den Export von MongoDB-Informationen eine für Menschen lesbare Textdatei mit Ihren Daten abrufen. Standardmäßig werden Informationen im JSON-Format exportiert. Sie können sie jedoch auch nach CSV exportieren (durch Kommas getrennter Wert).

      Um Informationen aus MongoDB zu exportieren, verwenden Sie den Befehl mongoexport. Es ermöglicht Ihnen, einen sehr feinkörnigen Export zu exportieren, sodass Sie eine Datenbank, eine Sammlung, ein Feld und sogar eine Abfrage für den Export angeben können.

      Ein einfaches mongoexport-Beispiel wäre die Sammlung Restaurants aus der newdb-Datenbank, die wir zuvor importiert haben. Dies kann wie folgt erfolgen:

      • sudo mongoexport --db newdb -c restaurants --out newdbexport.json

      Im obigen Befehl verwenden wir --db, um die Datenbank -c für die Sammlung und --out für die Datei zu spezifizieren, in der die Daten gespeichert werden.

      Die Ausgabe eines erfolgreichen mongoexport sollte folgendermaßen aussehen:

      Output

      2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/ 2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%) 2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%) 2020-11-11T19:39:58.871+0000 exported 25359 records

      Die obige Ausgabe zeigt, dass 25359 Dokumente importiert wurden, die gleiche Anzahl wie die importierten sind.

      In einigen Fällen müssen Sie möglicherweise nur einen Teil Ihrer Sammlung exportieren. Angesichts der Struktur und den Inhalt der Restaurants-json-Datei exportieren wir alle Restaurants, die die Kriterien erfüllen, die sich in der Bronx befinden und chinesische Küche anbieten. Wenn wir diese Informationen direkt während der Verbindung mit MongoDB erhalten möchten, stellen Sie erneut eine Verbindung zur Datenbank her:

      Verwenden Sie dann diese Abfrage:

      • db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

      Die Ergebnisse werden dem Terminal angezeigt:

      Output

      • 2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
      • 2020-12-03T01:35:25.410+0000 exported 323 records

      Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie exit ein:

      Wenn Sie die Daten von einer sudo-Befehlszeile exportieren möchten, anstatt mit der Datenbank verbunden zu sein, machen Sie die vorherige Abfrage zu einem Teil des mongoexport-Befehls, indem Sie sie für das Argument -q wie folgt angeben:

      • sudo mongoexport --db newdb -c restaurants -q "{"borough": "Bronx", "cuisine": "Chinese"}" --out Bronx_Chinese_retaurants.json

      Beachten Sie, dass wir die doppelten Anführungszeichen mit Backslash () in der Abfrage umgehen. Ähnlich müssen Sie alle anderen Sonderzeichen in der Abfrage umgehen.

      Wenn der Export erfolgreich war, sollte das Ergebnis folgendermaßen aussehen:

      Output

      2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/ 2020-11-11T19:49:21.765+0000 exported 323 records

      Das obige Beispiel zeigt, dass 323 Datensätze exportiert wurden, und Sie können sie in der von uns angegebenen Datei Bronx_Chinese_retaurants.json finden.

      Verwenden Sie cat und less, um die Daten zu durchsuchen:

      • cat Bronx_Chinese_retaurants.json | less

      Verwenden Sie SPACE, um die Daten zu übermitteln:

      Output

      • date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
      • . . .

      Drücken Sie q, um zu beenden. Sie können nun eine MongoDB-Datenbank importieren und exportieren.

      Zusammenfassung

      Dieser Artikel hat Sie in die Grundlagen zum Importieren und Exportieren von Informationen zu und aus einer MongoDB-Datenbank eingeführt. Sie können weitere Informationen über So sichern Sie eine MongoDB-Datenbank unter Ubuntu 20.04 lesen.

      Sie können auch die Replikation berücksichtigen. Durch die Replikation können Sie Ihren MongoDB-Dienst ohne Unterbrechung von einem Slave-MongoDB-Server aus fortsetzen, während Sie den Master-Dienst nach einem Fehler wiederherstellen. Teil der Replikation ist das Betriebsprotokoll (oplog), das alle Operationen aufzeichnet, die Ihre Daten ändern. Sie können dieses Protokoll genauso verwenden wie das Binärprotokoll in MySQL, um Ihre Daten nach dem letzten Backup wiederherzustellen. Denken Sie daran, dass Backups normalerweise nachts stattfinden. Wenn Sie sich entscheiden, abends einen Backup wiederherzustellen, fehlen Ihnen alle Aktualisierungen seit dem letzten Backup.



      Source link