Categories
Scripts Windows Zabbix

Zabbix Template mit Userparameter (PS-Script) bauen

Generelle Ansprüche an das Template

  • PowerShell-Script erfasst auf Host-Seite die nötigen Daten
  • Ansteuerung über Zabbix-Server mit Parametern (also kein Zabbix Trapper)
  • Verwendung aktueller Best-Practices – sprich am Besten ein “Raw Item” aus dessen Inhalt die anderen Items berechnet werden, um den Datentransfer und die Kommunikation zw. Host und Zabbix-Server so klein wie nur irgendwie möglich zu halten.

Unser Szenario

Im konkreten Beispiel wird ein Script den Inhalt eines Ordners überwachen und uns alarmieren, wenn Inhalte im Ordner älter sind, als eine definierte Zeitspanne. Zusätzlich sollen gewisse Dateien innerhalb des Ordners ignoriert werden.

Schlussfolgerungen

Pfad, Zeitspanne und zu ignorierende Dateien werden als Macros ins Template übernommen und können somit auf Hostebene angepasst werden. Diese Macros werden dann in einem einzigen Item an den Host übergeben, der auf seiner Seite ein Script ausführt und die ganzen benötigten Informationen “raw” zurückgibt. Wir erstellen dann weitere “berechnete Items”, die den Inhalt des “Raw Items” auswerten und damit arbeiten.

Schritt 1: Das Script

Im Installationsverzeichnis von Zabbix (bei uns C:\ZABBIX) legen wir einen Ordner “userparameter” an. Hier wird das Script “Get-OldFilesInFolder.ps1” angelegt:

param(
[string]$sPath = "",
[string]$sFoldersToIgnore = "")

[bool]$bIgnoreSth = $false;

if ($sFoldersToIgnore.Length -gt 0){
    [String[]]$saFoldersToIgnore = $sFoldersToIgnore.Split(",");

    foreach ($sFolder in $saFoldersToIgnore){
        $sFolder = $sFolder.Trim();
    }
    $bIgnoreSth = $true;
}

[int]$iMaxAge = 0
[string]$sOldestFileName = "n/a";

$oaSubFiles = Get-ChildItem -Path $sPath

foreach ($oFile in $oaSubFiles){

    if ($saFoldersToIgnore -match $oFile.Name){
        # Do nothing
    } else {
        
        [TimeSpan]$tsAge = New-TimeSpan -Start $oFile.CreationTime -End (Get-Date)

        if ($tsAge.TotalMinutes -gt $iMaxAge){

            $iMaxAge = $tsAge.TotalMinutes;
            $sOldestFileName = $oFile.FullName.Replace("\", "\\");
        }
    }
}

Write-Host "{""MaxAge"":""$($iMaxAge)"",""FileName"":""$($sOldestFileName)""}";

Entscheidend ist hier unsere letzte Zeile. Wir geben ein (zugegebenermaßen recht einfaches) Json-Objekt zurück. Unser “Raw Item” wird somit nachher mit Json befüllt sein – der wohl sinnvollsten Möglichkeit in Zabbix mit multiplen Daten zu arbeiten.

Der zweite wichtige Punkt ist ganz oben im Script. Im “param()”-Block geben wir die Argumente an, die wir auf dem Zabbix-Host später übergeben müssen.

Schritt 2: Anpassung der zabbix_agentd.conf

Die wichtigste Zeile, die wir hinzufügen müssen, ist folgende:

UserParameter=foldermonitoring.getstatus[*],powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ZABBIX\userparameter\Get-OldFilesInFolder.ps1" "$1" "$2"
  • Mit [*] geben wir an, dass das Item Parameter unterstützt.
  • Mit dem grün geschriebenen geben wir den Pfad zum Script an
  • Und die gelben Elemente sind die übergebenen Parameter, die auf keinen Fall weniger sein sollten, wie wir beim Item nachher übergeben.

Die zweite Zeile die angepasst werden muss, ist leider folgende:

UnsafeUserParameters=1

Da wir hier später einen Ordnerpfad übergeben, muss diese Option angepasst werden, da sonst die “Backslashes” nicht akzeptiert werden.

Schritt 3: Erstellung des Templates

Um mit der etwas eigenwilligen Benennung von Templates seitens Zabbix compliant zu sein, habe ich das Template “Template Module Windows folder content by Zabbix agent” genannt und in die Gruppe “Templates/Modules” abgelegt. Mehr gehe ich auf das Design des Templates aber gar nicht ein – viel wichtiger sind andere Dinge:

Macros:

Hier erstellen wir nun die drei besagten Macros:

MacroInhaltBeschreibung
{$FOLDERMONITORING.IGNORE}Example,TemplateComma-separated list of ignored Files/Folders
{$FOLDERMONITORING.PATH}C:\TEMPPath to folder getting monitored
{$FOLDERMONITORING.THRESHOLD}30Threshold in seconds

Ist denke ich recht verständlich. Durch die einheitliche Benennung werden Sie später beim Host leichter zu finden sein.

Das Zabbix Raw Item

Nun kommen wir zur Erstellung des “Raw Items” und somit zum Script-Trigger:

  • Name: Whatever floats your Boat
  • Type: Zabbix agent
  • Key: foldermonitoring.getstatus[“{$FOLDERMONITORING.PATH}”,”{$FOLDERMONITORING.IGNORE}”]
    Hier referenzieren wir die Macros. Auch andere Parameter können aber selbstverständlich angegeben werden.
  • Type of information: Text
  • Update interval: 1m (Zabbix Template Guideline)
  • History: 7d (Zabbix Template Guideline)
  • Applications: Zabbix raw items (Zabbix Template Guideline)
  • Description: Hier kann man beschreiben, was Hostseitig in der Config angepasst werden muss, damit das Item funktioniert
  • Enabled: klar.

Damit ist das “Raw Item” schon fertig. Sollten Sie das Template nun an einen Host anbinden, auf dem das Script liegt und die Config entsprechend angepasst wurde, sollten Sie unter “Latest Data” bereits Ihr Json-Objekt sehen.

Die berechneten Items (Dependent item)

Hier werden nun zwei Items erstellt – Bietet sich bei diesem Json-Objekt an:

Dependent Item #1 (Numeric)
  • Name: Whatever floats your boat
  • Type: Dependent item
  • Key: foldermonitoring.age
  • Master item: Auswahl des Raw-Items
  • Type of information: Numeric (unsigned)
  • Units: s (spezielle Unit für Zeitspannen)
  • History: 7d (Zabbix Template Guideline)
  • Trends: Do not keep trends
  • Show value: As is
  • Applications: File monitoring
  • Description: ¯\_(ツ)_/¯
  • Enabled: ja.

Das war jedoch noch nicht alles, wir wechseln stattdessen auf den “Preprocessing”-Reiter, um dem Raw-Item auch den richtigen Wert zu entziehen:

  1. Add -> JSONPath -> $[“MaxAge”]
    Das ist die Json-Property, wie wir Sie im Script erstellten.
  2. Add -> Custom multiplier -> 60
    Hierdurch machen wir aus den Minuten Sekunden.
Dependent ITEM #2 (Text only)
  • Name: Whatever floats your boat
  • Type: Dependent item
  • Key: foldermonitoring.name
  • Master item: Auswahl des Raw-Items
  • Type of information: Text
  • History: 7d (Zabbix Template Guideline)
  • Applications: File monitoring
  • Description: ¯\_(ツ)_/¯
  • Enabled: ja.

Auch hier dann wieder auf den “Preprocessing”-Reiter wechseln und folgendes konfigurieren:

  1. Add -> JSONPath -> $[“FileName”]
    Das ist die Json-Property, wie wir Sie im Script erstellten.

Schritt 4: Funktion prüfen

Falls nicht schon nach Erstellung des “Raw Items” passiert, können Sie nun das Script auf einem Host ablegen, die Config des Agents entsprechend anpassen und in Zabbix dem Host das Template zuordnen. Wenig später (falls die Default-Werte eingehalten wurden, eine Minute später) sollten dann die Werte abgerufen werden und unter “Latest Data” einsehbar sein. Die Macros müssen natürlich angepasst werden.

Schritt 5: Trigger erstellen

Nun können wir wieder auf das Template wechseln, um noch einen Trigger zu erstellen. Schließlich wollen wir ja melden, falls eine Datei tatsächlich älter ist als der im Macro hinterlegte Wert.

Auch hier werden wir wieder Best Practices anwenden – Somit kommen keine {ITEM.LASTVALUEX}-Attribute mehr in den Triggernamen, da diese seit Zabbix 4 (nicht komplett sicher) nicht mehr aktualisiert werden. Stattdessen kommen solche Infos in das Feld “Operational Data”. Gesagt, getan:

  • Name: File in ‘{$FOLDERMONITORING.PATH}’ older than threshold ({$FOLDERMONITORING.THRESHOLD}m)
  • Operational Data: Age: {ITEM.LASTVALUE1}
    Immer klein halten, da es in Dashboards zusätzlich zum Triggernamen in der Zeile angezeigt wird
  • Serverity: Frei wählbar
  • Expression:
    {Template Module Windows folder content by Zabbix agent:foldermonitoring.age.last()}>{$FOLDERMONITORING.THRESHOLD} and {Template Module Windows folder content by Zabbix agent:foldermonitoring.name.strlen()}>0
    Wir prüfen den Namen hier nur, um darauf zugreifen zu können
  • OK event generation: Expression
  • PROBLEM event generation mode: Single
  • OK event closes: All problems
  • Allow manual close: Nein.
  • URL: –
  • Description: Path of File: {ITEM.LASTVALUE2}
    Hier greifen wir nun den Namen ab um ihn anzuzeigen.
  • Enabled: Ja.

Abschluss

Das war es nun – wir haben unser Template erstellt. Was die Komplexität betrifft, war das natürlich gar nichts. Jedoch haben wir hierdurch einen guten Einblick in alle nennenswerten Mechaniken bekommen. Funktionstechnisch kratzen wir hier sicher nur an der Oberfläche.

Categories
Zabbix

Zabbix Agent-Kommunikation verschlüsseln

PSK-Key generieren

Auf einem beliebigen Unix-OS folgenden Befehl ausführen:

openssl rand -hex 48

… um einen hexadezimalen PSK-Schlüssel mit einer Länge von 48 Zeichen zu erstellen. Hexadezimal muss er sein, das setzt ZABBIX voraus. Ob es bei der Zeichenlänge Limitierungen gibt, ist mir aktuell nicht bekannt. Diesen Key nun in die Zwischenablage kopieren.

Einspielen im ZABBIX-Server

In der Hostkonfiguration kann nun unter dem Reiter “Encryption” folgende Einstellung gesetzt werden:

Connections to host:PSK
Connections from host:PSK
PSK-Identity[z.B. der Hostname des Hosts]
PSK[Key aus Zwischenablage]

Mit dem Speichern der Einstellungen wird die Verbindung zum Host unterbrochen, da der ZABBIX-Server nun eine verschlüsselte Verbindung voraussetzt.

Einspielen im Host

Auf dem jeweiligen Host muss nun die Config-Datei angepasst werden. Zuvor legen wir (am besten im Agent-Verzeichnis) ein Textfile ab, das den PSK-Key enthält. Diese nennen wir beispielsweise “psk.key”. Anschließend bearbeiten wir in der Agentconfig folgende Parameter:

# Pfad zur Key-Datei
TLSPSKFile=[Pfad zur Key-Datei]
# Wert für PSK-Identity
TLSPSKIdentity=[z. B. der Hostname]
# Akzeptierte Arten von eingehenden Verbindungen
TLSAccept=psk
# Art der ausgehenden Verbindung
TLSConnect=psk

Nachdem die Parameter entsprechend angepasst wurden, kann der Agent neugestartet werden. Sofern PSK-Identity und PSK-Key auf Server und Host übereinstimmen, sollte nun die Verbindung wieder erfolgen – verschlüsselt.

Categories
Tipps & Tricks

Chrome Omnibox mit eigenen Suchen ausreizen

Vielleicht haben Sie schon festgestellt, dass bei der Eingabe von einer Adresse in die Adressleiste (=Omnibox) von Chrome – gefolgt von einem Leerzeichen – sich die Leiste wandelt.

Aus:

amazon.de|

… wird so beispielsweise:

amazon.de durchsuchen | 

… und Sie können direkt Ihren Suchbegriff eingeben, den Sie sonst erst auf der Zielseite in eine Maske eingeben müssten. Das geht aber nicht nur mit ein paar vordefinierten Seiten, sondern wir können auch unsere eigenen Seiten konfigurieren. Einzige Voraussetzung ist hierbei, dass der Suchbegriff aus der URL auszulesen ist.

Gehen wir in unserem Beispiel mal von FontAwesome aus. Suche ich hier nach einem Icon, sieht die URL nach ausgeführter Suche folgendermaßen aus:

https://fontawesome.com/icons?d=gallery&q=pizza-slice

Ich habe nach “pizza-slice” gesucht, also ist das blau eingefärbte mein Suchbegriff.

Nun gehen wir in die Chrome-Einstellungen und klicken dort auf den Menüpunkt “Suchmaschinen verwalten”. Um die Einstellung schneller zu finden, können Sie die Tastenkombination Strg+F verwenden.

Neben der Überschrift “Andere Suchmaschinen” können Sie auf den Knopf “Hinzufügen” drücken. Füllen Sie dann die Felder folgendermaßen aus:

  • Suchmaschine:
    Hier tragen Sie schlicht den Namen ein, in unserem Beispiel also “FontAwesome”.
  • Suchkürzel:
    Hier tragen Sie die Zeichenfolge ein, auf die die Omnibox reagieren soll. Ich trage hier “fa” ein, muss also in die Adressleiste “fa” gefolgt von einem Leerzeichen nachher eingeben, um die Suche verwenden zu können.
  • URL mit %s statt der Suchanfrage:
    Hier tragen wir nun die vorher festgestellte URL ein und ersetzen die gesuchte Zeichenfolge wie angefordert. Im Beispiel lautet also der einzugebende Text
    https://fontawesome.com/icons?d=gallery&q=%s

Drücken Sie abschließend auf “Hinzufügen” um die Erstellung abzuschließen. Gewöhnt man sich erstmal daran, ist es eine wahnsinnige Zeitersparnis. Ich wünsche viel Spaß beim Testen!

Hier noch ein paar Praxis-Beispiele:

SuchmaschineSuchkürzelURL
FontAwesomefahttps://fontawesome.com/icons?d=gallery&q=%s
MX Toolbox: A-Recordahttps://mxtoolbox.com/SuperTool.aspx?action=a%3a%s&run=toolpage
MX Toolbox: MX-Recordmxhttps://mxtoolbox.com/SuperTool.aspx?action=mx%3a%s&run=toolpage
Beispiele für nützliche Suchen im IT-Alltag
Categories
Zabbix

Zabbix: MySql-Monitoring unter Ubuntu

Die Anleitung basiert auf den offiziellen Instruktionen von ZABBIX: https://www.zabbix.com/integrations/mysql

Bei der Ausführung und Weitergabe der Anleitung fanden wir jedoch heraus, dass man ein wenig Hintergrundwissen benötigt, um die Schritte umsetzen zu können.

Von einem an sich funktionierenden Zabbix-Agent wird hier ausgegangen.

  • Prüfen Sie über die Agent-Konfiguration, in welchem Ordner zusätzliche Configs eingelesen werden (Suchen nach “Include”-Parameter):
Include=/etc/zabbix/zabbix_agentd.d/*.conf
  • Erstellen Sie dort ein neues Config-File für mysql:
cd /etc/zabbix/zabbix_agentd.d/
nano userparameter_mysql.conf

… und fügen Sie folgenden Text ein …

#template_db_mysql.conf created by Zabbix for "Template DB MySQL" and Zabbix 4.2
#For OS Linux: You need create .my.cnf in zabbix-agent home directory (/var/lib/zabbix by default)
#For OS Windows: You need add PATH to mysql and mysqladmin and create my.cnf in %WINDIR%\my.cnf,C:\my.cnf,BASEDIR\my.cnf https://dev.mysql.com/doc/refman/5.7/en/option-files.html
#The file must have three strings:
#[client]
#user=zbx_monitor
#password=
#
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
  • Erstellen Sie in MySql einen Benutzer für Zabbix:
mysql -u  -p

> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '[Neues Passwort für den User]';
> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';

… jetzt haben Sie einen Benutzer ‘zbx_monitor’ erstellt mit einem von Ihnen definierten Passwort (anstelle von [Neues Passwort für den User])

  • Nun kommt der Punkt, der von ZABBIX nicht erklärt wird: Die Verbindungsdaten müssen nun im Home-Laufwerk des Zabbix-Benutzers abgelegt werden. Das hat er jedoch standardmäßig nicht. Wir legen nun also dem Benutzer ein Home-Laufwerk an:
# Ordner anlegen
mkdir -p /var/lib/zabbix
# Berechtigung setzen
chown zabbix:zabbix /var/lib/zabbix
# Zabbix Agent stoppen (sonst gehts nicht)
service zabbix-agent stop
# Dem Zabbix-Benutzer das Homelaufwerk zuordnen
usermod -d /var/lib/zabbix zabbix
# Jetzt kann der Agent wieder gestartet werden
service zabbix-agent start
  • Jetzt kann die Verbindungsdatei hinterlegt werden:
nano /var/lib/zabbix/.my.cnf
[client]
user=zbx_monitor
password=[Neues Passwort für den User]

… das sollte es gewesen sein. Am Besten abschließend den Zabbix-Agent nochmal neustarten:

service zabbix-agent restart
Categories
Zabbix

Zabbix 4.0 Proxy (PostgreSQL) unter Ubuntu 18.04 LTS installieren

In dieser Anleitung wird davon ausgegangen, dass Ubuntu 18.04 bereits auf der Maschine installiert wurde. Weiter setzt die Anleitung eine funktionierende Internetverbindung auf dem Proxy voraus.

Um keine Probleme mit Berechtigungen zu bekommen, stellen Sie bitte sicher, dass Sie nun als Admin unterwegs sind:

sudo su

Zunächst laden wir uns dann das aktuelle Repository-Konfigurationspaket herunter:

wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-2+bionic_all.deb
dpkg -i zabbix-release_4.0-2+bionic_all.deb

Dann aktualisieren wir Paketinformationen:

apt-get update

Jetzt können wir das Proxy-Paket herunterladen und installieren:

apt-get install zabbix-proxy-pgsql

Anschließend aktivieren und starten wir den Proxy:

systemctl enable zabbix-proxy
systemctl start zabbix-proxy

Nun erstellen wir den PostgreSQL-Benutzer, der vom Proxy verwendet wird, um auf die lokale Datenbank zuzugreifen. Sie werden nach Eingabe der Zeile wiederholt um die Eingabe des Kennworts für den User gebeten. “zabbix” beschreibt den Benutzernamen, der natürlich variieren kann.

sudo -u postgres createuser --pwprompt zabbix

Im nächsten Schritt erstellen wir die Datenbank für den Proxy. Wir nennen diese im Beispiel ebenfalls “zabbix”:

sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix

Dann wenden wir das von Zabbix mitgelieferte Schema auf die Datenbank an:

zcat /usr/share/doc/zabbix-proxy-pgsql/schema.sql.gz | sudo -u zabbix psql zabbix

Im letzten Schritt passen wir die Zabbix Proxy-Konfiguration an:

nano /etc/zabbix/zabbix_proxy.conf

Folgende Parameter müssen angepasst werden:

# IP oder FQDN des Hauptservers
Server=192.168.1.20
# Hostname des Proxies
Hostname=ZBX-PROXY
# DBHost muss wirklich leer bleiben, also wie abgebildet
DBHost=
# Name der Datenbank
DBName=zabbix
# Zuvor definierter Benutzer, den der Proxy zur DB-Verbindung verwendet
DBUser=zabbix
# Zuvor definiertes Passwort, das der Proxy zur DB-Verbindung verwendet
DBPassword=*******

Im Anschluss können wir den Zabbix Proxy einmal neustarten:

service zabbix-proxy restart

Bei Bedarf können mit folgender Zeile die Logfile-Einträge des Proxys in Echtzeit ausgegeben werden:

tail -f /var/log/zabbix/zabbix_proxy.log

Damit sollte die Installation abgeschlossen sein und Sie können den Proxy in Ihrer Zabbix-Oberfläche einrichten.

Categories
VMWare

ESXi 6.X Evaluierungszeitraum zurücksetzen

Stellen Sie zunächst sicher, dass der SSH-Dienst auf dem ESXi-Host aktiviert ist: Host –> Manage –> Reiter: Services –> TSM-SSH starten (falls nicht gestartet).

Dann greifen wir per SSH auf den Host zu. Die Zugangsdaten sollten Sie parat haben.

Nacheinander führen wir folgende Schritte aus:

Enfernung der aktuellen Lizenzdatei

rm -r /etc/vmware/license.cfg

Kopieren der neuen Lizenzdatei (liegt bereits auf Host):

cp /etc/vmware/.#license.cfg /etc/vmware/license.cfg

ESXi-Dienst neustarten:

/etc/init.d/vpxa restart

Nun können Sie testen, ob alles wieder funktioniert. In unserem Fall lies sich eine VM dennoch nicht starten. Bei uns hat es geholfen, dann noch komplett alle ESXi-Dienste neuzustarten:

/etc/vmware/sbin/services.sh restart

Nun sollten Sie weitere 60 Tage ESXi testen können. Diese Schritte sollten Sie selbstverständlich nur im Testlab ausführen und nicht produktiv nutzen!

Categories
Hersteller IBM / Lenovo

Lenovo / IBM Integrated Management Module (IMM) – Wechsel der IP-Adresse aus Windows heraus

Die IP-Konfiguration des Integrated Management Modules (IMM) muss nicht zwingend über das BIOS/UEFI geschehen. Sie können diesen Schritt auch direkt über das Betriebssystem erledigen und müssen hierbei nicht einmal den Server neustarten. Lediglich das IMM-Modul wird hier kurz im Kreis gedreht.

Benötigt wird dafür das sogenannte ASU, ein Programm, dass Sie von IBM beziehen können. Laden Sie die für Sie passende Version herunter:

Ältere IBM-Systeme
Neuere Lenovo-Systeme – ab etwa 2015
(Sie müssen jeweils etwas herunterscrollen um den Download aufrufen zu können. Dort sehen Sie dann die kompatiblen Systeme)

Wählen Sie beim Download die HTTPS-Variante, um den unnötigen Downloadmanager zu vermeiden. Laden Sie dann die .exe-Date herunter.

Die .exe-Datei verschieben Sie dann auf dem jeweiligen Host in einen extra Ordner. Der Grund dafür ist, dass Sie beim Klick auf die Datei selbige nur im aktuellen Ordner entpacken. Sie können die ursprüngliche Datei im Anschluss sogar löschen. Der Inhalt des Ordners sollte dann wie folgt aussehen:

Ordnerinhalt

Mit der Kommandozeile sollten Sie sich nun in diesen Ordner begeben. Dann geben Sie bitte folgende Zeilen nacheinander ein:

asu64.exe set imm.hostipaddress1 [IP-Adresse]
asu64.exe set imm.hostipsubnet1 [Subnetzmaske]
asu64.exe set imm.gatewayipaddress1 [Gateway-IP]
asu64.exe set imm.dhcp1 disable
asu64.exe rebootimm

Praktisches Beispiel:

asu64.exe set imm.hostipaddress1 192.168.10.20
asu64.exe set imm.hostipsubnet1 255.255.255.0
asu64.exe set imm.gatewayipaddress1 192.168.10.1
asu64.exe set imm.dhcp1 disable
asu64.exe rebootimm

Der letzte Befehl startet das IMM neu, so dass Sie wenig später die neue IP-Adresse im Browser aufrufen können.

Categories
General

phpMyAdmin richtig updaten

Sofern phpMyAdmin über apt-get installiert wurde, können Sie die Software nur so lange aktualisieren, wie Ihre gewählte Distribution noch neue Versionen unterstützt. Aufgrund aktueller Sicherheitsprobleme wollen wir aber phpMyAdmin in diesem Beispiel auf die wirklich aktuellste Version aktualisieren, welche von der Distribution so nicht mehr unterstützt wird.

Dazu aktualisieren wir die phpMyAdmin-Version zunächst auf die höchste, von der Distribution zugelassene Version:

# Als erstes aktualisieren wir unsere Update-Liste.
sudo apt-get update
# Dann aktualisieren wir phpmyadmin, tatsächlich mit 'install'.
sudo apt-get install phpmyadmin

Normalerweise sollte phpMyAdmin nun unter /usr/share installiert sein. Dort gehen wir nun als nächstes hin.

cd /usr/share

Dort angekommen, entfernen wir das phpMyAdmin-Verzeichnis:

rm -rf phpmyadmin

Mittels wget (muss eventuell zuvor heruntergeladen werden) können wir nun die aktuellste Version über den Hersteller beziehen. Den Link für die .tar.gz-Datei fügen Sie bitte in den nächsten Befehl ein.

# Hier bitte den Link einsetzen und die eckigen Klammern entfernen
wget -P /usr/share/ "[Link]"

# Beispiel 
wget -P /usr/share/ "https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.tar.gz"

Das heruntergeladene Paket werden wir nun extrahieren, den extrahierten Inhalt in den ursprünglichen Ordner kopieren und letztendlich dann die nicht mehr benötigten Dateien entfernen.

# Entpacken
tar -xvzf phpMyAdmin-4.8.4-all-languages.tar.gz
# Kopieren
cp -r phpMyAdmin-4.8.4-all-languages phpmyadmin
# Rest entfernen
rm -rf phpMyAdmin-4.8.4-all-languages
rm phpMyAdmin-4.8.4-all-languages.tar.gz

Ab jetzt könnte man wieder auf phpMyAdmin zugreifen, wir führen aber noch weitere Anpassungen durch, um Probleme zu vermeiden.

Als erstes erstellen wir ein TMP-Verzeichnis für phpMyAdmin und weißen diesem die richtigen Rechte zu.

# Ins richtige Verzeichnis springen
cd /usr/share/phpmyadmin/
# Ordner anlegen
mkdir tmp
# Rechte anpassen
chown -R www-data:www-data /usr/share/phpmyadmin/tmp

Anschließend erstellen wir noch eine Konfigurationsdatei und passen diese noch ein wenig an. Als Vorlage verwenden wir hier die Sample-Datei.

# Ins richtige Verzeichnis springen
cd /usr/share/phpmyadmin/
# Vorlage kopieren
cp config.sample.inc.php config.inc.php
# Datei editieren
nano config.inc.php

Als erstes fügen wir das Blowfish-Secret ein, um das Kennwort im Cookie von phpMyAdmin zu verschlüsseln. Dazu generieren wir als erstes eine Zeichenfolge, Recherchen haben mich zu folgendem Generator geführt: https://www.motorsportdiesel.com/tools/blowfish-salt/pma/. Die dort ausgegebene Zeile ersetzt die Zeile $cfg[‘blowfish_secret’] = ”; in der Konfigurationsdatei. Beispiel:

$cfg['blowfish_secret'] = '%KE0>eWP`67o]t+Qkw*g^o5CJphcvW';

Prinzipiell sind wir hier fertig und Sie können die Konfigurationsdatei speichern und schließen. Wir haben jedoch noch folgende Anpassungen durchgeführt:

Optional: Warnungen und information_schema-Tabelle ausblenden

Als nächstes bewegen wir unseren Cursor in der Konfigurationsdatei herunter bis zur Stelle /* Server parameters */. Hier hängen wir noch folgende Zeilen an:

/* custom settings */
$cfg['Servers'][$i]['hide_db'] = 'information_schema';
$cfg['PmaNoRelation_DisableWarning'] = true;

Nun können Sie die Konfigurationsdatei abspeichern. Ein Dienstneustart ist nicht erforderlich, die PHP-Seiten werden mit dem nächsten Seitenreload neu eingelesen und übernommen.

Recherchequelle: StackExchange (AskUbuntu)

Categories
Clients Server Windows

Remote-Computerverwaltung als anderer Benutzer durchführen

Man kann mit der Computerverwaltung nicht nur den lokalen Computer verwalten, sondern sich auch remote auf andere Rechner schalten. In unserem Fall war es nun aber so, dass wir von einem Rechner in einer ActiveDirectory-Domain (A) auf einen Rechner drauf wollten, der sich nicht in der Domain befand (B). Der User, mit dem wir uns also auf Rechner B schalten wollten, war selbigem komplett unbekannt. Somit stellte sich die Frage, wie wir uns hier mit einem anderen Benutzer authentifizieren können.

Aber der Reihe nach. Als erstes greifen wir auf die lokale Computerverwaltung zu:

Dort angekommen, können wir uns nun mit dem anderen Computer per IP-Adresse verbinden:

Dies mag sogar manchmal noch gehen, jedoch bekommt man spätestens beim Zugriff auf die Dienste o.ä. einen “Zugriff verweigert”-Fehler zurück.

Um diesen Fehler zu verhindern, gibt es einen ziemlich tollen Trick. Mittels des “net use”-Befehls kann man sich nämlich an einem fremden Rechner authentifizieren, um beispielsweise ein Netzlaufwerk zu mappen. Diese Authentifizierung gilt global, also über das Laufwerkmapping hinaus und somit auch tatsächlich für unsere Computerverwaltung.

Wir öffnen also die Kommandozeile ([Win] + [R] –> cmd) oder PowerShell und geben folgende Zeile ein:

net use \c$ /user:

Damit verbinden wir uns auf die versteckte C$-Freigabe, die auf wirklich jedem PC verfügbar sein sollte. Dabei ersetzen wir die eingefärbten Zeichenfolgen natürlich sinnvoll. Ist der Zielcomputer nicht in einer Domäne, so können Sie “” weglassen. Statt dem Computernamen können Sie natürlich auch eine IP eintragen.

Sie bekommen dann noch eine Passwortabfrage, die Sie für den User entsprechend ausfüllen sollten. Sofern alles passt, bekommen Sie den Erfolg mit der Meldung “Der Befehl wurde erfolgreich ausgeführt.” quittiert:

Nun können Sie sich nochmal auf den Remotecomputer schalten und diesen ohne Probleme verwalten können.

Categories
CRM Windows

Dynamics CRM / 365 Performance-Messung (ab 2013 SP1)

Falls Sie Perfomance-Probleme mit Ihrer Dynamics CRM / 365-Instanz haben, können Sie mit den folgenden Schritten etwas mehr ins Detail gehen, um zu sehen, an welcher Stelle es tatsächlich hängt.

Rufen Sie als erstes bitte ein Formular auf, von dem Sie denken, dass es wirklich langsam lädt. In unserem Beispiel verwenden wir das Firmenformular:

Der nächste Schritt ist Browserabhängig:
Internet Explorer: Drücken Sie [Strg] + [Shift] + [Q] zum Aufruf des Performance Centers
Chrome: Drücken Sie [Strg] + [D] und drücken Sie dann auf [Mehr …]. Als URL geben Sie folgende Zeichenfolge ein (ohne Anführungszeichen): “javascript:Mscrm.Performance.PerformanceCenter.get_instance().TogglePerformanceResultsVisibility()” und als Namen beispielsweise “Performance Center”. Dadurch haben Sie oben nun einen Knopf in der Lesezeichenleiste, den Sie nun drücken um das Performance Center aufzurufen.
Firefox: Drücken Sie [Strg] + [B] um die Lesezeichenleiste aufzurufen. Fügen Sie hier ein neues Lesezeichen mit der URL “javascript:Mscrm.Performance.PerformanceCenter.get_instance().TogglePerformanceResultsVisibility()” (ohne Anführungszeichen) ein und benennen Sie es treffend. Klicken Sie dieses danach an, während Sie das betroffene Formular im aktiven Tab geöffnet haben.

In allen Fällen sollten Sie nun ein Performance Center sehen. Hier drücken Sie nun nacheinander [Enable] (1) und dann [Close] (2):

Lösen Sie nun einen Reload der Seite aus. Dies kann durch drücken von [F5] oder des “Aktualisieren”-Knopfes erfolgen.

Rufen Sie anschließend wieder das Performance Center auf. Sie sehen nun den Ablauf des Seitenaufbaus (3). Mit dem Knopf [Copy All] (4) können Sie nun die Wartezeiten auch nochmal als Text herauskopieren.

Sollten Sie für unser Hosted Dynamics 365 einen Performance-Auszug machen, so würden wir Sie zum einen um den Text bitten, den Sie über den [Copy All]-Knopf heraus bekommen und zum anderen könnten Sie uns noch einen Screenshot von der Balkendiagramm-Darstellung schicken.