Software
- Adobe Acrobat / Adobe Reader
- Adobe Audition
- GLPI-Plugin Entwicklung
- GNS3
- Grafana
- Heimdall - Dashboard
- Invoiceninja
- Microsoft Office
- Alten Lizenz-Key von Microsoft Office entfernen
- Microsoft Office Installation über Admin-Setup vorbereiten ohne Neustart
- Microsoft Outlook
- Kontakte aus dem Adressbuch in eigene Kontakte übertragen
- Outlook sucht im Adressbuch / Kontakte nach dem Vornamen statt Nachnamen
- Nextcloud
- Nextcloud Cron.php im Docker Container ausführen
- Card-Dav und Cal-Dav in Nextcloud Docker einrichten
- Observium
- OpenSSL
- TrueNAS
- WireGuard
- MTU Größe für Wireguard Verbindung berechnen
- WireGuard mit WebInterface auf Debian Server installieren
- Wordpress Entwicklung
Adobe Acrobat / Adobe Reader
Stempel aus Adobe Acrobat exportieren
Einleitung
Wenn du die Stempel im Acrobat Reader exportieren möchtest, musst du die Stempel als Dateien sichern. Diese Dateien kannst du dann in anderen Installationen wieder integrieren.
Speicherort Stempel
Um die Stempel zu sichern, öffnest du den Datei Explorer. Dort navigierst du zu folgendem Pfad
C:\Users\<benutzer>\AppData\Roaming\Adobe\<version>\Stamps
Dort befinden sich die PDF Dateien. Die Stempel werden als PDF Datei abgespeichert. Diese kannst du dir dann abspeichern oder in eine andere Installation wieder integrieren.
Adobe Audition
Rauschen aus einer Tonspur entfernen
Einleitung
Wenn wir eine Audio Spur aufnehmen, möchten wir vielleicht das Hintergrundrauschen entfernen. Um dies zu bewerkstelligen können wir die in Audition integrierte Funktion nutzen um das Grundrauschen zu entfernen.
Rauschen entfernen
Um das Rauschen zu entfernen, benötigen wir einen kleinen Teil wo nichts gesagt wird. Anhand dieser Zeit kann Audition ermitteln, wie sich das Grundrauschen anhört.
Dazu markieren wir den Teil in dem die Linie Zentral ohne Ausschwingungen bleibt. Wir machen einen Rechtsklick drauf und wählen Geräuschmuster speichern.
Im letzten Schritt markieren wir die gesamte Tonspur. Unter Windows ist das die Tastenkombination STRG + A. Gehen dann oben auf Effekte -> Rauschminderung/Wiederherstellung und dort auf den Punkt Rauschminderung (Prozess). Wir bestätigen dies indem wir auf Anwenden drücken. Dann wird das Rauschen aus unserer Tonspur entfernt.
GLPI-Plugin Entwicklung
GLPI Plugin Datenbank initialisieren
Einleitung
Wenn wir Daten in GLPI permanent machen wollen, müssen wir dies über Datenbanken realisieren. Da GLPI von Haus aus eine Datenbank benötigt wollen wir diese verwenden um dort unsere Datei abzulegen.
hook.php
Um unsere Plugin Datenbank zu initialisieren, müssen wir in der install Funktion ein paar Zeilen Code hinzufügen und diesen mit unserem SQL Befehl ausstatten.
So könnte der Code aussehen.
<?php
function plugin_debitors_install()
{
global $DB;
$migrate = New Migration(100);
//Überprüfen ob Tabelle existiert
if(!$DB->tableExists('glpi_plugin_debitors_debitors'))
{
$query = "CREATE TABLE glpi_plugin_debitors_debitors (id INT, name VARCHAR(50))";
$DB->queryOrDie($query, $DB->error());
}
$migrate->executeMigration();
return true;
}
function plugin_debitors_uninstall() {
global $DB;
$tables = [
'debitors'
];
foreach ($tables as $table) {
$tablename = 'glpi_plugin_debitors_' . $table;
if ($DB->tableExists($tablename)) {
$DB->queryOrDie(
"DROP TABLE `$tablename`",
$DB->error()
);
}
}
return true;
}
GLPI Plugin programmieren
Einleitung
In dieser und weiter Anleitung werden wir ein Plugin für GLPI schreiben. Das Plugin wird dann in der Plugin Übersicht angezeigt. Weitere Funktionen fügen wir in anderen Anleitungen hinzu.
Mithilfe von Plugins können wir unsere Anwendung anpassen und weitere Funktionalitäten hinzufügen damit die Software unseren Anforderungen gerecht wird.
setup.php & hook.php
In dieser Anleitung werden wir die setup.php und die hook.php einrichten. Diese beiden Dateien sind eine der wichtigsten. Anhand dieser Dateien werden die Plugins identifiziert und installiert als auch später wieder deinstalliert.
Zuerst wechseln wir in das plugin Verzeichnis unseres GLPI-Servers. Dort erstellen wir einen Ordner mit dem Namen unseres Plugins. Wir nennen unser Plugin debitors.
Mit dem Plugin soll es Möglich sein Debitoren hinzuzufügen und diese später mit bestimmten Daten zu verknüpfen.
In dem Verzeichnis erstellen wir eine Datei mit dem Namen setup.php. Dort fügen wir folgendes Code Gerüst ein.
<?php
// Definiere Variablen mit Plugin Informationen
define("PLUGIN_NAME", "Debitoren");
define("VERSION_NUMBER", "1.0.0");
// Erstelle Initialisierungsfunktion des Plugins
function plugin_init_Debitors()
{
global $PLUGIN_HOOKS;
$PLUGIN_HOOKS['csrf_compliant']['Debitors'] = true;
}
// Definiere Plugin Informationen
function plugin_version_debitors()
{
return array(
"name" => PLUGIN_NAME,
"version" => VERSION_NUMBER,
"author"=> "DEIN NAME",
"license" => "LIZENZ",
"homepage" => "DEINE WEBSITE",
"minGlpiVersion" => "VERSIONS ANFORDERUNG"
);
}
//Überprüfe ob Anforderungen für das Plugin erfüllt sind
function plugin_debitors_check_prerequisites()
{
if(version_compare(GLPI_VERSION, '10', 'eq') || version_compare(GLPI_VERSION, '10', 'gt'))
{
return true;
} else {
echo "Das Plugin benötigt die Version 10.0.0 | Installiert ist Version: " . GLPI_VERSION;
return false;
}
}
//Überprüfe ob die Konfiguration übereinstimmt
function plugin_debitors_check_config()
{
return true;
}
?>
In der Datei brauchen wir nur noch den Namen, und die anderen Informationen ändern. Diese Informationen werden dann im Plugin Menü angezeigt. Im weiteren können wir in der check_prerequisites Funktion die Anforderungen an das System Überprüfen ob das Plugin überhaupt installiert werden darf.
Als letzten Schritt für dieses Kapitel, erstellen wir eine Datei mit dem Namen hook.php. In diese Datei fügen wir folgenden Inhalt ein:
<?php
function plugin_debitors_install()
{
return true;
}
function plugin_debitors_uninstall()
{
return true;
}
In diesen Funktionen können wir sämtlichen Code hineinschreiben der ausgeführt wird wenn wir das Plugin installieren oder deinstallieren.
Wenn wir jetzt das Plugin Menü aufrufen, können wir unser Plugin sehen und installieren.
GNS3
Remote-Server für GNS3 auf Ubuntu LTS installieren
Einleitung
Sobald wir unsere Kenntnisse im Bereich Netzwerk vertiefen möchten, können wir auf diverse Netzwerk Simulationstools zurückgreifen. Eines davon ist GNS3. Wir werden hier mithilfe eines Skriptes einen Remote-Server für diese Software aufsetzen. Damit können die virtuellen Maschinen auf einem extra Server laufen. Dadurch schonen wir unseren eigenen Rechner.
Installationsskript
Um jetzt die Installation zu starten, müssen wir lediglich das nachstehende Skript ausführen. Die Installation wird dann von alleine durchgeführt. Den Hostnamen des Servers können wir dann nach der Installation nach Belieben anpassen. (Standardgemäß ist der Hostname gns3vm)
WICHTIG: Die Installation muss auf einem Ubuntu LTS Server durchgeführt werden. Auf anderen Linux Distributionen startet die Installation erst gar nicht!
Sobald die Installation durchgeführt wurde, können wir mit unserem GNS3 Desktop Client die Verbindung mit dem Server über die IP oder DNS Namen herstellen.
Grafana
iFrame Inhalte im Grafana Dashboard anzeigen
Einleitung
Als ich neulich versucht habe ein Observium Dashboard zu bauen, kam ich auf die Idee die Graphen in Grafana anzeigen zu lassen. Dies ist mithilfe des Text-Feldes möglich.
Graphen einbetten
Um jetzt einen Graphen in Grafana einzubetten, müssen wir die Konfigurationsdatei von Grafana mit einem Editor unserer Wahl öffnen.
nano /usr/share/grafana/conf/defaults.ini
Dort müssen wir zwei Einträge von false
auf true
ändern.
allow_embedding = true
disable_sanitize_html = true
Nachdem wir diese beiden Werte verändert haben, starten wir den Grafana Server neu.
systemctl restart grafana-server
Jetzt können wir in ein Text-Feld ein iFrame einbetten, welches dann unseren Graphen anzeigt.
<iframe
src="http://graphen.local"
style="height: 100%; width: 100%; object-fit: contain;">
</iframe>
Heimdall - Dashboard
Schaltflächen mit "Blur-Effekt" belegen
Einleitung
Beim Erstellen eines Dashboards mit Heimdall wollte ich gerne die Schaltflächen mit einem "Blur Effekt" belegen. Dafür müssen wir nur den nachstehenden CSS-Code in das System einpflegen. Dazu einfach die Einstellungen öffnen und den Code in das Textfeld eingeben.
Code
@import url("https://fonts.googleapis.com/css2?family=Raleway:wght@700;800&display=swap");
#app {
background-position: right;
}
#app #sortable,
#app main {
padding: 20px;
}
#config-buttons {
bottom: 50%;
transform: translateY(50%);
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
box-shadow: rgba(255, 255, 255, 0.1) -1px 1px 1px 0, rgba(255, 255, 255, 0.1) 0 -1px 1px 0,
rgba(0, 0, 0, 0.1) -1px 0 20px 5px;
background-color: rgba(40, 40, 40, 0.25);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
#config-buttons a {
background: none;
}
#config-buttons a svg {
transition: all 0.1s ease-in-out;
color: rgba(255, 255, 255, 0.5);
}
#config-buttons a:hover svg {
transform: scale(1.1);
color: rgba(255, 255, 255, 0.95);
}
.black {
color: white !important;
}
.item {
box-shadow: rgba(0, 0, 0, 0.05) -1px -1px 5px 0, rgba(0, 0, 0, 0.15) 0px 20px 25px -5px,
rgba(0, 0, 0, 0.04) 0px 10px 10px -5px !important;
border-radius: 12px;
background-image: none;
border: none;
outline: none;
height: 100px;
width: 300px;
margin: 1.25rem;
padding: 1rem 55px 1rem 1rem;
transition: all 0.25s ease-in-out;
transition-property: transform, box-shadow, background-color;
background-color: rgba(255, 255, 255, 0.4) !important;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
.item:after {
height: 100px;
opacity: 0.2;
}
.item:hover {
transform: scale(1.1);
background-color: rgba(255, 255, 255, 0.2) !important;
box-shadow: rgba(0, 0, 0, 0.1) 0px 60px 40px -7px !important;
}
.item .svg-inline--fa {
height: 100px;
vertical-align: middle;
opacity: 0.2;
}
@media only screen and (max-width: 750px) {
.item {
padding-top: 2rem;
padding-bottom: 2rem;
}
#config-buttons {
display: none;
}
}
.details * {
color: white !important;
}
.details {
padding: 0 0.5rem;
}
.app-icon {
filter: drop-shadow(1px 1px 2px rgba(10, 0, 20, 0.1));
}
.livestats-container {
margin-top: 0.5rem;
}
.livestats-container .livestats .title {
margin-bottom: 3px;
}
.livestats-container .livestats li {
padding-right: 1rem;
}
.livestats-container strong {
font-weight: 500 !important;
padding: 0 2px;
}
.details > .title {
font-weight: 800;
font-size: 1.3rem !important;
letter-spacing: 1px;
font-family: "Raleway", sans-serif;
text-shadow: rgba(10, 0, 60, 0.25) 1px 0 5px;
text-shadow: -1px -1px 1px rgba(255, 255, 255, 0.1), 1px 1px 2px rgba(10, 0, 60, 0.25);
transition: all 0.25s ease-in-out;
}
.item:hover .details > .title {
text-shadow: -1px -1px 1px rgba(255, 255, 255, 0.1), 1px 1px 5px rgba(10, 0, 60, 0.2);
}
.item-container .tooltip {z-index: -1; }
Quelle: https://www.reddit.com/r/selfhosted/comments/nzw76z/i_went_a_bit_overboard_customising_heimdall/
Invoiceninja
Invoiceninja zeigt nicht alle Währungen oder Sprachen an
Einleitung
Invoice Ninja ist ein kleines Tool mit dem man ganz schnell PDF Rechnungen erstellen kann um diese unter anderem an Kunden zu schicken. So muss man keine Excel Listen mehr pflegen. Das Programm gibt einem eine Übersicht der offenen Salden der Kunden als auch eine gesamte Übersicht der Kunden.
Dieses Programm kann bei der Installation ein Problem verursachen womit es nicht möglich ist die Software in der deutschen Sprache als auch Rechnungen mit Euro auszuweisen. Um dieses Problem zu lösen müssen wir einen Befehl in der URL Seite der Internetseite auslösen.
Anwendung
Zuerst melden wir uns bei unserer Invoice Ninja Instanz an und gehen ganz normal auf die Startseite. In der URL Zeile schreiben wir folgenden Text hinten ran:
/update?secret=secret
Der Link sollte dann folgendermaßen aussehen:
https://invoiceninja.domain.de/update?secret=secret
Jetzt sollte er die Datenbank neu angefragt haben und die entsprechenden Einträge sollten jetzt verfügbar sein.
Microsoft Office
Alten Lizenz-Key von Microsoft Office entfernen
Einleitung
Bei der Neuinstallation von Microsoft Office kann es dazu kommen, dass die Office-Version, trotz erfolgreich installierten und aktivieren Office, die Version noch nach einem Lizenz-Schlüssel fragt. Anhand der nachfolgenden Schritte kann die Fehlermeldung entfernt werden, indem wir die alten Office-Versionen entfernen.
Lizenz-Schlüssel entfernen
Um den Lizenz-Schlüssel zu entfernen, öffnen wir eine Powershell-Konsole oder eine Eingabeaufforderung mit administrativen Berechtigungen. Dort geben wir den nachfolgenden Befehl ein:
# Office 2013 64-bit
cscript "C:\Program Files\Microsoft Office\Office15\OSPP.VBS" /dstatus
# Office 2013 32-bit
cscript "C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS" /dstatus
# ab Office 2016 64-bit
cscript "C:\Program Files\Microsoft Office\Office15\OSPP.VBS" /dstatus
#ab Office 2016 32-bit
cscript "C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS" /dstatus
Wir erhalten eine Ausgabe der installierten Lizenzen, um welche Office Version es sich handelt und ob diese Lizenz aktiviert ist. Wir suchen in der Ausgabe die Lizenz heraus, welche nicht aktiviert ist. Und kopieren uns die letzten 5 Buchstaben des Lizenz-Schlüssels heraus. Diese geben wir dann in dem nachfolgenden Befehl mit ein:
# Office 2013 64-bit
cscript "C:\Program Files\Microsoft Office\Office15\OSPP.VBS" /unpkey:<lizenz-key>
# Office 2013 32-bit
cscript "C:\Program Files\Microsoft Office (x86)\Office15\OSPP.VBS" /unpkey:<lizenz-key>
# ab Office 2016 64-bit
cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /unpkey:<lizenz-key>
# ab Office 2016 32-bit
cscript "C:\Program Files\Microsoft Office (x86)\Office16\OSPP.VBS" /unpkey:<lizenz-key>
Unter Umständen muss der Lizenz-Schlüssel für die aktuelle Office-Version nochmal installiert werden.
Microsoft Office Installation über Admin-Setup vorbereiten ohne Neustart
Einleitung
Bei der Vorabkonfiguration eines Setup-Pakets zur Installation von Microsoft Office können wir die Option einpflegen, dass kein Neustart durchgeführt werden soll. Wenn wir diesen Parameter nicht setzen, führt der Setup Assistent automatisch ein Neustart am Ende durch. Dieses wollen wir natürlich gerne vermeiden.
Neustart verhindern
Um den Neustart verhindern, müssen wir in den "Setup Eigenschaften" einen neuen Eintrag hinzufügen. Dieser erhält den Namen SETUP_REBOOT und bekommt den Wert Never. Dadurch wird kein automatischer Neustart durchgeführt.
Name: SETUP_REBOOT
Value: Never
Microsoft Outlook
Kontakte aus dem Adressbuch in eigene Kontakte übertragen
Einleitung
In diesem Beitrag erkläre ich kurz, wie wir in Microsoft Outlook Kontakte aus dem Adressbuch, z.B. aus dem globalen Adressbuch, welches über den Exchange-Server verwaltet wird, in unsere eigenen Kontakte kopieren können.
Kontakte kopieren
Dazu müssen wir einfach in unserem Outlook auf die E-Mails Seite navigieren. Dort können wir unter dem Reiter Start, den Punkt Adressbuch ansteuern.
In dem Adressbuch markieren wir jetzt alle Kontakte, die wir in unsere eigenen Kontakte kopieren möchten. Sobald wir alle markiert haben, öffnen wir das Kontextmenü, indem wir einen Rechtsklick auf ein Kontakt unserer Wahl tätigen und wählen "zu den Kontakten hinzufügen" aus. Je nach Anzahl der Elemente kann dies einen Moment dauern.
Im Anschluss finden wir unsere Kontakte in unseren eigenen Kontakten.
Outlook sucht im Adressbuch / Kontakte nach dem Vornamen statt Nachnamen
Einleitung
In diesem Beitrag erkläre ich kurz, wie wir unter Microsoft Outlook einstellen können, dass, Outlook bei der Suche nach Namen im eigenen Adressbuch immer nach Nachnamen sucht. Laut Standard kann passieren, dass Outlook dann nur nach den Vornamen sucht.
Durchführung
Um die Suche richtig einzustellen, klicken wir auf Datei → Informationen. Dort gehen wir nun in die Kontoeinstellungen. Sobald wir hier angekommen sind, wählen wir in dem neuen Fenster den Reiter Adressbücher aus. In diesem Fenster klicken wir das entsprechende Adressbuch an und geben beim Punkt Namen ordnen die Option wie "Speicher unter" aus.
Zum Schluss muss einmal Outlook neugestartet werden damit die Änderungen übernommen werden.
Nextcloud
Nextcloud Cron.php im Docker Container ausführen
Einleitung
Bei der Installation eines Nextcloud Servers wird empfohlen, für die Hintergrundprozesse einen Cron-Job einzurichten. Dieser führt die Aufgaben dann im Hintergrund durch.
Cron-Job im Docker Container ausführen
Um jetzt einen entsprechenden Cron-Job anzulegen, verbinden wir uns mit SSH auf unseren Docker Server / Host. Dort öffnen wir die Verwaltung der Cron-Jobs:
crontab -e
Dort fügen wir folgenden Code ein:
*/5 * * * * docker exec -u www-data <container-name> php /var/www/html/cron.php
Damit wird die cron.php alle 5 Minuten automatisch ausgeführt. Jetzt müssen wir in den Administrationseinstellungen in der Nextcloud nur noch die Art der Durchführung auf Cron-Job setzen.
Wir sehen über dem grünen Banner, ob die Durchführung des Cron-Jobs erfolgreich war. Falls nicht, ist dieser rot.
Card-Dav und Cal-Dav in Nextcloud Docker einrichten
Einleitung
Sobald man eine Nextcloud Instanz installiert, die ggf. auch hinter einem Reverse Proxy läuft, bekommt man beim Sicherheitscheck gerne mal die Meldung, dass Card-Dav und Cal-Dav nicht aufgelöst werden kann. Um diese Nachricht zu entfernen, müssen wir die .htaccess Datei bearbeiten.
Einrichtung
Im ersten Schritt müssen wir eine SSH-Verbindung zum Docker-Host herstellen. Falls wir unser Nextcloud-Verzeichnis gemountet haben, dann navigieren wir in das Verzeichnis. Ansonsten müssen wir das Volume im Container öffnen.
Dort öffnen wir die .htaccess Datei und bearbeiten diese.
cd /opt/docker/nextcloud/data
nano .htaccess
Dort sollen wir zwei Einträge finden, die wie folgt aussehen:
RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
Diese zwei Einträge müssen umgeschrieben werden. Die Einträge sollen dann so aussehen:
RewriteRule ^\.well-known/carddav https://<nextcloud.local>/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav https://<nextcloud.local>/remote.php/dav/ [R=301,L]
Die <nextcloud.local> Adresse ändern wir auf unsere Nextcloud Adresse.
Jetzt schließen wir die Datei mit STRG + X STRG + Y. Jetzt laden wir die Seite neu, und die Meldung sollte jetzt nicht mehr auftauchen.
Observium
Benutzer für Observium anlegen
Einleitung
In dieser Anleitung erkläre ich kurz, wie wir in Observium einen neuen Benutzer anlegen können. Dazu verwenden wir die CLI vom Server, auf dem Observium installiert ist.
Benutzer anlegen
Um jetzt einen neuen Benutzer anzulegen, müssen wir zuerst in die Ordner von Observium navigieren.
cd /opt/observium
Jetzt führne wir den nachstehenden Befehl aus, und ändern die Parameter für den Benutzernamen, Kennwort und das "Benutzerlevel". Mit dem Benutzerlevel legen wir die Berechtigungen des Benutzers fest.
./adduser.php <benutzername> <kennwort> <benutzer-level>
Benutzerlevel
Anhand der nachstehenden Ausgabe der Software kann die benötigte Stufe entnommen werden:
USER LEVELS:
0 - Disabled (This user disabled)
1 - Normal User (This user has read access to individual entities)
5 - Global Read (This user has global read access)
7 - Global Secure Read (This user has global read access with secured info)
8 - Global Secure Read / Limited Write (This user has secure global read access with scheduled maintenence read/write.)
10 - Administrator (This user has full administrative access)
OpenSSL
Neue Zertifikate mit OpenSSL erstellen
Einleitung
In dieser Anleitung werden wir mithilfe von OpenSSL TLS Zertifikate erstellen, mit dem wir dann unseren Web-Server über HTTPS erreichbar machen können. OpenSSL ist für diesen Zweck eine passende Alternative, da diese keine Verbindung ins Internet benötigt, und kostenlos verwendbar ist.
Um diese Zertifikate zu erstellen, müssen wir sicherstellen, dass wir das Paket openssl
installiert haben. Wenn dies nicht der Fall ist, können wir dieses eben nachinstallieren.
apt update && apt install openssl -y
Erstellen von PK und CSR
In diesem Abschnitt werden wir einen PK (Private Key) und einen CSR (Certificate Signing Requests) erstellen. Mit diesen Dateien können wir dann unseren Web-Server verschlüsseln.
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Wenn wir diesen Befehl abgesetzt haben, müssen wir die Abfragen, die Folgen beantworten. Der erste Parameter -newkey rsa:2048
gibt an, dass der Schlüssel 2048 bit lang sein soll, und mit dem RSA Algorithmus verschlüsselt werden soll.
Mit dem zweiten Parameter -nodes
geben wir an, dass wir den Schlüssel nicht mit einem Kennwort verschlüsseln.
CSR aus einem vorhandenen PK erstellen
Der folgende Befehl kann verwendet werden, wenn wir ein CSR (Certificate Signing Requests) erstellen möchten, wir aber schon einen Private Key besitzen, bzw. erstellt haben.
openssl req -key domain.key -new -out domain.csr
Jetzt müssen wir beim ersten Parameter -key
den Dateinamen unseres Schlüssels angeben. Sobald wir das eingetragen haben, können wir den Befehl abschicken und die CSR Datei wird erstellt.
Selbst signiertes SSL Zertifikat erstellen
Jetzt wollen wir ein TLS Zertifikat erstellen, welches nicht von einer externen Zertifizierungsstelle stammt. Dies können wir uns von Gebrauch machen, wenn wir unseren Web-Server verschlüsseln möchten.
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
Der erste Parameter gibt wieder den Verschlüsselungsalgorithmus an. Der Parameter -x509
gibt an, dass wir unser Zertifikat nicht von einer externen Zertifikatsstelle signieren lassen möchten. Und der folgende Parameter -days
gibt an, wie lange unser Zertifikat gültig ist.
PFX Zertifikat in .crt und .key Datei exportieren
Einleitung
Um Zertifikate in bestimmte Software einspielen zu können, benötigen wir manchmal die .crt und die .key Datei. Dazu können wir uns das OpenSSL-Tool zu Hilfe nehmen.
Zertifikat exportieren
.crt Datei exportieren
Um die .crt Datei zu erhalten, müssen wir nur den folgenden Befehl absetzen. Dabei müssen wir im ersten Schritt den Datei-Namen der .pfx-Datei anpassen. Beim Absenden des Befehls geben wir nur noch das Kennwort ein, mit dem das Zertifikat verschlüsselt wurde.
openssl pkcs12 -in <PFX-Zertifikat> -clcerts -nokeys -out <CRT-Datei>
#Beispiel:
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.crt
.key Datei exportieren
Um jetzt die .key Datei zu erhalten, müssen wir diesmal 2 Befehle absetzen. Einmal um die .key-Datei zu erhalten, und im zweiten Schritt um die .key-Datei zu entschlüsseln.
openssl pkcs12 -in cert.pfx -nocerts -out cert-encrypted.key
Im Anschluss folgt jetzt die Entschlüsselung der .key-Datei.
openssl rsa -in cert-encrypted.key -out cert.key
Damit haben wir dann beide Dateien erfolgreich exportiert, um diese dann in bestimmten Anwendungen zu verwenden.
TrueNAS
Verbindung zum AD mit TrueNAS überprüfen
Einleitung
In dieser Anleitung beschreibe ich kurz, wie wir die Verbindung zum Active Directory vom TrueNAS Server aus, testen können. Dies benötigen wir, um z.B. eine Samba-Freigabe auf eine NFTs-Sicherheitsgruppe zu erstellen.
Verbindung überprüfen
Um die Verbindung jetzt zu überprüfen, müssen wir lediglich den nachstehenden Befehl absetzen. Wenn in der Auszählung die Active Directory Gruppen auftauchen, ist eine Verbindung und die anschließende Synchronisation mit dem Active Directory erfolgreich!
# Gruppen
wbinfo -g
#Benutzer
wbinfo -u
WireGuard
MTU Größe für Wireguard Verbindung berechnen
Einleitung
Bei der Einrichtung von einem Wireguard Server sollte eine MTU-Size mitgegeben werden. Diese gibt an, wie groß ein VPN-Paket mit Nutzdaten voll sein darf. In dieser Anleitung berechnen wir kurz unsere MTU-Size, um so die höchste Performance aus unserem Wireguard Server herauszuholen.
Wireguard verwendet eine Standard MTU von 1420. Dies kann zu Problemen führen wenn dadurch das Paket zu groß ist und somit nicht an den Server oder an den Client übermittelt werden kann.
Berechnung
Die Berechnung unterscheidet sich je nachdem welchen Anschluss ihr als eure Internetanbindung verwendet. Wenn es im Einzelfall nicht funktionieren sollte, prüft bitte, welche MTU-Größe ihr für euren Provider benötigt. Ich berechne die MTU-Größe beispielsweise für DSL mit einer MTU von 1492 und für Kabel-Internet mit einer MTU von 1500.
Anhand der nachfolgenden Tabelle können die einzelnen Byte-Größen entnommen werden, die zur Berechnung der MTU benötigt werden:
Beschreibung |
Byte Größe |
IPv4-Verbindung | 20 Bytes |
IPv6-Verbindung | 40 Bytes |
UDP-Paket | 8 Bytes |
Wireguard Overhead | 32 Bytes |
Dementsprechend lassen sich folgende Beispiele berechnen:
Beispiel 1 | Beispiel 2 |
MTU DSL |
MTU Kabel-Internet |
1492 MTU (Provider) | 1500 MTU (Provider) |
- 20 (IPv4) | - 40 (IPv6) |
- 8 (UDP) | - 8 (UDP) |
- 32 (Wireguard Overhead) | - 32 (Wireguard Overhead) |
= MTU 1432 | = MTU 1420 |
Die DSL Wireguard Verbindung verwendet im Rechenbeispiel eine Verbindung über IPv4, wohin gegen die Kabel Wireguard Verbindung eine Verbindung über IPv6 herstellen möchte.
WireGuard mit WebInterface auf Debian Server installieren
Einleitung
Wenn wir unseren eigenen WireGuard Server betreiben möchten, wollen wir diesen vielleicht ja auch über eine Weboberfläche administrieren. Als Oberfläche bedienen wir uns dann an wireguard-ui Link.
Mithilfe von WireGuard können wir dann ganz einfach eine VPN-Verbindung in unser Netzwerk herstellen und so einerseits auf unser Heimnetzwerk zugreifen, als auch verschlüsselten Datenverkehr nutzen.
Vorbereitungen durchführen und WireGuard installieren
Im ersten Schritt installieren wir alle benötigen Pakete auf unserem Debian Server, damit wir WireGuard betreiben können.
apt update && apt install -y wireguard curl iptables tar
cd /etc/wireguard
Wir müssen auch sicherstellen das unsere Firewall Port 51820/udp durchlässt. Und das wir ggf. unseren WireGuard Server als Exposed Host oder durch Port NAT unseren Server von außen erreichbar machen. Wie genau das funktioniert, bitte dem Handbuch des Herstellers der Firewall entnehmen.
Jetzt müssen wir das IP-Forwarding aktivieren. Dies hat den Hintergrund, dass der gesamte Verkehr auf dem WireGuard Interface weitergeleitet wird.
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p
WireGuard UI installieren
Jetzt müssen wir folgenden Code ausführen, damit wir das Startskript für WireGuard UI erstellt wird. Damit wird der Webserver gestartet, und die Datenbank unter /etc/wireguard/db/
abgelegt.
cat <<EOF > /etc/wireguard/start-wgui.sh
#!/bin/bash
cd /etc/wireguard
./wireguard-ui -bind-address 0.0.0.0:5000
EOF
chmod +x start-wgui.sh
Mit dem folgenden Skript wird WireGuard UI installiert und die entsprechenden Dienste angelegt. Im Anschluss wird der Download von WireGuard UI gestartet und der Web Server wird gestartet.
cat <<EOF > /etc/systemd/system/wgui-web.service
[Unit]
Description=WireGuard UI
[Service]
Type=simple
ExecStart=/etc/wireguard/start-wgui.sh
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF > /etc/wireguard/update.sh
#!/bin/bash
VER=\$(curl -sI https://github.com/ngoduykhanh/wireguard-ui/releases/latest | grep "location:" | cut -d "/" -f8 | tr -d '\r')
echo "downloading wireguard-ui \$VER"
curl -sL "https://github.com/ngoduykhanh/wireguard-ui/releases/download/\$VER/wireguard-ui-\$VER-linux-amd64.tar.gz" -o wireguard-ui-\$VER-linux-amd64.tar.gz
echo -n "extracting "; tar xvf wireguard-ui-\$VER-linux-amd64.tar.gz
echo "restarting wgui-web.service"
systemctl restart wgui-web.service
EOF
chmod +x /etc/wireguard/update.sh
cd /etc/wireguard; ./update.sh
Änderungen der Konfiguration verarbeiten
Mit dem folgenden Skript wird die WireGuard Schnittstelle wg0 beobachtet. Bei Veränderungen an der Konfigurationsdatei wird dann WireGuard neu gestartet.
cat <<EOF > /etc/systemd/system/wgui.service
[Unit]
Description=Restart WireGuard
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart wg-quick@wg0.service
[Install]
RequiredBy=wgui.path
EOF
cat <<EOF > /etc/systemd/system/wgui.path
[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes
[Path]
PathModified=/etc/wireguard/wg0.conf
[Install]
WantedBy=multi-user.target
EOF
WireGuard und WireGuard UI starten
Jetzt starten wir WireGuard und WireGuard UI.
touch /etc/wireguard/wg0.conf
systemctl enable wgui.{path,service} wg-quick@wg0.service wgui-web.service
systemctl start wgui.{path,service}
Wir können jetzt das Web Interface von WireGuard UI unter der Public IP und Port 5000 öffnen. Die Installation ist damit abgeschlossen!
Wordpress Entwicklung
Plugin mit Menü und Untermenü entwickeln
Einleitung
Wenn wir Wordpress Plugins programmieren, wollen wir vielleicht das der Benutzer bestimmte Menüs öffnen kann. Um nicht für jeden Eintrag Platz in der Administrator Übersicht zu verbrauchen, können wir Menüs in andere Menüs mit einbauen, so das wir dann diese über den "Hauptpunkt" ansteuern können.
Anwendung
Zuerst legen wir wie gewohnt unser Wordpress Plugin an.
Im Anschluss rufen wir in der Datei die PHP-Funktion add_action(). Als Parameter geben wir als erstes admin_menu an. Als zweiten Parameter geben wir eine Funktion an mit der wir nachher die Menüs aufrufen.
add_action('admin_menu','plugin_set_menu');
Als zweites schreiben wir die Funktion damit die Menüs erstellt werden können.
In der Funktion verwenden wir zuerst die PHP-Funktion add_menu_page(). Mit dieser können wir einen Eintrag in das Administrationsfenster vornehmen.
In dieser Funktion haben wir 5 (optional: 6) Parameter.
Mit dem ersten Parameter geben wir den Namen an, unter welchem der Eintrag mit Admin Menü zu finden ist. Mit dem zweiten Parameter geben wir an, wie unser Menü im Browser Tab benannt wird. Im dritten Parameter geben wir einfach ein manage_options an. Als vierten Parameter geben wir unseren "slug", also unsere URI Erweiterung an (Erweiterung an die URL). Als letzten Parameter geben wir an, welche Funktion wir aufrufen um den Seiteninhalt darzustellen. Als sechsten Parameter können wir einen Pfad zu einer Bilddatei angeben um ein Icon festzulegen.
add_menu_page("Plugin Konfiguration", "Konfiguration", "manage_options", "plugin-config", "plugin_config_plugin");
Im nächsten Schritt setzen wir das Untermenü. Dazu verwenden wir wieder eine PHP-Funktion. Diese Funktion trägt den Namen add_submenu_page(). Diese Funktion hat 6 Parameter die wir angeben müssen.
Beim ersten Parameter geben wir den slug des Hauptmenüs an. Mit dem zweiten Parameter geben wir den Namen an, wie er im Menü auftaucht. Dann legen wir wieder den Browser Titel fest. Als vierten Parameter geben wir wieder manage_options an. Als fünften Parameter geben wir den neuen slug für die URL an die eingetragen wird, wenn die Seite aufgerufen wird. Als letzten Parameter geben wir jetzt an, welche Funktion wieder aufgerufen wird wenn der Punkt ausgewählt wird.
add_submenu_page("plugin-config","Plugin installieren", "Plugin installieren", "manage_options", "plugin-install", "plugin_install_func");
Wordpress Plugin Grundstruktur
Einleitung
Wenn uns der Umfang des normalen WordPress nicht ausreicht können wir selbst Plugins entwickeln. Die Wordpress Plugins werden komplett in PHP geschrieben. Das bedeutet, um Wordpress Plugins selbst zu entwickeln benötigen wir Kenntnisse in PHP und SQL (MySQL).
Grundstruktur erstellen
Um ein Plugin zu erstellen, müssen wir im Plugin Ordner unserer Wordpress Installation einen Ordner in lowercase (kleingeschrieben) erstellen. Das Verzeichnis befindet sich unter folgendem Pfad:
/web-root/wp-content/plugins
In diesem Verzeichnis legen wir eine PHP Datei mit dem Namen unseres Ordners an. Unser Plugin werden wir debitoren nennen. Wir öffnen dann die PHP Datei mit dem Editor unserer Wahl.
cd /var/www/html/wp-content/plugins
sudo mkdir debitoren
sudo nano debitoren.php
In die Datei fügen wir einen Mehrzeiligen Kommentar hinzu in welcher wir Meta-Informationen über unser Plugin festlegen. Wir müssen den Plugin Namen festlegen. Ohne diese Information können wir unser Plugin nicht installieren.
in der PHP Datei definieren wir nach folgender Syntax die Meta Informationen für das Plugin
/**
* Plugin Name: Debitoren Plugin
*/
Plugin Meta Informationen |
Beschreibung |
Plugin Name: | Namen unseres Plugins festlegen. |
Plugin URI: | Websites unseres Plugins festlegen. |
Description: | Kleine Beschreibung über unser Plugin. |
Version: | Festlegung der Version des Plugins. |
Requires at least: | Definition der Minimalen Wordpress Version. |
Requires PHP: | Minimale PHP Version festlegen. |
Author: | Autor des Plugins festlegen. |
Author URI: | Website des Plugin Autors. |
License: | Lizenz unseres Plugins festlegen |
License URI: | Website zur Lizenz angeben. |
In der PHP Datei legen wir jetzt den Code für unser Plugin fest.
Zur besseren Struktur legen wir noch zwei Ordner mit den Namen admin und public an. In diesen Ordnern legen wir die Website Dateien für das Administrationspanel und für die generellen Informationen die für alle Sichtbar sein werden. In einem weiteren Ordner mit dem Namen inc legen wir die Klassen und Funktionen fest. Wenn wir unser Plugin auch verschiedenen Sprachen zugänglich machen wollen, dann erstellen wir noch einen Ordner mit dem Namen languages. Wir können auch eine uninstall.php Datei anlegen um dort die Deinstallation Routinen festlegen falls Datenbanken oder ähnliches gesäubert werden sollen.
Die Routinen die bei einer Deinstallation durchgeführt werden legen wir dort innerhalb einer IF-Kontrollstruktur fest.
if (!defined('WP_UNINSTALL_PLUGIN'))
{
// Füge Code hinzu
exit;
}
Wordpress Template Tags
Einleitung
Bei der Entwicklung von Plugins für Wordpress benötigen wir Objekte die in der Wordpress Programmierung fest verankert sind. Dazu gehören unter anderem z.B. der eigentliche Beitrag den wir anfassen wollen, oder vielleicht andere Parameter?
Dazu verwenden wir die sogenannten template-tags. Mit diesen können wir verschiedene Dinge anfassen und auch die Objekte bearbeiten oder andere Attribute festlegen.
Template Tags
In dieser Tabelle finden wir alle möglichen Template Tags.
Funktion |
Beschreibung |
the_ID() | Die interne ID-Nummer des Beitrags. |
the_permalink() | Vollständiger Permalink des Beitrags. |
the_title() |
Der Beitragstitel. |
the_excerpt() |
Der Auszug. |
the_content() |
Beitragsinhalt. |
the_category() |
Die zugewiesenen Kategorien. |
the_tags() |
Die zugewiesenen Schlagwörter. |
wp_tag_cloud() |
Eine Rudimentäre formatierte Tag-Cloud. |
next_post_link() previous_post_link() |
Link zum chronologisch vorherigen, also neueren oder vorherigen Beitrag. |
next_image_link() previous_image_link() |
Link zum nächsten / vorherigen Bild im Beitrag. |
get_author() |
Beitragsautor. |
the_author_link() |
Link zur Autorenseite. |
the_author_posts |
Zur Übersichtsseite mit allen Beiträgen des Autors. |
the_date() |
Veröffentlichungsdatum. |
the_modified_date() |
Datum der letzten Bearbeitung. |
the_meta() |
Die Benutzerdefinierten Felder des Beitrags. |
the_shortlink() |
Kurzer Link zum Beitrag. |
wp_list_comments() |
Liste alle Kommentare auf. |
in_the_loop() |
Fragt ab ob der Code sich im Loop befindet. |
is_home() |
Wahr wenn die aktuelle Seite die Homepage ist. |
is_admin() |
Wahr wenn man sich momentan im Backend befindet (Administrations Menü) |
is_single() |
Wahr wenn die aktuelle Seite eine Beitrags Detailseite ist. |
is_page() |
Wahr wenn die aktuelle Webseite eine einzelne Seite ist. |
is_page_template() |
Wahr wenn die Seite ein bestimmtes Template verwendet. Angabe des Templates als lowercase Strings. |
is_category() |
Überprüft ob die Seite / Beitrag einer bestimmten Kategorie zugeordnet ist. |
is_tag() |
Prüft ob dem Inhalt ein Schlagwort zugewiesen ist. |
is_author() |
Prüft ob der Autor ein bestimmter Autor ist. |
is_search() |
Ist wahr wenn die Seite ein Suchergebnis war. |
is_404() |
Wahr wenn es sich um die Seite um eine Error 404 Seite handelt. |
has_excerpt() |
Wahr wenn der Beitrag einen Auszug besitzt. |
comments_link() |
Link zum Kommentarabschnitt des Beitrags. |
comment_id() |
Interne ID eines Kommentars. |
comment_author() |
Kommentarautor. |
comment_author_email_link() |
Anklickbare E-Mail Adresse des Kommentarautors. |
comment_text() |
Kommentartext. |
comment_excerpt() |
Maximal 20 Wörter des Kommentartextes als Auszug. |
comment_date() |
Kommentardatum. |
get_avatar() |
Zeigt den Avatar des Kommentar Autors an. |
get_header() |
Lädt das header.php Template. |
get_footer() | Lädt das footer.php Template. |
get_sidebar() | Lädt das sidebar.php Template. |
get_search_from() | Lädt das searchform.php Template. |
comments_template() | Lädt das Template-Fragment für den Kommentarabschnitt. |