Kategorien
Randnotiz

Ansible: VSFTP

SFTP (Secure File Transfer Protocol) ist ein Netzwerkprotokoll, das es ermöglicht, Dateien sicher zu übertragen. Es ist eine erweiterte Version von FTP (File Transfer Protocol), die zusätzlich die Verschlüsselung von Daten und die Authentifizierung von Benutzern unterstützt. In diesem Artikel zeigen wir Ihnen, wie Sie mit Ansible einen SFTP-Server erstellen und konfigurieren können.

Ansible ist ein Open-Source-Automatisierungswerkzeug, das es ermöglicht, Aufgaben auf Remote-Hosts auszuführen. Es kann verwendet werden, um Server, Netzwerkgeräte und andere IT-Infrastruktur zu verwalten und zu konfigurieren. Einer der Vorteile von Ansible ist, dass es in der Lage ist, Aufgaben auf mehreren Hosts gleichzeitig auszuführen, was die Verwaltung von großen IT-Umgebungen vereinfacht.

Um einen SFTP-Server mit Ansible zu erstellen, benötigen Sie zunächst eine Maschine, auf der Ansible installiert ist. Dies kann entweder ein lokaler Rechner oder ein Remote-Host sein. Sobald Ansible installiert ist, müssen Sie ein Playbook erstellen, das die notwendigen Schritte zur Erstellung und Konfiguration des SFTP-Servers enthält. Ein Playbook ist eine Sammlung von Anweisungen in YAML-Format, die von Ansible ausgeführt werden.

Ein Beispiel für ein Playbook zur Erstellung eines SFTP-Servers mit Ansible sieht wie folgt aus:

---
- name: Create SFTP server
  hosts: all
  become: true
  tasks:
  - name: Install SFTP server
    apt:
      name: vsftpd
      state: present
  - name: Configure SFTP server
    template:
      src: sftp.conf.j2
      dest: /etc/vsftpd.conf
  - name: Restart SFTP server
    service:
      name: vsftpd
      state: restarted

Dieses Playbook führt folgende Schritte aus:

  1. Installation des SFTP-Servers vsftpd auf allen Hosts.
  2. Konfiguration des SFTP-Servers mithilfe einer Vorlage (sftp.conf.j2).
  3. Neustart des SFTP-Servers.

Die Vorlage sftp.conf.j2 enthält die Konfigurationsoptionen für

den SFTP-Server. Diese Optionen können je nach Anforderungen angepasst werden. Einige Beispiele für Optionen, die in der Vorlage enthalten sein können, sind:

  • anonymous_enable: Ermöglicht oder verhindert den Zugriff auf den SFTP-Server durch anonyme Benutzer.
  • local_enable: Ermöglicht oder verhindert den Zugriff auf den SFTP-Server durch lokale Benutzer.
  • write_enable: Ermöglicht oder verhindert das Schreiben auf den SFTP-Server.
  • chroot_local_user: Einschränkung des Zugriffs von Benutzern auf ihr Home-Verzeichnis.

Sobald das Playbook erstellt wurde, kann es mit dem Befehl ansible-playbook ausgeführt werden. Nach Abschluss der Ausführung sollte der SFTP-Server erfolgreich erstellt und konfiguriert sein.

In diesem Artikel haben wir gezeigt, wie Sie mit Ansible einen SFTP-Server erstellen und konfigurieren können. Ansible bietet viele weitere Möglichkeiten, um IT-Infrastrukturen zu verwalten und zu automatisieren. Wenn Sie mehr über Ansible und seine Funktionen erfahren möchten, empfehlen wir Ihnen, die Dokumentation und Tutorials von Ansible zu lesen.

Im nächsten CCGL Workshop beschäftigen wir uns mit:

  • Benutzerkonten und Berechtigungen: Um Benutzer auf dem SFTP-Server anlegen und verwalten zu können, können Sie Ansible-Module wie user und group verwenden. Auch das Zuweisen von Berechtigungen an Benutzer oder Verzeichnisse kann mithilfe von Ansible-Modulen wie file oder acl erfolgen.
  • Sicherheit: Um den SFTP-Server sicher zu machen, empfiehlt es sich, starke Passwörter für Benutzerkonten zu verwenden und Zugriff von unsicheren Netzwerken oder IP-Adressen zu beschränken. Auch das Aktivieren von SSL/TLS-Verschlüsselung kann die Sicherheit erhöhen.
  • Monitoring: Um den Betrieb des SFTP-Servers zu überwachen, können Sie Ansible-Module wie shell oder command verwenden, um regelmäßig Systeminformationen oder Protokolle auszulesen und zu analysieren. Auch das Einrichten von Benachrichtigungen bei Fehlern oder Ausfällen kann hilfreich sein.
  • Skalierbarkeit: Wenn Sie vorhaben, den SFTP-Server für viele Benutzer oder große Dateien zu verwenden, empfiehlt es sich, die Leistung und Skalierbarkeit des Servers im Voraus zu planen. Dies kann beispielsweise durch das Hinzufügen von mehr Speicherplatz oder durch das Verteilen der Last auf mehrere Server erfolgen.

Ich hoffe, dass diese Tipps hilfreich sind und Ihnen bei der Erstellung von SFTP-Servern mit Ansible weiterhelfen! Wenn Sie weitere Fragen haben, zögern Sie nicht, mich zu kontaktieren.

Kategorien
Randnotiz

Ansible: Logparser

Ich musste mal Ansible Zweck entfremden: Auslesen von Log Dateien und Anzeige nur bestimmter Einträge.

---
- hosts: hal52b
  gather_facts: no
  vars:
   nummer: [
            " 500",
            " 404"
           ]

  tasks:
   - name: Suche Error in Access LOG
     shell:
       chdir: /var/log/apache2
       cmd: "grep -ari -e '^halsec.de' other_vhosts_access.log | cat"
     changed_when: false
     ignore_errors: true
     become: true
     register: grep_cmd

   - debug:
       msg: "{{item| regex_findall('\\s\\d{3,5}')}} gefunden"
     when: "item| regex_findall('\\s\\d{3,5}')|intersect(nummer)|length != 0"
     loop: "{{ grep_cmd.stdout_lines }}"

Beim Aufruf des Playbooks lese ich eine Apache Log Datei aus. Mit grep findet die erste grobe Selektion statt. In dem Debug Loop nehmen wir uns Zeile für Zeile und vergleichen 3-5 stellige gefundene Errorcodes mit einer definierten Liste. Kommt der Errorcode in der Liste vor, wird er „OK“ – alle nicht vorkommenden Errorcode werden „skipped“ ausgegeben.

Die Ausgabe kann über Konfiguration der ansible.cfg beeinflusst werden. Bei langen Debug Ausgaben kann es sinnvoll sein, „skipped“ Nachrichten auszublenden. Auch farblich kann die Ausgabe angepasst werden.

Angepasste Farben in der ansible.cfg
[defaults]
display_skipped_hosts = yes
[colors]
ok = purple
skip = dark gray

„display_skipped_hosts = no“ unterdrückt alle skipped Nachrichten. Da kann/muss mit gespielt werden. Viel Spaß!

Kategorien
Aktuelles

EDV Service Gemeinschaft

Noch in diesem Jahr stehen viele Änderungen an.

Für die GfUD – der EDV Service Gemeinschaft in Bergisch Gladbach – habe ich eine Datensicherung konstruiert. Ohne Software auf den Clients!

Wie läuft bei Euch eine Datensicherung ab? Ich lege Wert auf Eure Meinung und Erfahrung! Schaut mal hier vorbei.

Kategorien
SAP Schulung

Tipp: Multidimensionale Arrays PHP für UI5 Views

So etwas, sollte man vermeiden: Mehrfaches laden von Datensätzen in einem Kontext

Das mag im Schulungsumfeld „OK“ sein – Produktiv bedeutet das aber Umstand, Unübersichtlichkeit und Zeit. Schöner ist das bilden eines JSON Datensatzes. Das geht ganz einfach:

Einen Satz laden und durch den JSON Tree selektieren.

Kategorien
SAP Schulung

UI5: Attribute PL/pgSQL vs JScript

Da scheiden sich die Geister: Datenaggregation und das setzen der Properties eines UI5 Elements nach oder mit der SQL Abfrage? Eine Frage der Sicherheit und des Komforts. Beispiel unsere KPI Seite https://halsec.de

Die Daten für die Kurs Kacheln habe ich aus Basis von PL/pgSQL als Funktion realisiert. Postgresql übernimmt die Selektion der Daten und die Findung der Properties.

Der JSON Datensatz beinhaltet so alle nötigen Daten zur Darstellung der Kurs Kachel im UI5. So gestaltet sich das JavaScript im UI5 sehr einfach:

(Controller)
var anzeige1 = new sap.ui.model.json.JSONModel();
anzeige1.loadData(„https://halsec.de/fetch/ui5_eins.php?wo=USD“);
this.byId(„gt2“).setModel(anzeige1, „rates„);

(View)

<GenericTile id="gt2" class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="€ / US-Dollar" subheader="EZB Tagekurs" press="kltabelle2()">
<TileContent id="tc2" unit="USD 20d AVG" footer="">
<NumericContent id="nc1" value="{rates>/v_rate}" scale="Eu" valueColor="{rates>/v_stat}" indicator="{rates>/v_indi}" withMargin="false" />
</TileContent></GenericTile>

Die Kacheln, die die Temperatur anzeigen, sind JavaScript generiert. Der JSON Datensatz liefert eine Datenmenge, die innerhalb UI5 bewertet wird.

Das pro cedere im JavaScript stellt sich wie folgt dar:

(Controller)
var ui5ang2 = {anzeige: [{indi:“None“, status:“Neutral“}]};
oModel3.loadData(„https://halsec.de/fetch/tempBRI.php“);
anzeige5.setData(ui5ang2);

oModel3.attachRequestCompleted(function() {
var a = oModel3.getProperty(„/0/temo“);
var b = oModel3.getProperty(„/2/temo“);
a = parseInt(a);
b = parseInt(b);
if (a > b) {
anzeige5.setProperty(„/anzeige/0/indi“ , „Up“);
};
if(a < b) { anzeige5.setProperty(„/anzeige/0/indi“ , „Down“); }; if(a > 25 || a <= 0) { anzeige5.setProperty(„/anzeige/0/status“ , „Error“); }; if(a > 5 && a < 10) { anzeige5.setProperty(„/anzeige/0/status“ , „Critical“); }; if(a >= 10 && a <= 25) {
anzeige5.setProperty(„/anzeige/0/status“ , „Good“);
};
});

(View)

<GenericTile id="21" class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Brilon" subheader="{bri>/0/abfrage}" press="kltabelle1()"> <TileContent id="tc21" unit="Temperatur" footer="DWD"> <NumericContent id="nc21" scale="C" value="{bri>/0/temo}" icon="sap-icon://temperature" valueColor="{brianzeige>/anzeige/0/status}" indicator="{brianzeige>/ </TileContent> </GenericTile>"
Kategorien
Randnotiz Schulung

CLI: mySQL pgsql Spickzettel

Zur Zeit arbeiten wir im Team an der Programmierung mit zwei unterschiedlichen Datenbank Backend’s: mySQL und Postgres. „Mal eben“ die Struktur einer Tabelle aufrufen, läuft über die Bash CLI unterschiedlich.

[table id=7 /]

Obacht mit Großschreibung im Schema! Ein Schema mit Großschreibung im Suchpfad, wird in Kleinbuchstaben gespeichert. Das Schema ist als String zu maskieren!

Kategorien
Allgemein

Die Zukunft ist rosig!

Was bedeutet eigentlich Digitalisierung? Damit ist nicht gemeint, einen Brief mit WORD zu verfassen oder die Kaffeekasse mit EXCEL zu verwalten.

Digitalisierung ist die Umsetzung von Arbeitsprozessen mit Hilfe der Digitaltechnik. Oft einhergehend mit enormer Effektivitätssteigerung und höherer Kosteneffizienz.

Darüber diskutieren heute, im 21ten Jahrhundert in Deutschland, lediglich die „Falschen“. IT Berater wird man schon mit MBA Titel, also als Betriebswirt der einen Computer einschalten kann, ohne sich die Fingernägel abzubrechen- aus Sicht eines IT’lers, also mit völliger Ahnungslosigkeit. Diese Berater sitzen dann, wohlmöglich mit Beamten und Ministern, tagelang an hochglanz gelackten Tischen, bekommen Kaffee und Cremetörtchen gereicht, und „erdenken“ sich Konstrukte die fernab der Realität und völlig am Thema vorbei sind. Liegt dann das Gewölle in Form eines „Konzeptes“ ( oft für sechs bis sieben stellige Kosten ) vor, kam bisher selten etwas Gutes dabei herum. Jüngst denken wir nur einmal über die Gesundheitsakte, dem Personalausweis, der Impfkampagne , dem eGovernment oder Zensus2022 nach. Völliges Versagen auf ganzer Linie.

Wie im Großen, geht es auch auf kommunaler Ebene. Einfaches Beispiel: Terminvereinbarung beim Einwohnermeldeamt.

Wuppertal und Bergisch Gladbach sind keine Ausnahmen – Berlin ist da negatives Aushängeschild. Die einfachste Dinge, sind schlicht nicht möglich.

Die Kollegen bei der Stadt Bergisch Gladbach kenne ich persönlich – fachlich wäre diese sehr einfache Aufgabe kein Problem. Es ist schlich die fehlende Kompetenz bei der Planung und der Wille. Papua Neuguinea oder Simbabwe machen es uns vor – da geht das.

So lange das so ist, brauchen sich Generationen von IT’lern keine Sorge machen – Arbeit ist genug da

Kategorien
Randnotiz

Tipp: Anpassung Script nach StableNet Update

Nach dem Update von StableNet von Version 10 auf 11 kann es zu Problemen mit sh Agent Scripts kommen.

Die Agent Scripts werden im neuen StableNet vor Aufruf (genauer) geprüft – sh Scripte wohl bemerkt. Der Parameter „Name“ darf nicht fehlen!

sh Script für StableNet Agent

Im StableNet 10 reichte es aus, wenn das sh Script als <parameters> lediglich <version> mitteilte. Jetzt ist auf einen belibigen <name> zu achten.

Grundsätzlich sind Änderungen im XML Schema bzgl. Business Process Scripts ergangen – unter Umständen erscheinen bei JAR Agent Scripts die Fehlermeldung „Attribute default is not allowed“ was dann in jedem AgentScript anzupassen ist.

Die MariaDB nicht auf die höchst mögliche Version updaten. Maximal Version 10.5.13. NICHT 10.5.16

Abgesehen davon läuft das Update einwandfrei.

Kategorien
Randnotiz

Datei Säuberungsaktion

Eine Unart ist es, Sonderzeichen in Datei- oder Ordnernamen zu vereinbaren.

Der Grund ist mir nicht klar. User, eben.

Sonderzeichen sind häufig ein Grund für seltsame Fehler, wenn es um die
Verarbeitung von Dateien geht. Dateinamen mit Sonderzeichen oder Umlauten
lassen sich auf Anwenderebene problemlos vereinbaren – mit Einschränkungen.
Linux mag keine Komma oder Semikolon, Windows verträgt keine | im Namen.

Kurz: Vor der Verarbeitung, insbesondere Datenarchivierung, sollte das
entfernt werden.

Mittels find /dir -type f *[üÜöÖäÄß]* -exec sed.. usw. kann man alle Fehler
nach eigenem Gusto beheben.

Tipp: Einfacher, schneller und fehlerfrei ist detox. Leider nicht in jeder
Distribution enthalten. Debian ist kein Problem – RedHat verwaist auf RPM aus
Fremdquellen.

Hat jemand schönere Lösungen?

Kategorien
Allgemein Randnotiz Schulung

tar: Archive anlegen

Vor geraumer Zeit war das auch Thema im CCGL (Link) – wie nutze ich TAR um Archive verschlüsselt auf einem öffentlichen Laufwerk zu sichern.

Zahlreiche Varianten neben TAR/aespipe/split nutze ich. Eine weitere und sicherere Art ist es, TAR in Kombination mit OpenSSL zu nutzen. Zunächst aber das Handling.

Im CCGL haben wir TAR als Stream durch „split“ in kleinere Pakete zerteilt. Das kann TAR auch alleine:

tar -cvML 1945600 -V Testlauf  –files-from=tarliste.txt -F ‚echo sicherung/${TAR_ARCHIVE}-${TAR_VOLUME} >&${TAR_FD}‘ -f test.tar

Wir sehen, analog zum Beispiel im Link, ein Multi-Volume (M), begrenzt auf eine Bandlänge (L) von 1.9GB. Ohne das Script (F) würde der Befehl zum Wechseln des Mediums auffordern, wenn eine Menge von 1.9GB geschrieben wurde. Die Datei, die wir anstatt Band mit (f) konfiguriert haben, wird zur Laufzeit im Parameter TAR_FD (File Descriptor) gehalten und mit dem Script bei jedem „Bandwechsel“ neu gesetzt. Coole Sache! Aus test.tar wird nach den ersten 1.9GB dann 2-test.tar. Mit „V“ setzte ich gerne Label – vergleichbar mit dem Aufkleber den wir früher auf die Band Rollen oder Disketten geklebt haben.

Versuchen wir den Inhalt darzustellen, ohne zu Wissen das es sich um ein Multi Volume Archiv handelt:

Man erkennt die Problematik? Sicherlich wenn man das ganze mit dem Multi Volume Script sieht:

Das Archiv wird nahtlos und vollständig aufgelistet. Es wird nur das Label des ersten Archivs aufgeführt.

Wenn ich Zeit finde, zeige ich wie ich das in meinem jetzigen Projekt gelöst habe und wie man das Archiv verschlüßelt ablegt.