FAQ Übersicht | Zurück zur Startseite

Microsoft

Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Windows für Workgroups 3.11

Windows für Workgroups 3.11 wurde Anfang November 1993 veröffentlicht. Es ist gegenüber seinem Vorgänger Windows 3.1 mit verbesserter 32-Bit-Netzwerksoftware und TCP/IP-Protokoll ausrüstbar, das die Kommunikation mehrerer Rechner in einem lokalen Netzwerk erlaubt. Mit einem Paket kleinerer Programme („Winsocks“) ist erstmals auch der Internetzugriff über ein Standardmodem mit AT-Befehlssatz (Hayes-kompatible) und den Bitraten 4,8 / 9,6 / 19,2 kBit/s möglich. Auch kann man per ISDN oder mit DSL ins Internet.
WfW konnte bis zu 25 Computer in einer Arbeitsgruppe zusammenfassen und darstellen. DOS-Treiber bleiben auch nach dem Windows Start aktiv. Das System lässt sich über folgende Konfigurationsdateien anpassen: WIN.INI, SYSTEM.INI und PROGMAN.INI, die Registry hatte zu diesem Zeitpunkt noch eine verschwindend geringe Bedeutung.


Mit der später herausgebrachten Erweiterung Win32s konnten jetzt auch einzelne für Windows 95 entworfene 32-Bit Anwendungen ausgeführt werden, letzte Version von Win32s war 1.30c vom Februar 1996. Mit "Video for Windows" (VfW) wurde die Multimediafähigkeit erweitert. Minimum für den Einsatz von Windows 3.x sind 2 MByte RAM und 15 Mbyte Festplattenspeicher.


Die letzten Browser für WfW 3.11 sind: Internet Explorer 5.0 Deutsch, Internet Explorer 5.01 Englisch, Opera 3.62 Englisch und Netscape Navigator 4.08. Gerätehersteller konnten noch bis Anfang November 2008 das Betriebssystem Windows für Workgroups 3.11 lizenzieren.

Die Bedeutung dieser Windows-Varianten reicht heute über den musealen Charakter kaum hinaus. Sofern alte Hardware mit Taktfrequenzen um 20 MHz mit Treibern zum Laufen gebracht werden soll, kann Windows für Workgroups 3.1/ 3.11 noch verwendet werden, da es die stabilere Version ist und noch einige Treiber dafür erhältlich sind. Netzwerkzugriff ist mit allen Aktualisierungen und funktionierenden Treibern auch zu modernen Betriebssystemen über TCP/IP möglich. Aktuelle Hardware wird aber nicht mehr unterstützt.
 
Das System kann noch für Office-Tätigkeiten MS Office bis V4.3 und StarOffice bis 4.0, weniger komplexe Grafikaufgaben CorelDraw 5.0, MicroGrafx Designer/Picture Publisher 5, PaintShopPro 3.12 und alte 16-Bit-Spiele DOS/Win genutzt werden. Insgesamt ist die Hardwareunterstützung für SCSI besser als für IDE/Atapi. Geeignete Programme sind fast nur noch als Downloads oder auf dem Flohmarkt erhältlich. Die meisten gängigen Standardprogramme können nicht mehr ausgeführt werden.

Die produktive Nutzung des Betriebssystems ist somit auf modernen Systemen kaum noch möglich. Nur in der Welt der Embedded-PCs, etwa in Registrierkassen, kann sich das im Vergleich zu späteren Versionen ressourcenschonende Windows für Workgroups 3.11 aufgrund der Unterstützung des TCP/IP-Protokolls bis heute halten. Vereinzelt findet man Windows 3.11-Installationen auch noch in Standalone-PCs zur Steuerung älterer Geräte im Forschungsbetrieb, beispielsweise für die analytische Chemie Fluorometer, Spektrophotometer etc., für die keine aktuelle Software mehr angeboten wird, wie auch in der Industrie.

Wahrscheinlich werden sich nicht alle, die zu dieser Zeit bereits mit PCs zu tun hatten, so richtig gut daran erinnern, wie es sich angefühlt hat, diese Windows-Version zu nutzen. Wer doch einmal eine Reise in die Vergangenheit wagen möchte, kann dies mit Hilfe von Virtualisierungssoftware wie Hyper-V, VMWare usw. sowie auch über DOSBox erreichen.

Das Internet Archiv stellt bis zu 1000 Programme und Spiele aus dieser Zeit zum Download zur Verfügung. Genau das Richtige für ein langes verregnetes Wochenende.

 

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2016 01:25


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Konsolenbefehle zum Arbeiten mit Git

Git ist eine Software zur Versionsverwaltung von Projekten. Man kann damit einfach zu alten Ständen zurückspringen oder mit mehreren Leuten an einem Projekt arbeiten. Git ist im Laufe der Zeit von allen anderen Versionskontrollsystemen für mich der Hauptfavorit geworden. Die meisten anderen Systeme wie (CVS, Subversion, Perforce, Bazaar usw.) betrachten die Informationen, die sie verwalten, als eine Menge von Dateien und die Änderungen, die über die Zeit hinweg an einzelnen Dateien vorgenommen werden.
Git betrachtet seine Daten eher als eine Reihe von Snapshots eines Mini-Dateisystems. Jedes Mal, wenn man committet (d.h. den gegenwärtigen Status des Projektes als eine Version in Git speichert), sichert Git den Zustand sämtlicher Dateien in diesem Moment („Snapshot“) und speichert eine Referenz auf diesen Snapshot. Um dies möglichst effizient und schnell tun zu können, kopiert Git unveränderte Dateien nicht, sondern legt lediglich eine Verknüpfung zu der vorherigen Version der Datei an. Dies ist ein wichtiger Unterschied zwischen Git und praktisch allen anderen Versionskontrollsystemen.

Installation
git für Linux herunterladen und installieren.
git für OS X herunterladen und installieren.
git für Windows herunterladen und installieren.

Einstellungen
Die Datei /etc/gitconfig ist die globale Konfigurationsdatei, die für jeden Anwender des Systems und all ihre Projekte gelten. Die Werte in der Datei ~/.gitconfig gelten ausschließlich für den User und all seine Projekte. Wenn man git config mit der Option --global verwendet, wird diese Datei verwendet. Die Datei .git/config im Git Verzeichnis eines Projektes enthält Werte, die nur für das jeweilige Projekt gelten. Diese Dateien überschreiben Werte aus den jeweils vorhergehenden Dateien in dieser Reihenfolge. D.h. Werte in beispielsweise .git/config überschreiben diejenigen in /etc/gitconfig.
Auf Windows Systemen sucht Git nach der .gitconfig Datei im $HOME Verzeichnis z.B.: C:\Dokumente und Einstellungen\$USER. Es schaut auch immer nach /etc/gitconfig.
E-Mail Adresse und Editor konfigurieren

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs
$ git help config # Weitere Hilfe zur Konfiguration

Dies ermöglicht, das push ausgeführt werden, ohne das branchname origin/branchname geschrieben werden muss ?!

git config --global push.default simple

Folgender Befehl definiert, wonach Line-Endings beim checkout konvertiert werden

git config --global core.eol lf

UTF-8 einstellen, wodurch auch Umlaute in Commits möglich sind

git config --global i18n.commitEncoding 'utf8'
git config --global i18n.logOutputEncoding 'utf8'

Init
Ein bare Repo auf repo.my_online_repo.de erstellen und ein neues lokales Repo master reinpushen:

mkdir -p ~/_pfad_zum_repo/reponame.git
cd ~/_pfad_zum_repo/reponame.git
git init --bare --shared
git config core.sharedRepository group
chown -R git:git ~/_pfad_zum_repo/reponame.git
chmod 0770 ~/_pfad_zum_repo/reponame.git

Danach wieder lokal weiter arbeiten und ein Verzeichnis zu einen GIT Repo umwandeln:

cd /_pfad_zum_repo/reponame
git init
git add .
git commit -m "Migrate to Git"
git remote add origin "ssh://username@repo.mobiletrend.de/~/_pfad_zum_repo/reponame.git"
git push origin master:master

Danach ist das lokale Git mit dem Remote Bare Repository verbunden, als würde es von dort geklont worden sein.

git branch -a

Um danach ein schlichtes git pull verwenden zu können, muss das lokale Repo noch wissen, mit welchem remote brachen es verbunden ist. Da vorher im master gepusht wurde, wäre also folgendes als Einstellung richtig:

git branch -u origin/master

Branch
Einen neuen Branch anlegen

git branch 
# ... oder anlegen und direkt in den Branch wechseln...
git checkout -b branchname

Einen neuen Branch anlegen, diesen von einem Remotebranch ableiten und tracken (womit pull/push funktioniert)

git branch -t branchname origin/branchname

Einen (neuen/lokalen) Branch pushen und das Tracking setzen, damit push/pull automatisch funktionieren

git push -u origin branchname

(pushes the "branchname" branch to "origin" remote and sets up tracking) Einen lokalen Branch löschen

git branch -d branchname

Einen remote Branch löschen

git push origin :branchname

Einen (temporären) lokalen Branch erstellen, der auf den Stand eines alten Commits ist. Dafür muss der Hashcode des Commits bekannt sein:

git checkout -b temp 95817e231b02686c8cf420bea54864aeea7348ff

Commit Fügt alle Dateien zum Index hinzu, und bemerkt auch alle gelöschten Dateien und Pfade:

git add . --all

Commit, der alle Files staged, und eine Bemerkung über die Veränderung anfügt

git commit -a -m "bla"

Merge Einen Branch auf Stand des Masters aktualisieren Ggf. funktioniert ein schlichtes merge ?

git checkout branchname
git merge master

Ein Vorteil gegenüber git rebase ist, das es die History des Branches nicht verändert, sondern nur eine Art Merge-Commit durchführt, wodurch der Branch dann auf Stand des Masters ist

git checkout master
git branch rebase_state
git checkout feature
git merge rebase_state
git branch -d rebase_merge

Ein Branch erstellen und auf den Stand eines anderen Branches bringen

git checkout master
git branch neuerbranch
git checkout neuerbranch
git merge andererbranch

Verfasser: Andreas Preuss
Letzte Änderung: 15-06-2018 16:59


Schreiben des Ordners System Volume Information auf USB unterbinden

Ein extrem störendes Merkmal in Windows ist, dass wenn man ein USB Laufwerk anschliesst, sich darauf ein Systemordner mit Namen "System Volume Information" einfach automatisch erstellt. Eigentlich ist dieser Ordner systemrelevant. Er enthält als Hauptaufgabe unter anderem Systemwiederherstellungspunkte. Doch auf unserem unseren USB-Datenträger absolut störend und oft nicht nur auf ein paar wenige Gigabytes beschränkt, es kann vorkommen, dass der Ordner "System Volume Information" weitaus mehr Platz belegt als gewünscht ist. Der unerwünschte Ordner kann zwar gelöscht werden, aber nach kurzer Zeit oder spätestens nachdem wir den USB-Speicher wieder erneut eingesteckt haben wiederholt sich die ganze Sache. Wenn man mit diesem Problem konfrontiert ist, kann man sich zumal immer wieder über diese in Windows eingebaute Frechheit ärgern. Die Löschung des berüchtigten Ordners auf dem USB-Speicher ist zunächst nicht ohne etwas Aufwand zu bewerkstelligen.

Vollzugriff-Rechte für Ordner vergeben
Um diesen Ordner entfernen zu können, müssen die Benutzerrechte geändert werden. Das geht dauerhaft aber logischerweise nur bei Ordnern, die danach bestehen bleiben. Da man allerdings das ganze Verzeichnis System Volume Information löschen will, würden damit auch eventuelle Rechte-Einstellungen verschwinden.
Die einfachste Möglichkeit, dem aktuellen Anwender einen Vollzugriff auf diesen Ordner zu geben, ist die Verwendung eines DOS- oder Konsolenbefehls. Unter „Start – Ausführen“ kann man diesen Befehl auch ausführen, man muss nicht extra ein Konsolenfender mit cmd aufrufen.
Der Befehl „cacls“ ist dazu geeignet, dem Anwender Vollzugriff auf den Ordner System Volume Information zu geben. Die entsprechende Befehlszeile lautet:

# alt: cacls "E:\System Volume Information" /E /G %username%:F
# nach Win 10 Upd 2
icacls "C:\System Volume Information" /grant Username:F /t

# „c:\System Volume Information“ (mit den Anführungszeichen!) ist der Ort des Ordners. Hier also Laufwerk C.
# Der Parameter /E legt fest, dass die ACL (Access Control List) angepasst wird.
# /G username:F besteht aus drei Teilen:
# - G ändert die Benutzerberechtigung.
# - username ist in diesem Fall der Name des Benutzers, der momentan am System als Administrator angemeldet ist.
# - Und direkt dahinter folgt :F, was dem benannten User den Vollzugriff auf den Ordner gibt.

Diese Befehlskette hat allerdings nur die Rechte geändert. Dadurch wurde noch nichts gelöscht.

Den Ordner "System Volume Information" löschen
Alternativ kann man nun nach der ersten Befehlszeile den Ordner System Volume Information auch einfach über den Windows-Explorer löschen. Das Löschen geschieht durch den nachfolgenden Befehl:

rd /S /Q "c:\System Volume Information"

#    rd (remove directory) ist der Befehl, einen Ordner zu löschen
#    /S legt fest, dass alle Dateien und Unterordner darin gelöscht werden
#    /Q bestimmt, dass das still und ohne weitere Nachfrage erfolgt
#    „c:\System Volume Information“ (immer mit den Anführungszeichen!) ist in diesem Fall der Ort des Ordners auf Laufwerk C.

Will man jeden Tag mit einem sauberen System starten, oder den Vorgang immer Parat haben, kann man die beiden oben genannten Befehle natürlich auch in eine Batchdatei als Stapelverabeitung abspeichern. Um zum Beispiel den Ordner System Volume Information auf Laufwerk C,D,E und F löschen zu wollen, könnte in der Batchdatei folgendes stehen:

@echo off & setlocal enabledelayedexpansion 
chcp 1252
echo.
echo System Volume Information Ordner löschen
cacls "c:\System Volume Information" /E /G %username%:F
cacls "d:\System Volume Information" /E /G %username%:F
cacls "e:\System Volume Information" /E /G %username%:F
cacls "f:\System Volume Information" /E /G %username%:F
echo.
rd /S /Q "c:\System Volume Information"
rd /S /Q "d:\System Volume Information"
rd /S /Q "e:\System Volume Information"
rd /S /Q "f:\System Volume Information"
echo.
pause
echo Ordner "System Volume Information" erfolgreich gelöscht.

Ob alles geklappt hat, lässt sich leicht kontrollieren… denn dann ist der Ordner System Volume Information gelöscht worden.
Wenn man nun dem Windows System komplett von vorn herein verbieten möchte den Ordner "System Volume Information" auf Wechseldatenträgern zu erstellen, gibt es hier zwei Möglichkeiten dieses Problem zu bewältigen:
Einmal über eine Lokale Gruppenrichtlinie oder direkt über die Windows Registrierung.

Die Erstellung des Ordners "System Volume Information" über die Gruppenverwaltung deaktivieren.
In Windows 10/8.1 Pro & Enterprise Editions & Server, drückt man einfach die Windows Key + R Kombination, gibt gpedit.msc in das Run-Dialogfeld ein und drückt auf Enter, um den Lokalen Gruppenrichtlinieneditor zu öffnen.
Wir navigieren innerhalb des Gruppenrichtlinieneditors zu:
Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten -> Suche
Und wählen dort die Einstellung:
Hinzufügen von Speicherorten auf Wechseldatenträgern zu Bibliotheken nicht zulassen.


Im oben gezeigten Fenster auf Aktiviert klicken (rot unterstützen), dann auf Übernehmen und anschließend auf OK.
Der lokale Gruppenrichtlinien-Editor kann nun beendet und das Gerät neu gestartet werden.
Nun sollte man nicht mehr länger mit dem Problem konfrontiert sein.

Die Erstellung des Ordners "System Volume Information" über die Registrierung deaktivieren.
Wir haben aber auch die Möglichkeit über den Registry Editor einen Eintrag zu erstellen, der das ständige Schreiben des Ordners "System Volume Information" auf USB Datenträgern dauerhaft verhindert.
Dazu drücken wir die Windows-Taste + R-Kombination, geben regedit in das Dialogfeld Ausführen ein und drücken die Eingabetaste, um den Registrierungseditor zu öffnen.

Innerhalb des Regisrierungseditor navigieren wir zu:
   HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search

Wir ändern hier im Schlüssel DisableRemovableDriveIndexing den Wert zu 1und klicken auf OK.
Nun kann der Registrierungseditor beendet und das System neu gestartet werden.
Dies sollte das Problem ebenfalls dauerhaft beheben.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:46


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Microsoft » Windows 10

Rechtsklick auf Windows Startmenü funktioniert nicht

Von Zeit zu Zeit kann es vorkommen, daß das Kontextmenü beim Windows Startmenü bzw. "Windows-Taste + X" ausser Funktion Ist. Der Rechtsklick auf das Startmenü unter Windows liefert dann kein Kontextmenü mehr. Die Tastenkombination "Windows-Taste" + "X" zeigt kein Menü an. Dieses Menü wird auch als das WinX Menü bezeichnet.

Systeme: Microsoft Windows 8.1, Windows 10, Windows Server 2012 R2, Windows Server 2016

Lösung:
Die standartmässige Ordnervorlage befindet sich an anderer Stelle auf dem System und kann einfach hier ausgewählt werden:

C:\Users\Default\Appdata\Local\Microsoft\Windows 

um den kompletten Ordner mit allen Unterordnern in das Verzeichnis

%localappdata%\Microsoft\Windows

zu kopieren.

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 06:57


Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Schreiben des Ordners System Volume Information auf USB unterbinden

Ein extrem störendes Merkmal in Windows ist, dass wenn man ein USB Laufwerk anschliesst, sich darauf ein Systemordner mit Namen "System Volume Information" einfach automatisch erstellt. Eigentlich ist dieser Ordner systemrelevant. Er enthält als Hauptaufgabe unter anderem Systemwiederherstellungspunkte. Doch auf unserem unseren USB-Datenträger absolut störend und oft nicht nur auf ein paar wenige Gigabytes beschränkt, es kann vorkommen, dass der Ordner "System Volume Information" weitaus mehr Platz belegt als gewünscht ist. Der unerwünschte Ordner kann zwar gelöscht werden, aber nach kurzer Zeit oder spätestens nachdem wir den USB-Speicher wieder erneut eingesteckt haben wiederholt sich die ganze Sache. Wenn man mit diesem Problem konfrontiert ist, kann man sich zumal immer wieder über diese in Windows eingebaute Frechheit ärgern. Die Löschung des berüchtigten Ordners auf dem USB-Speicher ist zunächst nicht ohne etwas Aufwand zu bewerkstelligen.

Vollzugriff-Rechte für Ordner vergeben
Um diesen Ordner entfernen zu können, müssen die Benutzerrechte geändert werden. Das geht dauerhaft aber logischerweise nur bei Ordnern, die danach bestehen bleiben. Da man allerdings das ganze Verzeichnis System Volume Information löschen will, würden damit auch eventuelle Rechte-Einstellungen verschwinden.
Die einfachste Möglichkeit, dem aktuellen Anwender einen Vollzugriff auf diesen Ordner zu geben, ist die Verwendung eines DOS- oder Konsolenbefehls. Unter „Start – Ausführen“ kann man diesen Befehl auch ausführen, man muss nicht extra ein Konsolenfender mit cmd aufrufen.
Der Befehl „cacls“ ist dazu geeignet, dem Anwender Vollzugriff auf den Ordner System Volume Information zu geben. Die entsprechende Befehlszeile lautet:

# alt: cacls "E:\System Volume Information" /E /G %username%:F
# nach Win 10 Upd 2
icacls "C:\System Volume Information" /grant Username:F /t

# „c:\System Volume Information“ (mit den Anführungszeichen!) ist der Ort des Ordners. Hier also Laufwerk C.
# Der Parameter /E legt fest, dass die ACL (Access Control List) angepasst wird.
# /G username:F besteht aus drei Teilen:
# - G ändert die Benutzerberechtigung.
# - username ist in diesem Fall der Name des Benutzers, der momentan am System als Administrator angemeldet ist.
# - Und direkt dahinter folgt :F, was dem benannten User den Vollzugriff auf den Ordner gibt.

Diese Befehlskette hat allerdings nur die Rechte geändert. Dadurch wurde noch nichts gelöscht.

Den Ordner "System Volume Information" löschen
Alternativ kann man nun nach der ersten Befehlszeile den Ordner System Volume Information auch einfach über den Windows-Explorer löschen. Das Löschen geschieht durch den nachfolgenden Befehl:

rd /S /Q "c:\System Volume Information"

#    rd (remove directory) ist der Befehl, einen Ordner zu löschen
#    /S legt fest, dass alle Dateien und Unterordner darin gelöscht werden
#    /Q bestimmt, dass das still und ohne weitere Nachfrage erfolgt
#    „c:\System Volume Information“ (immer mit den Anführungszeichen!) ist in diesem Fall der Ort des Ordners auf Laufwerk C.

Will man jeden Tag mit einem sauberen System starten, oder den Vorgang immer Parat haben, kann man die beiden oben genannten Befehle natürlich auch in eine Batchdatei als Stapelverabeitung abspeichern. Um zum Beispiel den Ordner System Volume Information auf Laufwerk C,D,E und F löschen zu wollen, könnte in der Batchdatei folgendes stehen:

@echo off & setlocal enabledelayedexpansion 
chcp 1252
echo.
echo System Volume Information Ordner löschen
cacls "c:\System Volume Information" /E /G %username%:F
cacls "d:\System Volume Information" /E /G %username%:F
cacls "e:\System Volume Information" /E /G %username%:F
cacls "f:\System Volume Information" /E /G %username%:F
echo.
rd /S /Q "c:\System Volume Information"
rd /S /Q "d:\System Volume Information"
rd /S /Q "e:\System Volume Information"
rd /S /Q "f:\System Volume Information"
echo.
pause
echo Ordner "System Volume Information" erfolgreich gelöscht.

Ob alles geklappt hat, lässt sich leicht kontrollieren… denn dann ist der Ordner System Volume Information gelöscht worden.
Wenn man nun dem Windows System komplett von vorn herein verbieten möchte den Ordner "System Volume Information" auf Wechseldatenträgern zu erstellen, gibt es hier zwei Möglichkeiten dieses Problem zu bewältigen:
Einmal über eine Lokale Gruppenrichtlinie oder direkt über die Windows Registrierung.

Die Erstellung des Ordners "System Volume Information" über die Gruppenverwaltung deaktivieren.
In Windows 10/8.1 Pro & Enterprise Editions & Server, drückt man einfach die Windows Key + R Kombination, gibt gpedit.msc in das Run-Dialogfeld ein und drückt auf Enter, um den Lokalen Gruppenrichtlinieneditor zu öffnen.
Wir navigieren innerhalb des Gruppenrichtlinieneditors zu:
Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten -> Suche
Und wählen dort die Einstellung:
Hinzufügen von Speicherorten auf Wechseldatenträgern zu Bibliotheken nicht zulassen.


Im oben gezeigten Fenster auf Aktiviert klicken (rot unterstützen), dann auf Übernehmen und anschließend auf OK.
Der lokale Gruppenrichtlinien-Editor kann nun beendet und das Gerät neu gestartet werden.
Nun sollte man nicht mehr länger mit dem Problem konfrontiert sein.

Die Erstellung des Ordners "System Volume Information" über die Registrierung deaktivieren.
Wir haben aber auch die Möglichkeit über den Registry Editor einen Eintrag zu erstellen, der das ständige Schreiben des Ordners "System Volume Information" auf USB Datenträgern dauerhaft verhindert.
Dazu drücken wir die Windows-Taste + R-Kombination, geben regedit in das Dialogfeld Ausführen ein und drücken die Eingabetaste, um den Registrierungseditor zu öffnen.

Innerhalb des Regisrierungseditor navigieren wir zu:
   HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search

Wir ändern hier im Schlüssel DisableRemovableDriveIndexing den Wert zu 1und klicken auf OK.
Nun kann der Registrierungseditor beendet und das System neu gestartet werden.
Dies sollte das Problem ebenfalls dauerhaft beheben.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:46


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Microsoft » Windows Server 2012 R2

Vertrauensstellung zwischen Active Directory Client und Domaincontroller

Es kommt vor, das Active Directory Clients die Vertrauensstellung zu Ihren Domaincontroller verlieren. Dies kann z.B. passieren, wenn der Client gerade vom Backup wiederhergestellt wurde oder ein virtueller Client durch einen Snapshot zurückgesetzt wurde. Dies liegt meist daran, dass das Kennwort des Clients seit der Durchführung des Backups vom Domaincontroller geändert wurde. Im Backup ist nun ein veraltetes und somit nicht mehr gültiges Password enthalten.

Ob der Client mit den DC noch eine Vertrauensstellung hat findet man (an der Eingabeaufforderung) mit dem Befehl:

nltest /sc_query:Domainname 

heraus. Sollten dabei Fehler gemeldet werden, kann dies mit Hilfe des Befehls:

netdom reset "Computername" /domain:"Domainnname"

oder

nltest /sc_reset:Domainname\Domaincontrollername

versuchen die Vertrauensstellung und damit übereinstimmende Kennwörter zwischen Client und DC wiederherzustellen.

Mit der PowerShell kann man ebenfalls den Zustand wieder herstellen durch:

Test-ComputerSecureChannel –Repair

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 06:56


Das mächtige Kommandozeilen - Werkzeug Netsh

Der Artikel wird zur Zeit überarbeitet und kann leider nicht angezeigt werden.

Verfasser: Andreas Preuss
Letzte Änderung: 14-11-2016 07:20


Windows – Anmeldung (STRG+ALT+ENTF) deaktivieren

Die Sichere Windows Anmeldung abschalten
Windows – Anmeldung (STRG+ALT+ENTF) deaktivieren
Bei der Anmeldung an Serverbetriebssystemen oder Clients in einer Domäne muss manchmal allzu oft die Tastenkombination Strg-Alt-Entf zum Anmelden betätigt werden.
Dies kann besonders in größeren Testumgebungen mit Hyper-V manchmal sehr lästig sein. Über den Gruppenrichtlinien-Verwaltungseditor (gpedit.msc) kann dies deaktiviert werden.
Im Ordnerpfad nach
Computerkonfiguration > Windows-Einstellungen > Lokale Richtlinen > Sicherheitseinstellungen > Sicherheitsoptionen
gehen und "Interaktive Anmeldung: Kein STRG+ALT+ENTF erforderlich" öffnen.
Wenn "Aktiviert" markiert ist wird die Tastenkombination nicht mehr abgefragt.

Gruppenrichtlinien-Verwaltungseditor

Verfasser: Andreas Preuss
Letzte Änderung: 04-11-2016 11:34


Benutzerkonten abfragen mit der PowerShell

Die PowerShell ist sowohl ein interaktiver Kommandointerpreter als auch eine Script-Umgebung. Man kann die AD Cmdlets entweder in einzelnen Befehlen für kleinere Aufgaben einsetzen, oder sie nutzen, um Scripts für komplexere Probleme zu entwickeln. Für aufwändigere Operationen steht eine Vielzahl an Tools zur Verfügung. Um die Active-Directory User (ADUser) einer Domäne zu verwalten kann man sich mit folgenden Befehl in der Powershell die zu verwendenden Befehle anzeigen lassen:

 Get-Help *aduser*

Get-ADUser

Oft möchte man Informationen über Benutzer aus dem AD auslesen. Aber auch wenn man sie ändern will, muss man in den meisten Fällen die gewünschten User erst ermitteln. Dafür ist das Cmdlet Get-ADUser vorgesehen, das mit Hilfe des Parameters -Filter das Ergebnis gleich an der Quelle auf die benötigten Objekte einschränkt.

Get-ADUser -Filter "Surname -like 'B*'"

In diesem Beispiel gibt der Befehl alle User zurück, deren Nachname mit dem Buchstaben "B" beginnt. Für Ausdrücke innerhalb des Filters kann man auch andere Vergleichsoperatoren verwenden, mit deren Hilfe man weitere Attribute wie etwa "Name" prüfen kann. Möchte man nun alle Konten abrufen, dann muss man den Parameter -Filter trotzdem verwenden, in diesem Fall mit dem Wert '*'.

PowerShell AdUser -Filter Beispiel um L* Bonn zu finden:

Get-ADUser -Filter {(GivenName -Like "L*") -and (Surname -eq "Bonn")}

Oft möchte man allerdings AD User nicht nur nach Namen filtern, sondern auch nach anderen Eigenschaften. Standardmäßig zeigt Get-ADUser hier begrenzte Attribute an. Dies kann man mit dem Parameter "-Properties" ändern:

Get-ADUser -Filter:"Surname -like 'B*'" -Properties *

Anhand dieser Ausgabe lassen sich alle Schalter der verschiedenen Attribute auflisten, die man dann in Filter-Ausdrücken verwenden kann.
Hier ein Beispiel, das alle AD User auflistet, mit den vorgegebenen Parametern und anschliessend in eine Textdatei speichert:

Get-ADUser -Properties * -Filter * | FL name, title, mail, telephoneNumber, StreetAddress, EmailAddress, LastLogonDate, PasswordLastSet, homeMDB | Out-File C:\ADMIN\USERS.TXT

Abfragen mit Search-ADAccount
Für einige Abfragen ist das Cmdlet Search-ADAccount allerdings besser geeignet, weil es noch einige besondere Parameter akzeptiert.
Das gilt z.B. wenn sich User ausgesperrt haben oder ein Konto abgelaufen ist.
Um alle Benutzerkonten zu finden, deren Kennwort abgelaufen ist, kommt man mit diesm Befehl zum Ziel:

Search-ADAccount -PasswordExpired -UsersOnly

Weitere Parameter zur Spezifizierung von Attributen mit Search-ADAccount sind zum Beispiel:

-PasswordNeverExpires -AccountDisabled -AccountExpiring 31.12.2016 -AccountInactive <Tage> (z.B.: -AccountInactive 30) -LockedOut -PasswordExpired

Verfasser: Andreas Preuss
Letzte Änderung: 15-11-2016 01:17


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Schreiben des Ordners System Volume Information auf USB unterbinden

Ein extrem störendes Merkmal in Windows ist, dass wenn man ein USB Laufwerk anschliesst, sich darauf ein Systemordner mit Namen "System Volume Information" einfach automatisch erstellt. Eigentlich ist dieser Ordner systemrelevant. Er enthält als Hauptaufgabe unter anderem Systemwiederherstellungspunkte. Doch auf unserem unseren USB-Datenträger absolut störend und oft nicht nur auf ein paar wenige Gigabytes beschränkt, es kann vorkommen, dass der Ordner "System Volume Information" weitaus mehr Platz belegt als gewünscht ist. Der unerwünschte Ordner kann zwar gelöscht werden, aber nach kurzer Zeit oder spätestens nachdem wir den USB-Speicher wieder erneut eingesteckt haben wiederholt sich die ganze Sache. Wenn man mit diesem Problem konfrontiert ist, kann man sich zumal immer wieder über diese in Windows eingebaute Frechheit ärgern. Die Löschung des berüchtigten Ordners auf dem USB-Speicher ist zunächst nicht ohne etwas Aufwand zu bewerkstelligen.

Vollzugriff-Rechte für Ordner vergeben
Um diesen Ordner entfernen zu können, müssen die Benutzerrechte geändert werden. Das geht dauerhaft aber logischerweise nur bei Ordnern, die danach bestehen bleiben. Da man allerdings das ganze Verzeichnis System Volume Information löschen will, würden damit auch eventuelle Rechte-Einstellungen verschwinden.
Die einfachste Möglichkeit, dem aktuellen Anwender einen Vollzugriff auf diesen Ordner zu geben, ist die Verwendung eines DOS- oder Konsolenbefehls. Unter „Start – Ausführen“ kann man diesen Befehl auch ausführen, man muss nicht extra ein Konsolenfender mit cmd aufrufen.
Der Befehl „cacls“ ist dazu geeignet, dem Anwender Vollzugriff auf den Ordner System Volume Information zu geben. Die entsprechende Befehlszeile lautet:

# alt: cacls "E:\System Volume Information" /E /G %username%:F
# nach Win 10 Upd 2
icacls "C:\System Volume Information" /grant Username:F /t

# „c:\System Volume Information“ (mit den Anführungszeichen!) ist der Ort des Ordners. Hier also Laufwerk C.
# Der Parameter /E legt fest, dass die ACL (Access Control List) angepasst wird.
# /G username:F besteht aus drei Teilen:
# - G ändert die Benutzerberechtigung.
# - username ist in diesem Fall der Name des Benutzers, der momentan am System als Administrator angemeldet ist.
# - Und direkt dahinter folgt :F, was dem benannten User den Vollzugriff auf den Ordner gibt.

Diese Befehlskette hat allerdings nur die Rechte geändert. Dadurch wurde noch nichts gelöscht.

Den Ordner "System Volume Information" löschen
Alternativ kann man nun nach der ersten Befehlszeile den Ordner System Volume Information auch einfach über den Windows-Explorer löschen. Das Löschen geschieht durch den nachfolgenden Befehl:

rd /S /Q "c:\System Volume Information"

#    rd (remove directory) ist der Befehl, einen Ordner zu löschen
#    /S legt fest, dass alle Dateien und Unterordner darin gelöscht werden
#    /Q bestimmt, dass das still und ohne weitere Nachfrage erfolgt
#    „c:\System Volume Information“ (immer mit den Anführungszeichen!) ist in diesem Fall der Ort des Ordners auf Laufwerk C.

Will man jeden Tag mit einem sauberen System starten, oder den Vorgang immer Parat haben, kann man die beiden oben genannten Befehle natürlich auch in eine Batchdatei als Stapelverabeitung abspeichern. Um zum Beispiel den Ordner System Volume Information auf Laufwerk C,D,E und F löschen zu wollen, könnte in der Batchdatei folgendes stehen:

@echo off & setlocal enabledelayedexpansion 
chcp 1252
echo.
echo System Volume Information Ordner löschen
cacls "c:\System Volume Information" /E /G %username%:F
cacls "d:\System Volume Information" /E /G %username%:F
cacls "e:\System Volume Information" /E /G %username%:F
cacls "f:\System Volume Information" /E /G %username%:F
echo.
rd /S /Q "c:\System Volume Information"
rd /S /Q "d:\System Volume Information"
rd /S /Q "e:\System Volume Information"
rd /S /Q "f:\System Volume Information"
echo.
pause
echo Ordner "System Volume Information" erfolgreich gelöscht.

Ob alles geklappt hat, lässt sich leicht kontrollieren… denn dann ist der Ordner System Volume Information gelöscht worden.
Wenn man nun dem Windows System komplett von vorn herein verbieten möchte den Ordner "System Volume Information" auf Wechseldatenträgern zu erstellen, gibt es hier zwei Möglichkeiten dieses Problem zu bewältigen:
Einmal über eine Lokale Gruppenrichtlinie oder direkt über die Windows Registrierung.

Die Erstellung des Ordners "System Volume Information" über die Gruppenverwaltung deaktivieren.
In Windows 10/8.1 Pro & Enterprise Editions & Server, drückt man einfach die Windows Key + R Kombination, gibt gpedit.msc in das Run-Dialogfeld ein und drückt auf Enter, um den Lokalen Gruppenrichtlinieneditor zu öffnen.
Wir navigieren innerhalb des Gruppenrichtlinieneditors zu:
Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten -> Suche
Und wählen dort die Einstellung:
Hinzufügen von Speicherorten auf Wechseldatenträgern zu Bibliotheken nicht zulassen.


Im oben gezeigten Fenster auf Aktiviert klicken (rot unterstützen), dann auf Übernehmen und anschließend auf OK.
Der lokale Gruppenrichtlinien-Editor kann nun beendet und das Gerät neu gestartet werden.
Nun sollte man nicht mehr länger mit dem Problem konfrontiert sein.

Die Erstellung des Ordners "System Volume Information" über die Registrierung deaktivieren.
Wir haben aber auch die Möglichkeit über den Registry Editor einen Eintrag zu erstellen, der das ständige Schreiben des Ordners "System Volume Information" auf USB Datenträgern dauerhaft verhindert.
Dazu drücken wir die Windows-Taste + R-Kombination, geben regedit in das Dialogfeld Ausführen ein und drücken die Eingabetaste, um den Registrierungseditor zu öffnen.

Innerhalb des Regisrierungseditor navigieren wir zu:
   HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search

Wir ändern hier im Schlüssel DisableRemovableDriveIndexing den Wert zu 1und klicken auf OK.
Nun kann der Registrierungseditor beendet und das System neu gestartet werden.
Dies sollte das Problem ebenfalls dauerhaft beheben.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:46


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Microsoft » Exchange Server 2013

Exchange 2013 Setup – Fehler: RSAT-Clustering-CmdInterface

Bei der Installationsvorbereitung eines neuen Exchange Servers 2013 erhielt ich die Fehlermeldung:

Fehler: Die Windows-Komponente RSAT-Clustering-CmdInterface ist nicht auf diesem Computer installiert.
Sie muss installiert werden, bevor das Exchange-Setup gestartet werden kann.

Beim Aufrufen des Technet Artikels ist dieser leider nicht verfügbar…

Zur Lösung des Problems muss ein benötigtes Feature installiert werden:

  • Den Server-Manager öffnen
  • Rollen und Features hinzufuegen
  • Weiter bis zum Tab: Features
  • Haken unter Remoteserver-Verwaltungstools > Featureverwaltungstools -> Failoverclustering-Tools > Failovercluster-Befehlsschnittstelle setzen.
  • Die Installation starten
  • Das Exchange Setup wiederholen.


P.S. Die Warnungen betreffend Filter-Packs können ignoriert werden, hier läuft die Installationsroutine noch nicht ganz rund, diese Packete werden nicht benötigt!

 

Verfasser: Andreas Preuss
Letzte Änderung: 14-10-2016 08:39


Manuelle Deinstallation von Exchange Server 2013 für eine Neuinstallation

Wer Exchange 2013 installiert hat, weiß, dass dies ein langwieriger Prozess ist, bei dem das Setup nicht nur einige Dateien kopiert und Dienste installiert, sondern während der Installation und später in Betrieb, erhebliche Veränderungen im Active Directory auf dem Domain Controller und in der ganzen Organisationsstruktur macht.

Wenn man nun den Exchange-Server komplett wieder aus der Domäne entfernen möchte, sollte man dies als erstes immer über die standardmässige Deinstallation bewerkstelligen.

Vorher allerdings, nicht vergessen, alle Mailboxen mit Hilfe der Exchange Powershell inklusive der Arbitration Mailboxen deaktivieren!

Get-Mailbox -Arbitration | ft Name, Servername
Get-Mailbox -Arbitration | Disable-Mailbox "Name" -Arbitration -DisableLastArbitrationMailboxAllowed

Dann kann man das Exchange Setup aus dem Setup Ordner starten und die Deinstallation durchführen:
Command-Shell:

Setup /Mode:Uninstall /IAcceptExchangeServerLicenseTerms

Oder über die Powershell

.\Setup.exe /mode:Uninstall /IacceptExchangeServerLicenseTerms

Es gibt allerdings auch viele Szenarien in dem die händische Entfernung eines Exchange Servers 2013 aus der Organisation notwendig sein kann.
Hier nur zwei Beispiele:
Beim Update bzw. einer Versions-Migration ist etwas schief gegangen und die Exchange-Installation eines Exchange-Servers ist defekt.
Oder der Server ist einfach physikalisch defekt, dass die Deinstallation nicht mehr sauber durchgeführt werden kann. In der Exchange-Verwaltungskonsole der anderen Server taucht der schon längst nicht mehr aktive Server aber weiterhin auf und ist Bestandteil des ActiveDirectoy - das kann zu Problemen führen.
Insbesonders lässt sich eine Neuinstallation des Exchange Servers 2013 dadurch nicht mehr durchführen.
Hier hilft es auch nichts, den Server aus der Domäne zu entfernen oder gar sein Computerkonto zu löschen.
Bevor hier nicht "Rein Schiff" gemacht worden ist, lässt sich keine Neuinstallation von Exchange Server 2013 durchführen.

Die folgende Methode, um eine manuelle Exchange-Server 2013 Entfernung durchzuführen, steht nicht unter MS Support und ist nur geeignet bei einem einzigen Exchange Server in der Organisation!

Auf dem Domain Controller das Tool “ADSI Edit” (adsiedit.msc) starten.
Unter “Konfiguration” zu folgendem Pfad zu navigieren:
    CN=Configuration > CN=Services
    Folgende Ordner löschen:
    - CN=Microsoft Exchange und
    - CN=Microsoft Exchange Autodiscover
 
   Danach in den Pfad "Standartmäßiger Namenskontext" (Default Naming Context) navigieren.
   Dort bitte folgende Ordner löschen:
   - CN=Microsoft Exchange Security Groups
   - CN=Microsoft Exchange Security Objects


 Jetzt das normale Active Directory öffnen und in der OU "Users" folgende User soweit vorhanden löschen:
    – DiscoverySearch Mailbox{GUID}
    – Exchange Online-ApplicationAccount
    – FederatedEmail.GUID
    – Migration.GUID
    – SystemMailbox{GUID}
    – HealthMailboxGUID


Wenn der Exchange Server anschließend neu mit Windows Server 2012 neu aufgesetzt wird, so wäre hiermit die
Deinstallation vom Domaincontroller abgeschlossen. Soll das bestehende Betriebssystem des Exchange Servers
weiterverwendet werden und eine Neuinstallation auf bestehenden System durchgeführt werden, wäre noch folgendes
zu tun und zu überprüfen:

In der Registry folgende Schlüssel löschen:
 – "ExchangeServer" unter HK_L_M\Software\Microsoft
 – alle Schlüssel, die mit "MSExchange*" unter HK_L_M\System\CurrentControlSet\Services eingetragen sind.
 - In HK_L_M\System\CurrentControlSet\Services den Schlüssel "SearchExchangeTracing" löschen.

Über den Explorer muss der Exchange Server Installationsordner im folgenden Pfad gelöscht werden:
 - C:\Programme\Microsoft\Exchange Server

Im IIS (inetmgr.exe) sollten sämtliche Exchange-Sites entfernt werden. Dies beinhaltet alle Frontend und Backend Seiten:

 - autodiscover
 - ecp (-> Exchange Control Panel)
 - EWS (-> Exchange Web Services)
 - Microsoft server Activsync (-> Exchange Active Sync)
 - OAB (-> Offline Addressbook)
 - owa (-> Outlook Web App)
 - Rpc (-> Remote Procedure Calls)

Hier gibt es noch ein YouTube Video über den Vorgang.

Nach Abschluß dieses Verfahrens sollte einer Neuinstallation von Exchange Server 2013 nichts mehr im Wege stehen.

Verfasser: Andreas Preuss
Letzte Änderung: 17-10-2016 10:25


Konfiguration eines hierarchischen Addressbuches in Exchange Server

Das hierarchische Adressbuch (HAB) ermöglicht es Endbenutzern, in ihrem Outlook Adressbuch über eine Organisationshierarchie nach Empfängern zu suchen. Diese Adressbuch-Funktion ist mit Exchange 2010 SP1 eingeführt worden, wenn Clienten ab Outlook2010 / 2013 verwendet werden. In der Regel können die Benutzer nur auf die begrenzte normale globale Adressliste und die dazugehörigen Empfängereigenschaften zugreifen. Oft bildet allerdings diese Struktur der globalen Adressliste überhaupt nicht die Hierarchie unter den Empfängern im jeweiligen Unternehmen wieder. Zumal kann die standartmäßige Struktur wesentlich unübersichtlicher sein.

Wichtig ist zu beachten, daß vorher noch keine Adressbuchrichtline zugeordnet wurde.

In einem hierarchischen Adressbuch wird die Stammorganisation (z. B. Ducktales LTD) als oberste Ebene verwendet:

DucktalesLTD
-Verwaltung
--- Management
--- Controlling
--- Buchhaltung
-Abteilungsleiter
-Marketing
--- Design
--- Grafikabteilung
-Produktion
-Einkauf
-Vertrieb
--- Lager
--- Logistik
-IT
--- Support
-Praktikanten
-Räume & Geräte

Unter dieser obersten Ebene können nun mehrere untergeordnete Ebenen hinzugefügt werden, um ein angepasstes hierarchisches Adressbuch zu erstellen, das gemäß Geschäftsbereich, Abteilung oder in einer beliebigen anderen gewählten Organisationsebene segmentiert ist.

Es ist sinnvoll, die Verteilergruppen in eine spezielle Organisationseinheit (OU) im Active Directory zu platzieren, so dass es keine Verwechslung über ihren Zweck gibt. Für dieses Beispiel erstellen wir eine neue OU auf dem Domänen Controller mit dem Namen "HAB" (Hierarchical Address Book). 

Mit der Exchange Verwaltungsshell erstellen wir als Erstes eine Verteilergruppe, die die Wurzel unseres Unternehmens in der Struktur wird:

New-DistributionGroup "DucktalesLTD" -OrganizationalUnit:"HAB"

Nun Konfigurieren wir diese Gruppe zu einer hierarischen Gruppe und teilen Exchange mit, das dies unsere Stamm-Verteilergruppe sein soll:

Set-Group "DucktalesLTD" -IsHierarchicalGroup:$true

Set-OrganizationConfig -HierarchicalAddressBookRoot "DucktalesLTD"

Die Veränderung wird erst sichtbar, wenn Outlook ein Update des Adressbuches durchgeführt hat.

Jetzt können die untergeordneten Verteilergruppen mit Hilfe der Exchange Management Shell erstellt werden.
Eine einzelne Verteilergruppe wird mit diesem Befehl so erstellt:

New-DistributionGroup -Name:"Buchhaltung" -DisplayName:"Buchhaltung" -Alias:"Buchhaltung" -Notes:" Verteilergruppe fuer Abteilung Buchhaltung" -OrganizationalUnit:"OU=HAB,DC=Ducktales,DC=LTD" -Type:"Distribution" | Set-Group -IsHierarchicalGroup:$true

Noch schneller geht es auch über die Shell, wenn man alle Gruppen in einem Befehl zusammenfasst:

"Verwaltung","Management","Controlling","Buchhaltung","Abteilungsleiter","Marketing","Design","Grafikabteilung","Produktion","Einkauf","Vertrieb","Lager","Logistik","IT","Support","Praktikanten","Räume & Geräte" | %{New-DistributionGroup -name $($_) -Displayname $($_) -alias $($_) -notes "Verteilergruppe fuer Abteilung $_" -OrganizationalUnit "OU=HAB,DC=Ducktales,DC=LTD" -type Distribution | Set-Group -isHierarchicalGroup $true}

Oder die Verteilergruppen können aber auch manuell in der gleichen OU "HAB" mit dem webbasierten Exchange Admin Centers (ECP) erstellt werden und dann auf "hierarchisch" mit diesem Befehl konfiguriert werden:

Get-Group -OrganizationalUnit "HAB" | Where {!($_.IsHierarchicalGroup)} | Set-Group -IsHierarchicalGroup $true

Überprüfen können wir dies auf dem Domaincontroller mit dem ADSI Editor (adsiedit.exe) wenn das "msOrg-IsOrganzational" Attribut auf TRUE steht:

Um die gewünschte Organisationsstruktur abbilden zu können, müssen die Verteilergruppen noch ineinander verschachtelt bzw. modelliert werden.

Add-DistributionGroupMember DucktalesLTD -member:"Verwaltung","Management","Controlling","Buchhaltung" | %{Add-DistributionGroupMember Verwaltung -member $_}
Add-DistributionGroupMember DucktalesLTD -member:"Abteilungsleiter"
Add-DistributionGroupMember DucktalesLTD -member:"Marketing","Design","Grafikabteilung" | %{Add-DistributionGroupMember Marketing -member $_}
Add-DistributionGroupMember DucktalesLTD -member:"Produktion"
Add-DistributionGroupMember DucktalesLTD -member:"Einkauf"
Add-DistributionGroupMember DucktalesLTD -member:"Vertrieb","Lager","Logistik" | %{add-distributiongroupmember Vertrieb -member $_}
Add-DistributionGroupMember DucktalesLTD -member:"IT","Support" | %{Add-DistributionGroupMember  Vertrieb -member $_}
Add-DistributionGroupMember DucktalesLTD -member:"Praktikanten"
Add-DistributionGroupMember DucktalesLTD -member:"Räume & Geräte"

 

Zum Feintuning können die einzelnen Empfänger inklusive der verschachtelten Gruppen in ihrer Rangfolge beliebig geändert werden. Standartmässig werden die Gruppen und Empfänger nämlich alphabetisch sortiert. Dies ist unter Umständen nicht gewünscht. Mit dem Parameter -SenorityIndex kann mit den Powershell CmdLets "Set-User" und "Set-Group" die Reihenfolge beliebig angepasst werden. Der Wert, der mit dem Parameter -SeniorityIndex gespeichert werden kann, muss zwischen 0 und 2147483647 liegen. Der Empfänger, der den höchsten Wert stehen hat, wird an erster Stelle im Adressbuch angezeigt.

Set-Group "Verwaltung" -SeniorityIndex:999
Set-Group "Abteilungsleiter" -SeniorityIndex:800 
Set-Group "Einkauf" -SeniorityIndex:500 
Set-Group "Vertrieb" -SeniorityIndex:300
Set-Group "Marketing" -SeniorityIndex:200 
Set-Group "IT1 -SeniorityIndex:100 
Set-Group "Praktikanten" -SeniorityIndex:10 
Set-Group "Räume & Geräte" -SeniorityIndex:1 

Set-User "apreuss" -SeniorityIndex:9999
Set-User "andi" -SeniorityIndex:9998

Leider ist dieses Adressbuch-Feature von Microsoft noch nicht für die Outlook Web App realisiert worden.

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 05:49


Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Exchange Management Shell - Der Tipp des Tages

Immer wenn man die Exchange Powershell öffnet kommt zur Einführung der „Tipp des Tages“.
Bei genauerer Betrachtung der Tipps kommt man drauf, das teilweise sogar einige wertvolle Tipps für die tägliche Administration dabei sind. Mit folgenden Powershell-Kommando können die Tipps einzeln durchgesprungen werden.

Get-Tip -local:1

Um auf die Komplette Sammlung in deutsch zuzugreifen, kann man diese in einer XML-Datei in folgendem Verzeichnis finden:
C:\Program Files\Microsoft\Exchange Server\v15\Bin\de\ExTips.xml

 

Verfasser: Andreas Preuss
Letzte Änderung: 15-11-2016 02:16


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Microsoft » Windows 3.11

Windows für Workgroups 3.11

Windows für Workgroups 3.11 wurde Anfang November 1993 veröffentlicht. Es ist gegenüber seinem Vorgänger Windows 3.1 mit verbesserter 32-Bit-Netzwerksoftware und TCP/IP-Protokoll ausrüstbar, das die Kommunikation mehrerer Rechner in einem lokalen Netzwerk erlaubt. Mit einem Paket kleinerer Programme („Winsocks“) ist erstmals auch der Internetzugriff über ein Standardmodem mit AT-Befehlssatz (Hayes-kompatible) und den Bitraten 4,8 / 9,6 / 19,2 kBit/s möglich. Auch kann man per ISDN oder mit DSL ins Internet.
WfW konnte bis zu 25 Computer in einer Arbeitsgruppe zusammenfassen und darstellen. DOS-Treiber bleiben auch nach dem Windows Start aktiv. Das System lässt sich über folgende Konfigurationsdateien anpassen: WIN.INI, SYSTEM.INI und PROGMAN.INI, die Registry hatte zu diesem Zeitpunkt noch eine verschwindend geringe Bedeutung.


Mit der später herausgebrachten Erweiterung Win32s konnten jetzt auch einzelne für Windows 95 entworfene 32-Bit Anwendungen ausgeführt werden, letzte Version von Win32s war 1.30c vom Februar 1996. Mit "Video for Windows" (VfW) wurde die Multimediafähigkeit erweitert. Minimum für den Einsatz von Windows 3.x sind 2 MByte RAM und 15 Mbyte Festplattenspeicher.


Die letzten Browser für WfW 3.11 sind: Internet Explorer 5.0 Deutsch, Internet Explorer 5.01 Englisch, Opera 3.62 Englisch und Netscape Navigator 4.08. Gerätehersteller konnten noch bis Anfang November 2008 das Betriebssystem Windows für Workgroups 3.11 lizenzieren.

Die Bedeutung dieser Windows-Varianten reicht heute über den musealen Charakter kaum hinaus. Sofern alte Hardware mit Taktfrequenzen um 20 MHz mit Treibern zum Laufen gebracht werden soll, kann Windows für Workgroups 3.1/ 3.11 noch verwendet werden, da es die stabilere Version ist und noch einige Treiber dafür erhältlich sind. Netzwerkzugriff ist mit allen Aktualisierungen und funktionierenden Treibern auch zu modernen Betriebssystemen über TCP/IP möglich. Aktuelle Hardware wird aber nicht mehr unterstützt.
 
Das System kann noch für Office-Tätigkeiten MS Office bis V4.3 und StarOffice bis 4.0, weniger komplexe Grafikaufgaben CorelDraw 5.0, MicroGrafx Designer/Picture Publisher 5, PaintShopPro 3.12 und alte 16-Bit-Spiele DOS/Win genutzt werden. Insgesamt ist die Hardwareunterstützung für SCSI besser als für IDE/Atapi. Geeignete Programme sind fast nur noch als Downloads oder auf dem Flohmarkt erhältlich. Die meisten gängigen Standardprogramme können nicht mehr ausgeführt werden.

Die produktive Nutzung des Betriebssystems ist somit auf modernen Systemen kaum noch möglich. Nur in der Welt der Embedded-PCs, etwa in Registrierkassen, kann sich das im Vergleich zu späteren Versionen ressourcenschonende Windows für Workgroups 3.11 aufgrund der Unterstützung des TCP/IP-Protokolls bis heute halten. Vereinzelt findet man Windows 3.11-Installationen auch noch in Standalone-PCs zur Steuerung älterer Geräte im Forschungsbetrieb, beispielsweise für die analytische Chemie Fluorometer, Spektrophotometer etc., für die keine aktuelle Software mehr angeboten wird, wie auch in der Industrie.

Wahrscheinlich werden sich nicht alle, die zu dieser Zeit bereits mit PCs zu tun hatten, so richtig gut daran erinnern, wie es sich angefühlt hat, diese Windows-Version zu nutzen. Wer doch einmal eine Reise in die Vergangenheit wagen möchte, kann dies mit Hilfe von Virtualisierungssoftware wie Hyper-V, VMWare usw. sowie auch über DOSBox erreichen.

Das Internet Archiv stellt bis zu 1000 Programme und Spiele aus dieser Zeit zum Download zur Verfügung. Genau das Richtige für ein langes verregnetes Wochenende.

 

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2016 01:25


Microsoft » CMD DOS Shell

Das mächtige Kommandozeilen - Werkzeug Netsh

Der Artikel wird zur Zeit überarbeitet und kann leider nicht angezeigt werden.

Verfasser: Andreas Preuss
Letzte Änderung: 14-11-2016 07:20


Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Windows für Workgroups 3.11

Windows für Workgroups 3.11 wurde Anfang November 1993 veröffentlicht. Es ist gegenüber seinem Vorgänger Windows 3.1 mit verbesserter 32-Bit-Netzwerksoftware und TCP/IP-Protokoll ausrüstbar, das die Kommunikation mehrerer Rechner in einem lokalen Netzwerk erlaubt. Mit einem Paket kleinerer Programme („Winsocks“) ist erstmals auch der Internetzugriff über ein Standardmodem mit AT-Befehlssatz (Hayes-kompatible) und den Bitraten 4,8 / 9,6 / 19,2 kBit/s möglich. Auch kann man per ISDN oder mit DSL ins Internet.
WfW konnte bis zu 25 Computer in einer Arbeitsgruppe zusammenfassen und darstellen. DOS-Treiber bleiben auch nach dem Windows Start aktiv. Das System lässt sich über folgende Konfigurationsdateien anpassen: WIN.INI, SYSTEM.INI und PROGMAN.INI, die Registry hatte zu diesem Zeitpunkt noch eine verschwindend geringe Bedeutung.


Mit der später herausgebrachten Erweiterung Win32s konnten jetzt auch einzelne für Windows 95 entworfene 32-Bit Anwendungen ausgeführt werden, letzte Version von Win32s war 1.30c vom Februar 1996. Mit "Video for Windows" (VfW) wurde die Multimediafähigkeit erweitert. Minimum für den Einsatz von Windows 3.x sind 2 MByte RAM und 15 Mbyte Festplattenspeicher.


Die letzten Browser für WfW 3.11 sind: Internet Explorer 5.0 Deutsch, Internet Explorer 5.01 Englisch, Opera 3.62 Englisch und Netscape Navigator 4.08. Gerätehersteller konnten noch bis Anfang November 2008 das Betriebssystem Windows für Workgroups 3.11 lizenzieren.

Die Bedeutung dieser Windows-Varianten reicht heute über den musealen Charakter kaum hinaus. Sofern alte Hardware mit Taktfrequenzen um 20 MHz mit Treibern zum Laufen gebracht werden soll, kann Windows für Workgroups 3.1/ 3.11 noch verwendet werden, da es die stabilere Version ist und noch einige Treiber dafür erhältlich sind. Netzwerkzugriff ist mit allen Aktualisierungen und funktionierenden Treibern auch zu modernen Betriebssystemen über TCP/IP möglich. Aktuelle Hardware wird aber nicht mehr unterstützt.
 
Das System kann noch für Office-Tätigkeiten MS Office bis V4.3 und StarOffice bis 4.0, weniger komplexe Grafikaufgaben CorelDraw 5.0, MicroGrafx Designer/Picture Publisher 5, PaintShopPro 3.12 und alte 16-Bit-Spiele DOS/Win genutzt werden. Insgesamt ist die Hardwareunterstützung für SCSI besser als für IDE/Atapi. Geeignete Programme sind fast nur noch als Downloads oder auf dem Flohmarkt erhältlich. Die meisten gängigen Standardprogramme können nicht mehr ausgeführt werden.

Die produktive Nutzung des Betriebssystems ist somit auf modernen Systemen kaum noch möglich. Nur in der Welt der Embedded-PCs, etwa in Registrierkassen, kann sich das im Vergleich zu späteren Versionen ressourcenschonende Windows für Workgroups 3.11 aufgrund der Unterstützung des TCP/IP-Protokolls bis heute halten. Vereinzelt findet man Windows 3.11-Installationen auch noch in Standalone-PCs zur Steuerung älterer Geräte im Forschungsbetrieb, beispielsweise für die analytische Chemie Fluorometer, Spektrophotometer etc., für die keine aktuelle Software mehr angeboten wird, wie auch in der Industrie.

Wahrscheinlich werden sich nicht alle, die zu dieser Zeit bereits mit PCs zu tun hatten, so richtig gut daran erinnern, wie es sich angefühlt hat, diese Windows-Version zu nutzen. Wer doch einmal eine Reise in die Vergangenheit wagen möchte, kann dies mit Hilfe von Virtualisierungssoftware wie Hyper-V, VMWare usw. sowie auch über DOSBox erreichen.

Das Internet Archiv stellt bis zu 1000 Programme und Spiele aus dieser Zeit zum Download zur Verfügung. Genau das Richtige für ein langes verregnetes Wochenende.

 

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2016 01:25


Fotos mit Batchdatei sortieren

 Batch Datei zum verschieben von Fotos aus einem Verzeichnis in neu erstellte Unterverzeichnisse anhand des Dateidadums.

 
@echo off & setlocal
color 1E
echo ╔════════════════════════════════════════════╗
echo ║    Batch Script zur Sortierung von Fotos   ║
echo ╠════════════════════════════════════════════╣
echo ║  Es erstellt Ordner mit Dateidatum und     ║
echo ║  verschiebt die Fotos aus einem Quell-     ║
echo ║  verzeichnis in die neuen Ordner.          ║
echo ╚════════════════════════════════════════════╝
set /P w=    [S]ortieren oder [A]bbrechen?     
echo ──────────────────────────────────────────────
echo.
    if /I "%w%"=="s" goto Sortierung
    if /I "%w%"=="a" goto Abbrechen
goto ende

:Sortierung
    echo ╔══════════════════════════════════════════════╗
    echo ║Alle Fotos im Verzeichnis werden nun sortiert.║
    echo ║    Bitte warten, bis Sortierung beendet!     ║
    echo ╚══════════════════════════════════════════════╝
    echo.
    set "Ziel=P:\DATEN\FOTOS"

    if "%~1" neq "" pushd %1
    for %%i in ("*.jpg") do (
    for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do (
        if not exist "%Ziel%\%%c-%%b-%%a" md "%Ziel%\%%c-%%b-%%a"
        move %%i "%Ziel%\%%c-%%b-%%a\"
    )
    )
    if "%~1" neq "" popd

goto ende

:Abbrechen
    echo Abbruch
goto ende

:ende
    echo.
    pause

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2016 04:07


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Elinks ein Text-basierender Webbrowser für die Konsole

ELinks ist nicht nur der coolste Kommandozeilen-Webbrowser. Tatsächlich ist es auch der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird und auch moderne Webseiten unterstützt. Entwickelt wurde der schlanke Textbrowser ELinks von Jonas Fonseca.

Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Ziel war es einen klassischen Open-Source Browser für die Konsole zu erstellen, der sehr flexibel ist und auch Frames und Tabellen darstellen kann. Da sich ELinks als einfacher Textbrowser nur auf die Texte und nicht auf Sripte, etc konzentriert ist ELinks so sicher wie kaum ein anderer Browser. Gerade die grafischen Browser liegen im Vergleich um Längen dahinter. Er kann zusätzlich an eigene Bedürfnisse angepasst und durch Perl-, Lua- oder Guile-Skripte erweitert werden. Webstandards sind nicht unbedeutend für ELinks, so beherrscht er eine Vielzahl von Protokollen, etwa HTTP, HTTPS, FTP (mit SSL Support) IPV4 oder auch darstellung lokaler Dateien. Zusätzliche Protokollunterstützung besteht für BitTorrent-Finger, Gopher, SMB und NNTP. Er beherrscht die Darstellung von Farben, beinhaltet eine Lesezeichenverwaltung, ermöglicht Tabbed-Browsing und stellt Tabellen und Franmes akurat dar. ELinks funktioniert unter Linux, FreeBSD, OpenBSD, Solaris, IRIX, HPUX, Digital Unix, AIX, OS/2, BeOS, RISC OS und MacOS X und ist auch meist verfügbar durch alle Linux/BSD-Paketmanager. Ein Port für Win32 befindet sich im Beta-Stadium. Download hier. Die Installation unter Debian oder Ubuntu zum Beispiel kann einfach über den Packetmanager vorgenommen werden:

sudo apt-get update
sudo apt-get install elinks

Zum starten kann man einfach elinks eingeben, oder auch gleich einen Domain-Namen hinzufügen:

elinks http://elinks.or.cz/  # elinks Homepage

Sobald man im Programm ist, kann man die Taste "g" verwenden, um die Adressleiste aufzurufen. Oder man drückt die Escape Taste. Damit öffnet man die Menüzeile. Weitere Tastaturbefehle:

g - URL aufrufen                  s - Lesezeichen
h - History                       o - Optionen (z.B. Einstellungen)
t - Neue Registerkarte öffnen     T - Link als neuen Tab öffnen
<> - Links/rechts verschieben     Home - zum Seitenanfang
End - zum Seitenende gehen        Links - zurückgehen
Rechts - Hyperlink folgen         Nach oben - vorheriger Hyperlink
Nach unten - nächster Hyperlink   / - Suche
\ - HTML ansehen                  [ - Scrollfenster nach links
] - Fenster nach rechts scrollen  c - Reiter schließen
q - beenden                       d - Hyperlink herunterladen
Strg r - Aktualisieren       

Die Datei /home/username/.elinks/elinks.conf enthält die Konfigurationsinformationen für ELinks. Damit kann man das Verhalten von ELinks auf vielfältige Weise konfigurieren: z.B.: Protokollverhalten, Tastaturbelegung, Farben für das Rendering und die Benutzeroberfläche. Die Datei wird beim Start gelesen und nur bei Bedarf gespeichert. Alle in diesem Dokument beschriebenen Optionen können in ELinks vollständig konfiguriert werden, so dass keine Bearbeitung von elinks.conf in der Regel erforderlich ist. Die Tastenbelegungen können auch in der elinks.conf angegeben werden.
SYNTAX
Die Syntax der Konfigurationsdatei ist sehr einfach. Die Datei elinks.conf ist eine freie ASCII-Textdatei, die im jeweiligen home Verzeichnis des Users abgespeichert wird. Die Datei kann zusätzliche Registerkarten und Zeilenumbrüche zur Formatierung enthalten. Schlüsselwörter in der Datei sind case-sensitive. Kommentare beginnen wie üblich mit dem Zeichen # und enden am Ende der Zeile:

# Use asynchronous DNS resolver?
set connection.async_dns = 1
# horizontal text margin.
set document.browse.margin_width = 3
# Default document codepage.
set document.codepage.assume = "ISO-8859-1"
# User defined protocol handlers
set protocol.user.mailto.unix = "mutt %h -s \"%s\""

Verfasser: Andreas Preuss
Letzte Änderung: 12-06-2018 16:10


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Konsolenbefehle zum Arbeiten mit Git

Git ist eine Software zur Versionsverwaltung von Projekten. Man kann damit einfach zu alten Ständen zurückspringen oder mit mehreren Leuten an einem Projekt arbeiten. Git ist im Laufe der Zeit von allen anderen Versionskontrollsystemen für mich der Hauptfavorit geworden. Die meisten anderen Systeme wie (CVS, Subversion, Perforce, Bazaar usw.) betrachten die Informationen, die sie verwalten, als eine Menge von Dateien und die Änderungen, die über die Zeit hinweg an einzelnen Dateien vorgenommen werden.
Git betrachtet seine Daten eher als eine Reihe von Snapshots eines Mini-Dateisystems. Jedes Mal, wenn man committet (d.h. den gegenwärtigen Status des Projektes als eine Version in Git speichert), sichert Git den Zustand sämtlicher Dateien in diesem Moment („Snapshot“) und speichert eine Referenz auf diesen Snapshot. Um dies möglichst effizient und schnell tun zu können, kopiert Git unveränderte Dateien nicht, sondern legt lediglich eine Verknüpfung zu der vorherigen Version der Datei an. Dies ist ein wichtiger Unterschied zwischen Git und praktisch allen anderen Versionskontrollsystemen.

Installation
git für Linux herunterladen und installieren.
git für OS X herunterladen und installieren.
git für Windows herunterladen und installieren.

Einstellungen
Die Datei /etc/gitconfig ist die globale Konfigurationsdatei, die für jeden Anwender des Systems und all ihre Projekte gelten. Die Werte in der Datei ~/.gitconfig gelten ausschließlich für den User und all seine Projekte. Wenn man git config mit der Option --global verwendet, wird diese Datei verwendet. Die Datei .git/config im Git Verzeichnis eines Projektes enthält Werte, die nur für das jeweilige Projekt gelten. Diese Dateien überschreiben Werte aus den jeweils vorhergehenden Dateien in dieser Reihenfolge. D.h. Werte in beispielsweise .git/config überschreiben diejenigen in /etc/gitconfig.
Auf Windows Systemen sucht Git nach der .gitconfig Datei im $HOME Verzeichnis z.B.: C:\Dokumente und Einstellungen\$USER. Es schaut auch immer nach /etc/gitconfig.
E-Mail Adresse und Editor konfigurieren

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs
$ git help config # Weitere Hilfe zur Konfiguration

Dies ermöglicht, das push ausgeführt werden, ohne das branchname origin/branchname geschrieben werden muss ?!

git config --global push.default simple

Folgender Befehl definiert, wonach Line-Endings beim checkout konvertiert werden

git config --global core.eol lf

UTF-8 einstellen, wodurch auch Umlaute in Commits möglich sind

git config --global i18n.commitEncoding 'utf8'
git config --global i18n.logOutputEncoding 'utf8'

Init
Ein bare Repo auf repo.my_online_repo.de erstellen und ein neues lokales Repo master reinpushen:

mkdir -p ~/_pfad_zum_repo/reponame.git
cd ~/_pfad_zum_repo/reponame.git
git init --bare --shared
git config core.sharedRepository group
chown -R git:git ~/_pfad_zum_repo/reponame.git
chmod 0770 ~/_pfad_zum_repo/reponame.git

Danach wieder lokal weiter arbeiten und ein Verzeichnis zu einen GIT Repo umwandeln:

cd /_pfad_zum_repo/reponame
git init
git add .
git commit -m "Migrate to Git"
git remote add origin "ssh://username@repo.mobiletrend.de/~/_pfad_zum_repo/reponame.git"
git push origin master:master

Danach ist das lokale Git mit dem Remote Bare Repository verbunden, als würde es von dort geklont worden sein.

git branch -a

Um danach ein schlichtes git pull verwenden zu können, muss das lokale Repo noch wissen, mit welchem remote brachen es verbunden ist. Da vorher im master gepusht wurde, wäre also folgendes als Einstellung richtig:

git branch -u origin/master

Branch
Einen neuen Branch anlegen

git branch 
# ... oder anlegen und direkt in den Branch wechseln...
git checkout -b branchname

Einen neuen Branch anlegen, diesen von einem Remotebranch ableiten und tracken (womit pull/push funktioniert)

git branch -t branchname origin/branchname

Einen (neuen/lokalen) Branch pushen und das Tracking setzen, damit push/pull automatisch funktionieren

git push -u origin branchname

(pushes the "branchname" branch to "origin" remote and sets up tracking) Einen lokalen Branch löschen

git branch -d branchname

Einen remote Branch löschen

git push origin :branchname

Einen (temporären) lokalen Branch erstellen, der auf den Stand eines alten Commits ist. Dafür muss der Hashcode des Commits bekannt sein:

git checkout -b temp 95817e231b02686c8cf420bea54864aeea7348ff

Commit Fügt alle Dateien zum Index hinzu, und bemerkt auch alle gelöschten Dateien und Pfade:

git add . --all

Commit, der alle Files staged, und eine Bemerkung über die Veränderung anfügt

git commit -a -m "bla"

Merge Einen Branch auf Stand des Masters aktualisieren Ggf. funktioniert ein schlichtes merge ?

git checkout branchname
git merge master

Ein Vorteil gegenüber git rebase ist, das es die History des Branches nicht verändert, sondern nur eine Art Merge-Commit durchführt, wodurch der Branch dann auf Stand des Masters ist

git checkout master
git branch rebase_state
git checkout feature
git merge rebase_state
git branch -d rebase_merge

Ein Branch erstellen und auf den Stand eines anderen Branches bringen

git checkout master
git branch neuerbranch
git checkout neuerbranch
git merge andererbranch

Verfasser: Andreas Preuss
Letzte Änderung: 15-06-2018 16:59


Schreiben des Ordners System Volume Information auf USB unterbinden

Ein extrem störendes Merkmal in Windows ist, dass wenn man ein USB Laufwerk anschliesst, sich darauf ein Systemordner mit Namen "System Volume Information" einfach automatisch erstellt. Eigentlich ist dieser Ordner systemrelevant. Er enthält als Hauptaufgabe unter anderem Systemwiederherstellungspunkte. Doch auf unserem unseren USB-Datenträger absolut störend und oft nicht nur auf ein paar wenige Gigabytes beschränkt, es kann vorkommen, dass der Ordner "System Volume Information" weitaus mehr Platz belegt als gewünscht ist. Der unerwünschte Ordner kann zwar gelöscht werden, aber nach kurzer Zeit oder spätestens nachdem wir den USB-Speicher wieder erneut eingesteckt haben wiederholt sich die ganze Sache. Wenn man mit diesem Problem konfrontiert ist, kann man sich zumal immer wieder über diese in Windows eingebaute Frechheit ärgern. Die Löschung des berüchtigten Ordners auf dem USB-Speicher ist zunächst nicht ohne etwas Aufwand zu bewerkstelligen.

Vollzugriff-Rechte für Ordner vergeben
Um diesen Ordner entfernen zu können, müssen die Benutzerrechte geändert werden. Das geht dauerhaft aber logischerweise nur bei Ordnern, die danach bestehen bleiben. Da man allerdings das ganze Verzeichnis System Volume Information löschen will, würden damit auch eventuelle Rechte-Einstellungen verschwinden.
Die einfachste Möglichkeit, dem aktuellen Anwender einen Vollzugriff auf diesen Ordner zu geben, ist die Verwendung eines DOS- oder Konsolenbefehls. Unter „Start – Ausführen“ kann man diesen Befehl auch ausführen, man muss nicht extra ein Konsolenfender mit cmd aufrufen.
Der Befehl „cacls“ ist dazu geeignet, dem Anwender Vollzugriff auf den Ordner System Volume Information zu geben. Die entsprechende Befehlszeile lautet:

# alt: cacls "E:\System Volume Information" /E /G %username%:F
# nach Win 10 Upd 2
icacls "C:\System Volume Information" /grant Username:F /t

# „c:\System Volume Information“ (mit den Anführungszeichen!) ist der Ort des Ordners. Hier also Laufwerk C.
# Der Parameter /E legt fest, dass die ACL (Access Control List) angepasst wird.
# /G username:F besteht aus drei Teilen:
# - G ändert die Benutzerberechtigung.
# - username ist in diesem Fall der Name des Benutzers, der momentan am System als Administrator angemeldet ist.
# - Und direkt dahinter folgt :F, was dem benannten User den Vollzugriff auf den Ordner gibt.

Diese Befehlskette hat allerdings nur die Rechte geändert. Dadurch wurde noch nichts gelöscht.

Den Ordner "System Volume Information" löschen
Alternativ kann man nun nach der ersten Befehlszeile den Ordner System Volume Information auch einfach über den Windows-Explorer löschen. Das Löschen geschieht durch den nachfolgenden Befehl:

rd /S /Q "c:\System Volume Information"

#    rd (remove directory) ist der Befehl, einen Ordner zu löschen
#    /S legt fest, dass alle Dateien und Unterordner darin gelöscht werden
#    /Q bestimmt, dass das still und ohne weitere Nachfrage erfolgt
#    „c:\System Volume Information“ (immer mit den Anführungszeichen!) ist in diesem Fall der Ort des Ordners auf Laufwerk C.

Will man jeden Tag mit einem sauberen System starten, oder den Vorgang immer Parat haben, kann man die beiden oben genannten Befehle natürlich auch in eine Batchdatei als Stapelverabeitung abspeichern. Um zum Beispiel den Ordner System Volume Information auf Laufwerk C,D,E und F löschen zu wollen, könnte in der Batchdatei folgendes stehen:

@echo off & setlocal enabledelayedexpansion 
chcp 1252
echo.
echo System Volume Information Ordner löschen
cacls "c:\System Volume Information" /E /G %username%:F
cacls "d:\System Volume Information" /E /G %username%:F
cacls "e:\System Volume Information" /E /G %username%:F
cacls "f:\System Volume Information" /E /G %username%:F
echo.
rd /S /Q "c:\System Volume Information"
rd /S /Q "d:\System Volume Information"
rd /S /Q "e:\System Volume Information"
rd /S /Q "f:\System Volume Information"
echo.
pause
echo Ordner "System Volume Information" erfolgreich gelöscht.

Ob alles geklappt hat, lässt sich leicht kontrollieren… denn dann ist der Ordner System Volume Information gelöscht worden.
Wenn man nun dem Windows System komplett von vorn herein verbieten möchte den Ordner "System Volume Information" auf Wechseldatenträgern zu erstellen, gibt es hier zwei Möglichkeiten dieses Problem zu bewältigen:
Einmal über eine Lokale Gruppenrichtlinie oder direkt über die Windows Registrierung.

Die Erstellung des Ordners "System Volume Information" über die Gruppenverwaltung deaktivieren.
In Windows 10/8.1 Pro & Enterprise Editions & Server, drückt man einfach die Windows Key + R Kombination, gibt gpedit.msc in das Run-Dialogfeld ein und drückt auf Enter, um den Lokalen Gruppenrichtlinieneditor zu öffnen.
Wir navigieren innerhalb des Gruppenrichtlinieneditors zu:
Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten -> Suche
Und wählen dort die Einstellung:
Hinzufügen von Speicherorten auf Wechseldatenträgern zu Bibliotheken nicht zulassen.


Im oben gezeigten Fenster auf Aktiviert klicken (rot unterstützen), dann auf Übernehmen und anschließend auf OK.
Der lokale Gruppenrichtlinien-Editor kann nun beendet und das Gerät neu gestartet werden.
Nun sollte man nicht mehr länger mit dem Problem konfrontiert sein.

Die Erstellung des Ordners "System Volume Information" über die Registrierung deaktivieren.
Wir haben aber auch die Möglichkeit über den Registry Editor einen Eintrag zu erstellen, der das ständige Schreiben des Ordners "System Volume Information" auf USB Datenträgern dauerhaft verhindert.
Dazu drücken wir die Windows-Taste + R-Kombination, geben regedit in das Dialogfeld Ausführen ein und drücken die Eingabetaste, um den Registrierungseditor zu öffnen.

Innerhalb des Regisrierungseditor navigieren wir zu:
   HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search

Wir ändern hier im Schlüssel DisableRemovableDriveIndexing den Wert zu 1und klicken auf OK.
Nun kann der Registrierungseditor beendet und das System neu gestartet werden.
Dies sollte das Problem ebenfalls dauerhaft beheben.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:46


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Linux

Datei- und Ordnerrechte unter Linux allgemein

Unter Linux sind jeder Datei und jedem Ordner drei Rechteebenen zugeordnet.
Sie gelten für:  
- Eigentümer
- Gruppe
- Alle anderen  
Jeder dieser Ebenen lassen sich gesonderte Rechte zuordnen.
Diese Rechte sind:  
- r wie read für das Leserecht
- w wie write für das Schreibrecht
- x wie execute für das Recht, eine Datei auszuführen (bei Verzeichnissen bedeutet das x, dass das Verzeichnis geöffnet werden darf).  
Wer mit ls -l den Inhalt eines Linux-Verzeichnisses anzeigen lässt, sieht links die Dateirechte, beispielsweise rwxrw-r--. Diese Rechte gelten von links nach rechts gelesen für den Eigentümer einer Datei rwx, für die Gruppe rw- und für die anderen Benutzer r--.
Falls an erster Stelle ein d steht, handelt es sich um ein Verzeichnis.   Diese Rechte lassen sich auch in Zahlen ausdrücken. Dabei steht jeweils eine Ziffer für eine Rechteebene, die erste Ziffer für den Eigentümer, die zweite für die Gruppe und die dritte für alle anderen.
Die Ziffer selbst ergibt sich aus den genehmigten Rechten:   r = 4 w = 2 x = 1  
Die gegebenen Rechte werden einfach zusammengezählt. 
Beispiel: Soll der Eigentümer die Datei lesen, schreiben und ausführen dürfen, so addiert man 4 + 2 + 1 und erhält 7.  
Soll die Gruppe die Datei nur ansehen und ausführen dürfen, so ergibt 4 + 1 die 5.
Und die anderen dürfen gar nichts, haben also die 0.
So ergibt sich in diesem Beispiel für die Dateirechte die 750.
Und die kann man mit dem Befehl chmod in Linux setzen.  
Häufig steht vor den drei Ziffern an erste Stelle noch eine vierte.
Die setzt die Attribute set user ID, set group ID und sticky. In Samba bleibt diese Ziffer meist bei 0. Mehr zu den Attributen verrät man chmod.  
Eigentümer und Gruppe einer Datei oder eines Ordners lassen sich mit den Befehlen chown und chgrp ändern.
Mehr dazu verraten die entsprechenden man-Einträge.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


MySQL Root - Passwort ändern

(Wenn root noch kein Passwort hat):

 # mysqladmin -u root password NEUESPASSWORT

(Wenn root schon ein Passwort hat):

 # mysqladmin -u root -p ALTESPASSWORT NEUESPASSWORT

Passwort anderer Accounts ändern:

# mysqladmin -u USER -p ALTESPASSWORT NEUESPASSWORT

MySQL Passwörter direkt in mysql ändern:
1) Über die Kommandozeile am mySQL Server anmelden:

mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

Wenn man das root Passwort nicht in /etc/mysql/my.cf oder unter Debian z.B. in /etc/mysql/debian.cf findet, kann man es neu setzen. Das ist relativ einfach und schnell gemacht.

1) mySQL Server anhalten: 

/etc/rc.d/init.d/mysql stop

2) mySQL Server manuell mit der Option " –skip-grant-tables" starten:

/usr/local/mysql/bin/safe_mysqld –skip-grant-tables

3) Über die Kommandozeile am mySQL Server anmelden:

# mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

5) mySQL Server wieder starten:

/etc/rc.d/init.d/mysql start

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Nagios-Plugin check_disk meldet .gvfs not accessible

Disk Space meldet während Gnome läuft:
DISK CRITICAL - /home/benutzername/.gvfs is not accessible: Permission denied
oder
DISK CRITICAL - /root/.gvfs is not accessible: Permission denied
Nagios3
Die Ursache dieses Fehlers beruht darauf, daß der Service "Disk Space" das "check_all_disks" aufruft, welches das Plugin "check_disk" benutzt. Dieses versucht alle gemounteten Filesysteme zu testen. Da Gnome bei einer Anmeldung das fuse-eigene Fiesystem mountet, welches für nagios nicht einsehbar ist, schlägt der Test fehl.

Lösung:
in der Definition des Testes beim Aufruf des Plugins
-X fuse.gvfs-fuse-daemon
anhängen, das schließt dieses spezielle Filesystem von den Tests aus,
die anderen werden jedoch weiterhin getestet.
Beispiel aus Konfigurationsdatei:
/etc/nagios3-plugins/config/disk.cfg

# 'check_all_disks' command definition

define command{
 command_name    check_all_disks
 command_line    /usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -X fuse.gvfs-fuse-daemon
 }

Verfasser: Andreas Preuss
Letzte Änderung: 27-11-2016 03:47


Microsoft Powershell unter Linux

Das Microsoft Entwicklerteam der Powershell, dem wichtigsten Verwaltungswerkzeug für Windows, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Konzepte typischer Unix-Shells angelehnt. Folgerichtig steht die Powershell als Open-Source-Software zum Download zur Verfügung und ist auf Linux portiert worden. Der CEO Satya Nadella von Microsoft wandelt Microsoft so langsam in ein Open-Source-Unternehmen um. Zuvor hatte Microsoft auch die eigene SQL-Server-Software für Linux veröffentlicht und Microsofts Software-Plattform .NET komplett unter Open-Source-Lizenz gestellt. Windows 10 ist zudem mit der vor allem aus der Linux-Welt bekannten Unix-Kommandozeile Bash ausgestattet worden. Die beliebte Linux-Distribution Ubuntu lässt sich komplett in Windows 10 ausführen.

So ist die Installation der Powershell auf Debian und Unbuntu möglich:

wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.9/powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb

sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb

Die Linux-Version der Powershell ist noch im Beta-Status und besitzt noch nicht alle Funktionen der Software wie unter Windows. Derzeit kann die Microsoft-Kommandozeile unter Linux nur lokal verwendet werden. Microsoft arbeitet nach eigenen Angaben noch an einer OpenSSH-Unterstützung der Powershell, um sie auch über das Netzwerk steuern zu können.

Verfasser: Andreas Preuss
Letzte Änderung: 01-12-2016 21:12


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Was bedeutet beim booten von Debian die Meldung "intel_rapl: no valid rapl domains"?

Virtualbox Linux Fehlermeldung beim Start

Startet man ein Debian oder Ubuntu System in einer Virtual Box, so kann es sein, dass einem während des Bootvorganges die Fehlermeldung "no valid rapl domains found in package 0" auffallen.
Diese Fehlermeldung besagt, dass Linux das Modul nicht laden kann, da es üblicherweise auf echten PCs starten würde. RAPL (Running Average Power Limit) ist einfach eine Energieverwaltung von Intel.
Trotzdem kann dies mit der Zeit auf den Wecker fallen.

Dies war beim Linux Kernel eine Änderung, die im Oktober 2013 eingeführt wurde, um den Intel RAPL Power Capting Treiber im Linux Kernel zu unterstützen. Diese Meldung ist nicht störend und hat keinen Einfluss auf die Leistung oder Funktionalität des Systems, da es sich nur um ein Energieverwaltungsmodul handelt. Wenn die Virtualisierungssoftware z.b. VirtualBox diesen Treiber unterstützt (und der Host unterstützt erweiterte Power-Funktionen), wird die Meldung ausgeblendet.
Hier kann man den Quellbaum des Moduls überprüfen, um zu prüfen, was es tut.

Es gibt also Zwei Lösungen um hier Abhilfe zu schaffen:
In VirtualBox PAE/NX aktivieren:

oder das Modul auf die Blackliste setzen und vom Laden ausschliessen.

echo 'blacklist intel_rapl' >> /etc/modprobe.d/blacklist.conf
reboot

Mit modprobe können Module zur Laufzeit des Systems ge- und entladen werden.
Bei Debian : nano /etc/modprobe.d/fbdev-blacklist.conf
Bei Ubuntu : nano /etc/modprobe.d/blacklist.conf
Bei Suse (Leap): /etc/modprobe.d/50-blacklist.conf

Die Sperrlisten im Verzeichnis /etc/modprobe.d/ haben üblicherweise den Namen blacklist-Modulname.conf, d.h. der Dateiname kann frei gewählt werden, sollte aber mit dem Präfix blacklist- beginnen um direkt über die Funktion zu informieren. Darüber hinaus existiert auch eine "allgemeine" Datei, die nur den Namen blacklist.conf trägt. Diese Datei sollte man allerdings nicht komplett überschreiben, sondern bei Bedarf weitere Einträge anhängen.

Eine ausführlichere Beschreibung über die Kernelmodule gibt es hier

Zum Schluss noch alle Treiber die zum Starten des Systems notwendig sind und nicht zum Kernel gehören einmal neu laden.

sudo update-initramfs -u -k all

Jetzt sollte beim nächsten Bootvorgang die Fehlermeldung nicht mehr vorhanden sein.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:22


OpenSSL auf Debian aktualisieren/installieren

OpenSSL ist die am meisten verwendete SSL-Bibliothek des Planeten.
Wie auch bei Apache liegt im Debian-Repository meist eine veraltete
OpenSSL-Version vor (1.0.1), welche sogar noch anfällig für Heartbleed-Attacken ist.

Um Auf die neuste Version Snapshot Version (1.1.0g) zu aktualisieren,
müssen wir daher OpenSSL auf unserem System selbst kompilieren und installieren.

Schritt 1: Vorbereitung
Zunächst werden hierfür die benötigten Pakete zur Kompilierung installiert:

apt-get install autoconf python libtool build-essential

Schritt 2: Download von OpenSSL
Hierfür laden wir OpenSSL herunter und entpacken es:

wget wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz -O openssl-1.1.0g.tar.gz
tar xfz openssl-*.tar.gz

Schritt 3: Kompilierung von OpenSSL
Kompilierung unseres OpenSSL Sourcecode Packetes:

cd openssl-*
sudo ./config --prefix=/usr zlib-dynamic --openssldir=/etc/ssl shared
sudo make
sudo make test

Schritt 4: Installation von OpenSSL

sudo make install

Schritt 5: Überprüfung der Installation
Nun sollte nun OpenSSL installiert sein, mit Hilfe des Befehls:

openssl version

kann die aktualisierte Version getestet werden.
In einigen Fällen wird trotzdem nicht die aktuelle Version angezeigt.
In diesem Fall hilft folgende Lösung:

$ mv /usr/bin/openssl /root/
$ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
openssl version

OpenSSL 1.1.0g 5 Jan 2018

Diese Prozedur funktioniert sowohl als Neuinstallation, als auch als Update.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Installation und Konfiguration von NGINX

Einfache Standartinstallation von NGINX
Die Installation von Nginx ist relativ simpel, die Konfiguration etwas weniger simpel für den Umsteiger, aber durchaus machbar! Einmal durchgeführt, läuft der neue Webserver wesentlich schneller und leistungsstärker als der Apache2.
Der Server hat dann weniger Speicherverbrauch, eine hohe Flexibilität und ist vor allem robuster und sicherer. NGINX läuft richtig konfiguriert auch zusammen mit Apache2.  Wenn man nun einen Webserver auf dem Raspberry Pi, Arduino, Asus Tinker Board oder dem Cubieboard realisieren möchte, kommt man um NGINX gar nicht mehr herum, weil hier der Apache2 durch seinen höheren Speicherverbrauch und seine langsamere Geschwindigkeit gar keinen Sinn mehr macht.

Die Installation:

Zum Installieren wird unter Debian Stretch zum Beispiel folgender Befehl mit dem Paket nginx eingegeben:

sudo apt-get install nginx

Danach kann auch schon NGINX gestartet werden mit folgenden Befehlen.

sudo /etc/init.d/nginx start

oder

sudo service nginx start

Wie wir feststellen funktioniert allerdings noch kein PHP.
Ab Version 1.8 legt Nginx ein HTML-Verzeichnis unter /var/www ab.
Falls noch kein PHP für den Webserver installiert wurde, einfach unter Debian Stretch diesen Befehl ausführen:

sudo apt install php7.2-fpm php7.2-cli php7.2-dev php7.2-mysql php7.2-curl php7.2-gd php7.2-json php7.2-opcache php7.2-igbinary php7.2-imagick php7.2-redis php7.2-mbstring php7.2-soap php7.2-xml php7.2-zip

Und wir passen die Datei /etc/nginx/fastcgi_params an:

sudo vim /etc/nginx/fastcgi_params
fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;
 
# define SCRIPT_NAME per domain after including this file
#fastcgi_param  SCRIPT_NAME         $fastcgi_script_name;
 
fastcgi_param   REQUEST_URI         $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;
fastcgi_param   REQUEST_SCHEME      $scheme;
fastcgi_param   HTTPS               $https if_not_empty;
 
fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;
 
fastcgi_param   REMOTE_ADDR         $remote_addr;
fastcgi_param   REMOTE_PORT         $remote_port;
fastcgi_param   SERVER_ADDR         $server_addr;
fastcgi_param   SERVER_PORT         $server_port;
fastcgi_param   SERVER_NAME         $server_name;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;
 
# httpoxy fix (see https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/)
fastcgi_param   HTTP_PROXY          "";

Speichern in VIM mit :wq.
Zum Abschluss muss Nginx neu geladen werden und wenn Apache2 läuft, dieser gestoppt werden.
service apache2 stop
/etc/init.d/nginx reload

Einfache Einrichtung von NGINX:
Die virtuellen Hosts liegen Standartmässig in /etc/nginx/sites-available/default.
Die Standart Konfiguration sieht in der Regel folgendermassen aus:

server {
     listen 80;                            ## Listen für IPv4;
     listen [::]:80 ipv6only=on;           ## Listen für IPv6;
     server_name _;
     root /var/www/html;                   ## Der Webserver-Root-Ordner
     index index.php index.html index.htm; ## Festlegung der Index-Dateien
     location / {
       try_files $uri $uri/ =404;
     }
     #error_page 404 /404.html;            ## 404 Fehlerseite
     # Alle 50x Fehlerseiten auf Standardfile /50x.html weiterleiten
     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
        root /var/www/html;
     }
     # PHP Skripte zu FastCGI an 127.0.0.1:9000 leiten
     location ~ \.php$ {
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include snippets/fastcgi-php.conf;
     }
     # Verbiete Zugriff auf alle .htaccess Dateien. 
     # Dieser Eintrag nur wenn man den root Ordner faulerweise einfach auf den Apache Pfad gelegt hat.
     location ~ /\.ht {
       deny all;
       }
     }

Die ersten beiden Zeilen geben Nginx an, auf Port 80 sowohl IPv4 als auch IPv6 Adressen anzunehmen.
Hier kann man natürlich auch 8080 oder jeden anderen, freien Port verwenden.
server_name _; bewirkt, dass dies ein Catchall vhost ist (jeder beliebige vhost wird angenommen).
Hier kann natürlich ebenfalls auch jeder andere Hostname eingetragen werden, z. B. für meineSeite.de:

 server_name meineSeite.de; 

Die Zeile index gibt an, dass in diesem root-Pfad, die index.php, index.html oder index.htm in als Index-Datei erkannt und verwendet werden soll, sofern vorhanden.
Für php ist der location Teil wichtig: location ~ \.php$ { … }.
So kann auch php einwandfrei verwendet werden, wie man es von Apache gewohnt ist. Zur Erhöhung der Sicherheit kann man auf Fehlerseiten die nginx-Version ausblenden, so wird es möglichen Angreifern erschwert die Version herauszufinden, falls Schwachstellen dieses Releases ausgenutzt werden könnten. Wir rufen somit die Hauptkonfiguration auf:

 vim /etc/nginx/nginx.conf 

eingeben und folgende Zeile auskommentieren. (Das # Zeichen entfernen)

 server_tokens off; 

An dieser Stelle können wir unseren NGINX Server gleich etwas optimieren:
Zuerst werden wir die Worker-Prozesse der /etc/nginx/nginx.conf anpassen, da auch nginx Multicore-Techniken unterstützt. Die Anzahl der zu benutzenden CPUs muss nginx angegeben werden. Die CPU-Anzahl kann so ausgelesen werden:

cat /proc/cpuinfo | grep processor

Die Ausgabe wird in etwas so aussehen:

processor       : 0
processor       : 1
processor       : 2
processor       : 3

Entsprechend der Ausgabe handelt es sich um ein Singlecore (ein Prozessor) System, oder um eines mit 4 Cores (Quadcore) oder mehr. Entsprechend der Anzahl an Cores sind die Worker-Prozesse in der nginx.conf zu bestimmen:

user www www-user;
worker_processes 1;     # 1 bei Singlecore; 2 bei Dualcore, usw....
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
 
events {
    worker_connections 768;
    multi_accept on;
    }
....

Nun gibt es noch einen Worker Wert in der nginx.conf, die worker_connections. Diese geben effektiv an, wieviel Verbindungen ein Worker-Prozess bedienen soll. Aktuelle Browser bauen allein 2 bis 8 Verbindungen zu einem Webserver auf. Im privaten Umfeld kann der Wert bei 256 (Das ist z.B. Standard beim Raspberry) belassen werden, Websites mit viel Traffic können 1024 oder mehr setzen. Hier habe ich einen Mittelwert von 768 eingestellt. Mit multi_accept wird nginx angewiesen, soviele Verbindungen wie möglich für Anfragen bereitzustellen.

Aktivierung der GZIP-Komprimierung von nginx
Dies hat effektiv zur Folge, das etwas weniger Bytes durch die Leitungen geschickt werden müssen, zu Lasten der Rechenpower. Besonders bei großen Systemen wie WordPress oder Magento macht sich die Komprimierung allerdings sehr zum Vorteil bemerkbar.
Wenn man allerdings sehr hohen Traffic erwartet und die Rechenleistung extrem gering halten möchte, wie z.B. auf einem virtuellen Cloud-Server (hier kostet zusätzliche Rechenleistung oft mehr), geht man den anderen Weg und lässt die gzip Komprimierung laut Default ausgeschaltet.

##
# Gzip Settings
##
# gzip off;
# gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Es gibt noch viele Möglichkeiten die Performance non NGINX zu steigern, aber wir steigen hier für die einfache Konfiguration erst mal aus und ich werde versuchen dies in einer Extra Faq zu behandeln.

Mit dem VIM Befehl :wq die nginx.conf speichern und beenden.

Neuladen des Servers wie gewohnt:

/etc/init.d/nginx reload

Konfiguration der MariaDB Datenbank:
Die Default-Einstellungen sind für unsere Installation schon recht brauchbar. Ein paar Defaultwerte gibt es jedoch anzupassen: Wir rufen also die Konfigurationsdatei auf und passen diese an:

Für die Installation der Datenbank MariaDB verwende ich immer folgende Installationsroutine:

sudo apt install mariadb-server mariadb-plugin-tokudb percona-toolkit
vim /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
 
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8
 
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server  = utf8
collation-server      = utf8_general_ci
character_set_server  = utf8
collation_server      = utf8_general_ci
 
# Zugang der Firewall überlassen
bind-address = 0.0.0.0

Auch wollen wir TokuDB in MariaDB aktivieren:

vim /etc/mysql/conf.d/tokudb.cnf
[mariadb]
# See https://mariadb.com/kb/en/how-to-enable-tokudb-in-mariadb/
# for instructions how to enable TokuDB
#
# See https://mariadb.com/kb/en/tokudb-differences/ for differences
# between TokuDB in MariaDB and TokuDB from http://www.tokutek.com/
plugin-load-add=ha_tokudb.so
 
[mysqld]
default_storage_engine = tokudb

Mit dem Befehl :wq des Editors VIM jeweils speichern und beenden.
 Die Datenbank wird mit:

service mysql restart

neu gestartet.
Dies war die einfachste und schnellste Standartkonfiguration von NGINX mit kleiner Optimierung.
Das heisst über die IP des Servers ist die Standard NGINX Startseite nun aufzurufen, MySQL und PHP laufen.

In einer weiteren FAQ versuche ich eine individuelle erweitere Konfiguration mit mehreren virtuellen Domains mit NGINX übersichtlich zu erklären.

Verfasser: Andreas Preuss
Letzte Änderung: 28-05-2018 17:12


Linux Terminal Anwendungen - Kommandozeilen Apps

Das Linux Terminal ist nicht nur ein sehr effizientes Werkzeug zum Arbeiten, sondern es ist in der Befehlsverarbeitung sehr schnell und verbraucht weniger Ressourcen wie eine graphische Oberfläche mit Maussteuerung. Dies liegt mitunter daran, dass die Shells (Kommandozeileninterpreter) unter Unix wesentlich leistungsfähiger sind als zum Beispiel der DOS-Kommandozeileninterpreter. Außerdem ist eine Shell bei manchen Aufgaben einem grafischen Benutzerinterface überlegen, da durch die Shell-Syntax zum Beispiel Ablaufsteuerungen und Programmrückmeldungen einbezogen werden können, was bei grafischen Anwendungen meist nicht möglich ist. Bei vielen Nutzern und auch von mir wird weiterhin in der Regel die Kommandozeile bevorzugt.

Im Laufe der vielen Jahre (meine erst Berührung mit Linux war:  S.u.S.E. Linux 4.3 - seit 1996) sind einige interessante, leistungsfähige Terminal-Programme entstanden, die sehr nützliche Funktionen beinhalten und alles über die Kommandozeile erledigen lassen. Hierbei kann man weitestens auf die "Clickie-Buntie" Oberfläche wie Gnome, KDE und viele mehr, vollständig verzichten.

Ich trage auf dieser Seite einige der kleinen Kommandozeilen - Anwendungen zusammen, von den bekanntesten bis zu einigen wohl etwas unbekannteren. Die meisten Programme habe ich mit der APT Paketverwaltung von Debian / Ubuntu getestet, aber sicher funktionieren auch viele mit dpkg, opkg, ipkg yum oder pacman oder sind als Quellcode für das jeweilige System kompilierbar.

Archivierung:

Automation:

Ansible
Ein Leichgewichtiges und schnelles Konfigurationsmanagement für Linux. Es ermöglicht die automatisierte Bereitstellung, Softwareverteilung, Konfiguration und Upgrades auf allen Clients im Netzwerk. Es kommt komplett ohne Agenten auf dem Clienten aus und benötigt auf den Systemen lediglich einen SSH-Server und eine aktuelle Python-Installation.
Debian-Benutzer können die gleiche Quelle wie das Ubuntu-PPA nutzen.
Folgende Zeile zu den Quellen unter /etc/apt/sources.list sollte dann ergänzt werden:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main

Dann mit folgenden Befehlen unter Debian (Debian,Jessie und Stretch) installieren:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
$ sudo apt-get update
$ sudo apt-get install ansible

Mit ansible kann sich jeder Netzwerk-Administrator mit wenig Aufwand seine eigene Sammlung an Skripten zum Systemmanagement erstellen. Vor allem die große Auswahl an bestehenden yaml-Verteilungsscripten (Playbooks) macht es auch Einsteigern sehr leicht, mit ansible gute Erfolge zu erzielen. Für viele Linux-Admins sind die kleinen und großen ansible-Helferlein aus dem IT-Alltag gar nicht mehr wegzudenken. Wer einmal das Konzept und die Einfachheit von ansible verstanden hat, verlässt sein Büro bei 100 Rechnern im Haus nur noch wegen der Mittagspause.

fswatch - Überwacht Dateien und Verzeichnisänderungen unter Linux und MAC OS X.

Backup:

Amanda
Open Source Netzwerk-Backup für Linux, Windows, UNIX und OS X. AMANDA setzt sich aus den Wörtern "Advanced Maryland Automatic Network Disk Archiver" zusammen. Es ist eine professionelle Backup-Lösung, die es dem IT-Admin ermöglicht, einen einzigen Master-Backup-Server einzurichten, um mehrere Hosts über das Netzwerk auf Bandlaufwerke/Wechsler oder Festplatten oder optische Medien auch verschlüsselt zu sichern. Amanda verwendet dabei native Utilities und Formate (z.B. Dump und/oder GNU tar) und kann eine große Anzahl von Servern und Workstations mit mehreren Versionen von Linux oder Unix sichern. Amanda verwendet einen nativen Windows-Client, um auch Microsoft Windows-Desktops und -Server zu sichern.

Bacula
Verwalten von Backups, Wiederherstellungen und Verifizierungen von Computerdaten über ein Netzwerk von Computern unterschiedlicher Art.

BorgBackup
BorgBackup (kurz: Borg) ist ein deduplizierendes Backup-Programm. Optional unterstützt es Komprimierung und authentifizierte Verschlüsselung. Es ist eine deutlich verbesserte Form der Backupsoftware Attic.

Das Hauptziel von Borg ist es, einen effizienten und sicheren Weg zur Datensicherung zu bieten. Die verwendete Technik der Datendeduplizierung macht Borg für tägliche Backups geeignet, da nur Änderungen gespeichert werden. Die authentifizierte Verschlüsselungstechnik macht es geeignet für Backups auf nicht vollständig vertrauenswürdige Zielen wie z.B. externe Cloudumgebungen.

# Bevor eine Sicherung durchgeführt werden kann, muss zuerst ein Repository initialisiert werden:
$ borg init --encryption=repokey /pfad/zu/repo

# Sichern der Verzeichnisse ~/src und ~/Documents in ein Archiv namens Montag:
$ borg create /path/to/repo::Montag ~/src ~/Dokumente

# Am nächsten Tag kann ein neues Archiv mit dem Namen Dienstag erstellt werden:
$ borg create --stats /path/to/repo::Dienstag ~/src ~/Dokumente

Dieses Backup wird viel schneller und viel kleiner, da nur neue, nie zuvor gesehene Daten gespeichert werden. 
Die Option --stats bewirkt, dass Borg Statistiken über das neu erstellte Archiv ausgibt, 
wie z.B. die Menge an eindeutigen Daten (die nicht mit anderen Archiven geteilt werden)

Verschlüsselte Server-Backups mit Duply und Duplicity
Einfaches Erstellen von GPG-verschlüsselten, komprimierten Backups beliebiger Daten fast überall. Backups in lesbarer Form irgendwo im Netz ablegen? Das ist keine gute Idee. Die Backups allerdings zuerst vollständig verschlüsseln und danach auf einen beliebigen Online-Speicherplatz wegschieben? Das hört sich schon eher ganz gut an! Genau das kann Duplicity, und dank Duply vereinfacht sich dessen Handhabung auf wenige, sehr einfache Befehle. Duply dient als Wrapper für Duplicity und reduziert die Handhabung von Sicherung und Wiederherstellung auf das Wesentliche. Hier einmal ein paar einfache Beispiele:

// Status der Backups anzeigen
# duply mein_backup_profil status

// Backup erstellen
# duply mein_backup_profil backup

// Vor kurzem gelöschten Pfad wiederherstellen (vor vier Tagen)
# duply mein_backup_profil restore /tmp 4D

// Einzelne Datei aus letztem Backup wiederherstellen und unter neuem Namen abspeichern
# duply mein_backup_profil fetch etc/passwd /tmp/passwd_restored

// Einen gelöschten Ordner wiederherstellen und unter neuem Namen abspeichern (vor 5 Tagen)
# duply mein_backup_profil fetch etc /tmp/etc_folder_restored 5D

Duply und Duplicity besitzen keine grafische Oberfläche und eignen sich deshalb vor allem für automatisierte Server-Backups. Für den Desktop gibt es das GUI Werkzeug Déjà Dup, das mit einer grafischen Oberfläche ebenfalls auf Wunsch verschlüsselte Backups erstellt.

mysqldump-secure
Sicheres mysqldump-Skript mit Verschlüsselung, Komprimierung, Protokollierung, Blacklisting und Nagios Monitoring Integration.

Benchmark:

apt-get install sysbench
sysbench --test=cpu --num-threads=4 --cpu-max-prime=20000 run

Cloud:

Content Erstellung:

Dateimanagement:

Datenbanken:

Datenverarbeitung:

Download Tools:

E-Mail:

Entwicklung:

FTP:

Grafik:

Aewan ist ein auf Curses basierendes Programm, das die Erstellung und Bearbeitung von Ascii-Art von der Kommandozeile ermöglicht. Der Benutzer kann den Cursor mit den Pfeiltasten und den Zeichen "malen" durch Drücken der entsprechenden Tasten auf dem Bildschirm bewegen. Es gibt Dialogfelder, in denen der Benutzer Vorder- und Hintergrundfarben sowie fette und blinkende Attribute auswählen kann.



Der Benutzer kann auch rechteckige Bereiche der Leinwand auswählen, um sie zu verschieben, zu kopieren und einzufügen.
Aewan unterstützt auch'intelligentes' horizontales und vertikales Spiegeln (z.B. konvertiert'\' in'/', usw.).

Was Aewan von ähnlichen Projekten unterscheidet, ist die Tatsache, dass es mit mehreren Ebenen (Layern) arbeiten kann und die Möglichkeit hat, Transparenz und Sichtbarkeit für jede Ebene ein- und auszuschalten. Es gibt einen Ebenendialog, über den der Benutzer die Reihenfolge der Ebenen ändern kann. So kann jede Ebene unabhängig voneinander bearbeitet werden, um eine zusammengesetzte Zeichnung zu erzeugen. Anstatt die Ebenen für das Compositing zu verwenden, ist es auch möglich, die Ebenen als Rahmen für eine Animation zu verwenden,
so dass der Benutzer auch Ascii-Animationen mit Aewan erstellen kann.

Aewan kann Animationen in einen "less movie" exportieren, d.h. eine normale Datei, die die Animation zeigt, wenn sie im  Pager oder ähnlichen Programm durchgeblättert wird (sogar Notepad funktioniert, wenn keine Farbe benötigt wird). Es kann auch ein Shellscript exportieren, das die Animation auf dem Terminal abspielt, wenn es ausgeführt wird.

Das Dateiformat ist einfach zu strukturiert, so dass es leicht ist, eine Terminal-basierte Anwendung zu schreiben,
die die Aewan-Dateien zur Anzeige auf dem Bildschirm verwendet. Derzeit läuft es auf dem Linux-Terminal, rxvt, xterm, dem Cygwin-Terminal und der FreeBSD-Konsole. Somit läuft es in der Konsole von Linux, Mac OSX und in der Hybrid Linux Version von Windows 10.

Hier gibt es eine Beschreibung des Dateiformates:
http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=aewan

AEWAN - Ascii-art Editor
http://aewan.sourceforge.net/

Installation unter Debian 9:

sudo apt-get install aewan

Weite Quellen:
Ascii Art Sammlung: http://copy.r74n.com/ascii-art
Ascii Art Archiv: https://www.asciiart.eu/
Ascii-Art Movies: http://www.romanm.ch/ascii-movies
Ascii-Art Online Konverter: https://www.ascii-art-generator.org/de.html
Ascii-Art Online Konverter: https://manytools.org/hacker-tools/convert-images-to-ascii-art/

Internet:

eLinks - Ein textbasierter moderner Webbrowser für die Konsole.
ELinks ist der coolste Kommandozeilen-Webbrowser, tatsächlich ist es der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird als auch moderne Webseiten unterstützt. Er lässt sich sowohl mit der Tastatur als auch der Maus bedienen.



Entwickelt wurde der schlanke und schnelle Textbrowser ELinks von Jonas Fonseca. Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Hier habe ich extra etwas ausführlicher über eLinks geschieben.
Weitere Quellen: http://www.kompx.com/en/elinks.htm

IRC:

Konverter:

Linux:

Mac OS X:

.

Medien:

.

Netzwerke:

IPTraf-(ng)
Wer das Netzwerk-Verhalten von Servern mit Linux-Betriebssystem analysieren will, benötigt ein entsprechendes Monitoring-Tool. Das textbasierte IPTraf ist per Standard selten in Linux-Distributionen installiert. Allerdings ist es in vielen Repositories, wie beispielsweise bei Ubuntu oder Debian enthalten. Somit lässt es sich bequem über die üblichen Mechanismen einspielen. Im Falle Ubuntu oder Debian wird es mit diesem Befehl

sudo apt-get install iptraf-ng

installiert und dann mit Root-Rechten gestartet, da der Paketfilter ausgelesen werden muss.

Das Packet iptraf ist z.B. in Debian 9 nur noch als Platzhalter vorhanden und wurde durch die neue Version iptraf-ng iptraf-(new generation) ersetzt.

# Allgemein
sudo iptraf-ng 
# Beispiel
sudo iptraf-ng ppp0 

Ein universelles Werkzeug, das diverse Netzwerk-Statistiken über das LAN erstellt. IPTraf ist ein interaktives, farbiges auf ncurses-basierendes Netzwerkstatistikprogramm (LAN Monitor), das verschiedene Netzwerk Statistiken erzeugt, einschließlich TCP Info, UDP Zähler, ICMP und OSPF Information, Ethernet Lastinformation, Node Statistiken, IP Checksummen Fehler, usw. Man kann hier diverse Filter einsetzen. Sollte der Server mehr als eine Netzwerkkarte besitzen, kann diese auch explizit ausgewählt und diese bestimmte Netzwerkkarte, die überwacht werden soll, angezeigt  und protokolliert werden.

cbm
Der Color Bandwidth Meter (cbm)
- Ist eine kleine farbige Terminalanwendung, um den aktuellen Datenverkehr durch alle Netzwerkgeräte anzuzeigen.

sudo apt-get install cbm

Quellen: http://www.isotton.com/software/unix/cbm/

Präsentation:

 

Produktivität:

 

RSS:

Screensaver: 

CMatrix
Cmatrix ist ein einfaches Konsolenprogramm, das wie der beliebte Sci-Fi-Film "Matrix" die coolen Matrix-Scrolling-Linien, die als Schriftzeichen aller Art vom oberen Rand des Fensters auf den unteren hinunterfallen im Terminal darstellen.

Installation unter Debian / Ubuntu:

sudo apt-get install cmatrix

Um das Programm zu beenden, 'q' drücken.
Asynchrones Scrollen (wie in dem ursprünglichen Film) geht mit:

cmatrix -a -C green -u 6 -s 

Die Optionen:
-a : ein asynchrones Scrollen
-b : Fettgedruckte Zeichen einschalten
-B : Alle Zeichen fettgedruckt (überschreibt -b)
-f : Erzwingt, dass der linux $TERM-Typ eingeschaltet ist.
-l : Linux-Modus (setzt die Schriftart "matrix.fnt" in der Konsole)
-o : Scrollen oldstyle verwenden
-n : Keine fetten Zeichen (überschreibt -b und -B)
-s : "Bildschirmschoner"-Modus, Beenden beim ersten Tastendruck
-x : X-Fenstermodus, kann verwendet werden wenn xterm mtx.pcf verwendet.
-V : Druckversionsinformationen und Beenden
-u delay : Geschwindigkeit 0 - 9, Voreinstellung 4
-C color : Gültige Farben sind: green, red, blue, white, yellow, cyan, magenta und black.

Alle Optionen und Anweisungen:

man cmatrix

Spiele:

Ascii Sector ist ein kostenloses Konsolen-Spiel für Windows, Mac OS X und Linux. Ein wenig vergleichbar mit Wing Commander Privateer. Man beginnt mit einem einfachen Raumschiff und kann dann Missionen annehmen oder Waren tauschen, um genug Geld zu verdienen, um das eigene Schiff aufzurüsten oder ein neues zu kaufen.

Man kann tödliche Kämpfe im Weltraum, auf dem Boden und an Bord von Raumschiffen austragen, und mit der Skriptsprache Ascii Sector kann man auch eigene Quests für das Spiel erstellen oder Spaß mit den Quests anderer Spieler haben.
Download:http://www.asciisector.net/

Suchen:

System:

htop
Um die Systemleistung anzuzeigen gibt es das Programm htop. Es zeigt interaktiv alle momentan ausgeführten Prozesse sowie deren Belastung im System an. Mit htop kann man allerdings nicht nur durch die Prozessliste scrollen, man hat auch die Möglichkeit, schnell und einfach bestimmte Signale an Prozesse zu senden. Es bietet zudem die Möglichkeit, Prozessbäume anzuzeigen und ist sehr anpassbar.
htopDie Prozesse lassen sich nach verschiedenen Kriterien sortieren, die über F6 ausgewählt werden können. Es erscheint ein kleines Menü am linken Anzeigerand, aus dem das Sortierkriterium ausgewählt werden kann.
<pre>sudo apt-get install htop</pre>
Homepage: http://hisham.hm/htop/

Terminal:

 

Text Editoren:

Nano
Der nano Editor ist ein kleiner, beliebter Text-Editor für Linux, der in der Regel bei den neueren Ubuntu und Debian (+ Raspbian) Installationen dabei ist. Zur Installation gibt man unter Debian / Ubuntu folgenden Befehl ein:

sudo apt-get install nano

Im Editor navigiert man mit den Pfeil- und Bildlauftasten durch die Datei. Aktionen wie Schließen, Speichern, Suchen, Ausschneiden, Kopieren, Einsetzen usw. erledigt man über Tastenkombinationen. Bei angepasster Konfiguration auch mit der Maus.


Die wichtigsten Shortcuts blendet Nano jeweils in den unteren beiden Statuszeilen ein. Nano verwendet in der Voreinstellung die systemweite Einrichtungsdatei /etc/nanorc. Diese kann man als Vorlage zu einer eigenen Konfiguration verwenden um z.B. Farbgebung, Mausaktivität und sogar Syntax Highlighting zu konfigurieren. Mit dem folgenden Befehl erzeugt man im Home-Verzeichnis eine Kopie.

cp /etc/nanorc ~/.nanorc

Bei OpenSuse und Debian ist Farbgebung und das Syntax Highlighting deaktiviert: In /etc/nanorc (bzw., wenn man eine Kopie erzeugt hat, in ~/.nanorc) sind die erforderlichen Einträge zwar vorhanden, aber durch eine vorangestellte Raute auskommentiert. Das kann man mit folgendem Kommando sehr schnell beheben:

sed -i "s/^# include/include/" ~/.nanorc

Für erweiteretes oder angepasstes Syntax Highlighting, wenn man die Farbgebung für die einzelnen Sprachen anpassen möchte, kopiert man die Dateien aus /usr/share/nano/ ins eigene Home-Verzeichnis, zum Beispiel in ein verstecktes Verzeichnis namens ~/.nano und passt sie dann in einem Texteditor an. Danach bindet man diese Syntaxdateien dann in der Datei ~/.nanorc über include ein.

Verschlüsselung:

 

Versions Kontrolle:

 

VPN:>

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 16:36


Überwachung von Dateien und Verzeichnisänderungen unter Linux mit fswatch

fswatch ist ein einfacher plattformübergreifender Dateiänderungs-Monitor für die Befehlszeile, der Benachrichtigungen erält, wenn der Inhalt der angegebenen Dateien oder Verzeichnishierarchien geändert oder modifiziert werden. Er führt vier Arten von Überwachungen auf verschiedenen Betriebssystemen aus, wie z.B.:

  • Ein Monitor, der auf der Dateisystem-Ereignis-API von Apple OS X aufbaut.
  • Ein Monitor, der auf kqueue basiert, einer Benachrichtigungsschnittstelle, die in FreeBSD 4.1 ebenfalls auf vielen *BSD-Systemen, einschließlich OS X, unterstützt wird.
  • Ein Monitor, der auf der File Events Notification API des Solaris-Kernels und seiner Ausgründungen basiert.
  • Ein Monitor, der auf inotify basiert, einem Kernel-Subsystem, das Änderungen am Dateisystem von Anwendungen anzeigt.
  • Ein Monitor basierend auf ReadDirectoryChangesW, einer Windows-API, die Änderungen in einem Verzeichnis aufzeichnet.
  • Ein Monitor, der regelmäßig den Status des Dateisystems überprüft, die Änderungszeiten der Dateien im Speicher hält und Änderungen am Dateisystem manuell ermittelt (was überall funktioniert, wo stat verwendet werden kann).

Die Features von fswatch:
Es Unterstützt mehrere betriebssystemspezifische APIs und ermöglicht rekursive Verzeichnisüberwachung. Es führt Pfadfilterung durch, indem es reguläre Ausdrücke einschließt und ausschließt. Es unterstützt anpassbare Datensatzformate und periodische Leerlauf-Ereignisse.
So kann man fswatch in Linux-Systemen installieren:
Leider ist das fswatch-Paket nicht für die Installation aus den Standard-System-Repositories in allen Linux-Distributionen verfügbar. Die einzige Möglichkeit, die neueste Version von fswatch zu installieren, besteht darin, sich aus den Quellen die Applikation selbst zu kompilieren, wie in der folgenden Installationsanleitung beschrieben:

Zuerst die neueste fswatch tar Datei mit folgendem wget Befehl holen und wie gezeigt installieren:

$ wget https://github.com/emcrisostomo/fswatch/releases/download/1.11.3/fswatch-1.11.3.tar.gz
$ tar -xvzf fswatch-1.11.3.tar.gz
$ cd fswatch-1.11.3
$ ./configure
$ make
$ sudo make install 

Wichtig:
Sicherstellen, dass die GNU GCC (C und C++ Compiler) und Entwicklungswerkzeuge (auf Debian/Ubuntu) auf dem System installiert sind, bevor fswatch aus dem Quelltext kompiliert wird. Wenn nicht, wird es mit folgenden Befehlen auf den jeweiligen Linux-Distributionen installiert:

# yum group install 'Development Tools' [On CentOS/RHEL] 
# dnf group install 'Development Tools' [On Fedora 22+ Versions] 
$ sudo apt-get install build-essential [On Debian/Ubuntu Versions] 

Auf Debian/Ubuntu-Distributionen kann es beim Ausführen des Befehls fswatch zu folgendem Fehler kommen:

fswatch: error while loading shared libraries: libfswatch.so.6: cannot open shared object file: No such file or directory

Um dies zu beheben, muss man die Links und den Cache zu den dynamischen Bibliotheken aktualisieren, bevor fswatch verwendet werden kann. Dies erledigt man mit folgendem Befehl:

$ sudo ldconfig

Benutzung von fswatch unter Linux
Die allgemeine Syntax für die Ausführung von fswatch ist:

$ fswatch [option] [path]

Unter Linux wird empfohlen, den Standardmonitor inotify zu verwenden. Die verfügbaren Monitore können mit der Option -M oder - list-monitors aufgelistet werden:

$ fswatch -M
$ fswatch --list-monitors

Mit dem folgenden Befehl kann man Änderungen im aktuellen Verzeichnis z.B. /home/user verfolgen, wobei die Ereignisse alle 4 Sekunden an die Standardausgabe gesendet werden. Mit der Option -l oder --latency kann man die Latenzzeit in Sekunden einstellen, die Standardeinstellung ist 1 Sekunde.

$ fswatch -l 4 . 

fswatch - Änderungen im Home-Verzeichnis überwachen Dieser Befehl überwacht alle 5 Sekunden die Änderungen an der Datei /var/log/auth.log:

$ fswatch -l 5 /var/log/auth.log 

Mit der Option -t oder --timestamp wird der Zeitstempel für jedes Ereignis gedruckt, um die Uhrzeit im UTC-Format zu drucken, muss die Option -u oder --utf-time verwendet wwerden. Man kann die Zeit auch mit der Option -f oder --format formatieren:

$ fswatch --timestamp /var/log/auth.log

Als nächstes weist -x oder --event-flags fswatch an, die Ereignisflags neben dem Ereignispfad zu drucken. Man kann die Option -event-field-seperator verwenden, um Ereignisse mit dem entsprechenden Trennzeichen auszugeben.

$ fswatch --events-flags ~ /var/log/auth.log

Um den numerischen Wert eines Ereignisses auszugeben, das Änderungen im Heimatverzeichnis und der Datei /var/log/auth.log anzeigt, verwendet man die Option -n oder --numeric wie unten beschrieben:

$ fswatch --numeric ~ /var/log/auth.log

Weitere detaillierte Verwendungsmöglichkeiten und Informationen findet man in der fswatch-Manualseite:

$ man fswatch

oder direkt im fswatch Github Repository

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:20


Debian mit fail2ban gegen Brute-Force und DDoS Attacken absichern

Fail2Ban ist ein kleines, ressourcenschonendes Programm, das Logfiles verschiedenster Programme (z.B.: Apache, ssh, postfix …) überwacht und basierend auf Einträgen in den Logfiles Ereignisse auslöst. Ein sogenannter "Logparser". Zusammen mit einem ssh-Server können damit z.B. die Anzahl der Einloggversuche begrenzt werden. Die Verwendung von Fail2Ban ist aber noch viel universeller. Gerade auf Mehrbenutzersystemen ist es oft nicht möglich den ssh-Port zu verändern weil viele Benutzer einfach auf den Rechner zugreifen müssen. Leider können auch Angreifer relativ leicht in das System durch die Brute-Force-Methode einbrechen, indem sie einfach solange Kombinationen aus Benutzername und Passwort ausprobieren, bis sie ein passendes Paar gefunden haben. Das Programm fail2ban verhindert genau dieses "ausprobieren". Es untersucht die Logfiles des Systems nach fehlgeschlagenen Loginversuchen und sperrt dann die Internetadresse (IP) des Angreifers für eine gewisse Zeit.

sudo apt-get update
sudo apt-get install fail2ban

Danach kann eine eigene Konfigurationsdatei /etc/fail2ban/jail.local angelegt werden, welche die Voreinstellungen der /etc/fail2ban/jail.conf überschreibt. Oder man erstellt sich am Besten einfach eine Kopie der Standart Konfigurationsdatei, die man den gewünschten Anforderungen anpasst :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Wichtig:
Immer sich selber (eigene IP) in die ignore-ip "Whiteliste" der jail.conf eintragen, damit man sich nicht selber aussperrt oder ausgesperrt werden kann.

sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
 
# "ignoreip" kann eine IP-Adresse, eine CIDR-Maske oder ein DNS-Host sein. 
# Fail2ban wird nicht einen Host verbieten, der mit einer Adresse in dieser Liste übereinstimmt. 
# Mehrere Adressen können sein mit Leerzeichen (und/oder Komma) definiert werden.
# Daran denken immer einen Client Zugang für root lassen. 
# ignoreip = 127.0.0.1/8 192.168.0.11 (Hier wird die Whitelist definiert)  
ignoreip = 127.0.0.1/8 192.168.0.1/24 148.251.187.218 87.138.XXX.XXX 217.110.XX.XXX 217.110.XX.XXX
 
# "bantime" is the number of seconds that a host is banned.
#bantime = 604800 # (= eine Woche)
#bantime = 86400  # (= ein Tag)
#bantime = 600     #(= 10 Minuten)
bantime  = 3600   # (=1 Stunde)
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds. 
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
 
#
# JAILS
#

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
#
# SSH servers
# 

[ssh]
enabled  = true
port     = ssh,https
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

[ssh-ddos] enabled = true port = ssh,https filter = sshd-ddos logpath = /var/log/auth.log bantime = 604800 maxretry = 2 [sshd] # SSH Login absichern enabled = true logpath = /var/log/auth.log maxretry = 3

Dienst neu starten:

sudo service fail2ban restart 
# oder 
sudo /etc/init.d/fail2ban restart

Folgende Einträge sollten in der jail.local immer aktiviert sein:

ssh
dropbear
pam-generic
ssh-dos
apache all

Alle Bans werden in der /var/log/fail2ban.log gespeichert. Und wir ermitteln wir die Login Versuche aus der log /var/log/apache2/error.log oder entsprechende andere Log's.

tail -f /var/log/apache2/error.log  #(realtime zuschauen)

Nachschauen welche Regeln durch Fail2Ban definiert wurden:

iptables -L

Status Prüfen:

sudo fail2ban-client status

Oder speziell nur den fail2ban Status apache:

sudo fail2ban-client status apache

Man kann IP-Adressen auch manuell sperren oder aufheben. Zum Beispiel, um eine IP-Adresse (192.168.10.15) mit einer apache-JAIL Regel auszusperren:

sudo fail2ban-client set apache banip 192.168.10.15

Dies kann auch wieder entsperrt werden.

sudo fail2ban-client set apache unbanip 192.168.10.15

Auf diese Weise kann man schnell Fail2ban testen, ob es wie erwartet funktioniert oder nicht. Die Verwendung von fail2ban ist ein guter und einfacher Weg, um DDoS Attacken und Brute-Force-Angriffe zu stoppen. Es ist auch eine gute Möglichkeit, die Anzahl der Bad Requests, die man erhält, zu begrenzen. LOG's anschauen und reagieren Wöchentlich sollte man eigentlich bei einem Produktivserver die LOGS in /var/log auswerten und evt. Reaktionen tätigen.
Weitergehende Infos:
https://linuxwiki.de/Fail2Ban
https://wiki.ubuntuusers.de/fail2ban/
https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 09:44


MySQL Dump mit Skript ausführen

Auch von Datenbanken sollten regelmässig Backups erstellt werden. Um ein Backup einer Datenbank oder gleich mehreren anzulegen empfiehlt sich mysqldump. Es gibt auch die Möglichkeit ein Backup mit phpmyadmin oder ähnlichen Frontends anzufertigen. Allerdings müssen diese oft extra installiert werden und bei umfangreichen Datenbanken stösst man schnell an Einschränkungen wie z.B PHP-Timeouts. Mysql/MariaDB bringt bei der Installation schon die nötigen Backup-Tools mit. Daher müssen diese nicht extra installiert werden.
Das dump_databases.sh - Script sichert mittels mysqldump alle bekannten Datenbanken (db1_1, db2_2 und db3_3 ...) in /root/mysql_backup in den Unterordner /act und rotiert ggf. vorher /act nach /prev.
Scriptdatei: dump_databases.sh in /root/

#!/bin/bash

# variables
cnf_file="/root/.mysql_dump.cnf"
save_to="/root/mysql_backup"
db_directory=$1
db_list="db1_1 db2_2 db3_3"

# check if save directory exists
if [ ! -d ${save_to} ]; then
	mkdir -p ${save_to}
fi

# set rights for it
chmod 0700 ${save_to}

# log start
date +"%Y-%m-%d %H:%M:%S: *** starting db backup script" >> ${save_to}/dump.log

# check if 'prev' directory exists
if [ -d "${save_to}/prev" ]; then

	# delete previous backup
	date +"%Y-%m-%d %H:%M:%S: delete /prev" >> ${save_to}/dump.log
	rm -fR ${save_to}/prev
fi

# check if 'act' directory exists
if [ -d "${save_to}/act" ]; then

	# move actual to previous backup
	date +"%Y-%m-%d %H:%M:%S: move /act to /prev" >> ${save_to}/dump.log
	mv ${save_to}/act ${save_to}/prev
fi

# create 'act' directory
date +"%Y-%m-%d %H:%M:%S: create /act" >> ${save_to}/dump.log
mkdir -p ${save_to}/act

# run through db directory
for db_name in ${db_list}; do

    # if name of db exists as directory
	if [[ -d "${db_directory}/${db_name}" ]]; then

		# append log
		date +"%Y-%m-%d %H:%M:%S: dump ${db_name} to /act" >> ${save_to}/dump.log
		
		# Je nach Serverauslastung und Datenbankgroesse gibt es unterschiedliche Möglichkeiten (plain, gzip, xz, bzip2) das SQL zu komprimieren.
                # Aus eigenen Messungen einer 5GB und 200GB großen, bereits teilkomprimierten DB ist xz -1 der beste Kompromiss aus Kompressionlevel 
                # und -geschwindigkeit (Auf -1 ist xz 3x schneller als bzip2 bei nur ca. 9% größerem Archiv.). 
                # Daher ist das auch standardmässig im Script voreingestellt. Falls eine andere Kompression gewünscht ist, einfach die jeweilige Zeile 
                # in der dump_databases.sh ein- und alle andere auskommentieren, bzw. ändern

		# dump db plain to sql file
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} > ${save_to}/act/${db_name}.sql 2>> ${save_to}/dump.log

		# dump db to gzip file (very fast, low compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | gzip > ${save_to}/act/${db_name}.sql.gz 2>> ${save_to}/dump.log

		# dump db to xz file (normal to very slow, great compression)
		mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | xz -1 > ${save_to}/act/${db_name}.sql.xz 2>> ${save_to}/dump.log

		# dump db to bzip2 file (slow, good compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | bzip2 > ${save_to}/act/${db_name}.sql.bz2 2>> ${save_to}/dump.log
	fi
done


# log finish
date +"%Y-%m-%d %H:%M:%S: finished db backup script" >> ${save_to}/dump.log

exit 0

ausführen als root:

Folgendes ist als als root allerdings vorher durchzuführen, damit mysqldump per crontab gestartet wird. Ggf. muss die Angabe zum Pfad des MySQL-Verzeichnisses (default: /var/lib/mysql ) im folgeden angepasst werden. Das Script braucht den Pfad um vor dem Dump zu prüfen, welche der DBs existiert.

cd ~
 
# Optional externer Download des Scripts vom anderen Server (for root only)
# wget -nv -N http://my_own_github_archive.int/debianinstall/server/dump_databases.sh

chmod 0700 dump_databases.sh
chmod +x dump_databases.sh

# create crontab.txt to define CronJobs
printf "# dumping databases mondays and fridays at 03:00\n" >> /root/crontab.txt
printf "0  3 * * 1 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
printf "0  3 * * 5 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
 
# set crontab configruation with crontab.txt (list actual config with crontab -l)
crontab crontab.txt
 
# create .mysql_dump.cnf and make it only accessable to root (don't write a password in command line, edit it in file)
printf "[client]\n" > /root/.mysql_dump.cnf
printf "host     = localhost\n" >> /root/.mysql_dump.cnf
printf "user     = root\n" >> /root/.mysql_dump.cnf
printf "password = \n" >> /root/.mysql_dump.cnf
printf "socket   = /var/run/mysqld/mysqld.sock" >> /root/.mysql_dump.cnf
chmod 0600 .mysql_dump.cnf

In der erstellten .mysql_dump.cnf bitte manuell das MySQL-Passwort setzen: /root/.mysql_dump.cnf
[client]
host = localhost
user = root
password = Mein_Passwort
socket = /var/run/mysqld/mysqld.sock

Verfasser: Andreas Preuss
Letzte Änderung: 05-06-2018 17:07


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Anpassung der Linux Bash-Prompt Eingabe mit tput

Das Aussehen des Bash Promptes wird in der Variablen PS1 in der Datei ~/.bashrc festgelegt. Die PS1 Variable besteht im einfachsten Fall aus einer Zeichenkette. Zum Beispiel:

PS1='MyPrompt >'
# oder einfach nur
PS1='>'
# Es können aber auch Befehle benutzt werden.
PS1='´pwd´ >'
# Hier würde zum Beispiel das aktuelle Arbeitsverzeichniss gefolgt von einem Leerzeichen und dem größer Zeichen als Prompt angezeigt werden.

In diesem Beispiel wird der Username (\u), Hostname (\h) und der Vollständige Pfad des aktuellen Arbeitsverzeichnisses (\w) angezeigt.

PS1="\u@\h \w> "

Mit dem Linux Befehl tput lassen sich hier auf sehr einfache Weise Color und Cursor Verhalten anpassen:

$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"

In der PS1-Umgebungsvariablen kann man jeden beliebigen Linux-Befehl direkt ausführen, indem man ihn im Format $(linux_command) angibt. Im folgenden Beispiel wird der Befehl $(date) ausgeführt, um die aktuelle Uhrzeit in der Eingabeaufforderung anzuzeigen.

PS1="\u@\h [\$(date +%k:%M:%S)]> " # Formatierte Zeitausgabe
# oder
PS1="\u@\h [\t]> " # hh:mm:ss Format
# oder
PS1="[\@] \u@\h> " # 12-Stunden (am/pm) Format

Aber auch in Scripten oder einfach so im Terminal hat man vielleicht den Wunsch eine Hervorhebung der Textausgabe durchführen zu können. Dies geht sehr bequem mit dem tput Befehl und seinen Einstellungsparametern:

tput Zeilen- Spalten- und Cursorposition:
    tput cols
    tput lines
    tput cup 6 8 - Cursorposition einstellen
    tput cnorm - Cursor anzeigen
    tput civis - Cursor verstecken

tput Farbeinstellungs Eigenschaften:

    tput setab [1-7] - Setzen der Hintergrundfarbe mittels ANSI-Escape
    tput setb  [1-7] - Setzen der Hintergrundfarbe
    tput setaf [1-7] - Setzen der Vordergrundfarbe mittels ANSI-Escape
    tput setf  [1-7] - Setzen der Vordergrundfarbe

tput Text Mode Eigenschaften:

    tput bold - Fettdruck einstellen
    tput dim  - halbhellen Modus einschalten
    tput smul - Unterstreichung starten
    tput rmul - Unterstreichung verlassen
    tput rev  - Umkehrung einschalten
    tput smso - In den Hervorgehobenen-Modus wechseln (Fettdruck bei rxvt)
    tput rmso - Verlassen des Standout-Modus
    tput sgr0 - Alle Attribute ausschalten

    tput reset - Alle Einstellungen zurücksetzen

Beispiel:

echo 'tput smul'Unterstrichen'tput rmul'

Farb-Codes für tput:
0=Schwarz, 1=Rot, 2=Grün, 3=Gelb, 4=Blau, 5=Magenta, 6=Cyan, 7=Weiß
tput ermöglicht es auch, eine Reihe von Befehlen gleichzeitig auszuführen. Wenn man beispielsweise den Bildschirm löschen und den Cursor auf eine bestimmte Position setzen möchte, kann man wie folgt vorgehen:

$ tput -S < clear
> cup 2 4
> END

Hinweis: Wenn man Vorder- und Hintergrund des Terminals auf die gleiche Farbe setzt, kann man den Cursor nicht mehr sehen. Zum Zurücksetzen "tput reset" ausführen.

Verfasser: Andreas Preuss
Letzte Änderung: 06-06-2018 16:54


MariaDB Performance Optimierung

Heute sind MySQL und MariaDB eines der am häufigsten verwendeten RDBMS für Webanwendungen wie WordPress, Joomla, Magento und andere. Diese Beschreibung zeigt einige grundlegende, aber nützliche Tipps, wie man die Leistung von MySQL/MariaDB optimieren könnte. Wir gehen hierbei davon aus, dass bereits MySQL oder MariaDB installiert wurde.
Jedes MySQL-Setup ist einzigartig und erfordert zusätzliche Überlegungen, bevor Änderungen vorgenommen werden. Die MySQL/MariaDB-Konfigurationsdatei befindet sich in /etc/my.cnf. Jedes Mal, wenn diese Datei geändert wird, muss auch der MySQL-Dienst neu gestartet werden, damit die neuen Änderungen wirksam werden.

# So kann man den MySQL Server neu starten:
 /etc/init.d/mysql restart

# So kann man den Server anhalten:
/etc/init.d/mysql stop

# So kann man den MySQL Server starten nachdem er gestoppt wurde 
/etc/init.d/mysql start

Swappiness in MySQL vermeiden
Swapping ist ein Prozess, der auftritt, wenn das System einen Teil des Speichers auf einen speziellen Speicherplatz namens "swap" verschiebt. Das Ereignis wird normalerweise angezeigt, wenn der physische Speicher Ihres Systems erschöpft ist und das System die Informationen auf die Festplatte verschoben hat, anstatt etwas RAM freizugeben. Die Festplatte ist viel langsamer als das RAM.
Standardmässig ist die Option aktiviert:

# sysctl vm.swappiness 
vm.swappiness = 60

# Um Swappiness zu deaktivieren, ändert man den Eintrag auf:
sysctl -w vm.swappiness=0

MySQL Max-Verbindungen einstellen
Die Direktive max_connections sagt dem Server, wie viele gleichzeitige Verbindungen erlaubt sind. Der MySQL/MariaDB-Server erlaubt den in max_connections + 1 angegebenen Wert für Benutzer mit SUPER-Privilegien. Die Verbindung wird nur für die Zeit geöffnet, in der die MySQL-Abfrage ausgeführt wird - danach wird sie geschlossen und eine neue Verbindung kann an ihre Stelle treten. Zu viele Verbindungen können eine hohe RAM-Auslastung verursachen und den MySQL-Server sperren. Normalerweise benötigen man für kleine Websites zwischen 100-200 Verbindungen, während größere Websites 500-800 oder mehr benötigen. Der Wert, den man hier verwendet, hängt stark von der speziellen MySQL/MariaDB-Nutzung ab.
So kann man den Wert von max_connections dynamisch ändern, ohne den MySQL-Dienst neu starten zu müssen:

# mysql -u root -p
mysql> set global max_connections := 300;

MySQL thread_cache_size konfigurieren
Die Direktive thread_cache_size legt die Anzahl der Threads fest, die der Server zwischenspeichern soll. Wenn der Client die Verbindung trennt, werden seine Threads in den Cache gestellt, wenn sie kleiner als die thread_cache_size sind. Weitere Anfragen werden durch die Verwendung der im Cache gespeicherten Threads abgeschlossen. Um Ihre Performance zu verbessern, kann man die thread_cache_size auf eine relativ hohe Zahl setzen. Um die Thread-Cache-Trefferrate zu ermitteln, kann man die folgende Technik verwenden:

mysql> show status like 'Threads_created';    # Threads_erzeugt
mysql> show status like 'Connections';        # Verbindungen

Folgende Formel kann nun angewendet werden, um den Prozentsatz der Thread-Cache-Trefferrate zu berechnen:

100 - ((Threads_erzeugt / Verbindungen) * 100)

Wenn man eine niedrige Zahl erhält, bedeutet das, dass die meisten der neuen mysql-Verbindungen einen neuen Thread starten, anstatt aus dem Cache zu laden. In solchen Fällen würde man sicherlich die thread_cache_size erhöhen wollen. Das Gute dabei ist, dass die thread_cache_size dynamisch geändert werden kann, ohne dass der MySQL-Dienst neu gestartet werden muss. Dies kann man so erreichen:

mysql> set global thread_cache_size = 16;

Deaktivieren des MySQL Reverse DNS-Lookups
Standardmäßig führt MySQL/MariaDB einen DNS-Lookup der IP-Adresse/Hostname des Benutzers durch, von dem die Verbindung kommt. Für jede Client-Verbindung wird die IP-Adresse überprüft, indem sie in einen Hostnamen aufgelöst wird. Danach wird der Hostname wieder in eine IP aufgelöst, um sicherzustellen, dass beide übereinstimmen. Dies kann leider zu Verzögerungen bei schlecht konfiguriertem DNS oder Problemen mit dem DNS-Server führen. Aus diesem Grund könnte man den Reverse-DNS-Lookup deaktivieren, indem man folgendes in der Konfigurationsdatei hinzufügt:

[mysqld]
# Skip reverse DNS lookup of clients
skip-name-resolve

Nach dieser Änderung nicht vergessen den MySQL Dienst neu zu starten.

MySQL query_cache_size konfigurieren
Wenn man viele sich wiederholende Abfragen hat und sich die Daten nicht oft ändern, könnte man den Query-Cache anpassen. Oft wird das Konzept hinter der query_cache_size nicht verstanden und man setzt diesen Wert auf Gigabyte, was zu einer Verschlechterung der Performance führt. Der Grund dafür ist die Tatsache, dass Threads den Cache während der Updates sperren müssen. Normalerweise sollte ein Wert von 200-300 MB mehr als ausreichend sein. Wenn die Website relativ klein ist, kann man versuchen, den Wert von 64M zu erhöhen und die Zeit etwas verlängern. Folgenden Einstellungen können in der MySQL-Konfigurationsdatei vorgenommen werden:

query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M

tmp_table_size und max_heap_table_size konfigurieren
(Nur bei Verwendung von MyISAM) Beide Direktiven sollten die gleiche Größe haben und das Schreiben auf Datenträgern möglichst verhindern. Die tmp_table_size ist die maximale Größe der internen In-Memory-Tabellen. Bei Überschreitung des betreffenden Limits wird die Tabelle in die MyISAM-Tabelle auf der Festplatte konvertiert. Dies wirkt sich auf die Performance der Datenbank aus. Empfehlung in der Regel die Angabe von 64M für beide Werte für jedes GB RAM auf dem Server.

[mysqld]
tmp_table_size= 64M
max_heap_table_size= 64M

Aktivieren von MySQL Slow Query Logs
Das Protokollieren langsamer Abfragen kann helfen, Probleme mit der Datenbank zu ermitteln und diese zu beheben. Dies kann einfach durch Hinzufügen der folgenden Werte in der MySQL-Konfigurationsdatei aktiviert werden:

slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1

Die erste Direktive ermöglicht die Protokollierung von langsamen Abfragen, während die zweite Direktive MySQL sagt, wo die eigentliche Protokolldatei gespeichert werden soll. Verwendet man long_query_time, um die Zeitspanne zu definieren, die als lang angesehen wird, bis die MySQL-Abfrage abgeschlossen ist.

Überprüfen auf ungenutzte MySQL-Verbindungen (Idle Connections)
Leere Verbindungen verbrauchen Ressourcen und sollten nach Möglichkeit unterbrochen oder aufgefrischt werden. Solche Verbindungen befinden sich im "Schlaf"-Zustand und bleiben in der Regel über einen längeren Zeitraum erhalten. Um nach leeren Verbindungen zu suchen, kann man den folgenden Befehl ausführen:

# mysqladmin processlist -u root -p | grep "Sleep"

Dies gibt eine Liste der Prozesse, die sich im Ruhezustand befinden aus. Das Ereignis erscheint, wenn der Code eine persistente Verbindung zur Datenbank verwendet. Bei Verwendung von PHP kann dieses Ereignis bei Verwendung von mysql_pconnect auftreten, das die Verbindung öffnet, danach Abfragen ausführt, die Authentifizierung entfernt und die Verbindung offen lässt. Dies führt dazu, dass alle Puffer pro Thread im Speicher gehalten werden, bis der Thread stirbt. Das erste, was Sie hier tun wäre, ist, den Code zu überprüfen und zu reparieren. Wenn man keinen Zugriff auf den ausgeführten Code hat, sollte man die wait_timeout-Direktive ändern. Der Standardwert ist 28800 Sekunden. Man kann ihn sicher auf etwa 60 Sekunden reduzieren:

wait_timeout=60

MySQL max_allowed_packet setzen
MySQL teilt Daten in Pakete auf. Normalerweise wird ein einzelnes Paket als eine Zeile betrachtet, die an einen Client gesendet wird. Die Direktive max_allowed_packet definiert die maximale Paketgröße, die gesendet werden kann. Wenn man diesen Wert zu niedrig setzt, kann eine Abfrage zum Stillstand kommen und man erhält einen Fehler im MySQL-Fehlerprotokoll. Es wird empfohlen, den Wert auf die Größe des größten Pakets zu setzen. Änderung in der Datei my.ini oder ~/.my.cnf, indem man die einzelne Zeile unter [mysqld] die Datei aufnimmt:

nano /etc/mysql/my.cnf
max_allowed_packet=500M # (natürlich individuell, je nachdem was man braucht) unter der Sektion [MYSQLD]!  Nur am unteren Rand der Datei zu platzieren, funktioniert nicht!
# So kann die Einstellung sofort für alle geändert werden, bis der Server neu startet:
SET GLOBAL max_allowed_packet=1073741824;

MySQL-Leistungstuning prüfen
Die Messung der MySQL/MariaDB-Performance sollte man regelmäßig durchführen. Dies zeigt immer auf, ob sich etwas in der Ressourcennutzung ändert oder verbessert werden muss. Für das Benchmarking stehen viele Tools zur Verfügung, aber ich möchte Ihnen eines vorschlagen, das einfach und leicht zu bedienen ist. Das Tool heißt mysqltuner. Um es herunterzuladen und auszuführen, verwendet man den folgenden Befehlssatz: Quelle: https://github.com/major/MySQLTuner-perl/

# wget http://mysqltuner.pl/ -O mysqltuner.pl
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
# perl mysqltuner.pl
# oder
# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xf master
# cd MySQLTuner-perl/
# ./mysqltuner.pl 

Man erhält einen ausführlichen Bericht über den MySQL-Service und Empfehlungstipps.

Optimieren und Reparieren von MySQL-Datenbanken
Manchmal stürzen MySQL/MariaDB-Datenbanktabellen ziemlich leicht ab, besonders wenn der Server unerwartet heruntergefahren wird, plötzlich das Dateisystem beschädigt wird oder während des Kopiervorgangs, wenn noch auf die Datenbank zugegriffen wird. Überraschenderweise gibt es ein kostenloses Open-Source-Tool namens'mysqlcheck', das Datenbanken aller Tabellen unter Linux automatisch überprüft, repariert und optimiert.

# mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
# mysqlcheck -u root -p --auto-repair --check --optimize databasename
# oder
# mysqlcheck -u root -p --auto-repair -c -o your_database
# mysqlcheck -u root -p --auto-repair -c -o --all-databases

Wenn man nun wissen will, was der Befehl während der Prüfung macht, fügt man einfach dem Parameter --debug-info wie unten gezeigt hinzu. Dies ist hilfreich, wenn man z.B. eine große Tabelle überprüft.

# mysqlcheck --debug-info -u root -p --auto-repair -c -o your_database your_table
Enter password:
# Ausgabe z.B:
your_database.your_table  - Table is already up to date

User time 0.00, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 344, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 12, Involuntary context switches 9

 

Sämtliche Änderungen sollten in einer separaten Datei, die von der /etc/mysql/my.cnf includiert wird eingetragen werden, damit bei eventuellen Software Upgrades keine Einstellungen überschrieben werden können.
Ausgehend von meiner bisherigen MariaDB Erfahrung habe ich für meine Anforderungen in meine mariadb.conf Datei folgendes ergänzt:

# /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
#############################################
# Bessere CPU-Auslastung mittels pool-of-threads statt one-thread-per-connection
#  -> https://mariadb.com/kb/en/threadpool-in-55/
thread_handling         = pool-of-threads
 
# Die soll MariaDB selbstständig auf die Anzahl der Cores einstellen
#thread_pool_size       = 12
 
# Nach wie viel ms soll ein neuer Thread in einem Pool generiert werden, wenn der aktive Thread nicht fertig wird
thread_pool_stall_limit = 20
 
# Wie viele Thread sind pro Pool sind möglich
thread_pool_max_threads = 300
 
# Das ist noch unklar, doch trotz pool-of-threads limitiert weiterhin max_connections, daher hier pool_size * max_threads
max_connections         = 3600
interactive_timeout     = 1080
wait_timeout            = 360
 
# Mit diesen Port kann trotzdem zugegriffen werden, wenn alle Threads ausgeschöpft sind. Gut zur Administration
extra_port             = 3307
extra-max-connections  = 48

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 23:11


Nützliche Shell-Aliase für Linux / Unix & Mac OS X

Ein Bash-Alias ist nichts anderes als die Abkürzung zu Befehlen. Der Alias-Befehl erlaubt es dem Benutzer, einen beliebigen Befehl oder eine Gruppe von Befehlen (einschließlich Optionen und Dateinamen) durch Eingabe eines einzigen Wortes oder Zeichens zu starten. Verwende den Befehl alias, um eine Liste aller definierten Aliase in deinem System anzuzeigen. Man kann benutzerdefinierte Aliase zur ~/.bashrc-Datei hinzufügen. Mit diesen Aliasen hat man die Möglichkeit sich die Tippzeit verkürzen, intelligent zu arbeiten und die Produktivität an der Eingabeaufforderung zu erhöhen. Beispielsweise können lange Befehle, die man häufig braucht, durch eine kürzere Version ebenso benutzt werden. Dieser Faq-Beitrag zeigt, wie man Aliase erstellt und verwendet und gibt meiner Meinung ein paar praktische Beispiele für Bash-Shell-Aliase. Die allgemeine Syntax für den Alias-Befehl für die Bash-Shell lautet wie folgt:

alias
..
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
alias g-commit='git add . --all && git commit -a -m '
alias g-log='git log --pretty=format:"%h - %an, %ar : %s"'
alias g-stash='git add . --all && git stash save '
alias l='ls ${LS_OPTIONS} -lA'
alias ll='ls ${LS_OPTIONS} -l'
alias ls='ls ${LS_OPTIONS}'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...

Standardmässig zeigt der Befehl "alias" eine Liste von Aliasen an, die für den aktuellen Benutzer definiert sind. Um einen Alias zu erstellen, verwendet man die folgende Syntax:

alias name=value
alias name='command'
alias name='command arg1 arg2'
alias name='/path/to/script'
alias name='/path/to/script.pl arg1 arg2'

In diesem Beispiel ist Alias c für den häufig verwendeten Clear-Befehl, der den Bildschirm löscht, indem man nur den Buchstaben c eingibt und die ENTER-Taste drückt:

alias c='clear'

Wie man einen Bash-Alias löscht/entfernt
Aliase werden mit dem Befehl alias erstellt und aufgelistet und mit dem Befehl unalias entfernt. Die Syntax ist:

unalias aliasname
unalias c 
unalias foo

Hier sollte man auch den Alias aus der Datei ~/.bashrc mit einem Texteditor löschen.

Wie man Bash-Shell-Aliase dauerhaft macht
Der Alias c bleibt nur während der aktuellen Anmeldesitzung gültig. Sobald man sich ausloggt oder das System neu startet, ist der Alias c verschwunden. Um dieses Problem zu vermeiden, fügen man den gewünschten Alias in die eigene ~/.bashrc-Datei hinzu:

nano ~/.bashrc
# Der Alias c für den aktuellen Benutzer kann durch Eingabe der folgenden Zeile dauerhaft gemacht werden:
alias c='clear'

Datei speichern und schliessen. Systemweite Aliase (d.h. Aliase für alle Benutzer) können in die Datei /etc/bashrc mit root-Rechten eingetragen werden. Bitte beachten, der Alias-Befehl wird dann in verschiedene Shells eingebaut, darunter ksh, tcsh/csh, ash, bash und andere. Ein Hinweis zum privilegierten Zugriff Man kann folgenden Code in ~/.bashrc hinzufügen:

# if user is not root, pass all commands via sudo #
if [ $UID -ne 0 ]; then
    alias reboot='sudo reboot'
    alias update='sudo apt-get upgrade'
fi

OS-spezifische Aliase
Man kann den Code wie folgt in ~/.bashrc mit der case-Anweisung hinzufügen:

### Get os name via uname ###
_myos="$(uname)"
 
### add alias as per os using $_myos ###
case $_myos in
   Linux) alias foo='/path/to/linux/bin/foo';;
   FreeBSD|OpenBSD) alias foo='/path/to/bsd/bin/foo' ;;
   SunOS) alias foo='/path/to/sunos/bin/foo' ;;
   *) ;;
esac

Aliase sind benutzerabhängig. Dies bedeutet, dass jeder Benutzer für seinen Account beliebig viele Aliase anlegen kann. Andere Benutzer können von ihrem eigenen Account nicht auf diese Abkürzungen zugreifen. So kann jeder Benutzer seine individuellen Aliase einrichten. Außerdem kann ein Benutzer die Aliase des anderen Benutzers so nicht böswillig manipulieren. Natürlich gibt es auch viele Situationen, in denen ein Alias wirklich praktisch ist. So muss man zum Mounten einer CD je nach System entweder mount /cdrom wie bei Debian (und seinen Derivaten, z.B. Storm Linux und Corel Linux) und SUSE oder mount /mnt/cdrom wie bei Red Hat (und seinen Derivaten, z.B. Mandrake) eingeben. Man erspart sich Tipparbeit und vereinheitlicht das Ganze durch folgende Aliase:

alias cdrom="mount /cdrom" alias ucdrom="umount /cdrom"

Der auszuführende Befehl der Aliase ist natürlich anzupassen, wenn der Mountpunkt an einer anderen Stelle liegt. Wenn man bestimmte Folgen von Befehlen häufig eingibt, macht es immer Sinn, sich dafür einen Alias einzurichten. Mehrere Befehle können in der Bash durch ein Semikolon voneinander getrennt in eine Zeile geschrieben werden. Beispiel:

alias cdmnt="mount /mnt/cdrom; cd /mnt/cdrom; ls"

 

Im Folgenden habe ich weitere Beispiele aufgelistet, die als alias in Frage kommen könnten:

# Steuerung der ls Befehlsausgabe
# Der Befehl ls listet den Inhalt des Verzeichnisses auf und die Ausgabe wird eingefärbt:
## colrierung der ls Ausgabe ##
alias ls='ls --color=auto'
 
## Verwendung eines langen Listenformates ##
alias ll='ls -la'

## Zeige versteckte Dateien ##
alias l.='ls -d .* --color=auto'

# Steuerung des cd-Befehlsverhaltens
## Loswerden deR Meldung Befehl ist nicht vorhanden. ##
alias cd..='cd ..'

# Schnell aus dem Verzeichnis kommen
## ein schneller Weg, um aus dem aktuellen Verzeichnis herauszukommen. ##
alias ..='cd ..'
alias ...='cd ../../../'
alias ....='cd ../../../../'
alias .....='cd ../../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../..'

# Ausgabe des Steuerbefehls grep
## Der Befehl grep ist ein Befehlszeilenprogramm zum Durchsuchen von Klartextdateien nach Zeilen, die einem regulären Ausdruck entsprechen:
## Einfärben der Grep-Befehlsausgabe für einfache Bedienung (gut für Log-Dateien)##
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# Starte Rechner mit mathematischer Unterstützung
alias bc='bc -l'

# Sha1-Bericht erstellen
alias sha1='openssl sha1'

# Erstellen von übergeordneten Verzeichnissen bei Bedarf
## Der mkdir Befehl wird verwendet, um ein Verzeichnis zu erstellen:
alias mkdir='mkdir -pv'

# Diff-Ausgabe einfärben
## Man kann Dateien Zeile für Zeile mit diff vergleichen und ein Tool namens colordiff verwenden, um die Ausgabe einzufärben:
alias diff='colordiff'

# Macht die Ausgabe von Mount-Befehlen schön und lesbar.
alias mount='mount |column -t'

# Einfache Befehlskürzel zur Zeitersparnis
alias h='history'
alias j='jobs -l'

# Erstellen eines neuen Befehlssatzes
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias nowtime=now
alias nowdate='date +"%d-%m-%Y"'

# Den Editor vim als Standard setzen
alias vi=vim
alias svi='sudo vi'
alias vis='vim "+set si"'
alias edit='vim'

# Kontrollausgabe des Netzwerktools ping
## Stopt nach dem Senden der Anzahl der ECHO_REQUEST-Pakete (wie bei der Windows Eingabeaufforderung)#
alias ping='ping -c 5'
# Nicht abwarten Intervall 1 Sekunde, Schnellgang #
alias fastping='ping -c 100 -s.2'

# Zeige offene ports
## Verwendung des Befehls netstat, um schnell alle TCP/UDP-Ports auf dem Server aufzulisten:
alias ports='netstat -tulanp'

# Wakeup sleeping servers
# Wake-on-LAN (WOL) is an Ethernet networking standard that allows a server to be turned on by a network message. You can quickly wakeup nas devices and server using the following aliases:
## replace mac with your actual server mac address #
alias wakeupnas01='/usr/bin/wakeonlan 00:11:32:11:15:FC'
alias wakeupnas02='/usr/bin/wakeonlan 00:11:32:11:15:FD'
alias wakeupnas03='/usr/bin/wakeonlan 00:11:32:11:15:FE'

# Control firewall (iptables) output
# Netfilter is a host-based firewall for Linux operating systems. It is included as part of the Linux distribution and it is activated by default. This post list most common iptables solutions required by a new Linux user to secure his or her Linux operating system from intruders.
## shortcut  for iptables and pass it via sudo#
alias ipt='sudo /sbin/iptables'
 
# display all rules #
alias iptlist='sudo /sbin/iptables -L -n -v --line-numbers'
alias iptlistin='sudo /sbin/iptables -L INPUT -n -v --line-numbers'
alias iptlistout='sudo /sbin/iptables -L OUTPUT -n -v --line-numbers'
alias iptlistfw='sudo /sbin/iptables -L FORWARD -n -v --line-numbers'
alias firewall=iptlist

# Debug web server / cdn problems with curl
# get web server headers #
alias header='curl -I'
 
# find out if remote server supports gzip / mod_deflate or not #
alias headerc='curl -I --compress'

# Add safety nets
# do not delete / or prompt if deleting more than 3 files at a time #
alias rm='rm -I --preserve-root'
 
# confirmation #
alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
 
# Parenting changing perms on / #
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

# Update Debian Linux server
# apt-get wird für die Installation von Paketen über das Internet (ftp oder http) verwendet.
# Man kann somit auch alle Pakete in einem Arbeitsgang aktualisieren: # distro specific - Debian / Ubuntu and friends # # install with apt-get alias apt-get="sudo apt-get" alias updatey="sudo apt-get --yes" # update & upgrade on one command alias update='sudo apt-get update && sudo apt-get upgrade' # Update RHEL / CentOS / Fedora Linux server # yum command is a package management tool for RHEL / CentOS / Fedora Linux and friends: ## distrp specifc RHEL/CentOS ## alias update='yum update' alias updatey='yum -y update' # Tune sudo and su # become root # alias root='sudo -i' alias su='sudo -i' # Pass halt/reboot via sudo # shutdown command bring the Linux / Unix system down: # reboot / halt / poweroff alias reboot='sudo /sbin/reboot' alias poweroff='sudo /sbin/poweroff' alias halt='sudo /sbin/halt' alias shutdown='sudo /sbin/shutdown' # Control web servers # also pass it via sudo so whoever is admin can reload it without calling you # alias nginxreload='sudo /usr/local/nginx/sbin/nginx -s reload' alias nginxtest='sudo /usr/local/nginx/sbin/nginx -t' alias lightyload='sudo /etc/init.d/lighttpd reload' alias lightytest='sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -t' alias httpdreload='sudo /usr/sbin/apachectl -k graceful' alias httpdtest='sudo /usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS' # Alias into our backup stuff # if cron fails or if you want backup on demand just run these commands # # again pass it via sudo so whoever is in admin group can start the job # # Backup scripts # alias backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type local --taget /raid1/backups' alias nasbackup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01' alias s3backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01 --auth /home/scripts/admin/.authdata/amazon.keys' alias rsnapshothourly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotdaily='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotweekly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotmonthly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias amazonbackup=s3backup # Desktop specific play avi/mp3 files on demand ## play video files in a current directory ## # cd ~/Download/movie-name # playavi or vlc alias playavi='mplayer *.avi' alias vlc='vlc *.avi' # play all music files from the current directory # alias playwave='for i in *.wav; do mplayer "$i"; done' alias playogg='for i in *.ogg; do mplayer "$i"; done' alias playmp3='for i in *.mp3; do mplayer "$i"; done' # play files from nas devices # alias nplaywave='for i in /nas/multimedia/wave/*.wav; do mplayer "$i"; done' alias nplayogg='for i in /nas/multimedia/ogg/*.ogg; do mplayer "$i"; done' alias nplaymp3='for i in /nas/multimedia/mp3/*.mp3; do mplayer "$i"; done' # shuffle mp3/ogg etc by default # alias music='mplayer --shuffle *' # Set default interfaces for sys admin related commands ## vnstat is console-based network traffic monitor. dnstop is console tool to analyze DNS traffic. tcptrack and iftop commands displays information about TCP/UDP connections it sees on a network interface and display bandwidth usage on an interface by host respectively. ## All of our servers eth1 is connected to the Internets via vlan / router etc ## alias dnstop='dnstop -l 5 eth1' alias vnstat='vnstat -i eth1' alias iftop='iftop -i eth1' alias tcpdump='tcpdump -i eth1' alias ethtool='ethtool eth1' # work on wlan0 by default # # Only useful for laptop as all servers are without wireless interface alias iwconfig='iwconfig wlan0' # Get system memory, cpu usage, and gpu memory info quickly ## pass options to free ## alias meminfo='free -m -l -t' ## Den grössten Spreicherfresser über top ermitteln alias psmem='ps auxf | sort -nr -k 4' alias psmem10='ps auxf | sort -nr -k 4 | head -10' ## Die grössten CPU Belastungen aufrufen ## alias pscpu='ps auxf | sort -nr -k 3' alias pscpu10='ps auxf | sort -nr -k 3 | head -10' ## Server CPU Information ausgeben ## alias cpuinfo='lscpu' ## ältere Systeme verwenden: /proc/cpuinfo ## ## alias cpuinfo='less /proc/cpuinfo' ## # Control Home Router # The curl command can be used to reboot Linksys routers. # Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix. alias rebootlinksys="curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'" # Reboot tomato based Asus NT16 wireless bridge alias reboottomato="ssh admin@192.168.1.1 /sbin/reboot" # Resume wget by default # The GNU Wget is a free utility for non-interactive download of files from the Web. It supports HTTP, HTTPS, and FTP protocols, and it can resume downloads too: alias wget='wget -c' # different browser for testing website alias ff4='/opt/firefox4/firefox' alias ff13='/opt/firefox13/firefox' alias chrome='/opt/google/chrome/chrome' alias opera='/opt/opera/opera' #default ff alias ff=ff13 # default browser alias browser=chrome # A note about ssh alias # Do not create ssh alias, instead use ~/.ssh/config OpenSSH SSH client configuration files. It offers more option. An example: Host server10 Hostname 1.2.3.4 IdentityFile ~/backups/.ssh/id_dsa user foobar Port 30000 ForwardX11Trusted yes TCPKeepAlive yes You can now connect to peer1 using the following syntax: $ ssh server10 ## set some other defaults ## alias df='df -H' alias du='du -ch' # top is atop, just like vi is vim alias top='atop' ## nfsrestart - must be root ## ## refresh nfs mount / cache etc for Apache ## alias nfsrestart='sync && sleep 2 && /etc/init.d/httpd stop && umount netapp2:/exports/http && sleep 2 && mount -o rw,sync,rsize=32768,wsize=32768,intr,hard,proto=tcp,fsc natapp2:/exports /http/var/www/html && /etc/init.d/httpd start' ## Memcached server status ## alias mcdstats='/usr/bin/memcached-tool 10.10.27.11:11211 stats' alias mcdshow='/usr/bin/memcached-tool 10.10.27.11:11211 display' ## quickly flush out memcached server ## alias flushmcd='echo "flush_all" | nc 10.10.27.11 11211' ## Remove assets quickly from Akamai / Amazon cdn ## alias cdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai' alias amzcdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon' ## supply list of urls via file or stdin alias cdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai --stdin' alias amzcdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon --stdin'

Dieser Beitrag fasst verschiedene Arten der Verwendung von *nix bash-Aliasen zusammen: - Setzen von Standardoptionen für einen Befehl (z.B. eth0 als Standardoption für ethtool-Befehl über alias ethtool='ethtool eth0'). - Korrektur von Tippfehlern (cd... fungiert als cd... über den Alias cd..='cd...'). - Reduzierung der Tipparbeit. - Der Standardpfad eines Befehls, der in mehreren Versionen auf einem System existiert (z.B. GNU/grep befindet sich unter /usr/local/bin/grep und Unix grep unter /bin/grep. Um GNU grep zu verwenden, verwenden Sie den Alias grep='/usr/local/bin/grep' ). - Hinzufügen der Sicherheitsnetze zu Unix durch interaktive Befehle durch Setzen von Standardoptionen. (z.B. rm, mv und andere Befehle). - Kompatibilität durch Erstellung von Befehlen für ältere Betriebssysteme wie MS-DOS oder andere Unix-ähnliche Betriebssysteme (z.B. alias del=rm).

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 01:27


Elinks ein Text-basierender Webbrowser für die Konsole

ELinks ist nicht nur der coolste Kommandozeilen-Webbrowser. Tatsächlich ist es auch der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird und auch moderne Webseiten unterstützt. Entwickelt wurde der schlanke Textbrowser ELinks von Jonas Fonseca.

Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Ziel war es einen klassischen Open-Source Browser für die Konsole zu erstellen, der sehr flexibel ist und auch Frames und Tabellen darstellen kann. Da sich ELinks als einfacher Textbrowser nur auf die Texte und nicht auf Sripte, etc konzentriert ist ELinks so sicher wie kaum ein anderer Browser. Gerade die grafischen Browser liegen im Vergleich um Längen dahinter. Er kann zusätzlich an eigene Bedürfnisse angepasst und durch Perl-, Lua- oder Guile-Skripte erweitert werden. Webstandards sind nicht unbedeutend für ELinks, so beherrscht er eine Vielzahl von Protokollen, etwa HTTP, HTTPS, FTP (mit SSL Support) IPV4 oder auch darstellung lokaler Dateien. Zusätzliche Protokollunterstützung besteht für BitTorrent-Finger, Gopher, SMB und NNTP. Er beherrscht die Darstellung von Farben, beinhaltet eine Lesezeichenverwaltung, ermöglicht Tabbed-Browsing und stellt Tabellen und Franmes akurat dar. ELinks funktioniert unter Linux, FreeBSD, OpenBSD, Solaris, IRIX, HPUX, Digital Unix, AIX, OS/2, BeOS, RISC OS und MacOS X und ist auch meist verfügbar durch alle Linux/BSD-Paketmanager. Ein Port für Win32 befindet sich im Beta-Stadium. Download hier. Die Installation unter Debian oder Ubuntu zum Beispiel kann einfach über den Packetmanager vorgenommen werden:

sudo apt-get update
sudo apt-get install elinks

Zum starten kann man einfach elinks eingeben, oder auch gleich einen Domain-Namen hinzufügen:

elinks http://elinks.or.cz/  # elinks Homepage

Sobald man im Programm ist, kann man die Taste "g" verwenden, um die Adressleiste aufzurufen. Oder man drückt die Escape Taste. Damit öffnet man die Menüzeile. Weitere Tastaturbefehle:

g - URL aufrufen                  s - Lesezeichen
h - History                       o - Optionen (z.B. Einstellungen)
t - Neue Registerkarte öffnen     T - Link als neuen Tab öffnen
<> - Links/rechts verschieben     Home - zum Seitenanfang
End - zum Seitenende gehen        Links - zurückgehen
Rechts - Hyperlink folgen         Nach oben - vorheriger Hyperlink
Nach unten - nächster Hyperlink   / - Suche
\ - HTML ansehen                  [ - Scrollfenster nach links
] - Fenster nach rechts scrollen  c - Reiter schließen
q - beenden                       d - Hyperlink herunterladen
Strg r - Aktualisieren       

Die Datei /home/username/.elinks/elinks.conf enthält die Konfigurationsinformationen für ELinks. Damit kann man das Verhalten von ELinks auf vielfältige Weise konfigurieren: z.B.: Protokollverhalten, Tastaturbelegung, Farben für das Rendering und die Benutzeroberfläche. Die Datei wird beim Start gelesen und nur bei Bedarf gespeichert. Alle in diesem Dokument beschriebenen Optionen können in ELinks vollständig konfiguriert werden, so dass keine Bearbeitung von elinks.conf in der Regel erforderlich ist. Die Tastenbelegungen können auch in der elinks.conf angegeben werden.
SYNTAX
Die Syntax der Konfigurationsdatei ist sehr einfach. Die Datei elinks.conf ist eine freie ASCII-Textdatei, die im jeweiligen home Verzeichnis des Users abgespeichert wird. Die Datei kann zusätzliche Registerkarten und Zeilenumbrüche zur Formatierung enthalten. Schlüsselwörter in der Datei sind case-sensitive. Kommentare beginnen wie üblich mit dem Zeichen # und enden am Ende der Zeile:

# Use asynchronous DNS resolver?
set connection.async_dns = 1
# horizontal text margin.
set document.browse.margin_width = 3
# Default document codepage.
set document.codepage.assume = "ISO-8859-1"
# User defined protocol handlers
set protocol.user.mailto.unix = "mutt %h -s \"%s\""

Verfasser: Andreas Preuss
Letzte Änderung: 12-06-2018 16:10


Debian Systemzeit synchronisieren

Einige Debianserver betreibe ich in einer VM und habe oft nach einem Suspend das Problem, dass Datum und Uhrzeit nicht mehr aktuell sind. Oft greift die entsprechende Sync-Einstellung in den VMWare-Tools nicht. Es wäre also sinnvoll die Zeit Online über einen NTP Server synchronisieren zu können. Das NTP Protokoll ist dazu da, um die Zeit auf einem Server mit einem zentralen Zeitserver abzugleichen. Hierbei schafft die Installation eines NTP Daemons Abhilfe. Dieser ist bei den einzelnen Distributionen schon als Paket vorhanden und kann ganz einfach installiert werden.

sudo apt-get install ntp

Danach ist mit einem Editor der Wahl die Konfigurationsdatei /etc/ntp.conf zu öffnen und der Eintrag der Zeitserver anzupassen. Unter pool.ntp.org kann man sich zum Beispiel den für sich passenden NTP-Server heraussuchen.
Bei Debian Linux kann man beispielsweise folgende Server für Deutschland in die Datei /etc/ntp.conf einfügen bzw. die bestehenden mit "server" beginnenden Zeilen ersetzen:

server  ntp1.hetzner.de  iburst
server  ntp2.hetzner.com iburst
server  ntp3.hetzner.net iburst
server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Hier wird bei jedem Start des NTP Dienstes ein beliebiger deutscher Server abgefragt. Dies stellt sicher, daß die Anfragen über viele Server verteilt werden und erhöht gleichzeitig die Zuverlässigkeit. Abschliessend muss der ntpd noch neu gestartet werden.

service ntp restart

Es kann notwendig sein, dass man einmal nachdem man den NTP Server installiert hat, die Zeit manuell synchronisiert. Dies geht entweder mit ntpd oder mit ntpdate (muss bei Debian zusätzlich installiert werden):

service ntp stop  # NTP stoppen
ntpd -q -g        # synchronisieren
service ntp start # NTP wieder starten

Die Option -g bedeutet, dass ntpd auch synchronisiert, wenn die Zeit mehr als 1000 Sekunden abweicht.
Die Option -q bedeutet, dass ntpd nur einmal ausgeführt wird.

Absicherung
Da NTP ein UDP-basiertes Protokoll ist, kann es leicht für DDoS-Angriffe mißbraucht werden. Da bei falscher Konfiguration die Antwort größer als die Anfrage ausfällt, wird so ein Angriff verstärkt. Eine entsprechende Konfiguration, welche nur die deutschen NTP-Pool server nutzt, könnte wie folgt aussehen:

restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

restrict    127.0.0.1
restrict -6 ::1

server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Bei dieser Konfiguration sind Veränderungen und Statusabfragen nur noch lokal möglich. Zeitinformationen können mit und von jeder IP aus abgerufen werden. Alternativ ist es möglich alle Anfragen zu blockieren und Zeitinformationen nur mit explizit erlaubten Zeitservern auszutauschen. Folgendes Beispiel erlaubt nur den Austausch von Zeitinformationen mit den Hetzner NTP Servern

restrict    default ignore
restrict -6 default ignore

restrict    127.0.0.1
restrict -6 ::1

server ntp1.hetzner.de iburst
restrict    213.239.239.164 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a0a1::2:1 nomodify notrap nopeer noquery

server ntp2.hetzner.de iburst
restrict    213.239.239.165 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a101::2:3 nomodify notrap nopeer noquery

server ntp3.hetzner.de iburst
restrict    213.239.239.166 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a112::2:2 nomodify notrap nopeer noquery

Uhrzeit in Hardwareuhr schreiben
Damit der Server nach einem erneuten Booten mit einer völlig falschen Zeit hochkommt, kann man noch die Uhr in die Hardwareclock schreiben.

hwclock --systohc

Die Urzeit kann mit dem Befehl date ausgegeben werden:

# Tag (01 bis 31)
getDay=$(date "+%d")
	
# Wochentag (Montag bis Sonntag)
getDayName=$(date "+%A")
	
# Monat (01 bis 12)
getMonth=$(date "+%m")

# Monatsname (Januar bis Dezember)
getMonthName=$(date "+%B")
	
# Jahr (ab 1970)
getYear=$(date "+%Y")

# Jahr (kurz: 00 bis 99)
getYearShort=$(date "+%y")
	
# Stunde (kurz: 00 bis 23)
getHour=$(date "+%H")

# Minute (kurz: 00 bis 59)
getMinute=$(date "+%M")

# Sekunde (kurz: 00 bis 59)
getSecond=$(date "+%S")
	
# Format: HH:MM:SS
getTime=$(date "+%T")
	
# Format: DD.MM.YYYY HH:MM:SS
getDateTime=$(date "+%d.%m.%Y %T")

# Format: DD.MM.YYYY HH:MM:SS.Nanosekunden
# Beispiel: 2014-01-02 17:43:38.226981463
getDateTime=$(date "+%Y-%m-%d %T.%N")
	
# Dauer
startTime=$(date "+%s")
endTime=$(date "+%s")
runTime=$(echo $endTime - $startTime | bc)

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 17:21


Konsolenbefehle zum Arbeiten mit Git

Git ist eine Software zur Versionsverwaltung von Projekten. Man kann damit einfach zu alten Ständen zurückspringen oder mit mehreren Leuten an einem Projekt arbeiten. Git ist im Laufe der Zeit von allen anderen Versionskontrollsystemen für mich der Hauptfavorit geworden. Die meisten anderen Systeme wie (CVS, Subversion, Perforce, Bazaar usw.) betrachten die Informationen, die sie verwalten, als eine Menge von Dateien und die Änderungen, die über die Zeit hinweg an einzelnen Dateien vorgenommen werden.
Git betrachtet seine Daten eher als eine Reihe von Snapshots eines Mini-Dateisystems. Jedes Mal, wenn man committet (d.h. den gegenwärtigen Status des Projektes als eine Version in Git speichert), sichert Git den Zustand sämtlicher Dateien in diesem Moment („Snapshot“) und speichert eine Referenz auf diesen Snapshot. Um dies möglichst effizient und schnell tun zu können, kopiert Git unveränderte Dateien nicht, sondern legt lediglich eine Verknüpfung zu der vorherigen Version der Datei an. Dies ist ein wichtiger Unterschied zwischen Git und praktisch allen anderen Versionskontrollsystemen.

Installation
git für Linux herunterladen und installieren.
git für OS X herunterladen und installieren.
git für Windows herunterladen und installieren.

Einstellungen
Die Datei /etc/gitconfig ist die globale Konfigurationsdatei, die für jeden Anwender des Systems und all ihre Projekte gelten. Die Werte in der Datei ~/.gitconfig gelten ausschließlich für den User und all seine Projekte. Wenn man git config mit der Option --global verwendet, wird diese Datei verwendet. Die Datei .git/config im Git Verzeichnis eines Projektes enthält Werte, die nur für das jeweilige Projekt gelten. Diese Dateien überschreiben Werte aus den jeweils vorhergehenden Dateien in dieser Reihenfolge. D.h. Werte in beispielsweise .git/config überschreiben diejenigen in /etc/gitconfig.
Auf Windows Systemen sucht Git nach der .gitconfig Datei im $HOME Verzeichnis z.B.: C:\Dokumente und Einstellungen\$USER. Es schaut auch immer nach /etc/gitconfig.
E-Mail Adresse und Editor konfigurieren

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs
$ git help config # Weitere Hilfe zur Konfiguration

Dies ermöglicht, das push ausgeführt werden, ohne das branchname origin/branchname geschrieben werden muss ?!

git config --global push.default simple

Folgender Befehl definiert, wonach Line-Endings beim checkout konvertiert werden

git config --global core.eol lf

UTF-8 einstellen, wodurch auch Umlaute in Commits möglich sind

git config --global i18n.commitEncoding 'utf8'
git config --global i18n.logOutputEncoding 'utf8'

Init
Ein bare Repo auf repo.my_online_repo.de erstellen und ein neues lokales Repo master reinpushen:

mkdir -p ~/_pfad_zum_repo/reponame.git
cd ~/_pfad_zum_repo/reponame.git
git init --bare --shared
git config core.sharedRepository group
chown -R git:git ~/_pfad_zum_repo/reponame.git
chmod 0770 ~/_pfad_zum_repo/reponame.git

Danach wieder lokal weiter arbeiten und ein Verzeichnis zu einen GIT Repo umwandeln:

cd /_pfad_zum_repo/reponame
git init
git add .
git commit -m "Migrate to Git"
git remote add origin "ssh://username@repo.mobiletrend.de/~/_pfad_zum_repo/reponame.git"
git push origin master:master

Danach ist das lokale Git mit dem Remote Bare Repository verbunden, als würde es von dort geklont worden sein.

git branch -a

Um danach ein schlichtes git pull verwenden zu können, muss das lokale Repo noch wissen, mit welchem remote brachen es verbunden ist. Da vorher im master gepusht wurde, wäre also folgendes als Einstellung richtig:

git branch -u origin/master

Branch
Einen neuen Branch anlegen

git branch 
# ... oder anlegen und direkt in den Branch wechseln...
git checkout -b branchname

Einen neuen Branch anlegen, diesen von einem Remotebranch ableiten und tracken (womit pull/push funktioniert)

git branch -t branchname origin/branchname

Einen (neuen/lokalen) Branch pushen und das Tracking setzen, damit push/pull automatisch funktionieren

git push -u origin branchname

(pushes the "branchname" branch to "origin" remote and sets up tracking) Einen lokalen Branch löschen

git branch -d branchname

Einen remote Branch löschen

git push origin :branchname

Einen (temporären) lokalen Branch erstellen, der auf den Stand eines alten Commits ist. Dafür muss der Hashcode des Commits bekannt sein:

git checkout -b temp 95817e231b02686c8cf420bea54864aeea7348ff

Commit Fügt alle Dateien zum Index hinzu, und bemerkt auch alle gelöschten Dateien und Pfade:

git add . --all

Commit, der alle Files staged, und eine Bemerkung über die Veränderung anfügt

git commit -a -m "bla"

Merge Einen Branch auf Stand des Masters aktualisieren Ggf. funktioniert ein schlichtes merge ?

git checkout branchname
git merge master

Ein Vorteil gegenüber git rebase ist, das es die History des Branches nicht verändert, sondern nur eine Art Merge-Commit durchführt, wodurch der Branch dann auf Stand des Masters ist

git checkout master
git branch rebase_state
git checkout feature
git merge rebase_state
git branch -d rebase_merge

Ein Branch erstellen und auf den Stand eines anderen Branches bringen

git checkout master
git branch neuerbranch
git checkout neuerbranch
git merge andererbranch

Verfasser: Andreas Preuss
Letzte Änderung: 15-06-2018 16:59


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Microsoft » Outlook

Kopfzeilen Quelltext in Outlook 2010 und 2013 anzeigen

Kopfzeilen von E-Mail-Nachrichten enthalten eine Liste technischer Details zu einer Nachricht, beispielsweise den Absender, die zum Verfassen verwendete Software und die E-Mail-Server, die auf dem Weg zum Empfänger durchlaufen wurden. Anhand dieser Details kann man Probleme mit der E-Mail-Nachricht identifizieren oder die Quelle unerwünschter kommerzieller E-Mail-Nachrichten aufspüren. Bei Outlook 2010 und Outlook 2013 hat Microsoft das aus unerfindlichen Gründen noch etwas weiter versteckt.

Doppelklicken Sie die fragliche Mail an, um sie in einem separaten Fenster zu öffnen. 

Sie finden die Nachrichtenoptionen bzw. Eigenschaften im Reiter Nachricht an einem Ort, an dem Sie niemals gesucht hätten, nämlich unter den Kategorien. Klicken Sie im Bereich Kategorien aufs unscheinbare Symbol unten rechts. 

Alternativ kann man auch nach dem Öffnen der Mail im gleichen Fenster im Menü Datei die Eigenschaften wählen.

Ergebnis:

Verfasser: Andreas Preuss
Letzte Änderung: 24-10-2016 00:37


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Netzwerk

Subnetzmasken

Die Aufteilung eines zusammenhängenden Adressraums von IP-Adressen in mehrere kleinere Adressräume nennt man Subnetting. Ein Subnet, Subnetz bzw. Teilnetz ist ein physikalisches Segment eines Netzwerks, in dem IP-Adressen mit der gleichen Netzwerkadresse benutzt werden. Diese Teilnetze können über Routern miteinander verbunden werden und bilden dann ein großes zusammenhängendes Netzwerk.
Um die Netzlast sinnvoll und geordnet zu verteilen, werden Netzwerke in Abhängigkeit der örtlichen Gegebenheiten und/oder nach organisatorischen Gesichtspunkten aufgeteilt. Dabei wird auch berücksichtigt, wie viele Hosts sich innerhalb eines Subnetz befinden.
Die Berücksichtigung der physikalischen Netzstruktur durch die gezielte Vergabe von IP-Adressen und damit eine logische Zusammenfassung mehrerer Hosts zu einem Subnetz reduziert die Routing-Informationen auf die Angabe der Netzwerk-Adresse. Die Netzwerk-Adresse gewährleistet den Standort einer IP-Adresse in einem bestimmten Subnetz. Ein Router benötigt dann nur noch die Routing-Information zu diesem Subnetz und nicht zu allen einzelnen Hosts in diesem Subnetz. Der letzte Router, der in das Ziel-Subnetz routet, ist dann für die Zustellung des IP-Datenpakets verantwortlich.

Jede IP-Adresse teilt sich in Netz-Adresse und Host-Adresse. Die Subnetzmaske bestimmt, an welcher Stelle diese Trennung stattfindet. Die nachfolgende Tabelle enthält alle möglichen Subnetzmasken. Je nach verwendeter Netzwerk-Adresse und Subnetzmaske wird eine bestimmte Host-Anzahl in einem Subnetz adressierbar:

Hostanzahl Subnetzmaske 32-Bit-Wert Suffix
16777214 255.0.0.0 1111 1111 0000 0000 0000 0000 0000 0000 /8
8388606 255.128.0.0 1111 1111 1000 0000 0000 0000 0000 0000 /9
4194302 255.192.0.0 1111 1111 1100 0000 0000 0000 0000 0000 /10
2097150 255.224.0.0 1111 1111 1110 0000 0000 0000 0000 0000 /11
1048574 255.240.0.0 1111 1111 1111 0000 0000 0000 0000 0000 /12
524286 255.248.0.0 1111 1111 1111 1000 0000 0000 0000 0000 /13
262142 255.252.0.0 1111 1111 1111 1100 0000 0000 0000 0000 /14
131070 255.254.0.0 1111 1111 1111 1110 0000 0000 0000 0000 /15
65534 255.255.0.0 1111 1111 1111 1111 0000 0000 0000 0000 /16
32766 255.255.128.0 1111 1111 1111 1111 1000 0000 0000 0000 /17
16382 255.255.192.0 1111 1111 1111 1111 1100 0000 0000 0000 /18
8190 255.255.224.0 1111 1111 1111 1111 1110 0000 0000 0000 /19
4094 255.255.240.0 1111 1111 1111 1111 1111 0000 0000 0000 /20
2046 255.255.248.0 1111 1111 1111 1111 1111 1000 0000 0000 /21
1022 255.255.252.0 1111 1111 1111 1111 1111 1100 0000 0000 /22
510 255.255.254.0 1111 1111 1111 1111 1111 1110 0000 0000 /23
254 255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000 /24
126 255.255.255.128 1111 1111 1111 1111 1111 1111 1000 0000 /25
62 255.255.255.192 1111 1111 1111 1111 1111 1111 1100 0000 /26
30 255.255.255.224 1111 1111 1111 1111 1111 1111 1110 0000 /27
14 255.255.255.240 1111 1111 1111 1111 1111 1111 1111 0000 /28
6 255.255.255.248 1111 1111 1111 1111 1111 1111 1111 1000 /29
2 255.255.255.252 1111 1111 1111 1111 1111 1111 1111 1100 /30

Jeweils die erste und letzte IP-Adresse eines IP-Adressbereichs (z. B. 192.168.0.0 bis 192.168.0.255) kennzeichnen die Netzwerk-Adresse (192.168.0.0) und Broadcast-Adresse (192.168.0.255). Diese Adressen können an keinen Host vergeben werden. Deshalb muss die Anzahl der IP-Adressen um zwei reduziert werden, damit man auf die richtige Anzahl nutzbarer IP-Adressen kommt.

/22    2^10 -2 = 1022
/26    2^6 - 2 = 62
/28    2^4 - 2 = 14

Verfasser: Andreas Preuss
Letzte Änderung: 18-11-2016 03:05


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Linux » Apache

Das Upload-Limit von Apache2 erhöhen

Das Upload-Limit einer Standardinstallation von Apache 2 und PHP ist standartmässig auf 2MB begrenzt, was für manche Webdienste einfach nicht ausreicht. Oft sollen Daten hochgeladen werden, die bei Weitem größer als 2MB sind (Bilder, Archivdateien, Videos…).

So wird es über die php.ini gemacht:
In der Datei

/etc/php5/apache2/php.ini

müssen die Einträge:

post_max_size

  und 

upload_max_filesize

editiert werden.
Der Wert kann der jeweils gewünschte Größe angepasst werden (8M, 16M, 32M, 64M, 128M,..).
Anschließend den Apache2 neu starten oder ein Reload durchführen, um die neue Konfiguration einzulesen:
Apache Neustart:

$ sudo /etc/init.d/apache2 restart

oder

$ sudo apachectl -k restart

Apache Reload: (Hier wird nur die Konfiguration neu geladen ohne den Server explizit zu starten)

$ sudo /etc/init.d/apache2 reload

oder

$ sudo apachectl -k graceful

Durch die php.ini werden die Einstellungen global für den Apache2 gesetzt.

Webseitenspezifische Einstellungen können z.B. auch durch das Anlegen einer .htaccess Datei im Wurzelverzeichnis des Webangebots festgelegt werden. Wenn der Webserver die Änderung von PHP - Einstellungen über eine .htaccess Datei zulässt (Apache + mod_php) können  folgende zwei Zeilen zu einer .htaccess im installierten Verzeichnis hinzugefügt werden:

php_value upload_max_filesize 15M
php_value post_max_size 15M

 Benutzer/innen von Red Hat Enterprise sollten außerdem auch LimitRequestBody in der Datei /etc/httpd/conf.d/php.conf überprüfen (und gegebenfalls erhöhen). Dieser Wert ist standardmäßig relativ niedrig eingestellt. Diese Direktive spezifiziert die Anzahl der Bytes von 0 (unlimitiert) bis 2147483647 (2GB), die im Request-Body erlaubt sind.

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 03:01


Microsoft » Powershell

Powershell Script erstellen

Der Artikel wird zur Zeit überarbeitet und kann leider nicht angezeigt werden.

Verfasser: Andreas Preuss
Letzte Änderung: 18-10-2016 14:32


PowerShell Script ausführbar machen

PowerShell - ExecutionPolicy setzen
Aus Sicherheitsgründen werden Powershell Scripts standartmässig nicht auf einem Clienten ausgeführt! Es erscheint eine Fehlermeldung:

Die Datei "C:\Scripte\hallo_welt.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen erhalten Sie mit "get-help about_signing".
Um die Ausführung von Scripten dennoch zuzulassen zu können, öffnet man die Powershell mit Administratorrechten und gibt dort folgenden Befehl mit Schalter ein:

PS C:\>Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Danach drückt man die Eingabetaste und bestätigt die Sicherheitsabfrage mit "J" für Ja. Hierdurch können nun alle Scripte ausgeführt werden, egal welcher Herkunft.

Get-ExecutionPolicy und Set-ExecutionPolicy

Um den aktuellen Status über die Ausführungs Richtlinie anzeigen zu können, gibt man folgenden Befehl ein:

PS C:\Scripte> Get-ExecutionPolicy -List        
Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Die wichtigsten Richtlinien Schalter:
– Restricted:
Es werden keine Konfigurationsdateien geladen und keine Skripts ausgeführt. "Restricted" ist der Standardwert.
– AllSigned:
Alle Skripts und Konfigurationsdateien müssen von einem vertrauenswürdigen Herausgeber signiert werden; einschließlich der Skripts, die auf dem lokalen Computer erstellt werden.
– RemoteSigned:
Alle aus dem Internet heruntergeladenen Skripts und Konfigurationsdateien müssen von einem vertrauenswürdigen Herausgeber signiert sein.
– Bypass:
Keine Blockierung findet statt, und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben.
– Undefined:
Entfernt die gerade zugewiesene Ausführungsrichtlinie aus dem aktuellen Bereich.
Mit diesem Parameter wird keine Ausführungsrichtlinie entfernt, die in einem Gruppenrichtlinienbereich festgelegt wurde.

Um die mannigfaltigen Möglichkeiten und Details für weiterfürende Informationen zu bekommen, einfach in der Powershell folgenden Befehl eingeben:

PS C:\Scripte> Get-Help Set-ExecutionPolicy -examples

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 13:38


Exportieren des PowerShell-Befehlsverlaufs in eine Datei

Der Befehlsverlauf der Powershell geht verloren, wenn das Powershell-Fenster geschlossen wird. Das Get-History-Cmdlet kann hier zum Beispiel Abhilfe schaffen, um alle eingegebenen Powershell -Befehle in eine Datei zu exportieren, wie unten dargestellt:

     Get-History | Export-CSV C:\Temp\CommandHistory.CSV

Der obige Befehl wird alle Powershell -Befehle aus dem Sitzungsverlauf und Cmdlets, in eine CSV-Datei exportieren.

Verfasser: Andreas Preuss
Letzte Änderung: 07-11-2016 09:36


Anmeldezeit aller Computerkonten und User in einer Domäne anzeigen

Um festzustellen welche Computer sich in einer Domäne als letztes angemeldet haben,
kann man das Cmdlet Get-ADComputer verwenden:

Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Um in einer etwas größeren Umgebung nicht die Übersicht zu verlieren, kann man die Ausgabe auch sortiern:

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Get-ADComputer

Die Ausgabe kann auch gleich in eine Textdatei gespeichert werden:

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File C:\Share\ComputersLastLogonDate.txt

Mit der PowerShell kann man sich ebenfalls auch das letzte Anmeldedatum der User ausgeben lassen. Dazu muss eine Abfrage nach "LastLogonDate" durchgeführt werden. Diese Eigenschaft liest den Wert aus dem Attribut LastLogonTimeStamp aus. Der Befehl lautet:

Get-ADUser -Filter * -Properties LastLogonDate | Sort-Object -Property LastLogonDate -descending | FT -Property Name, LastLogonDate -A

Get-ADUser

Um hier die Ausgabe ebenfalls in eine Datei zu speichern kann folgender Befehl ausgeführt werden:

Get-ADUser -Filter * -Properties LastLogonDate | Sort-Object -Property LastLogonDate -Descending | ft -Property Name, LastLogonDate -A | Out-File C:\Share\UsersLastLogonDate.txt

 

Verfasser: Andreas Preuss
Letzte Änderung: 12-11-2016 02:58


Benutzerkonten abfragen mit der PowerShell

Die PowerShell ist sowohl ein interaktiver Kommandointerpreter als auch eine Script-Umgebung. Man kann die AD Cmdlets entweder in einzelnen Befehlen für kleinere Aufgaben einsetzen, oder sie nutzen, um Scripts für komplexere Probleme zu entwickeln. Für aufwändigere Operationen steht eine Vielzahl an Tools zur Verfügung. Um die Active-Directory User (ADUser) einer Domäne zu verwalten kann man sich mit folgenden Befehl in der Powershell die zu verwendenden Befehle anzeigen lassen:

 Get-Help *aduser*

Get-ADUser

Oft möchte man Informationen über Benutzer aus dem AD auslesen. Aber auch wenn man sie ändern will, muss man in den meisten Fällen die gewünschten User erst ermitteln. Dafür ist das Cmdlet Get-ADUser vorgesehen, das mit Hilfe des Parameters -Filter das Ergebnis gleich an der Quelle auf die benötigten Objekte einschränkt.

Get-ADUser -Filter "Surname -like 'B*'"

In diesem Beispiel gibt der Befehl alle User zurück, deren Nachname mit dem Buchstaben "B" beginnt. Für Ausdrücke innerhalb des Filters kann man auch andere Vergleichsoperatoren verwenden, mit deren Hilfe man weitere Attribute wie etwa "Name" prüfen kann. Möchte man nun alle Konten abrufen, dann muss man den Parameter -Filter trotzdem verwenden, in diesem Fall mit dem Wert '*'.

PowerShell AdUser -Filter Beispiel um L* Bonn zu finden:

Get-ADUser -Filter {(GivenName -Like "L*") -and (Surname -eq "Bonn")}

Oft möchte man allerdings AD User nicht nur nach Namen filtern, sondern auch nach anderen Eigenschaften. Standardmäßig zeigt Get-ADUser hier begrenzte Attribute an. Dies kann man mit dem Parameter "-Properties" ändern:

Get-ADUser -Filter:"Surname -like 'B*'" -Properties *

Anhand dieser Ausgabe lassen sich alle Schalter der verschiedenen Attribute auflisten, die man dann in Filter-Ausdrücken verwenden kann.
Hier ein Beispiel, das alle AD User auflistet, mit den vorgegebenen Parametern und anschliessend in eine Textdatei speichert:

Get-ADUser -Properties * -Filter * | FL name, title, mail, telephoneNumber, StreetAddress, EmailAddress, LastLogonDate, PasswordLastSet, homeMDB | Out-File C:\ADMIN\USERS.TXT

Abfragen mit Search-ADAccount
Für einige Abfragen ist das Cmdlet Search-ADAccount allerdings besser geeignet, weil es noch einige besondere Parameter akzeptiert.
Das gilt z.B. wenn sich User ausgesperrt haben oder ein Konto abgelaufen ist.
Um alle Benutzerkonten zu finden, deren Kennwort abgelaufen ist, kommt man mit diesm Befehl zum Ziel:

Search-ADAccount -PasswordExpired -UsersOnly

Weitere Parameter zur Spezifizierung von Attributen mit Search-ADAccount sind zum Beispiel:

-PasswordNeverExpires -AccountDisabled -AccountExpiring 31.12.2016 -AccountInactive <Tage> (z.B.: -AccountInactive 30) -LockedOut -PasswordExpired

Verfasser: Andreas Preuss
Letzte Änderung: 15-11-2016 01:17


Exchange Management Shell - Der Tipp des Tages

Immer wenn man die Exchange Powershell öffnet kommt zur Einführung der „Tipp des Tages“.
Bei genauerer Betrachtung der Tipps kommt man drauf, das teilweise sogar einige wertvolle Tipps für die tägliche Administration dabei sind. Mit folgenden Powershell-Kommando können die Tipps einzeln durchgesprungen werden.

Get-Tip -local:1

Um auf die Komplette Sammlung in deutsch zuzugreifen, kann man diese in einer XML-Datei in folgendem Verzeichnis finden:
C:\Program Files\Microsoft\Exchange Server\v15\Bin\de\ExTips.xml

 

Verfasser: Andreas Preuss
Letzte Änderung: 15-11-2016 02:16


Microsoft Powershell unter Linux

Das Microsoft Entwicklerteam der Powershell, dem wichtigsten Verwaltungswerkzeug für Windows, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Konzepte typischer Unix-Shells angelehnt. Folgerichtig steht die Powershell als Open-Source-Software zum Download zur Verfügung und ist auf Linux portiert worden. Der CEO Satya Nadella von Microsoft wandelt Microsoft so langsam in ein Open-Source-Unternehmen um. Zuvor hatte Microsoft auch die eigene SQL-Server-Software für Linux veröffentlicht und Microsofts Software-Plattform .NET komplett unter Open-Source-Lizenz gestellt. Windows 10 ist zudem mit der vor allem aus der Linux-Welt bekannten Unix-Kommandozeile Bash ausgestattet worden. Die beliebte Linux-Distribution Ubuntu lässt sich komplett in Windows 10 ausführen.

So ist die Installation der Powershell auf Debian und Unbuntu möglich:

wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.9/powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb

sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb

Die Linux-Version der Powershell ist noch im Beta-Status und besitzt noch nicht alle Funktionen der Software wie unter Windows. Derzeit kann die Microsoft-Kommandozeile unter Linux nur lokal verwendet werden. Microsoft arbeitet nach eigenen Angaben noch an einer OpenSSH-Unterstützung der Powershell, um sie auch über das Netzwerk steuern zu können.

Verfasser: Andreas Preuss
Letzte Änderung: 01-12-2016 21:12


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Alte Computerkonten im Active Directory aufräumen

Eine immer wieder lästige Verwaltungsaufgabe für das Active Directory ist, alte Computerkonten vom Server, den Desktop-PCs oder mobilen Geräten adäquat zu bearbeiten. Viele Administratoren fügen eigentlich immer nur hinzu, und versäumen häufig alte Konten zu deaktivieren oder zu löschen. Vorsicht mit löschen, besser ist immer erst mal nur deaktivieren. Eine vollatomatische Funktion für diese Aufgabe gibt es bisher dafür noch nicht.
Allerdings kann man dies auch über das Active Directory Verwaltungscenter wie alle anderen Mausschubser manuell erledigen. Über die Kommandozeile oder Powershell ist es nicht nur eleganter, es geht auch wesentlich schneller.
Ein Blick auf die Registerkarte „Objekt“ eines Computerkontos zeigt zwar, wann die Update-Sequenznummer (USN) aktualisiert wurde, aber nicht wann sich der Computer das letzte mal bei der Domäne angemeldet hat. Die lokale Update Sequenz Nummer (USN) wird bei einer Modifikation oder Erstellung durch den DC zugewiesen. Für jeden NC liegt auf dem Domänencontroller somit eine eindeutige Sequenznummer von 64 Bit Größe vor. Es gibt verschiedene Möglichkeiten, um festzustellen, ob ein Computerkonto in Active Directory veraltet ist.
Der empfohlene Ansatz besteht darin, eine Richtlinie für die Active Directory-Domäne einzurichten, in der die Regeln klar definiert werden. Das Problem dabei sind jedoch remote-Systeme, wie zum Beispiel Mobilgeräte wie Laptops, oder andere Systeme, die nur selten bis unregelmässig Mitglied der Domäne sind.

Inaktive Computer im AD in der CMD-Shell mit dsquery suchen

C:\> dsquery computer -inactive 

Der Befehl wird so für die gesamte Domäne (des ausführenden Computers) ausgeführt.

C:\> dsquery computer OU=Hiersuchen,DC=domain,DC=local -inactive 

Leider kann der Befehl dsmove nicht mit dieser Liste direkt mit einer Pipe Verknüpfung aufgerufen werden, das geht eher über die Powershell. Um also etwas ältere Computer in eine eigene OU zu verschieben, sind an der CMD-Shell drei Zeilen erforderlich:

dsquery computer -inactive  > liste.txt
FOR /f %%i in (liste.txt) do dsmove %%i -newparent OU=,DC=domain,DC=local
del liste.txt

Inaktive Computer im AD mit der PowerShell suchen
Das geht auch in Tagen und Wochen. Dafür muss die Variable entsprechend geändert werden (-60).

PS C:\> $then = (Get-Date).AddDays(-60)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}

Weitere Beispiele in der Powershell

# Ausgabe veralteter Computerkonten als Liste
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Sort-Object -Property "lastLogonDate" | FT Name,lastLogonDate

# Veraltete Computerkonten im AD deaktivieren
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Set-ADComputer -Enabled $false

# Veraltete Computerkonten im AD löschen (Vorsicht!)
PS C:\> Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} | Remove-ADComputer

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 15:59


Bearbeiten von Text Dateien mit der PowerShell

Die Powershell, wohl das wichtigste Verwaltungswerkzeug für Windows-Admins, hat seinen Kommandozeileninterpreter schon von Beginn an stark an die Unix-Shells angelehnt. Mittlerweile läuft die Powershell zusätzlich zu den Linux-Distributionen Ubuntu, CentOS und Red Hat Enterprise Linux auch auf Mac OS X.

# Text Datei erstellen
PS C:\>'Name','Nummer' | out-file c:\temp\text.txt

# CSV Datei erstellen
PS C:\>'Name,Nummer' | out-file c:\temp\text.csv

# CSV Datei Inhalt anhängen
PS C:\>'Erhard,007' | out-file c:\temp\text.csv -Append

# Textdatei einlesen
PS C:\>Get-Content c:\temp\text.txt

CSV Datei aus einem Objekt erzeugen
Mittels Export-CSV können Objekte in eine CSV-Datei exportiert werden:

PS C:\>get-counter | Export-CSV test.csv -append

"append" fügt Werte zu einer bestehenden .csv-Datei hinzu und legt eine .csv Datei an, falls keine existiert. Eventuell nützliche zusätzliche Parameter:
-Encoding UTF8 ... kodiert die Datei in UTF8, wird eventuell benötigt, bei Problemen mit Umlauten
-Delimiter ";" ... Anstelle von "," als Trennzeichen wird ";" verwendet
-NoTypeInformation -Force ... deaktiviert die erste Zeile im CSV in der PowerShell
An dieser Stelle sind oft nur die Informationen zu den Datenfeldern ablegt.

# CSV Datei einlesen
PS C:\>Import-csv c:\temp\text.csv

# Ausgabe der CSV Spalte "Nummer"
PS C:\>Import-csv c:\temp\text.csv | select -ExpandProperty Nummer

# Bestimmten Eintrag aus der CSV-Datei auslesen
PS C:\>Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}

#Bestimmten Wert aus der CSV-Datei auslesen
PS C:\>$(Import-csv c:\temp\text.csv | Where-Object {$_.Name -eq 'Erhard'}).Nummer

Wie oben schon ersitlich können mittels Pipe Symbol "|" mehrere Befehle verschachtelt oder umgeleitet werden. Wir lesen als Beispiel einmal das Eventlog auf einem Remote Computer aus. Mit Hilfe einer Pipe (|) kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:

PS C:\>get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv

Vergleichsoperatoren der Powershell
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
-eq gleich
-ne ungleich
-gt größer als
-ge größer oder gleich
-lt kleiner als
-le kleiner oder gleich

Dieser Befehl zeigt nach Grösse sortiert alle Dateien (dir) im Ordner C:\Users\Andreas\Desktop\IMG, die größer als 50KB sind

PS C:\>Get-ChildItem C:\Users\Andreas\Desktop\IMG | where-Object {$_.Length -gt 50KB} | Sort-Object Length

Damit die Sortierung den Datentyp richtig erkennt, kann auch etwas nachgeholfen werden:
Wenn alle Dateinamen aus Nummern bestehen, würde Sort-Object die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50. Abhilfe schafft das Zuweisen des Datentyps:

Sort-Object { $_.Name.replace("stringpart","") -as [int] }

Stringmanipulation
Um eine CSV Datei beispielsweise gleich mit der Powershell zu bearbeiten, kann man hier auch eine Stringmanipulation durchführen.

# .ToUpper() - Wandelt einen String in Großbuchstaben um
PS C:\>$("test").ToUpper()

#.ToLower() - Wandelt einen String in Kleinbuchstaben um
PS C:\>$("TEST").ToLower()

#.Contains() - Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\>$("TEST").Contains("ES")
# Ausgabe "True"

#.StartsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\>$("TEST").StartsWith("TE")
# Ausgabe "True"

#.EndsWith() - Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\>$("TEST").EndsWith("ST")
# Ausgabe "True"

#.Replace() - Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\>$("TEST").Replace("TE","ersetzt")

#.Substring() - Ersetzt Teile eines Strings anhand derer Position
PS C:\>$("TEST").Substring("1")
# 1 ... nach dem ersten Zeichen - Ausgabe "EST"
# 2. Beispiel:
# Ersetzt Teile eines Strings an mehreren Positionen
PS C:\>$("TEST").Substring("1","2") 
# 1 ... nach dem ersten Zeichen & 2 Nach dem  zweiten Zeichen - Ausgabe "ES"

Wenn nur die Endposition verwendet wird, kann dies auch so aussehen:

PS C:\>$("TEST").Substring("","3")
# Ausgabe: TES

#.TrimStart() - Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\>$("TEST").TrimStart("TE")
# Ausgabe: ST

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 14:09


Linux » Open-Xchange

Was ist Open-Xchange?

Mit Open-Xchange hat man die Möglichkeit, neben dem E-Mailpostfach umfangreiche Kalender-, Kontakt- und Aufgaben-Funktionen zu nutzen. Außerdem stehen Team-Funktionalitäten zur Verfügung (Groupware), sodass Kalender und Adressbücher gemeinsam innerhalb aller Nutzer einer Domain freigeben und genutzt werden können. Auch ist es möglich, Dokumente auf den Server zu laden und jederzeit griffbereit zu haben (Infostore). Zudem können E-Mails externer Postfächer wie GMX, web.de, Google und aller IMAP-fähigen Postfächer im Open-Xchange Postfach gesammelt und verschiedene Social-Feeds wie Facebook oder Twitter abonniert werden.

Der Zugriff auf Open-Xchange erfolgt über jeden Browser (z.B. Internet Explorer, Firefox oder Chrome), jedes Exchange-fähige E-Mailprogramm (z.B. Microsoft Outlook) oder die meisten Smartphones (z.B. iPhone und sämtliche Android-Smartphones). Auf jedem dieser „Clients“ stehen sämtliche Daten (E-Mails, Kontakte, Termine) stets synchron zur Verfügung.

Der Open-Xchange Server ist daher eine beliebte Linux-basierte „Exchange-Alternative“ für E-Mail- und Groupware-Lösungen.
So können mit Open-Xchange auch E-Mails von externen Webmail-Accounts zentral bearbeitet werden. Zudem synchronisiert Open-Xchange die Kontaktdaten des Netzwerks von XING, Facebook oder LinkedIn und stellt diese automatisiert im Open-Xchange Adressbuch zur Verfügung. Um die Team- und Projektarbeit mit externen Geschäftspartnern zu vereinfachen, kann Open-Xchange Kontaktinformationen und Dokumente auch Mitarbeitern ohne eigenem Open-Xchange-Zugang sicher und geschützt bereit gestellt werden.

Die lizenzkostenfreie und im Funktionsumfang nicht beschränkte Community Edition gibt es für die Linux-Distributionen Fedora, openSUSE und Ubuntu. Auch wenn Open-Xchange immer wieder aktualisierte Software-Pakete der Community Edition zur Verfügung stellt, so sollte diese nicht für den produktiven Einsatz in kritischen Enterprise Umgebungen eingesetzt werden. Qualitätsgesicherte Updates, Fixes und Patches liefert Open-Xchange im Rahmen von Maintenance-Verträgen nur für die Open-Xchange Server Edition bzw. Hosting Edition, die auf den Betriebssystemen Debian 4 oder 5, SUSE Linux Enterprise Server  sowie RedHat Enterprise Linux aufsetzen.

Abgerundet wird das Produktangebot durch zwei Lösungen, die auf Univention Corporate Server als Betriebssystem-Basis aufsetzen und beide die grafische Univention-Oberfläche zur Installation und Administration der Groupware mitnutzen: Während sich die Open-Xchange Appliance Edition an Kleinunternehmen richtet, die selbst einen eigenen Mail-Server-betreiben wollen, adressiert die multi-server-fähige Open-Xchange Advanced Server Edition mittelständische und Großunternehmen, die eine individuelle Kommunikationslösung im eigenen Haus realisieren wollen. Um diese evaluieren zu können, müssen entsprechende Testkeys per Mail angefordert werden. Gleiches gilt für die „ OXtender “ genannten Software-Erweiterungen, mit denen mobile Endgeräte, Microsoft Outlook und die nativen Mac OS X-Anwendungen Mail, Address Book und iCal als Clients an den Open-Xchange Server angebunden werden können. Letztere lassen sich allerdings nicht mit der Community Edition betreiben.

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 07:05


Linux » OpenStack

Cloud Alternative OpenStack

OpenStack ist ein Softwareprojekt, welches eine freie Architektur für Cloud-Computing zur Verfügung stellt.
Wer sich mit der Umsetzung einer privaten Cloud für sein Unternehmen beschäftigt, kommt nicht darum herum sich auch mit OpenStack zu beschäftigen. Das, was ein Betriebssystem für den PC ist, das ist OpenStack für die Cloud. Während beispielsweise Windows oder Linux einzelne Ressourcen eines Rechners oder Servers verwaltet, übernimmt OpenStack diese Aufgaben für Ressourcen von vielen Rechnern, die zusammen die Plattform einer Cloud-Umgebung darstellen. OpenStack ist also – ganz einfach erklärt – das Betriebssystem für Cloud-Infrastrukturen.

Die bekanntesten Cloud-Systeme gibt es von Amazon, Google und auch von Microsoft. Um es konkret zu sagen: Bei Amazon sind das die Amazon Web Services beziehungsweise das Amazon Elastic Cloud Computing. Abgekürzt nennen sich diese AWS und EC2. Bei Google heißt das Betriebssystem Google Compute Engine. Die Cloud-Computing-Plattform von Microsoft ist Microsoft Azure. Der Unterschied bei OpenStack ist nun, dass es sich dabei um die Open-Source-Variante eines Betriebssystems für die Cloud handelt. Um in der Metapher zu bleiben: OpenStack hat für die Cloud eine ähnliche Bedeutung wie Linux für Server.



OpenStack ist beinahe schon zu einem Industriestandard geworden. Das CERN, die Europäische Organisation für Kernforschung, setzt ebenfalls auf OpenStack als Plattform. Viele große Unternehmen haben es nicht nur adaptiert, sondern auch weiterentwickelt. Dazu gehören beispielsweise die Telekom-Partner Cisco und Huawei oder auch Unternehmen wie HP, IBM, SAP. All diese großen Player haben zu OpenStack beigetragen und eine Plattform geschaffen, die Firmen inzwischen von Distributoren beziehen können um ihre eigene private Cloud zu bauen.

Ein Vorteil der bei OpenStack Cloud-Infrastrukturen besteht, daß sie in deutschen Rechenzentren betrieben werden. Diese entsprechen den deutschen und europäischen Datenschutzanforderungen, was bei den meisten anderen Anbietern nicht gegeben ist. Das Problem hierbei ist, dass die CloudServer bei den üblichen großen Anbietern der amerikanischen Rechtsprechung unterliegen. Für Unternehmen, die ihre vertraulichen Daten nicht auf amerikanischen Servern lagern wollen, wird somit eine sicherere Alternative geboten.  

Verfasser: Andreas Preuss
Letzte Änderung: 01-12-2016 20:09


Software

Datei- und Ordnerrechte unter Linux allgemein

Unter Linux sind jeder Datei und jedem Ordner drei Rechteebenen zugeordnet.
Sie gelten für:  
- Eigentümer
- Gruppe
- Alle anderen  
Jeder dieser Ebenen lassen sich gesonderte Rechte zuordnen.
Diese Rechte sind:  
- r wie read für das Leserecht
- w wie write für das Schreibrecht
- x wie execute für das Recht, eine Datei auszuführen (bei Verzeichnissen bedeutet das x, dass das Verzeichnis geöffnet werden darf).  
Wer mit ls -l den Inhalt eines Linux-Verzeichnisses anzeigen lässt, sieht links die Dateirechte, beispielsweise rwxrw-r--. Diese Rechte gelten von links nach rechts gelesen für den Eigentümer einer Datei rwx, für die Gruppe rw- und für die anderen Benutzer r--.
Falls an erster Stelle ein d steht, handelt es sich um ein Verzeichnis.   Diese Rechte lassen sich auch in Zahlen ausdrücken. Dabei steht jeweils eine Ziffer für eine Rechteebene, die erste Ziffer für den Eigentümer, die zweite für die Gruppe und die dritte für alle anderen.
Die Ziffer selbst ergibt sich aus den genehmigten Rechten:   r = 4 w = 2 x = 1  
Die gegebenen Rechte werden einfach zusammengezählt. 
Beispiel: Soll der Eigentümer die Datei lesen, schreiben und ausführen dürfen, so addiert man 4 + 2 + 1 und erhält 7.  
Soll die Gruppe die Datei nur ansehen und ausführen dürfen, so ergibt 4 + 1 die 5.
Und die anderen dürfen gar nichts, haben also die 0.
So ergibt sich in diesem Beispiel für die Dateirechte die 750.
Und die kann man mit dem Befehl chmod in Linux setzen.  
Häufig steht vor den drei Ziffern an erste Stelle noch eine vierte.
Die setzt die Attribute set user ID, set group ID und sticky. In Samba bleibt diese Ziffer meist bei 0. Mehr zu den Attributen verrät man chmod.  
Eigentümer und Gruppe einer Datei oder eines Ordners lassen sich mit den Befehlen chown und chgrp ändern.
Mehr dazu verraten die entsprechenden man-Einträge.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


MySQL Root - Passwort ändern

(Wenn root noch kein Passwort hat):

 # mysqladmin -u root password NEUESPASSWORT

(Wenn root schon ein Passwort hat):

 # mysqladmin -u root -p ALTESPASSWORT NEUESPASSWORT

Passwort anderer Accounts ändern:

# mysqladmin -u USER -p ALTESPASSWORT NEUESPASSWORT

MySQL Passwörter direkt in mysql ändern:
1) Über die Kommandozeile am mySQL Server anmelden:

mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

Wenn man das root Passwort nicht in /etc/mysql/my.cf oder unter Debian z.B. in /etc/mysql/debian.cf findet, kann man es neu setzen. Das ist relativ einfach und schnell gemacht.

1) mySQL Server anhalten: 

/etc/rc.d/init.d/mysql stop

2) mySQL Server manuell mit der Option " –skip-grant-tables" starten:

/usr/local/mysql/bin/safe_mysqld –skip-grant-tables

3) Über die Kommandozeile am mySQL Server anmelden:

# mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

5) mySQL Server wieder starten:

/etc/rc.d/init.d/mysql start

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Email Quelltext in Thunderbird anzeigen

Der Header bzw. die Kopfzeilen können Aufschluss über die wahre Herkunft einer Mail geben. In Thunderbird ist diese Information gut auffindbar. Der Tastatur Kurzbefehl lautet: STRG+U.

Verfasser: Andreas Preuss
Letzte Änderung: 23-10-2016 17:13


Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Ubuntu Linux Subsystem unter Windows 10 aktivieren

Benötigt zur Installation des Linux Subsystems für Windows 10 wird die Insider Preview (Build 14316) oder Windows 10 1607, 1703 (Creators Update) oder 1709 (Fall Creators Update) und höher verwendet.
Anzeigen der Windows Version: Win-Taste + R --> Eingabe --> winver

Das Windows-Subsystem für Linux, von Microsoft, ist selbst in den Insider-Builds von Windows 10 nicht standardmäßig aktiviert.
Doch das Einschalten ist nicht weiter schwer:
Es muss zuvor der Entwicklermodus von Windows 10 aktiviert werden.
Dieser findet sich in den Start-Menü Einstellungen im Bereich
"Update und Sicherheit -> Für Entwickler".

Windows 10 Entwicklermodus
Danach noch in der Systemsteuerung unter "Programme" den Punkt "Windows-Features aktivieren oder deaktivieren" anklicken und dort das "Windows Subsystem für Linux" anhaken und per "Ok" nachinstallieren.

Windows 10 Linux Subsystem
Es gibt allerdings auch die Möglichkeit das ganze Geklicke zu umgehen und einfach über die Powershell als Administrator das Feature mit einem einzigen Befehl nachzuinstallieren.


Nach einem Neustart kann man in der Kommandozeile mit dem Befehl "bash"
in der Startmenü-Suche die Linux-Shell aus dem Windows Store holen und installieren.

Hier als Beispiel die Anzeige der aktuell installierten Ubuntu Version mit dem Befehl:  lsb_release -a



Interressant ist diese Entwicklung für Personen, die mit verschiedenen Betriebssystemen hantieren und Programme und Features aus der Linux-Welt vermissen. Admins sind es gewohnt, unter Linux eben auch passende Linux-Kommandos zu nutzen. Über die Bash in Windows 10 kriegt man somit die Linux-Kommandos unter Windows in Funktion, etwa grep, ps, find, curl oder wget. Per sudo apt-get können Nutzer beliebige Software aus den Ubuntu- oder den Suse Quellen nachinstallieren.

Mit dem nun gebotenen Linux-Support stärkt Microsoft sein Betriebssystem Windows 10 als Entwickler-Plattform, denn neben dem einfachen Abarbeiten von Befehlen lassen sich auch sämtliche Programmiersprachen, Shell-Scripte und klassische Linux Server umgebungen nutzen.

Midnight Commander unter Windows 10

Verfasser: Andreas Preuss
Letzte Änderung: 20-11-2017 08:52


Was bedeutet beim booten von Debian die Meldung "intel_rapl: no valid rapl domains"?

Virtualbox Linux Fehlermeldung beim Start

Startet man ein Debian oder Ubuntu System in einer Virtual Box, so kann es sein, dass einem während des Bootvorganges die Fehlermeldung "no valid rapl domains found in package 0" auffallen.
Diese Fehlermeldung besagt, dass Linux das Modul nicht laden kann, da es üblicherweise auf echten PCs starten würde. RAPL (Running Average Power Limit) ist einfach eine Energieverwaltung von Intel.
Trotzdem kann dies mit der Zeit auf den Wecker fallen.

Dies war beim Linux Kernel eine Änderung, die im Oktober 2013 eingeführt wurde, um den Intel RAPL Power Capting Treiber im Linux Kernel zu unterstützen. Diese Meldung ist nicht störend und hat keinen Einfluss auf die Leistung oder Funktionalität des Systems, da es sich nur um ein Energieverwaltungsmodul handelt. Wenn die Virtualisierungssoftware z.b. VirtualBox diesen Treiber unterstützt (und der Host unterstützt erweiterte Power-Funktionen), wird die Meldung ausgeblendet.
Hier kann man den Quellbaum des Moduls überprüfen, um zu prüfen, was es tut.

Es gibt also Zwei Lösungen um hier Abhilfe zu schaffen:
In VirtualBox PAE/NX aktivieren:

oder das Modul auf die Blackliste setzen und vom Laden ausschliessen.

echo 'blacklist intel_rapl' >> /etc/modprobe.d/blacklist.conf
reboot

Mit modprobe können Module zur Laufzeit des Systems ge- und entladen werden.
Bei Debian : nano /etc/modprobe.d/fbdev-blacklist.conf
Bei Ubuntu : nano /etc/modprobe.d/blacklist.conf
Bei Suse (Leap): /etc/modprobe.d/50-blacklist.conf

Die Sperrlisten im Verzeichnis /etc/modprobe.d/ haben üblicherweise den Namen blacklist-Modulname.conf, d.h. der Dateiname kann frei gewählt werden, sollte aber mit dem Präfix blacklist- beginnen um direkt über die Funktion zu informieren. Darüber hinaus existiert auch eine "allgemeine" Datei, die nur den Namen blacklist.conf trägt. Diese Datei sollte man allerdings nicht komplett überschreiben, sondern bei Bedarf weitere Einträge anhängen.

Eine ausführlichere Beschreibung über die Kernelmodule gibt es hier

Zum Schluss noch alle Treiber die zum Starten des Systems notwendig sind und nicht zum Kernel gehören einmal neu laden.

sudo update-initramfs -u -k all

Jetzt sollte beim nächsten Bootvorgang die Fehlermeldung nicht mehr vorhanden sein.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:22


OpenSSL auf Debian aktualisieren/installieren

OpenSSL ist die am meisten verwendete SSL-Bibliothek des Planeten.
Wie auch bei Apache liegt im Debian-Repository meist eine veraltete
OpenSSL-Version vor (1.0.1), welche sogar noch anfällig für Heartbleed-Attacken ist.

Um Auf die neuste Version Snapshot Version (1.1.0g) zu aktualisieren,
müssen wir daher OpenSSL auf unserem System selbst kompilieren und installieren.

Schritt 1: Vorbereitung
Zunächst werden hierfür die benötigten Pakete zur Kompilierung installiert:

apt-get install autoconf python libtool build-essential

Schritt 2: Download von OpenSSL
Hierfür laden wir OpenSSL herunter und entpacken es:

wget wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz -O openssl-1.1.0g.tar.gz
tar xfz openssl-*.tar.gz

Schritt 3: Kompilierung von OpenSSL
Kompilierung unseres OpenSSL Sourcecode Packetes:

cd openssl-*
sudo ./config --prefix=/usr zlib-dynamic --openssldir=/etc/ssl shared
sudo make
sudo make test

Schritt 4: Installation von OpenSSL

sudo make install

Schritt 5: Überprüfung der Installation
Nun sollte nun OpenSSL installiert sein, mit Hilfe des Befehls:

openssl version

kann die aktualisierte Version getestet werden.
In einigen Fällen wird trotzdem nicht die aktuelle Version angezeigt.
In diesem Fall hilft folgende Lösung:

$ mv /usr/bin/openssl /root/
$ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
openssl version

OpenSSL 1.1.0g 5 Jan 2018

Diese Prozedur funktioniert sowohl als Neuinstallation, als auch als Update.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Installation und Konfiguration von NGINX

Einfache Standartinstallation von NGINX
Die Installation von Nginx ist relativ simpel, die Konfiguration etwas weniger simpel für den Umsteiger, aber durchaus machbar! Einmal durchgeführt, läuft der neue Webserver wesentlich schneller und leistungsstärker als der Apache2.
Der Server hat dann weniger Speicherverbrauch, eine hohe Flexibilität und ist vor allem robuster und sicherer. NGINX läuft richtig konfiguriert auch zusammen mit Apache2.  Wenn man nun einen Webserver auf dem Raspberry Pi, Arduino, Asus Tinker Board oder dem Cubieboard realisieren möchte, kommt man um NGINX gar nicht mehr herum, weil hier der Apache2 durch seinen höheren Speicherverbrauch und seine langsamere Geschwindigkeit gar keinen Sinn mehr macht.

Die Installation:

Zum Installieren wird unter Debian Stretch zum Beispiel folgender Befehl mit dem Paket nginx eingegeben:

sudo apt-get install nginx

Danach kann auch schon NGINX gestartet werden mit folgenden Befehlen.

sudo /etc/init.d/nginx start

oder

sudo service nginx start

Wie wir feststellen funktioniert allerdings noch kein PHP.
Ab Version 1.8 legt Nginx ein HTML-Verzeichnis unter /var/www ab.
Falls noch kein PHP für den Webserver installiert wurde, einfach unter Debian Stretch diesen Befehl ausführen:

sudo apt install php7.2-fpm php7.2-cli php7.2-dev php7.2-mysql php7.2-curl php7.2-gd php7.2-json php7.2-opcache php7.2-igbinary php7.2-imagick php7.2-redis php7.2-mbstring php7.2-soap php7.2-xml php7.2-zip

Und wir passen die Datei /etc/nginx/fastcgi_params an:

sudo vim /etc/nginx/fastcgi_params
fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;
 
# define SCRIPT_NAME per domain after including this file
#fastcgi_param  SCRIPT_NAME         $fastcgi_script_name;
 
fastcgi_param   REQUEST_URI         $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;
fastcgi_param   REQUEST_SCHEME      $scheme;
fastcgi_param   HTTPS               $https if_not_empty;
 
fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;
 
fastcgi_param   REMOTE_ADDR         $remote_addr;
fastcgi_param   REMOTE_PORT         $remote_port;
fastcgi_param   SERVER_ADDR         $server_addr;
fastcgi_param   SERVER_PORT         $server_port;
fastcgi_param   SERVER_NAME         $server_name;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;
 
# httpoxy fix (see https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/)
fastcgi_param   HTTP_PROXY          "";

Speichern in VIM mit :wq.
Zum Abschluss muss Nginx neu geladen werden und wenn Apache2 läuft, dieser gestoppt werden.
service apache2 stop
/etc/init.d/nginx reload

Einfache Einrichtung von NGINX:
Die virtuellen Hosts liegen Standartmässig in /etc/nginx/sites-available/default.
Die Standart Konfiguration sieht in der Regel folgendermassen aus:

server {
     listen 80;                            ## Listen für IPv4;
     listen [::]:80 ipv6only=on;           ## Listen für IPv6;
     server_name _;
     root /var/www/html;                   ## Der Webserver-Root-Ordner
     index index.php index.html index.htm; ## Festlegung der Index-Dateien
     location / {
       try_files $uri $uri/ =404;
     }
     #error_page 404 /404.html;            ## 404 Fehlerseite
     # Alle 50x Fehlerseiten auf Standardfile /50x.html weiterleiten
     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
        root /var/www/html;
     }
     # PHP Skripte zu FastCGI an 127.0.0.1:9000 leiten
     location ~ \.php$ {
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include snippets/fastcgi-php.conf;
     }
     # Verbiete Zugriff auf alle .htaccess Dateien. 
     # Dieser Eintrag nur wenn man den root Ordner faulerweise einfach auf den Apache Pfad gelegt hat.
     location ~ /\.ht {
       deny all;
       }
     }

Die ersten beiden Zeilen geben Nginx an, auf Port 80 sowohl IPv4 als auch IPv6 Adressen anzunehmen.
Hier kann man natürlich auch 8080 oder jeden anderen, freien Port verwenden.
server_name _; bewirkt, dass dies ein Catchall vhost ist (jeder beliebige vhost wird angenommen).
Hier kann natürlich ebenfalls auch jeder andere Hostname eingetragen werden, z. B. für meineSeite.de:

 server_name meineSeite.de; 

Die Zeile index gibt an, dass in diesem root-Pfad, die index.php, index.html oder index.htm in als Index-Datei erkannt und verwendet werden soll, sofern vorhanden.
Für php ist der location Teil wichtig: location ~ \.php$ { … }.
So kann auch php einwandfrei verwendet werden, wie man es von Apache gewohnt ist. Zur Erhöhung der Sicherheit kann man auf Fehlerseiten die nginx-Version ausblenden, so wird es möglichen Angreifern erschwert die Version herauszufinden, falls Schwachstellen dieses Releases ausgenutzt werden könnten. Wir rufen somit die Hauptkonfiguration auf:

 vim /etc/nginx/nginx.conf 

eingeben und folgende Zeile auskommentieren. (Das # Zeichen entfernen)

 server_tokens off; 

An dieser Stelle können wir unseren NGINX Server gleich etwas optimieren:
Zuerst werden wir die Worker-Prozesse der /etc/nginx/nginx.conf anpassen, da auch nginx Multicore-Techniken unterstützt. Die Anzahl der zu benutzenden CPUs muss nginx angegeben werden. Die CPU-Anzahl kann so ausgelesen werden:

cat /proc/cpuinfo | grep processor

Die Ausgabe wird in etwas so aussehen:

processor       : 0
processor       : 1
processor       : 2
processor       : 3

Entsprechend der Ausgabe handelt es sich um ein Singlecore (ein Prozessor) System, oder um eines mit 4 Cores (Quadcore) oder mehr. Entsprechend der Anzahl an Cores sind die Worker-Prozesse in der nginx.conf zu bestimmen:

user www www-user;
worker_processes 1;     # 1 bei Singlecore; 2 bei Dualcore, usw....
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
 
events {
    worker_connections 768;
    multi_accept on;
    }
....

Nun gibt es noch einen Worker Wert in der nginx.conf, die worker_connections. Diese geben effektiv an, wieviel Verbindungen ein Worker-Prozess bedienen soll. Aktuelle Browser bauen allein 2 bis 8 Verbindungen zu einem Webserver auf. Im privaten Umfeld kann der Wert bei 256 (Das ist z.B. Standard beim Raspberry) belassen werden, Websites mit viel Traffic können 1024 oder mehr setzen. Hier habe ich einen Mittelwert von 768 eingestellt. Mit multi_accept wird nginx angewiesen, soviele Verbindungen wie möglich für Anfragen bereitzustellen.

Aktivierung der GZIP-Komprimierung von nginx
Dies hat effektiv zur Folge, das etwas weniger Bytes durch die Leitungen geschickt werden müssen, zu Lasten der Rechenpower. Besonders bei großen Systemen wie WordPress oder Magento macht sich die Komprimierung allerdings sehr zum Vorteil bemerkbar.
Wenn man allerdings sehr hohen Traffic erwartet und die Rechenleistung extrem gering halten möchte, wie z.B. auf einem virtuellen Cloud-Server (hier kostet zusätzliche Rechenleistung oft mehr), geht man den anderen Weg und lässt die gzip Komprimierung laut Default ausgeschaltet.

##
# Gzip Settings
##
# gzip off;
# gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Es gibt noch viele Möglichkeiten die Performance non NGINX zu steigern, aber wir steigen hier für die einfache Konfiguration erst mal aus und ich werde versuchen dies in einer Extra Faq zu behandeln.

Mit dem VIM Befehl :wq die nginx.conf speichern und beenden.

Neuladen des Servers wie gewohnt:

/etc/init.d/nginx reload

Konfiguration der MariaDB Datenbank:
Die Default-Einstellungen sind für unsere Installation schon recht brauchbar. Ein paar Defaultwerte gibt es jedoch anzupassen: Wir rufen also die Konfigurationsdatei auf und passen diese an:

Für die Installation der Datenbank MariaDB verwende ich immer folgende Installationsroutine:

sudo apt install mariadb-server mariadb-plugin-tokudb percona-toolkit
vim /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
 
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8
 
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server  = utf8
collation-server      = utf8_general_ci
character_set_server  = utf8
collation_server      = utf8_general_ci
 
# Zugang der Firewall überlassen
bind-address = 0.0.0.0

Auch wollen wir TokuDB in MariaDB aktivieren:

vim /etc/mysql/conf.d/tokudb.cnf
[mariadb]
# See https://mariadb.com/kb/en/how-to-enable-tokudb-in-mariadb/
# for instructions how to enable TokuDB
#
# See https://mariadb.com/kb/en/tokudb-differences/ for differences
# between TokuDB in MariaDB and TokuDB from http://www.tokutek.com/
plugin-load-add=ha_tokudb.so
 
[mysqld]
default_storage_engine = tokudb

Mit dem Befehl :wq des Editors VIM jeweils speichern und beenden.
 Die Datenbank wird mit:

service mysql restart

neu gestartet.
Dies war die einfachste und schnellste Standartkonfiguration von NGINX mit kleiner Optimierung.
Das heisst über die IP des Servers ist die Standard NGINX Startseite nun aufzurufen, MySQL und PHP laufen.

In einer weiteren FAQ versuche ich eine individuelle erweitere Konfiguration mit mehreren virtuellen Domains mit NGINX übersichtlich zu erklären.

Verfasser: Andreas Preuss
Letzte Änderung: 28-05-2018 17:12


Linux Terminal Anwendungen - Kommandozeilen Apps

Das Linux Terminal ist nicht nur ein sehr effizientes Werkzeug zum Arbeiten, sondern es ist in der Befehlsverarbeitung sehr schnell und verbraucht weniger Ressourcen wie eine graphische Oberfläche mit Maussteuerung. Dies liegt mitunter daran, dass die Shells (Kommandozeileninterpreter) unter Unix wesentlich leistungsfähiger sind als zum Beispiel der DOS-Kommandozeileninterpreter. Außerdem ist eine Shell bei manchen Aufgaben einem grafischen Benutzerinterface überlegen, da durch die Shell-Syntax zum Beispiel Ablaufsteuerungen und Programmrückmeldungen einbezogen werden können, was bei grafischen Anwendungen meist nicht möglich ist. Bei vielen Nutzern und auch von mir wird weiterhin in der Regel die Kommandozeile bevorzugt.

Im Laufe der vielen Jahre (meine erst Berührung mit Linux war:  S.u.S.E. Linux 4.3 - seit 1996) sind einige interessante, leistungsfähige Terminal-Programme entstanden, die sehr nützliche Funktionen beinhalten und alles über die Kommandozeile erledigen lassen. Hierbei kann man weitestens auf die "Clickie-Buntie" Oberfläche wie Gnome, KDE und viele mehr, vollständig verzichten.

Ich trage auf dieser Seite einige der kleinen Kommandozeilen - Anwendungen zusammen, von den bekanntesten bis zu einigen wohl etwas unbekannteren. Die meisten Programme habe ich mit der APT Paketverwaltung von Debian / Ubuntu getestet, aber sicher funktionieren auch viele mit dpkg, opkg, ipkg yum oder pacman oder sind als Quellcode für das jeweilige System kompilierbar.

Archivierung:

Automation:

Ansible
Ein Leichgewichtiges und schnelles Konfigurationsmanagement für Linux. Es ermöglicht die automatisierte Bereitstellung, Softwareverteilung, Konfiguration und Upgrades auf allen Clients im Netzwerk. Es kommt komplett ohne Agenten auf dem Clienten aus und benötigt auf den Systemen lediglich einen SSH-Server und eine aktuelle Python-Installation.
Debian-Benutzer können die gleiche Quelle wie das Ubuntu-PPA nutzen.
Folgende Zeile zu den Quellen unter /etc/apt/sources.list sollte dann ergänzt werden:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main

Dann mit folgenden Befehlen unter Debian (Debian,Jessie und Stretch) installieren:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
$ sudo apt-get update
$ sudo apt-get install ansible

Mit ansible kann sich jeder Netzwerk-Administrator mit wenig Aufwand seine eigene Sammlung an Skripten zum Systemmanagement erstellen. Vor allem die große Auswahl an bestehenden yaml-Verteilungsscripten (Playbooks) macht es auch Einsteigern sehr leicht, mit ansible gute Erfolge zu erzielen. Für viele Linux-Admins sind die kleinen und großen ansible-Helferlein aus dem IT-Alltag gar nicht mehr wegzudenken. Wer einmal das Konzept und die Einfachheit von ansible verstanden hat, verlässt sein Büro bei 100 Rechnern im Haus nur noch wegen der Mittagspause.

fswatch - Überwacht Dateien und Verzeichnisänderungen unter Linux und MAC OS X.

Backup:

Amanda
Open Source Netzwerk-Backup für Linux, Windows, UNIX und OS X. AMANDA setzt sich aus den Wörtern "Advanced Maryland Automatic Network Disk Archiver" zusammen. Es ist eine professionelle Backup-Lösung, die es dem IT-Admin ermöglicht, einen einzigen Master-Backup-Server einzurichten, um mehrere Hosts über das Netzwerk auf Bandlaufwerke/Wechsler oder Festplatten oder optische Medien auch verschlüsselt zu sichern. Amanda verwendet dabei native Utilities und Formate (z.B. Dump und/oder GNU tar) und kann eine große Anzahl von Servern und Workstations mit mehreren Versionen von Linux oder Unix sichern. Amanda verwendet einen nativen Windows-Client, um auch Microsoft Windows-Desktops und -Server zu sichern.

Bacula
Verwalten von Backups, Wiederherstellungen und Verifizierungen von Computerdaten über ein Netzwerk von Computern unterschiedlicher Art.

BorgBackup
BorgBackup (kurz: Borg) ist ein deduplizierendes Backup-Programm. Optional unterstützt es Komprimierung und authentifizierte Verschlüsselung. Es ist eine deutlich verbesserte Form der Backupsoftware Attic.

Das Hauptziel von Borg ist es, einen effizienten und sicheren Weg zur Datensicherung zu bieten. Die verwendete Technik der Datendeduplizierung macht Borg für tägliche Backups geeignet, da nur Änderungen gespeichert werden. Die authentifizierte Verschlüsselungstechnik macht es geeignet für Backups auf nicht vollständig vertrauenswürdige Zielen wie z.B. externe Cloudumgebungen.

# Bevor eine Sicherung durchgeführt werden kann, muss zuerst ein Repository initialisiert werden:
$ borg init --encryption=repokey /pfad/zu/repo

# Sichern der Verzeichnisse ~/src und ~/Documents in ein Archiv namens Montag:
$ borg create /path/to/repo::Montag ~/src ~/Dokumente

# Am nächsten Tag kann ein neues Archiv mit dem Namen Dienstag erstellt werden:
$ borg create --stats /path/to/repo::Dienstag ~/src ~/Dokumente

Dieses Backup wird viel schneller und viel kleiner, da nur neue, nie zuvor gesehene Daten gespeichert werden. 
Die Option --stats bewirkt, dass Borg Statistiken über das neu erstellte Archiv ausgibt, 
wie z.B. die Menge an eindeutigen Daten (die nicht mit anderen Archiven geteilt werden)

Verschlüsselte Server-Backups mit Duply und Duplicity
Einfaches Erstellen von GPG-verschlüsselten, komprimierten Backups beliebiger Daten fast überall. Backups in lesbarer Form irgendwo im Netz ablegen? Das ist keine gute Idee. Die Backups allerdings zuerst vollständig verschlüsseln und danach auf einen beliebigen Online-Speicherplatz wegschieben? Das hört sich schon eher ganz gut an! Genau das kann Duplicity, und dank Duply vereinfacht sich dessen Handhabung auf wenige, sehr einfache Befehle. Duply dient als Wrapper für Duplicity und reduziert die Handhabung von Sicherung und Wiederherstellung auf das Wesentliche. Hier einmal ein paar einfache Beispiele:

// Status der Backups anzeigen
# duply mein_backup_profil status

// Backup erstellen
# duply mein_backup_profil backup

// Vor kurzem gelöschten Pfad wiederherstellen (vor vier Tagen)
# duply mein_backup_profil restore /tmp 4D

// Einzelne Datei aus letztem Backup wiederherstellen und unter neuem Namen abspeichern
# duply mein_backup_profil fetch etc/passwd /tmp/passwd_restored

// Einen gelöschten Ordner wiederherstellen und unter neuem Namen abspeichern (vor 5 Tagen)
# duply mein_backup_profil fetch etc /tmp/etc_folder_restored 5D

Duply und Duplicity besitzen keine grafische Oberfläche und eignen sich deshalb vor allem für automatisierte Server-Backups. Für den Desktop gibt es das GUI Werkzeug Déjà Dup, das mit einer grafischen Oberfläche ebenfalls auf Wunsch verschlüsselte Backups erstellt.

mysqldump-secure
Sicheres mysqldump-Skript mit Verschlüsselung, Komprimierung, Protokollierung, Blacklisting und Nagios Monitoring Integration.

Benchmark:

apt-get install sysbench
sysbench --test=cpu --num-threads=4 --cpu-max-prime=20000 run

Cloud:

Content Erstellung:

Dateimanagement:

Datenbanken:

Datenverarbeitung:

Download Tools:

E-Mail:

Entwicklung:

FTP:

Grafik:

Aewan ist ein auf Curses basierendes Programm, das die Erstellung und Bearbeitung von Ascii-Art von der Kommandozeile ermöglicht. Der Benutzer kann den Cursor mit den Pfeiltasten und den Zeichen "malen" durch Drücken der entsprechenden Tasten auf dem Bildschirm bewegen. Es gibt Dialogfelder, in denen der Benutzer Vorder- und Hintergrundfarben sowie fette und blinkende Attribute auswählen kann.



Der Benutzer kann auch rechteckige Bereiche der Leinwand auswählen, um sie zu verschieben, zu kopieren und einzufügen.
Aewan unterstützt auch'intelligentes' horizontales und vertikales Spiegeln (z.B. konvertiert'\' in'/', usw.).

Was Aewan von ähnlichen Projekten unterscheidet, ist die Tatsache, dass es mit mehreren Ebenen (Layern) arbeiten kann und die Möglichkeit hat, Transparenz und Sichtbarkeit für jede Ebene ein- und auszuschalten. Es gibt einen Ebenendialog, über den der Benutzer die Reihenfolge der Ebenen ändern kann. So kann jede Ebene unabhängig voneinander bearbeitet werden, um eine zusammengesetzte Zeichnung zu erzeugen. Anstatt die Ebenen für das Compositing zu verwenden, ist es auch möglich, die Ebenen als Rahmen für eine Animation zu verwenden,
so dass der Benutzer auch Ascii-Animationen mit Aewan erstellen kann.

Aewan kann Animationen in einen "less movie" exportieren, d.h. eine normale Datei, die die Animation zeigt, wenn sie im  Pager oder ähnlichen Programm durchgeblättert wird (sogar Notepad funktioniert, wenn keine Farbe benötigt wird). Es kann auch ein Shellscript exportieren, das die Animation auf dem Terminal abspielt, wenn es ausgeführt wird.

Das Dateiformat ist einfach zu strukturiert, so dass es leicht ist, eine Terminal-basierte Anwendung zu schreiben,
die die Aewan-Dateien zur Anzeige auf dem Bildschirm verwendet. Derzeit läuft es auf dem Linux-Terminal, rxvt, xterm, dem Cygwin-Terminal und der FreeBSD-Konsole. Somit läuft es in der Konsole von Linux, Mac OSX und in der Hybrid Linux Version von Windows 10.

Hier gibt es eine Beschreibung des Dateiformates:
http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=aewan

AEWAN - Ascii-art Editor
http://aewan.sourceforge.net/

Installation unter Debian 9:

sudo apt-get install aewan

Weite Quellen:
Ascii Art Sammlung: http://copy.r74n.com/ascii-art
Ascii Art Archiv: https://www.asciiart.eu/
Ascii-Art Movies: http://www.romanm.ch/ascii-movies
Ascii-Art Online Konverter: https://www.ascii-art-generator.org/de.html
Ascii-Art Online Konverter: https://manytools.org/hacker-tools/convert-images-to-ascii-art/

Internet:

eLinks - Ein textbasierter moderner Webbrowser für die Konsole.
ELinks ist der coolste Kommandozeilen-Webbrowser, tatsächlich ist es der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird als auch moderne Webseiten unterstützt. Er lässt sich sowohl mit der Tastatur als auch der Maus bedienen.



Entwickelt wurde der schlanke und schnelle Textbrowser ELinks von Jonas Fonseca. Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Hier habe ich extra etwas ausführlicher über eLinks geschieben.
Weitere Quellen: http://www.kompx.com/en/elinks.htm

IRC:

Konverter:

Linux:

Mac OS X:

.

Medien:

.

Netzwerke:

IPTraf-(ng)
Wer das Netzwerk-Verhalten von Servern mit Linux-Betriebssystem analysieren will, benötigt ein entsprechendes Monitoring-Tool. Das textbasierte IPTraf ist per Standard selten in Linux-Distributionen installiert. Allerdings ist es in vielen Repositories, wie beispielsweise bei Ubuntu oder Debian enthalten. Somit lässt es sich bequem über die üblichen Mechanismen einspielen. Im Falle Ubuntu oder Debian wird es mit diesem Befehl

sudo apt-get install iptraf-ng

installiert und dann mit Root-Rechten gestartet, da der Paketfilter ausgelesen werden muss.

Das Packet iptraf ist z.B. in Debian 9 nur noch als Platzhalter vorhanden und wurde durch die neue Version iptraf-ng iptraf-(new generation) ersetzt.

# Allgemein
sudo iptraf-ng 
# Beispiel
sudo iptraf-ng ppp0 

Ein universelles Werkzeug, das diverse Netzwerk-Statistiken über das LAN erstellt. IPTraf ist ein interaktives, farbiges auf ncurses-basierendes Netzwerkstatistikprogramm (LAN Monitor), das verschiedene Netzwerk Statistiken erzeugt, einschließlich TCP Info, UDP Zähler, ICMP und OSPF Information, Ethernet Lastinformation, Node Statistiken, IP Checksummen Fehler, usw. Man kann hier diverse Filter einsetzen. Sollte der Server mehr als eine Netzwerkkarte besitzen, kann diese auch explizit ausgewählt und diese bestimmte Netzwerkkarte, die überwacht werden soll, angezeigt  und protokolliert werden.

cbm
Der Color Bandwidth Meter (cbm)
- Ist eine kleine farbige Terminalanwendung, um den aktuellen Datenverkehr durch alle Netzwerkgeräte anzuzeigen.

sudo apt-get install cbm

Quellen: http://www.isotton.com/software/unix/cbm/

Präsentation:

 

Produktivität:

 

RSS:

Screensaver: 

CMatrix
Cmatrix ist ein einfaches Konsolenprogramm, das wie der beliebte Sci-Fi-Film "Matrix" die coolen Matrix-Scrolling-Linien, die als Schriftzeichen aller Art vom oberen Rand des Fensters auf den unteren hinunterfallen im Terminal darstellen.

Installation unter Debian / Ubuntu:

sudo apt-get install cmatrix

Um das Programm zu beenden, 'q' drücken.
Asynchrones Scrollen (wie in dem ursprünglichen Film) geht mit:

cmatrix -a -C green -u 6 -s 

Die Optionen:
-a : ein asynchrones Scrollen
-b : Fettgedruckte Zeichen einschalten
-B : Alle Zeichen fettgedruckt (überschreibt -b)
-f : Erzwingt, dass der linux $TERM-Typ eingeschaltet ist.
-l : Linux-Modus (setzt die Schriftart "matrix.fnt" in der Konsole)
-o : Scrollen oldstyle verwenden
-n : Keine fetten Zeichen (überschreibt -b und -B)
-s : "Bildschirmschoner"-Modus, Beenden beim ersten Tastendruck
-x : X-Fenstermodus, kann verwendet werden wenn xterm mtx.pcf verwendet.
-V : Druckversionsinformationen und Beenden
-u delay : Geschwindigkeit 0 - 9, Voreinstellung 4
-C color : Gültige Farben sind: green, red, blue, white, yellow, cyan, magenta und black.

Alle Optionen und Anweisungen:

man cmatrix

Spiele:

Ascii Sector ist ein kostenloses Konsolen-Spiel für Windows, Mac OS X und Linux. Ein wenig vergleichbar mit Wing Commander Privateer. Man beginnt mit einem einfachen Raumschiff und kann dann Missionen annehmen oder Waren tauschen, um genug Geld zu verdienen, um das eigene Schiff aufzurüsten oder ein neues zu kaufen.

Man kann tödliche Kämpfe im Weltraum, auf dem Boden und an Bord von Raumschiffen austragen, und mit der Skriptsprache Ascii Sector kann man auch eigene Quests für das Spiel erstellen oder Spaß mit den Quests anderer Spieler haben.
Download:http://www.asciisector.net/

Suchen:

System:

htop
Um die Systemleistung anzuzeigen gibt es das Programm htop. Es zeigt interaktiv alle momentan ausgeführten Prozesse sowie deren Belastung im System an. Mit htop kann man allerdings nicht nur durch die Prozessliste scrollen, man hat auch die Möglichkeit, schnell und einfach bestimmte Signale an Prozesse zu senden. Es bietet zudem die Möglichkeit, Prozessbäume anzuzeigen und ist sehr anpassbar.
htopDie Prozesse lassen sich nach verschiedenen Kriterien sortieren, die über F6 ausgewählt werden können. Es erscheint ein kleines Menü am linken Anzeigerand, aus dem das Sortierkriterium ausgewählt werden kann.
<pre>sudo apt-get install htop</pre>
Homepage: http://hisham.hm/htop/

Terminal:

 

Text Editoren:

Nano
Der nano Editor ist ein kleiner, beliebter Text-Editor für Linux, der in der Regel bei den neueren Ubuntu und Debian (+ Raspbian) Installationen dabei ist. Zur Installation gibt man unter Debian / Ubuntu folgenden Befehl ein:

sudo apt-get install nano

Im Editor navigiert man mit den Pfeil- und Bildlauftasten durch die Datei. Aktionen wie Schließen, Speichern, Suchen, Ausschneiden, Kopieren, Einsetzen usw. erledigt man über Tastenkombinationen. Bei angepasster Konfiguration auch mit der Maus.


Die wichtigsten Shortcuts blendet Nano jeweils in den unteren beiden Statuszeilen ein. Nano verwendet in der Voreinstellung die systemweite Einrichtungsdatei /etc/nanorc. Diese kann man als Vorlage zu einer eigenen Konfiguration verwenden um z.B. Farbgebung, Mausaktivität und sogar Syntax Highlighting zu konfigurieren. Mit dem folgenden Befehl erzeugt man im Home-Verzeichnis eine Kopie.

cp /etc/nanorc ~/.nanorc

Bei OpenSuse und Debian ist Farbgebung und das Syntax Highlighting deaktiviert: In /etc/nanorc (bzw., wenn man eine Kopie erzeugt hat, in ~/.nanorc) sind die erforderlichen Einträge zwar vorhanden, aber durch eine vorangestellte Raute auskommentiert. Das kann man mit folgendem Kommando sehr schnell beheben:

sed -i "s/^# include/include/" ~/.nanorc

Für erweiteretes oder angepasstes Syntax Highlighting, wenn man die Farbgebung für die einzelnen Sprachen anpassen möchte, kopiert man die Dateien aus /usr/share/nano/ ins eigene Home-Verzeichnis, zum Beispiel in ein verstecktes Verzeichnis namens ~/.nano und passt sie dann in einem Texteditor an. Danach bindet man diese Syntaxdateien dann in der Datei ~/.nanorc über include ein.

Verschlüsselung:

 

Versions Kontrolle:

 

VPN:>

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 16:36


Überwachung von Dateien und Verzeichnisänderungen unter Linux mit fswatch

fswatch ist ein einfacher plattformübergreifender Dateiänderungs-Monitor für die Befehlszeile, der Benachrichtigungen erält, wenn der Inhalt der angegebenen Dateien oder Verzeichnishierarchien geändert oder modifiziert werden. Er führt vier Arten von Überwachungen auf verschiedenen Betriebssystemen aus, wie z.B.:

  • Ein Monitor, der auf der Dateisystem-Ereignis-API von Apple OS X aufbaut.
  • Ein Monitor, der auf kqueue basiert, einer Benachrichtigungsschnittstelle, die in FreeBSD 4.1 ebenfalls auf vielen *BSD-Systemen, einschließlich OS X, unterstützt wird.
  • Ein Monitor, der auf der File Events Notification API des Solaris-Kernels und seiner Ausgründungen basiert.
  • Ein Monitor, der auf inotify basiert, einem Kernel-Subsystem, das Änderungen am Dateisystem von Anwendungen anzeigt.
  • Ein Monitor basierend auf ReadDirectoryChangesW, einer Windows-API, die Änderungen in einem Verzeichnis aufzeichnet.
  • Ein Monitor, der regelmäßig den Status des Dateisystems überprüft, die Änderungszeiten der Dateien im Speicher hält und Änderungen am Dateisystem manuell ermittelt (was überall funktioniert, wo stat verwendet werden kann).

Die Features von fswatch:
Es Unterstützt mehrere betriebssystemspezifische APIs und ermöglicht rekursive Verzeichnisüberwachung. Es führt Pfadfilterung durch, indem es reguläre Ausdrücke einschließt und ausschließt. Es unterstützt anpassbare Datensatzformate und periodische Leerlauf-Ereignisse.
So kann man fswatch in Linux-Systemen installieren:
Leider ist das fswatch-Paket nicht für die Installation aus den Standard-System-Repositories in allen Linux-Distributionen verfügbar. Die einzige Möglichkeit, die neueste Version von fswatch zu installieren, besteht darin, sich aus den Quellen die Applikation selbst zu kompilieren, wie in der folgenden Installationsanleitung beschrieben:

Zuerst die neueste fswatch tar Datei mit folgendem wget Befehl holen und wie gezeigt installieren:

$ wget https://github.com/emcrisostomo/fswatch/releases/download/1.11.3/fswatch-1.11.3.tar.gz
$ tar -xvzf fswatch-1.11.3.tar.gz
$ cd fswatch-1.11.3
$ ./configure
$ make
$ sudo make install 

Wichtig:
Sicherstellen, dass die GNU GCC (C und C++ Compiler) und Entwicklungswerkzeuge (auf Debian/Ubuntu) auf dem System installiert sind, bevor fswatch aus dem Quelltext kompiliert wird. Wenn nicht, wird es mit folgenden Befehlen auf den jeweiligen Linux-Distributionen installiert:

# yum group install 'Development Tools' [On CentOS/RHEL] 
# dnf group install 'Development Tools' [On Fedora 22+ Versions] 
$ sudo apt-get install build-essential [On Debian/Ubuntu Versions] 

Auf Debian/Ubuntu-Distributionen kann es beim Ausführen des Befehls fswatch zu folgendem Fehler kommen:

fswatch: error while loading shared libraries: libfswatch.so.6: cannot open shared object file: No such file or directory

Um dies zu beheben, muss man die Links und den Cache zu den dynamischen Bibliotheken aktualisieren, bevor fswatch verwendet werden kann. Dies erledigt man mit folgendem Befehl:

$ sudo ldconfig

Benutzung von fswatch unter Linux
Die allgemeine Syntax für die Ausführung von fswatch ist:

$ fswatch [option] [path]

Unter Linux wird empfohlen, den Standardmonitor inotify zu verwenden. Die verfügbaren Monitore können mit der Option -M oder - list-monitors aufgelistet werden:

$ fswatch -M
$ fswatch --list-monitors

Mit dem folgenden Befehl kann man Änderungen im aktuellen Verzeichnis z.B. /home/user verfolgen, wobei die Ereignisse alle 4 Sekunden an die Standardausgabe gesendet werden. Mit der Option -l oder --latency kann man die Latenzzeit in Sekunden einstellen, die Standardeinstellung ist 1 Sekunde.

$ fswatch -l 4 . 

fswatch - Änderungen im Home-Verzeichnis überwachen Dieser Befehl überwacht alle 5 Sekunden die Änderungen an der Datei /var/log/auth.log:

$ fswatch -l 5 /var/log/auth.log 

Mit der Option -t oder --timestamp wird der Zeitstempel für jedes Ereignis gedruckt, um die Uhrzeit im UTC-Format zu drucken, muss die Option -u oder --utf-time verwendet wwerden. Man kann die Zeit auch mit der Option -f oder --format formatieren:

$ fswatch --timestamp /var/log/auth.log

Als nächstes weist -x oder --event-flags fswatch an, die Ereignisflags neben dem Ereignispfad zu drucken. Man kann die Option -event-field-seperator verwenden, um Ereignisse mit dem entsprechenden Trennzeichen auszugeben.

$ fswatch --events-flags ~ /var/log/auth.log

Um den numerischen Wert eines Ereignisses auszugeben, das Änderungen im Heimatverzeichnis und der Datei /var/log/auth.log anzeigt, verwendet man die Option -n oder --numeric wie unten beschrieben:

$ fswatch --numeric ~ /var/log/auth.log

Weitere detaillierte Verwendungsmöglichkeiten und Informationen findet man in der fswatch-Manualseite:

$ man fswatch

oder direkt im fswatch Github Repository

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:20


Debian mit fail2ban gegen Brute-Force und DDoS Attacken absichern

Fail2Ban ist ein kleines, ressourcenschonendes Programm, das Logfiles verschiedenster Programme (z.B.: Apache, ssh, postfix …) überwacht und basierend auf Einträgen in den Logfiles Ereignisse auslöst. Ein sogenannter "Logparser". Zusammen mit einem ssh-Server können damit z.B. die Anzahl der Einloggversuche begrenzt werden. Die Verwendung von Fail2Ban ist aber noch viel universeller. Gerade auf Mehrbenutzersystemen ist es oft nicht möglich den ssh-Port zu verändern weil viele Benutzer einfach auf den Rechner zugreifen müssen. Leider können auch Angreifer relativ leicht in das System durch die Brute-Force-Methode einbrechen, indem sie einfach solange Kombinationen aus Benutzername und Passwort ausprobieren, bis sie ein passendes Paar gefunden haben. Das Programm fail2ban verhindert genau dieses "ausprobieren". Es untersucht die Logfiles des Systems nach fehlgeschlagenen Loginversuchen und sperrt dann die Internetadresse (IP) des Angreifers für eine gewisse Zeit.

sudo apt-get update
sudo apt-get install fail2ban

Danach kann eine eigene Konfigurationsdatei /etc/fail2ban/jail.local angelegt werden, welche die Voreinstellungen der /etc/fail2ban/jail.conf überschreibt. Oder man erstellt sich am Besten einfach eine Kopie der Standart Konfigurationsdatei, die man den gewünschten Anforderungen anpasst :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Wichtig:
Immer sich selber (eigene IP) in die ignore-ip "Whiteliste" der jail.conf eintragen, damit man sich nicht selber aussperrt oder ausgesperrt werden kann.

sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
 
# "ignoreip" kann eine IP-Adresse, eine CIDR-Maske oder ein DNS-Host sein. 
# Fail2ban wird nicht einen Host verbieten, der mit einer Adresse in dieser Liste übereinstimmt. 
# Mehrere Adressen können sein mit Leerzeichen (und/oder Komma) definiert werden.
# Daran denken immer einen Client Zugang für root lassen. 
# ignoreip = 127.0.0.1/8 192.168.0.11 (Hier wird die Whitelist definiert)  
ignoreip = 127.0.0.1/8 192.168.0.1/24 148.251.187.218 87.138.XXX.XXX 217.110.XX.XXX 217.110.XX.XXX
 
# "bantime" is the number of seconds that a host is banned.
#bantime = 604800 # (= eine Woche)
#bantime = 86400  # (= ein Tag)
#bantime = 600     #(= 10 Minuten)
bantime  = 3600   # (=1 Stunde)
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds. 
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
 
#
# JAILS
#

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
#
# SSH servers
# 

[ssh]
enabled  = true
port     = ssh,https
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

[ssh-ddos] enabled = true port = ssh,https filter = sshd-ddos logpath = /var/log/auth.log bantime = 604800 maxretry = 2 [sshd] # SSH Login absichern enabled = true logpath = /var/log/auth.log maxretry = 3

Dienst neu starten:

sudo service fail2ban restart 
# oder 
sudo /etc/init.d/fail2ban restart

Folgende Einträge sollten in der jail.local immer aktiviert sein:

ssh
dropbear
pam-generic
ssh-dos
apache all

Alle Bans werden in der /var/log/fail2ban.log gespeichert. Und wir ermitteln wir die Login Versuche aus der log /var/log/apache2/error.log oder entsprechende andere Log's.

tail -f /var/log/apache2/error.log  #(realtime zuschauen)

Nachschauen welche Regeln durch Fail2Ban definiert wurden:

iptables -L

Status Prüfen:

sudo fail2ban-client status

Oder speziell nur den fail2ban Status apache:

sudo fail2ban-client status apache

Man kann IP-Adressen auch manuell sperren oder aufheben. Zum Beispiel, um eine IP-Adresse (192.168.10.15) mit einer apache-JAIL Regel auszusperren:

sudo fail2ban-client set apache banip 192.168.10.15

Dies kann auch wieder entsperrt werden.

sudo fail2ban-client set apache unbanip 192.168.10.15

Auf diese Weise kann man schnell Fail2ban testen, ob es wie erwartet funktioniert oder nicht. Die Verwendung von fail2ban ist ein guter und einfacher Weg, um DDoS Attacken und Brute-Force-Angriffe zu stoppen. Es ist auch eine gute Möglichkeit, die Anzahl der Bad Requests, die man erhält, zu begrenzen. LOG's anschauen und reagieren Wöchentlich sollte man eigentlich bei einem Produktivserver die LOGS in /var/log auswerten und evt. Reaktionen tätigen.
Weitergehende Infos:
https://linuxwiki.de/Fail2Ban
https://wiki.ubuntuusers.de/fail2ban/
https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 09:44


MySQL Dump mit Skript ausführen

Auch von Datenbanken sollten regelmässig Backups erstellt werden. Um ein Backup einer Datenbank oder gleich mehreren anzulegen empfiehlt sich mysqldump. Es gibt auch die Möglichkeit ein Backup mit phpmyadmin oder ähnlichen Frontends anzufertigen. Allerdings müssen diese oft extra installiert werden und bei umfangreichen Datenbanken stösst man schnell an Einschränkungen wie z.B PHP-Timeouts. Mysql/MariaDB bringt bei der Installation schon die nötigen Backup-Tools mit. Daher müssen diese nicht extra installiert werden.
Das dump_databases.sh - Script sichert mittels mysqldump alle bekannten Datenbanken (db1_1, db2_2 und db3_3 ...) in /root/mysql_backup in den Unterordner /act und rotiert ggf. vorher /act nach /prev.
Scriptdatei: dump_databases.sh in /root/

#!/bin/bash

# variables
cnf_file="/root/.mysql_dump.cnf"
save_to="/root/mysql_backup"
db_directory=$1
db_list="db1_1 db2_2 db3_3"

# check if save directory exists
if [ ! -d ${save_to} ]; then
	mkdir -p ${save_to}
fi

# set rights for it
chmod 0700 ${save_to}

# log start
date +"%Y-%m-%d %H:%M:%S: *** starting db backup script" >> ${save_to}/dump.log

# check if 'prev' directory exists
if [ -d "${save_to}/prev" ]; then

	# delete previous backup
	date +"%Y-%m-%d %H:%M:%S: delete /prev" >> ${save_to}/dump.log
	rm -fR ${save_to}/prev
fi

# check if 'act' directory exists
if [ -d "${save_to}/act" ]; then

	# move actual to previous backup
	date +"%Y-%m-%d %H:%M:%S: move /act to /prev" >> ${save_to}/dump.log
	mv ${save_to}/act ${save_to}/prev
fi

# create 'act' directory
date +"%Y-%m-%d %H:%M:%S: create /act" >> ${save_to}/dump.log
mkdir -p ${save_to}/act

# run through db directory
for db_name in ${db_list}; do

    # if name of db exists as directory
	if [[ -d "${db_directory}/${db_name}" ]]; then

		# append log
		date +"%Y-%m-%d %H:%M:%S: dump ${db_name} to /act" >> ${save_to}/dump.log
		
		# Je nach Serverauslastung und Datenbankgroesse gibt es unterschiedliche Möglichkeiten (plain, gzip, xz, bzip2) das SQL zu komprimieren.
                # Aus eigenen Messungen einer 5GB und 200GB großen, bereits teilkomprimierten DB ist xz -1 der beste Kompromiss aus Kompressionlevel 
                # und -geschwindigkeit (Auf -1 ist xz 3x schneller als bzip2 bei nur ca. 9% größerem Archiv.). 
                # Daher ist das auch standardmässig im Script voreingestellt. Falls eine andere Kompression gewünscht ist, einfach die jeweilige Zeile 
                # in der dump_databases.sh ein- und alle andere auskommentieren, bzw. ändern

		# dump db plain to sql file
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} > ${save_to}/act/${db_name}.sql 2>> ${save_to}/dump.log

		# dump db to gzip file (very fast, low compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | gzip > ${save_to}/act/${db_name}.sql.gz 2>> ${save_to}/dump.log

		# dump db to xz file (normal to very slow, great compression)
		mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | xz -1 > ${save_to}/act/${db_name}.sql.xz 2>> ${save_to}/dump.log

		# dump db to bzip2 file (slow, good compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | bzip2 > ${save_to}/act/${db_name}.sql.bz2 2>> ${save_to}/dump.log
	fi
done


# log finish
date +"%Y-%m-%d %H:%M:%S: finished db backup script" >> ${save_to}/dump.log

exit 0

ausführen als root:

Folgendes ist als als root allerdings vorher durchzuführen, damit mysqldump per crontab gestartet wird. Ggf. muss die Angabe zum Pfad des MySQL-Verzeichnisses (default: /var/lib/mysql ) im folgeden angepasst werden. Das Script braucht den Pfad um vor dem Dump zu prüfen, welche der DBs existiert.

cd ~
 
# Optional externer Download des Scripts vom anderen Server (for root only)
# wget -nv -N http://my_own_github_archive.int/debianinstall/server/dump_databases.sh

chmod 0700 dump_databases.sh
chmod +x dump_databases.sh

# create crontab.txt to define CronJobs
printf "# dumping databases mondays and fridays at 03:00\n" >> /root/crontab.txt
printf "0  3 * * 1 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
printf "0  3 * * 5 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
 
# set crontab configruation with crontab.txt (list actual config with crontab -l)
crontab crontab.txt
 
# create .mysql_dump.cnf and make it only accessable to root (don't write a password in command line, edit it in file)
printf "[client]\n" > /root/.mysql_dump.cnf
printf "host     = localhost\n" >> /root/.mysql_dump.cnf
printf "user     = root\n" >> /root/.mysql_dump.cnf
printf "password = \n" >> /root/.mysql_dump.cnf
printf "socket   = /var/run/mysqld/mysqld.sock" >> /root/.mysql_dump.cnf
chmod 0600 .mysql_dump.cnf

In der erstellten .mysql_dump.cnf bitte manuell das MySQL-Passwort setzen: /root/.mysql_dump.cnf
[client]
host = localhost
user = root
password = Mein_Passwort
socket = /var/run/mysqld/mysqld.sock

Verfasser: Andreas Preuss
Letzte Änderung: 05-06-2018 17:07


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Anpassung der Linux Bash-Prompt Eingabe mit tput

Das Aussehen des Bash Promptes wird in der Variablen PS1 in der Datei ~/.bashrc festgelegt. Die PS1 Variable besteht im einfachsten Fall aus einer Zeichenkette. Zum Beispiel:

PS1='MyPrompt >'
# oder einfach nur
PS1='>'
# Es können aber auch Befehle benutzt werden.
PS1='´pwd´ >'
# Hier würde zum Beispiel das aktuelle Arbeitsverzeichniss gefolgt von einem Leerzeichen und dem größer Zeichen als Prompt angezeigt werden.

In diesem Beispiel wird der Username (\u), Hostname (\h) und der Vollständige Pfad des aktuellen Arbeitsverzeichnisses (\w) angezeigt.

PS1="\u@\h \w> "

Mit dem Linux Befehl tput lassen sich hier auf sehr einfache Weise Color und Cursor Verhalten anpassen:

$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"

In der PS1-Umgebungsvariablen kann man jeden beliebigen Linux-Befehl direkt ausführen, indem man ihn im Format $(linux_command) angibt. Im folgenden Beispiel wird der Befehl $(date) ausgeführt, um die aktuelle Uhrzeit in der Eingabeaufforderung anzuzeigen.

PS1="\u@\h [\$(date +%k:%M:%S)]> " # Formatierte Zeitausgabe
# oder
PS1="\u@\h [\t]> " # hh:mm:ss Format
# oder
PS1="[\@] \u@\h> " # 12-Stunden (am/pm) Format

Aber auch in Scripten oder einfach so im Terminal hat man vielleicht den Wunsch eine Hervorhebung der Textausgabe durchführen zu können. Dies geht sehr bequem mit dem tput Befehl und seinen Einstellungsparametern:

tput Zeilen- Spalten- und Cursorposition:
    tput cols
    tput lines
    tput cup 6 8 - Cursorposition einstellen
    tput cnorm - Cursor anzeigen
    tput civis - Cursor verstecken

tput Farbeinstellungs Eigenschaften:

    tput setab [1-7] - Setzen der Hintergrundfarbe mittels ANSI-Escape
    tput setb  [1-7] - Setzen der Hintergrundfarbe
    tput setaf [1-7] - Setzen der Vordergrundfarbe mittels ANSI-Escape
    tput setf  [1-7] - Setzen der Vordergrundfarbe

tput Text Mode Eigenschaften:

    tput bold - Fettdruck einstellen
    tput dim  - halbhellen Modus einschalten
    tput smul - Unterstreichung starten
    tput rmul - Unterstreichung verlassen
    tput rev  - Umkehrung einschalten
    tput smso - In den Hervorgehobenen-Modus wechseln (Fettdruck bei rxvt)
    tput rmso - Verlassen des Standout-Modus
    tput sgr0 - Alle Attribute ausschalten

    tput reset - Alle Einstellungen zurücksetzen

Beispiel:

echo 'tput smul'Unterstrichen'tput rmul'

Farb-Codes für tput:
0=Schwarz, 1=Rot, 2=Grün, 3=Gelb, 4=Blau, 5=Magenta, 6=Cyan, 7=Weiß
tput ermöglicht es auch, eine Reihe von Befehlen gleichzeitig auszuführen. Wenn man beispielsweise den Bildschirm löschen und den Cursor auf eine bestimmte Position setzen möchte, kann man wie folgt vorgehen:

$ tput -S < clear
> cup 2 4
> END

Hinweis: Wenn man Vorder- und Hintergrund des Terminals auf die gleiche Farbe setzt, kann man den Cursor nicht mehr sehen. Zum Zurücksetzen "tput reset" ausführen.

Verfasser: Andreas Preuss
Letzte Änderung: 06-06-2018 16:54


MariaDB Performance Optimierung

Heute sind MySQL und MariaDB eines der am häufigsten verwendeten RDBMS für Webanwendungen wie WordPress, Joomla, Magento und andere. Diese Beschreibung zeigt einige grundlegende, aber nützliche Tipps, wie man die Leistung von MySQL/MariaDB optimieren könnte. Wir gehen hierbei davon aus, dass bereits MySQL oder MariaDB installiert wurde.
Jedes MySQL-Setup ist einzigartig und erfordert zusätzliche Überlegungen, bevor Änderungen vorgenommen werden. Die MySQL/MariaDB-Konfigurationsdatei befindet sich in /etc/my.cnf. Jedes Mal, wenn diese Datei geändert wird, muss auch der MySQL-Dienst neu gestartet werden, damit die neuen Änderungen wirksam werden.

# So kann man den MySQL Server neu starten:
 /etc/init.d/mysql restart

# So kann man den Server anhalten:
/etc/init.d/mysql stop

# So kann man den MySQL Server starten nachdem er gestoppt wurde 
/etc/init.d/mysql start

Swappiness in MySQL vermeiden
Swapping ist ein Prozess, der auftritt, wenn das System einen Teil des Speichers auf einen speziellen Speicherplatz namens "swap" verschiebt. Das Ereignis wird normalerweise angezeigt, wenn der physische Speicher Ihres Systems erschöpft ist und das System die Informationen auf die Festplatte verschoben hat, anstatt etwas RAM freizugeben. Die Festplatte ist viel langsamer als das RAM.
Standardmässig ist die Option aktiviert:

# sysctl vm.swappiness 
vm.swappiness = 60

# Um Swappiness zu deaktivieren, ändert man den Eintrag auf:
sysctl -w vm.swappiness=0

MySQL Max-Verbindungen einstellen
Die Direktive max_connections sagt dem Server, wie viele gleichzeitige Verbindungen erlaubt sind. Der MySQL/MariaDB-Server erlaubt den in max_connections + 1 angegebenen Wert für Benutzer mit SUPER-Privilegien. Die Verbindung wird nur für die Zeit geöffnet, in der die MySQL-Abfrage ausgeführt wird - danach wird sie geschlossen und eine neue Verbindung kann an ihre Stelle treten. Zu viele Verbindungen können eine hohe RAM-Auslastung verursachen und den MySQL-Server sperren. Normalerweise benötigen man für kleine Websites zwischen 100-200 Verbindungen, während größere Websites 500-800 oder mehr benötigen. Der Wert, den man hier verwendet, hängt stark von der speziellen MySQL/MariaDB-Nutzung ab.
So kann man den Wert von max_connections dynamisch ändern, ohne den MySQL-Dienst neu starten zu müssen:

# mysql -u root -p
mysql> set global max_connections := 300;

MySQL thread_cache_size konfigurieren
Die Direktive thread_cache_size legt die Anzahl der Threads fest, die der Server zwischenspeichern soll. Wenn der Client die Verbindung trennt, werden seine Threads in den Cache gestellt, wenn sie kleiner als die thread_cache_size sind. Weitere Anfragen werden durch die Verwendung der im Cache gespeicherten Threads abgeschlossen. Um Ihre Performance zu verbessern, kann man die thread_cache_size auf eine relativ hohe Zahl setzen. Um die Thread-Cache-Trefferrate zu ermitteln, kann man die folgende Technik verwenden:

mysql> show status like 'Threads_created';    # Threads_erzeugt
mysql> show status like 'Connections';        # Verbindungen

Folgende Formel kann nun angewendet werden, um den Prozentsatz der Thread-Cache-Trefferrate zu berechnen:

100 - ((Threads_erzeugt / Verbindungen) * 100)

Wenn man eine niedrige Zahl erhält, bedeutet das, dass die meisten der neuen mysql-Verbindungen einen neuen Thread starten, anstatt aus dem Cache zu laden. In solchen Fällen würde man sicherlich die thread_cache_size erhöhen wollen. Das Gute dabei ist, dass die thread_cache_size dynamisch geändert werden kann, ohne dass der MySQL-Dienst neu gestartet werden muss. Dies kann man so erreichen:

mysql> set global thread_cache_size = 16;

Deaktivieren des MySQL Reverse DNS-Lookups
Standardmäßig führt MySQL/MariaDB einen DNS-Lookup der IP-Adresse/Hostname des Benutzers durch, von dem die Verbindung kommt. Für jede Client-Verbindung wird die IP-Adresse überprüft, indem sie in einen Hostnamen aufgelöst wird. Danach wird der Hostname wieder in eine IP aufgelöst, um sicherzustellen, dass beide übereinstimmen. Dies kann leider zu Verzögerungen bei schlecht konfiguriertem DNS oder Problemen mit dem DNS-Server führen. Aus diesem Grund könnte man den Reverse-DNS-Lookup deaktivieren, indem man folgendes in der Konfigurationsdatei hinzufügt:

[mysqld]
# Skip reverse DNS lookup of clients
skip-name-resolve

Nach dieser Änderung nicht vergessen den MySQL Dienst neu zu starten.

MySQL query_cache_size konfigurieren
Wenn man viele sich wiederholende Abfragen hat und sich die Daten nicht oft ändern, könnte man den Query-Cache anpassen. Oft wird das Konzept hinter der query_cache_size nicht verstanden und man setzt diesen Wert auf Gigabyte, was zu einer Verschlechterung der Performance führt. Der Grund dafür ist die Tatsache, dass Threads den Cache während der Updates sperren müssen. Normalerweise sollte ein Wert von 200-300 MB mehr als ausreichend sein. Wenn die Website relativ klein ist, kann man versuchen, den Wert von 64M zu erhöhen und die Zeit etwas verlängern. Folgenden Einstellungen können in der MySQL-Konfigurationsdatei vorgenommen werden:

query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M

tmp_table_size und max_heap_table_size konfigurieren
(Nur bei Verwendung von MyISAM) Beide Direktiven sollten die gleiche Größe haben und das Schreiben auf Datenträgern möglichst verhindern. Die tmp_table_size ist die maximale Größe der internen In-Memory-Tabellen. Bei Überschreitung des betreffenden Limits wird die Tabelle in die MyISAM-Tabelle auf der Festplatte konvertiert. Dies wirkt sich auf die Performance der Datenbank aus. Empfehlung in der Regel die Angabe von 64M für beide Werte für jedes GB RAM auf dem Server.

[mysqld]
tmp_table_size= 64M
max_heap_table_size= 64M

Aktivieren von MySQL Slow Query Logs
Das Protokollieren langsamer Abfragen kann helfen, Probleme mit der Datenbank zu ermitteln und diese zu beheben. Dies kann einfach durch Hinzufügen der folgenden Werte in der MySQL-Konfigurationsdatei aktiviert werden:

slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1

Die erste Direktive ermöglicht die Protokollierung von langsamen Abfragen, während die zweite Direktive MySQL sagt, wo die eigentliche Protokolldatei gespeichert werden soll. Verwendet man long_query_time, um die Zeitspanne zu definieren, die als lang angesehen wird, bis die MySQL-Abfrage abgeschlossen ist.

Überprüfen auf ungenutzte MySQL-Verbindungen (Idle Connections)
Leere Verbindungen verbrauchen Ressourcen und sollten nach Möglichkeit unterbrochen oder aufgefrischt werden. Solche Verbindungen befinden sich im "Schlaf"-Zustand und bleiben in der Regel über einen längeren Zeitraum erhalten. Um nach leeren Verbindungen zu suchen, kann man den folgenden Befehl ausführen:

# mysqladmin processlist -u root -p | grep "Sleep"

Dies gibt eine Liste der Prozesse, die sich im Ruhezustand befinden aus. Das Ereignis erscheint, wenn der Code eine persistente Verbindung zur Datenbank verwendet. Bei Verwendung von PHP kann dieses Ereignis bei Verwendung von mysql_pconnect auftreten, das die Verbindung öffnet, danach Abfragen ausführt, die Authentifizierung entfernt und die Verbindung offen lässt. Dies führt dazu, dass alle Puffer pro Thread im Speicher gehalten werden, bis der Thread stirbt. Das erste, was Sie hier tun wäre, ist, den Code zu überprüfen und zu reparieren. Wenn man keinen Zugriff auf den ausgeführten Code hat, sollte man die wait_timeout-Direktive ändern. Der Standardwert ist 28800 Sekunden. Man kann ihn sicher auf etwa 60 Sekunden reduzieren:

wait_timeout=60

MySQL max_allowed_packet setzen
MySQL teilt Daten in Pakete auf. Normalerweise wird ein einzelnes Paket als eine Zeile betrachtet, die an einen Client gesendet wird. Die Direktive max_allowed_packet definiert die maximale Paketgröße, die gesendet werden kann. Wenn man diesen Wert zu niedrig setzt, kann eine Abfrage zum Stillstand kommen und man erhält einen Fehler im MySQL-Fehlerprotokoll. Es wird empfohlen, den Wert auf die Größe des größten Pakets zu setzen. Änderung in der Datei my.ini oder ~/.my.cnf, indem man die einzelne Zeile unter [mysqld] die Datei aufnimmt:

nano /etc/mysql/my.cnf
max_allowed_packet=500M # (natürlich individuell, je nachdem was man braucht) unter der Sektion [MYSQLD]!  Nur am unteren Rand der Datei zu platzieren, funktioniert nicht!
# So kann die Einstellung sofort für alle geändert werden, bis der Server neu startet:
SET GLOBAL max_allowed_packet=1073741824;

MySQL-Leistungstuning prüfen
Die Messung der MySQL/MariaDB-Performance sollte man regelmäßig durchführen. Dies zeigt immer auf, ob sich etwas in der Ressourcennutzung ändert oder verbessert werden muss. Für das Benchmarking stehen viele Tools zur Verfügung, aber ich möchte Ihnen eines vorschlagen, das einfach und leicht zu bedienen ist. Das Tool heißt mysqltuner. Um es herunterzuladen und auszuführen, verwendet man den folgenden Befehlssatz: Quelle: https://github.com/major/MySQLTuner-perl/

# wget http://mysqltuner.pl/ -O mysqltuner.pl
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
# perl mysqltuner.pl
# oder
# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xf master
# cd MySQLTuner-perl/
# ./mysqltuner.pl 

Man erhält einen ausführlichen Bericht über den MySQL-Service und Empfehlungstipps.

Optimieren und Reparieren von MySQL-Datenbanken
Manchmal stürzen MySQL/MariaDB-Datenbanktabellen ziemlich leicht ab, besonders wenn der Server unerwartet heruntergefahren wird, plötzlich das Dateisystem beschädigt wird oder während des Kopiervorgangs, wenn noch auf die Datenbank zugegriffen wird. Überraschenderweise gibt es ein kostenloses Open-Source-Tool namens'mysqlcheck', das Datenbanken aller Tabellen unter Linux automatisch überprüft, repariert und optimiert.

# mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
# mysqlcheck -u root -p --auto-repair --check --optimize databasename
# oder
# mysqlcheck -u root -p --auto-repair -c -o your_database
# mysqlcheck -u root -p --auto-repair -c -o --all-databases

Wenn man nun wissen will, was der Befehl während der Prüfung macht, fügt man einfach dem Parameter --debug-info wie unten gezeigt hinzu. Dies ist hilfreich, wenn man z.B. eine große Tabelle überprüft.

# mysqlcheck --debug-info -u root -p --auto-repair -c -o your_database your_table
Enter password:
# Ausgabe z.B:
your_database.your_table  - Table is already up to date

User time 0.00, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 344, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 12, Involuntary context switches 9

 

Sämtliche Änderungen sollten in einer separaten Datei, die von der /etc/mysql/my.cnf includiert wird eingetragen werden, damit bei eventuellen Software Upgrades keine Einstellungen überschrieben werden können.
Ausgehend von meiner bisherigen MariaDB Erfahrung habe ich für meine Anforderungen in meine mariadb.conf Datei folgendes ergänzt:

# /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
#############################################
# Bessere CPU-Auslastung mittels pool-of-threads statt one-thread-per-connection
#  -> https://mariadb.com/kb/en/threadpool-in-55/
thread_handling         = pool-of-threads
 
# Die soll MariaDB selbstständig auf die Anzahl der Cores einstellen
#thread_pool_size       = 12
 
# Nach wie viel ms soll ein neuer Thread in einem Pool generiert werden, wenn der aktive Thread nicht fertig wird
thread_pool_stall_limit = 20
 
# Wie viele Thread sind pro Pool sind möglich
thread_pool_max_threads = 300
 
# Das ist noch unklar, doch trotz pool-of-threads limitiert weiterhin max_connections, daher hier pool_size * max_threads
max_connections         = 3600
interactive_timeout     = 1080
wait_timeout            = 360
 
# Mit diesen Port kann trotzdem zugegriffen werden, wenn alle Threads ausgeschöpft sind. Gut zur Administration
extra_port             = 3307
extra-max-connections  = 48

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 23:11


Nützliche Shell-Aliase für Linux / Unix & Mac OS X

Ein Bash-Alias ist nichts anderes als die Abkürzung zu Befehlen. Der Alias-Befehl erlaubt es dem Benutzer, einen beliebigen Befehl oder eine Gruppe von Befehlen (einschließlich Optionen und Dateinamen) durch Eingabe eines einzigen Wortes oder Zeichens zu starten. Verwende den Befehl alias, um eine Liste aller definierten Aliase in deinem System anzuzeigen. Man kann benutzerdefinierte Aliase zur ~/.bashrc-Datei hinzufügen. Mit diesen Aliasen hat man die Möglichkeit sich die Tippzeit verkürzen, intelligent zu arbeiten und die Produktivität an der Eingabeaufforderung zu erhöhen. Beispielsweise können lange Befehle, die man häufig braucht, durch eine kürzere Version ebenso benutzt werden. Dieser Faq-Beitrag zeigt, wie man Aliase erstellt und verwendet und gibt meiner Meinung ein paar praktische Beispiele für Bash-Shell-Aliase. Die allgemeine Syntax für den Alias-Befehl für die Bash-Shell lautet wie folgt:

alias
..
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
alias g-commit='git add . --all && git commit -a -m '
alias g-log='git log --pretty=format:"%h - %an, %ar : %s"'
alias g-stash='git add . --all && git stash save '
alias l='ls ${LS_OPTIONS} -lA'
alias ll='ls ${LS_OPTIONS} -l'
alias ls='ls ${LS_OPTIONS}'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...

Standardmässig zeigt der Befehl "alias" eine Liste von Aliasen an, die für den aktuellen Benutzer definiert sind. Um einen Alias zu erstellen, verwendet man die folgende Syntax:

alias name=value
alias name='command'
alias name='command arg1 arg2'
alias name='/path/to/script'
alias name='/path/to/script.pl arg1 arg2'

In diesem Beispiel ist Alias c für den häufig verwendeten Clear-Befehl, der den Bildschirm löscht, indem man nur den Buchstaben c eingibt und die ENTER-Taste drückt:

alias c='clear'

Wie man einen Bash-Alias löscht/entfernt
Aliase werden mit dem Befehl alias erstellt und aufgelistet und mit dem Befehl unalias entfernt. Die Syntax ist:

unalias aliasname
unalias c 
unalias foo

Hier sollte man auch den Alias aus der Datei ~/.bashrc mit einem Texteditor löschen.

Wie man Bash-Shell-Aliase dauerhaft macht
Der Alias c bleibt nur während der aktuellen Anmeldesitzung gültig. Sobald man sich ausloggt oder das System neu startet, ist der Alias c verschwunden. Um dieses Problem zu vermeiden, fügen man den gewünschten Alias in die eigene ~/.bashrc-Datei hinzu:

nano ~/.bashrc
# Der Alias c für den aktuellen Benutzer kann durch Eingabe der folgenden Zeile dauerhaft gemacht werden:
alias c='clear'

Datei speichern und schliessen. Systemweite Aliase (d.h. Aliase für alle Benutzer) können in die Datei /etc/bashrc mit root-Rechten eingetragen werden. Bitte beachten, der Alias-Befehl wird dann in verschiedene Shells eingebaut, darunter ksh, tcsh/csh, ash, bash und andere. Ein Hinweis zum privilegierten Zugriff Man kann folgenden Code in ~/.bashrc hinzufügen:

# if user is not root, pass all commands via sudo #
if [ $UID -ne 0 ]; then
    alias reboot='sudo reboot'
    alias update='sudo apt-get upgrade'
fi

OS-spezifische Aliase
Man kann den Code wie folgt in ~/.bashrc mit der case-Anweisung hinzufügen:

### Get os name via uname ###
_myos="$(uname)"
 
### add alias as per os using $_myos ###
case $_myos in
   Linux) alias foo='/path/to/linux/bin/foo';;
   FreeBSD|OpenBSD) alias foo='/path/to/bsd/bin/foo' ;;
   SunOS) alias foo='/path/to/sunos/bin/foo' ;;
   *) ;;
esac

Aliase sind benutzerabhängig. Dies bedeutet, dass jeder Benutzer für seinen Account beliebig viele Aliase anlegen kann. Andere Benutzer können von ihrem eigenen Account nicht auf diese Abkürzungen zugreifen. So kann jeder Benutzer seine individuellen Aliase einrichten. Außerdem kann ein Benutzer die Aliase des anderen Benutzers so nicht böswillig manipulieren. Natürlich gibt es auch viele Situationen, in denen ein Alias wirklich praktisch ist. So muss man zum Mounten einer CD je nach System entweder mount /cdrom wie bei Debian (und seinen Derivaten, z.B. Storm Linux und Corel Linux) und SUSE oder mount /mnt/cdrom wie bei Red Hat (und seinen Derivaten, z.B. Mandrake) eingeben. Man erspart sich Tipparbeit und vereinheitlicht das Ganze durch folgende Aliase:

alias cdrom="mount /cdrom" alias ucdrom="umount /cdrom"

Der auszuführende Befehl der Aliase ist natürlich anzupassen, wenn der Mountpunkt an einer anderen Stelle liegt. Wenn man bestimmte Folgen von Befehlen häufig eingibt, macht es immer Sinn, sich dafür einen Alias einzurichten. Mehrere Befehle können in der Bash durch ein Semikolon voneinander getrennt in eine Zeile geschrieben werden. Beispiel:

alias cdmnt="mount /mnt/cdrom; cd /mnt/cdrom; ls"

 

Im Folgenden habe ich weitere Beispiele aufgelistet, die als alias in Frage kommen könnten:

# Steuerung der ls Befehlsausgabe
# Der Befehl ls listet den Inhalt des Verzeichnisses auf und die Ausgabe wird eingefärbt:
## colrierung der ls Ausgabe ##
alias ls='ls --color=auto'
 
## Verwendung eines langen Listenformates ##
alias ll='ls -la'

## Zeige versteckte Dateien ##
alias l.='ls -d .* --color=auto'

# Steuerung des cd-Befehlsverhaltens
## Loswerden deR Meldung Befehl ist nicht vorhanden. ##
alias cd..='cd ..'

# Schnell aus dem Verzeichnis kommen
## ein schneller Weg, um aus dem aktuellen Verzeichnis herauszukommen. ##
alias ..='cd ..'
alias ...='cd ../../../'
alias ....='cd ../../../../'
alias .....='cd ../../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../..'

# Ausgabe des Steuerbefehls grep
## Der Befehl grep ist ein Befehlszeilenprogramm zum Durchsuchen von Klartextdateien nach Zeilen, die einem regulären Ausdruck entsprechen:
## Einfärben der Grep-Befehlsausgabe für einfache Bedienung (gut für Log-Dateien)##
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# Starte Rechner mit mathematischer Unterstützung
alias bc='bc -l'

# Sha1-Bericht erstellen
alias sha1='openssl sha1'

# Erstellen von übergeordneten Verzeichnissen bei Bedarf
## Der mkdir Befehl wird verwendet, um ein Verzeichnis zu erstellen:
alias mkdir='mkdir -pv'

# Diff-Ausgabe einfärben
## Man kann Dateien Zeile für Zeile mit diff vergleichen und ein Tool namens colordiff verwenden, um die Ausgabe einzufärben:
alias diff='colordiff'

# Macht die Ausgabe von Mount-Befehlen schön und lesbar.
alias mount='mount |column -t'

# Einfache Befehlskürzel zur Zeitersparnis
alias h='history'
alias j='jobs -l'

# Erstellen eines neuen Befehlssatzes
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias nowtime=now
alias nowdate='date +"%d-%m-%Y"'

# Den Editor vim als Standard setzen
alias vi=vim
alias svi='sudo vi'
alias vis='vim "+set si"'
alias edit='vim'

# Kontrollausgabe des Netzwerktools ping
## Stopt nach dem Senden der Anzahl der ECHO_REQUEST-Pakete (wie bei der Windows Eingabeaufforderung)#
alias ping='ping -c 5'
# Nicht abwarten Intervall 1 Sekunde, Schnellgang #
alias fastping='ping -c 100 -s.2'

# Zeige offene ports
## Verwendung des Befehls netstat, um schnell alle TCP/UDP-Ports auf dem Server aufzulisten:
alias ports='netstat -tulanp'

# Wakeup sleeping servers
# Wake-on-LAN (WOL) is an Ethernet networking standard that allows a server to be turned on by a network message. You can quickly wakeup nas devices and server using the following aliases:
## replace mac with your actual server mac address #
alias wakeupnas01='/usr/bin/wakeonlan 00:11:32:11:15:FC'
alias wakeupnas02='/usr/bin/wakeonlan 00:11:32:11:15:FD'
alias wakeupnas03='/usr/bin/wakeonlan 00:11:32:11:15:FE'

# Control firewall (iptables) output
# Netfilter is a host-based firewall for Linux operating systems. It is included as part of the Linux distribution and it is activated by default. This post list most common iptables solutions required by a new Linux user to secure his or her Linux operating system from intruders.
## shortcut  for iptables and pass it via sudo#
alias ipt='sudo /sbin/iptables'
 
# display all rules #
alias iptlist='sudo /sbin/iptables -L -n -v --line-numbers'
alias iptlistin='sudo /sbin/iptables -L INPUT -n -v --line-numbers'
alias iptlistout='sudo /sbin/iptables -L OUTPUT -n -v --line-numbers'
alias iptlistfw='sudo /sbin/iptables -L FORWARD -n -v --line-numbers'
alias firewall=iptlist

# Debug web server / cdn problems with curl
# get web server headers #
alias header='curl -I'
 
# find out if remote server supports gzip / mod_deflate or not #
alias headerc='curl -I --compress'

# Add safety nets
# do not delete / or prompt if deleting more than 3 files at a time #
alias rm='rm -I --preserve-root'
 
# confirmation #
alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
 
# Parenting changing perms on / #
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

# Update Debian Linux server
# apt-get wird für die Installation von Paketen über das Internet (ftp oder http) verwendet.
# Man kann somit auch alle Pakete in einem Arbeitsgang aktualisieren: # distro specific - Debian / Ubuntu and friends # # install with apt-get alias apt-get="sudo apt-get" alias updatey="sudo apt-get --yes" # update & upgrade on one command alias update='sudo apt-get update && sudo apt-get upgrade' # Update RHEL / CentOS / Fedora Linux server # yum command is a package management tool for RHEL / CentOS / Fedora Linux and friends: ## distrp specifc RHEL/CentOS ## alias update='yum update' alias updatey='yum -y update' # Tune sudo and su # become root # alias root='sudo -i' alias su='sudo -i' # Pass halt/reboot via sudo # shutdown command bring the Linux / Unix system down: # reboot / halt / poweroff alias reboot='sudo /sbin/reboot' alias poweroff='sudo /sbin/poweroff' alias halt='sudo /sbin/halt' alias shutdown='sudo /sbin/shutdown' # Control web servers # also pass it via sudo so whoever is admin can reload it without calling you # alias nginxreload='sudo /usr/local/nginx/sbin/nginx -s reload' alias nginxtest='sudo /usr/local/nginx/sbin/nginx -t' alias lightyload='sudo /etc/init.d/lighttpd reload' alias lightytest='sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -t' alias httpdreload='sudo /usr/sbin/apachectl -k graceful' alias httpdtest='sudo /usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS' # Alias into our backup stuff # if cron fails or if you want backup on demand just run these commands # # again pass it via sudo so whoever is in admin group can start the job # # Backup scripts # alias backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type local --taget /raid1/backups' alias nasbackup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01' alias s3backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01 --auth /home/scripts/admin/.authdata/amazon.keys' alias rsnapshothourly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotdaily='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotweekly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotmonthly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias amazonbackup=s3backup # Desktop specific play avi/mp3 files on demand ## play video files in a current directory ## # cd ~/Download/movie-name # playavi or vlc alias playavi='mplayer *.avi' alias vlc='vlc *.avi' # play all music files from the current directory # alias playwave='for i in *.wav; do mplayer "$i"; done' alias playogg='for i in *.ogg; do mplayer "$i"; done' alias playmp3='for i in *.mp3; do mplayer "$i"; done' # play files from nas devices # alias nplaywave='for i in /nas/multimedia/wave/*.wav; do mplayer "$i"; done' alias nplayogg='for i in /nas/multimedia/ogg/*.ogg; do mplayer "$i"; done' alias nplaymp3='for i in /nas/multimedia/mp3/*.mp3; do mplayer "$i"; done' # shuffle mp3/ogg etc by default # alias music='mplayer --shuffle *' # Set default interfaces for sys admin related commands ## vnstat is console-based network traffic monitor. dnstop is console tool to analyze DNS traffic. tcptrack and iftop commands displays information about TCP/UDP connections it sees on a network interface and display bandwidth usage on an interface by host respectively. ## All of our servers eth1 is connected to the Internets via vlan / router etc ## alias dnstop='dnstop -l 5 eth1' alias vnstat='vnstat -i eth1' alias iftop='iftop -i eth1' alias tcpdump='tcpdump -i eth1' alias ethtool='ethtool eth1' # work on wlan0 by default # # Only useful for laptop as all servers are without wireless interface alias iwconfig='iwconfig wlan0' # Get system memory, cpu usage, and gpu memory info quickly ## pass options to free ## alias meminfo='free -m -l -t' ## Den grössten Spreicherfresser über top ermitteln alias psmem='ps auxf | sort -nr -k 4' alias psmem10='ps auxf | sort -nr -k 4 | head -10' ## Die grössten CPU Belastungen aufrufen ## alias pscpu='ps auxf | sort -nr -k 3' alias pscpu10='ps auxf | sort -nr -k 3 | head -10' ## Server CPU Information ausgeben ## alias cpuinfo='lscpu' ## ältere Systeme verwenden: /proc/cpuinfo ## ## alias cpuinfo='less /proc/cpuinfo' ## # Control Home Router # The curl command can be used to reboot Linksys routers. # Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix. alias rebootlinksys="curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'" # Reboot tomato based Asus NT16 wireless bridge alias reboottomato="ssh admin@192.168.1.1 /sbin/reboot" # Resume wget by default # The GNU Wget is a free utility for non-interactive download of files from the Web. It supports HTTP, HTTPS, and FTP protocols, and it can resume downloads too: alias wget='wget -c' # different browser for testing website alias ff4='/opt/firefox4/firefox' alias ff13='/opt/firefox13/firefox' alias chrome='/opt/google/chrome/chrome' alias opera='/opt/opera/opera' #default ff alias ff=ff13 # default browser alias browser=chrome # A note about ssh alias # Do not create ssh alias, instead use ~/.ssh/config OpenSSH SSH client configuration files. It offers more option. An example: Host server10 Hostname 1.2.3.4 IdentityFile ~/backups/.ssh/id_dsa user foobar Port 30000 ForwardX11Trusted yes TCPKeepAlive yes You can now connect to peer1 using the following syntax: $ ssh server10 ## set some other defaults ## alias df='df -H' alias du='du -ch' # top is atop, just like vi is vim alias top='atop' ## nfsrestart - must be root ## ## refresh nfs mount / cache etc for Apache ## alias nfsrestart='sync && sleep 2 && /etc/init.d/httpd stop && umount netapp2:/exports/http && sleep 2 && mount -o rw,sync,rsize=32768,wsize=32768,intr,hard,proto=tcp,fsc natapp2:/exports /http/var/www/html && /etc/init.d/httpd start' ## Memcached server status ## alias mcdstats='/usr/bin/memcached-tool 10.10.27.11:11211 stats' alias mcdshow='/usr/bin/memcached-tool 10.10.27.11:11211 display' ## quickly flush out memcached server ## alias flushmcd='echo "flush_all" | nc 10.10.27.11 11211' ## Remove assets quickly from Akamai / Amazon cdn ## alias cdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai' alias amzcdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon' ## supply list of urls via file or stdin alias cdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai --stdin' alias amzcdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon --stdin'

Dieser Beitrag fasst verschiedene Arten der Verwendung von *nix bash-Aliasen zusammen: - Setzen von Standardoptionen für einen Befehl (z.B. eth0 als Standardoption für ethtool-Befehl über alias ethtool='ethtool eth0'). - Korrektur von Tippfehlern (cd... fungiert als cd... über den Alias cd..='cd...'). - Reduzierung der Tipparbeit. - Der Standardpfad eines Befehls, der in mehreren Versionen auf einem System existiert (z.B. GNU/grep befindet sich unter /usr/local/bin/grep und Unix grep unter /bin/grep. Um GNU grep zu verwenden, verwenden Sie den Alias grep='/usr/local/bin/grep' ). - Hinzufügen der Sicherheitsnetze zu Unix durch interaktive Befehle durch Setzen von Standardoptionen. (z.B. rm, mv und andere Befehle). - Kompatibilität durch Erstellung von Befehlen für ältere Betriebssysteme wie MS-DOS oder andere Unix-ähnliche Betriebssysteme (z.B. alias del=rm).

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 01:27


Elinks ein Text-basierender Webbrowser für die Konsole

ELinks ist nicht nur der coolste Kommandozeilen-Webbrowser. Tatsächlich ist es auch der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird und auch moderne Webseiten unterstützt. Entwickelt wurde der schlanke Textbrowser ELinks von Jonas Fonseca.

Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Ziel war es einen klassischen Open-Source Browser für die Konsole zu erstellen, der sehr flexibel ist und auch Frames und Tabellen darstellen kann. Da sich ELinks als einfacher Textbrowser nur auf die Texte und nicht auf Sripte, etc konzentriert ist ELinks so sicher wie kaum ein anderer Browser. Gerade die grafischen Browser liegen im Vergleich um Längen dahinter. Er kann zusätzlich an eigene Bedürfnisse angepasst und durch Perl-, Lua- oder Guile-Skripte erweitert werden. Webstandards sind nicht unbedeutend für ELinks, so beherrscht er eine Vielzahl von Protokollen, etwa HTTP, HTTPS, FTP (mit SSL Support) IPV4 oder auch darstellung lokaler Dateien. Zusätzliche Protokollunterstützung besteht für BitTorrent-Finger, Gopher, SMB und NNTP. Er beherrscht die Darstellung von Farben, beinhaltet eine Lesezeichenverwaltung, ermöglicht Tabbed-Browsing und stellt Tabellen und Franmes akurat dar. ELinks funktioniert unter Linux, FreeBSD, OpenBSD, Solaris, IRIX, HPUX, Digital Unix, AIX, OS/2, BeOS, RISC OS und MacOS X und ist auch meist verfügbar durch alle Linux/BSD-Paketmanager. Ein Port für Win32 befindet sich im Beta-Stadium. Download hier. Die Installation unter Debian oder Ubuntu zum Beispiel kann einfach über den Packetmanager vorgenommen werden:

sudo apt-get update
sudo apt-get install elinks

Zum starten kann man einfach elinks eingeben, oder auch gleich einen Domain-Namen hinzufügen:

elinks http://elinks.or.cz/  # elinks Homepage

Sobald man im Programm ist, kann man die Taste "g" verwenden, um die Adressleiste aufzurufen. Oder man drückt die Escape Taste. Damit öffnet man die Menüzeile. Weitere Tastaturbefehle:

g - URL aufrufen                  s - Lesezeichen
h - History                       o - Optionen (z.B. Einstellungen)
t - Neue Registerkarte öffnen     T - Link als neuen Tab öffnen
<> - Links/rechts verschieben     Home - zum Seitenanfang
End - zum Seitenende gehen        Links - zurückgehen
Rechts - Hyperlink folgen         Nach oben - vorheriger Hyperlink
Nach unten - nächster Hyperlink   / - Suche
\ - HTML ansehen                  [ - Scrollfenster nach links
] - Fenster nach rechts scrollen  c - Reiter schließen
q - beenden                       d - Hyperlink herunterladen
Strg r - Aktualisieren       

Die Datei /home/username/.elinks/elinks.conf enthält die Konfigurationsinformationen für ELinks. Damit kann man das Verhalten von ELinks auf vielfältige Weise konfigurieren: z.B.: Protokollverhalten, Tastaturbelegung, Farben für das Rendering und die Benutzeroberfläche. Die Datei wird beim Start gelesen und nur bei Bedarf gespeichert. Alle in diesem Dokument beschriebenen Optionen können in ELinks vollständig konfiguriert werden, so dass keine Bearbeitung von elinks.conf in der Regel erforderlich ist. Die Tastenbelegungen können auch in der elinks.conf angegeben werden.
SYNTAX
Die Syntax der Konfigurationsdatei ist sehr einfach. Die Datei elinks.conf ist eine freie ASCII-Textdatei, die im jeweiligen home Verzeichnis des Users abgespeichert wird. Die Datei kann zusätzliche Registerkarten und Zeilenumbrüche zur Formatierung enthalten. Schlüsselwörter in der Datei sind case-sensitive. Kommentare beginnen wie üblich mit dem Zeichen # und enden am Ende der Zeile:

# Use asynchronous DNS resolver?
set connection.async_dns = 1
# horizontal text margin.
set document.browse.margin_width = 3
# Default document codepage.
set document.codepage.assume = "ISO-8859-1"
# User defined protocol handlers
set protocol.user.mailto.unix = "mutt %h -s \"%s\""

Verfasser: Andreas Preuss
Letzte Änderung: 12-06-2018 16:10


Debian Systemzeit synchronisieren

Einige Debianserver betreibe ich in einer VM und habe oft nach einem Suspend das Problem, dass Datum und Uhrzeit nicht mehr aktuell sind. Oft greift die entsprechende Sync-Einstellung in den VMWare-Tools nicht. Es wäre also sinnvoll die Zeit Online über einen NTP Server synchronisieren zu können. Das NTP Protokoll ist dazu da, um die Zeit auf einem Server mit einem zentralen Zeitserver abzugleichen. Hierbei schafft die Installation eines NTP Daemons Abhilfe. Dieser ist bei den einzelnen Distributionen schon als Paket vorhanden und kann ganz einfach installiert werden.

sudo apt-get install ntp

Danach ist mit einem Editor der Wahl die Konfigurationsdatei /etc/ntp.conf zu öffnen und der Eintrag der Zeitserver anzupassen. Unter pool.ntp.org kann man sich zum Beispiel den für sich passenden NTP-Server heraussuchen.
Bei Debian Linux kann man beispielsweise folgende Server für Deutschland in die Datei /etc/ntp.conf einfügen bzw. die bestehenden mit "server" beginnenden Zeilen ersetzen:

server  ntp1.hetzner.de  iburst
server  ntp2.hetzner.com iburst
server  ntp3.hetzner.net iburst
server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Hier wird bei jedem Start des NTP Dienstes ein beliebiger deutscher Server abgefragt. Dies stellt sicher, daß die Anfragen über viele Server verteilt werden und erhöht gleichzeitig die Zuverlässigkeit. Abschliessend muss der ntpd noch neu gestartet werden.

service ntp restart

Es kann notwendig sein, dass man einmal nachdem man den NTP Server installiert hat, die Zeit manuell synchronisiert. Dies geht entweder mit ntpd oder mit ntpdate (muss bei Debian zusätzlich installiert werden):

service ntp stop  # NTP stoppen
ntpd -q -g        # synchronisieren
service ntp start # NTP wieder starten

Die Option -g bedeutet, dass ntpd auch synchronisiert, wenn die Zeit mehr als 1000 Sekunden abweicht.
Die Option -q bedeutet, dass ntpd nur einmal ausgeführt wird.

Absicherung
Da NTP ein UDP-basiertes Protokoll ist, kann es leicht für DDoS-Angriffe mißbraucht werden. Da bei falscher Konfiguration die Antwort größer als die Anfrage ausfällt, wird so ein Angriff verstärkt. Eine entsprechende Konfiguration, welche nur die deutschen NTP-Pool server nutzt, könnte wie folgt aussehen:

restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

restrict    127.0.0.1
restrict -6 ::1

server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Bei dieser Konfiguration sind Veränderungen und Statusabfragen nur noch lokal möglich. Zeitinformationen können mit und von jeder IP aus abgerufen werden. Alternativ ist es möglich alle Anfragen zu blockieren und Zeitinformationen nur mit explizit erlaubten Zeitservern auszutauschen. Folgendes Beispiel erlaubt nur den Austausch von Zeitinformationen mit den Hetzner NTP Servern

restrict    default ignore
restrict -6 default ignore

restrict    127.0.0.1
restrict -6 ::1

server ntp1.hetzner.de iburst
restrict    213.239.239.164 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a0a1::2:1 nomodify notrap nopeer noquery

server ntp2.hetzner.de iburst
restrict    213.239.239.165 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a101::2:3 nomodify notrap nopeer noquery

server ntp3.hetzner.de iburst
restrict    213.239.239.166 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a112::2:2 nomodify notrap nopeer noquery

Uhrzeit in Hardwareuhr schreiben
Damit der Server nach einem erneuten Booten mit einer völlig falschen Zeit hochkommt, kann man noch die Uhr in die Hardwareclock schreiben.

hwclock --systohc

Die Urzeit kann mit dem Befehl date ausgegeben werden:

# Tag (01 bis 31)
getDay=$(date "+%d")
	
# Wochentag (Montag bis Sonntag)
getDayName=$(date "+%A")
	
# Monat (01 bis 12)
getMonth=$(date "+%m")

# Monatsname (Januar bis Dezember)
getMonthName=$(date "+%B")
	
# Jahr (ab 1970)
getYear=$(date "+%Y")

# Jahr (kurz: 00 bis 99)
getYearShort=$(date "+%y")
	
# Stunde (kurz: 00 bis 23)
getHour=$(date "+%H")

# Minute (kurz: 00 bis 59)
getMinute=$(date "+%M")

# Sekunde (kurz: 00 bis 59)
getSecond=$(date "+%S")
	
# Format: HH:MM:SS
getTime=$(date "+%T")
	
# Format: DD.MM.YYYY HH:MM:SS
getDateTime=$(date "+%d.%m.%Y %T")

# Format: DD.MM.YYYY HH:MM:SS.Nanosekunden
# Beispiel: 2014-01-02 17:43:38.226981463
getDateTime=$(date "+%Y-%m-%d %T.%N")
	
# Dauer
startTime=$(date "+%s")
endTime=$(date "+%s")
runTime=$(echo $endTime - $startTime | bc)

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 17:21


Konsolenbefehle zum Arbeiten mit Git

Git ist eine Software zur Versionsverwaltung von Projekten. Man kann damit einfach zu alten Ständen zurückspringen oder mit mehreren Leuten an einem Projekt arbeiten. Git ist im Laufe der Zeit von allen anderen Versionskontrollsystemen für mich der Hauptfavorit geworden. Die meisten anderen Systeme wie (CVS, Subversion, Perforce, Bazaar usw.) betrachten die Informationen, die sie verwalten, als eine Menge von Dateien und die Änderungen, die über die Zeit hinweg an einzelnen Dateien vorgenommen werden.
Git betrachtet seine Daten eher als eine Reihe von Snapshots eines Mini-Dateisystems. Jedes Mal, wenn man committet (d.h. den gegenwärtigen Status des Projektes als eine Version in Git speichert), sichert Git den Zustand sämtlicher Dateien in diesem Moment („Snapshot“) und speichert eine Referenz auf diesen Snapshot. Um dies möglichst effizient und schnell tun zu können, kopiert Git unveränderte Dateien nicht, sondern legt lediglich eine Verknüpfung zu der vorherigen Version der Datei an. Dies ist ein wichtiger Unterschied zwischen Git und praktisch allen anderen Versionskontrollsystemen.

Installation
git für Linux herunterladen und installieren.
git für OS X herunterladen und installieren.
git für Windows herunterladen und installieren.

Einstellungen
Die Datei /etc/gitconfig ist die globale Konfigurationsdatei, die für jeden Anwender des Systems und all ihre Projekte gelten. Die Werte in der Datei ~/.gitconfig gelten ausschließlich für den User und all seine Projekte. Wenn man git config mit der Option --global verwendet, wird diese Datei verwendet. Die Datei .git/config im Git Verzeichnis eines Projektes enthält Werte, die nur für das jeweilige Projekt gelten. Diese Dateien überschreiben Werte aus den jeweils vorhergehenden Dateien in dieser Reihenfolge. D.h. Werte in beispielsweise .git/config überschreiben diejenigen in /etc/gitconfig.
Auf Windows Systemen sucht Git nach der .gitconfig Datei im $HOME Verzeichnis z.B.: C:\Dokumente und Einstellungen\$USER. Es schaut auch immer nach /etc/gitconfig.
E-Mail Adresse und Editor konfigurieren

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs
$ git help config # Weitere Hilfe zur Konfiguration

Dies ermöglicht, das push ausgeführt werden, ohne das branchname origin/branchname geschrieben werden muss ?!

git config --global push.default simple

Folgender Befehl definiert, wonach Line-Endings beim checkout konvertiert werden

git config --global core.eol lf

UTF-8 einstellen, wodurch auch Umlaute in Commits möglich sind

git config --global i18n.commitEncoding 'utf8'
git config --global i18n.logOutputEncoding 'utf8'

Init
Ein bare Repo auf repo.my_online_repo.de erstellen und ein neues lokales Repo master reinpushen:

mkdir -p ~/_pfad_zum_repo/reponame.git
cd ~/_pfad_zum_repo/reponame.git
git init --bare --shared
git config core.sharedRepository group
chown -R git:git ~/_pfad_zum_repo/reponame.git
chmod 0770 ~/_pfad_zum_repo/reponame.git

Danach wieder lokal weiter arbeiten und ein Verzeichnis zu einen GIT Repo umwandeln:

cd /_pfad_zum_repo/reponame
git init
git add .
git commit -m "Migrate to Git"
git remote add origin "ssh://username@repo.mobiletrend.de/~/_pfad_zum_repo/reponame.git"
git push origin master:master

Danach ist das lokale Git mit dem Remote Bare Repository verbunden, als würde es von dort geklont worden sein.

git branch -a

Um danach ein schlichtes git pull verwenden zu können, muss das lokale Repo noch wissen, mit welchem remote brachen es verbunden ist. Da vorher im master gepusht wurde, wäre also folgendes als Einstellung richtig:

git branch -u origin/master

Branch
Einen neuen Branch anlegen

git branch 
# ... oder anlegen und direkt in den Branch wechseln...
git checkout -b branchname

Einen neuen Branch anlegen, diesen von einem Remotebranch ableiten und tracken (womit pull/push funktioniert)

git branch -t branchname origin/branchname

Einen (neuen/lokalen) Branch pushen und das Tracking setzen, damit push/pull automatisch funktionieren

git push -u origin branchname

(pushes the "branchname" branch to "origin" remote and sets up tracking) Einen lokalen Branch löschen

git branch -d branchname

Einen remote Branch löschen

git push origin :branchname

Einen (temporären) lokalen Branch erstellen, der auf den Stand eines alten Commits ist. Dafür muss der Hashcode des Commits bekannt sein:

git checkout -b temp 95817e231b02686c8cf420bea54864aeea7348ff

Commit Fügt alle Dateien zum Index hinzu, und bemerkt auch alle gelöschten Dateien und Pfade:

git add . --all

Commit, der alle Files staged, und eine Bemerkung über die Veränderung anfügt

git commit -a -m "bla"

Merge Einen Branch auf Stand des Masters aktualisieren Ggf. funktioniert ein schlichtes merge ?

git checkout branchname
git merge master

Ein Vorteil gegenüber git rebase ist, das es die History des Branches nicht verändert, sondern nur eine Art Merge-Commit durchführt, wodurch der Branch dann auf Stand des Masters ist

git checkout master
git branch rebase_state
git checkout feature
git merge rebase_state
git branch -d rebase_merge

Ein Branch erstellen und auf den Stand eines anderen Branches bringen

git checkout master
git branch neuerbranch
git checkout neuerbranch
git merge andererbranch

Verfasser: Andreas Preuss
Letzte Änderung: 15-06-2018 16:59


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01


Linux » NGINX

LetsEncrypt SSL-Zertifikate mit Nginx in Debian9 Stretch

Um eine sichere HTTPS-Verbindung aufzubauen müssen SSL-Zertifikate durch eine Zertifikatsstelle erstellt und im Webserver integriert und konfiguriert werden.  Nur damit ist der Verkehr zwischen Server und Client abhörsicherer.
Mit Let’s Encrypt, der viertgrössten CA (Zertifikatsstelle) weltweit, lassen sich kostenlose Zertifikate für jederman erstellen. Das Projekt hat sich zur Aufgabe gesetzt, verschlüsselte HTTPS-Verbindungen im Internet zum Standard zu machen. Bereits jetzt werden von Let’s Encrypt signierte Zertifikate in allen modernen, gängigen Browsern und Betriebssystemen akzeptiert.

1) Erstellen eines NGINX-Config-Snippet

Konfigurationsdatei erstellen und im Ordner snippets einfügen:

vim /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
allow all;
}

und mit :wq abspeichern.

oder einfach:

echo "location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}" >> /etc/nginx/snippets/letsencrypt.conf

-----------------------------------------------------------------------------------------

2) Anpassen der bestehenden NGINX-Konfig

Konfiguration als HTTPS-only. D.h. jede Anfrage auf Port 80 (HTTP) wird auf 443 (HTTPS) umgeleitet.
Da die Domänen-Verifizierung von Let´s Encrypt über einen HTTP Aufruf gemacht wird,
muss hier eine Ausnahme erstellt werden.

Dazu passen wir unsere Webseiten Konfig in der Regel an: vim /etc/nginx/sites-available/meineseite an.
In unserem Fall befindet sich die Website Config in: /var/www/srv_dev/config/nginx/domains/meineseite.conf

und fügen unser Snippet mittels include in dem Serverteil für HTTP hinzu:

server {
        listen 80;
        listen [::]:80;

        server_name www.meineseite.de;

        include /etc/nginx/snippets/letsencrypt.conf;
        #Diese Zeile ALLEN Konfigurationen hinzufügen, die ein Zertifikat bekommen sollen.

        error_log  /var/log/nginx/meineseite-error.log;
        access_log /var/log/nginx/meineseite-access.log;
}

für den Redirect verwenden wir die *.nginx Datei im app Verzeichnis
/var/www/srv_dev/app/meineseite

und fügen unter location / { ... } folgende Weiterleitung ein:

# Redirect any HTTP request to HTTPS
return 301 https://www.meineseite.de;

location / {
	# Redirect any HTTP request to HTTPS
    return 301 https://www.meineseite.de;
}

service nginx restart

------------------------------------------------------------------------------------------

3) Erstellen des Temp-Verzeichnises für Let´s Encrypt, in dem alle Zertifikats-Anfragen bearbeitet werden sollen.

Das Webroot-Plugin Certbot erstellt eine temporäre Datei für jede Ihrer angeforderten Domains
in ${webroot-path}/.well-known/acme-challenge Ordner.
Dann stellt der Let's Encrypt Validierungsserver HTTP-Anfragen, um zu überprüfen,
ob das DNS für jede angeforderte Domain auf den Server mit Certbot aufgelöst wird.

Wir erstellen also hierfür das Verzeichnis:

sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge

------------------------------------------------------------------------------------------

4) Vergabe der entsprechenden Rechte für den NGinx User

NGINX läuft ja in der Regel als www-data User bzw. der User ist in der www-data-Gruppe:

sudo chown -R www-data:www-data /var/www/letsencrypt

------------------------------------------------------------------------------------------

5) Installieren des Let´s Encrypt Clients Certbot und erstellen eines Zertifikats

Installation unter Debian 9 (Stretch):

Sources updaten: sudo apt-get update
Installation dann mit: sudo apt-get install certbot

sudo service nginx restart
oder sudo systemctl reload nginx

Let’s Encrypt speichert die Einstellungen und Accountdaten in /etc/letsencrypt ab.
Alle generierten Schlüssel und ausgestellten Zertifikate findet man in

/etc/letsencrypt/live/$domain.  (Je Domain wird ein Unterverzeichnis angelegt.)

Anstatt zu kopieren, bitte mit der (Web-)Serverkonfiguration direkt auf diese Dateien zeigen (oder Symlinks erstellen).
Während der Erneuerung aktualisiert Certbot im Verzeichnis /etc/letsencrypt/live die neuesten notwendigen Dateien.

Falls eine gemeinsame Firewall in Debian installiert wurde, wie die UFW-Firewall, die alle eingehenden Verbindungen auf Port 80 und 443 blockiert,
kann man mit folgenden Befehlen den HTTP- und HTTPS-Port im System öffnen:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp


Mit folgendem Befehl wird das Zertifikat erstellt und für welche Domains das Zertifikat gültig sein wird:

sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt -d meineSeite.de -d www.meineSeite.de

- rsa-key-size: Gibt die Schlüssellänge an. 4096Bit zählt derzeit als sicher.
- webroot: Gibt das Verzeichnis für die Anfragen an. Dies ist unser neu erstellter Ordner
-d meineSeite.de: Hier können nun alle Domains hingeschrieben werden, die ein Zertifikat haben sollen.

Optional: --dry-run -> dient zum Testen, ob alles funktioniert:

sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt -d meineSeite.de -d www.meineSeite.de --dry-run

Nach Ausführung des Befehls gibt man eine Mail-Adresse ein und bestätigt mit A die Lizenz-Bedingungen.
Falls alles geklappt hat werden jetzt die Zertifikate ausgestellt die jetzt hier zu finden sind /etc/letsencrypt/live/www.meineSeite.de

Die Ausstellung von Zertifikaten für interne DNS-Namen ist nicht erlaubt.
Um ein SSL-Zertifikat von Let's Encrypt zu erhalten, muss die Domäne:
- Über das öffentliche Internet auf Port 80 (http-01) oder 443 (tls-sni-01) erreichbar sein.
- Es muss ein A-Eintrag vorhanden sein - Es sollte auch auf www zeigen mit der gleichen IP. also meineSeite.de und www.meineSeite.de
Dies ist notwendig, um den Nachweis des Domainbesitzes zu erbringen.

Quelle:https://certbot.eff.org/docs/using.html#renewal

-----------------------------------------------------------------------------------------

6) Einbinden der Zertifikate in NGINX

default: /etc/nginx/sites-available/default
In unserem Fall in: /var/www/srv_dev/config/nginx/domains/meineSeite.conf

ssl on;
ssl_certificate /etc/letsencrypt/live/meineSeite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meineSeite.de/privkey.pem;

 

server {
listen 80;
server_name meineSeite.de;
return 301 https://meineSeite.de/$request_uri;
}

server {
listen 443 ssl default_server;
server_name meineSeite.de;
ssl_certificate /etc/letsencrypt/live/meineSeite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meineSeite.de/privkey.pem;

 

jetzt noch die Konfiguration am NGINX neu laden
systemctl reload nginx

und wir sollten jetzt die Seite mit einem Zertifikat öffnen können.

-----------------------------------------------------------------------------------------

7) Automatisches Erneuern der Zertifikate

Die Let´s Encrypt Zertifikate haben die Einschränkung, dass sie nur 90 Tage gültig sind.
Das automatische Erneuern lässt sich mit folgendem Befehl durchführen:

certbot renew

Bei "Webroot" muss dieser Befehl verwendet werden:
/usr/bin/certbot renew --post-hook "/usr/sbin/nginx restart"
Bei dieser Variante bleibt nginx dauerhaft online.

nur als Test: certbot renew --dry-run
Dies bewirkt, dass das Update nur simuliert wird und keine Änderung an den Zertifikaten vorgenommen wird.
Quelle: https://letsencrypt.readthedocs.io/en/latest/using.html#renewing-certificates

Crontab anlegen:
Legen wir jetzt einen Cronjob an, damit dieser automatisch ausgeführt wird.

Das geht mit crontab -e

Standalone (nginx off und online)
PATH=/usr/sbin:/usr/bin:/sbin:/bin
0 4 1 * * /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Webroot (nginx bleibt dauerhaft online und Eintrag in logdatei)

PATH=/usr/sbin:/usr/bin:/sbin:/bin
0 4 1 * * /usr/bin/certbot renew --post-hook "service nginx restart" >> /var/log/letsencrypt/renew.log

Die erste Zeile ist notwendig, da später der Service nginx gestartet werden soll.
Dazu müssen hier die passenden Umgebungsvariablen gesetzt werden.

1. Stelle: Minuten -> 0 (0-59)
2. Stelle: Stunden -> 4 (0-23)
3. Stelle: Tage im Monat -> 1 (1-31)
4. Stelle: Monate -> * (1-12)
5. Stelle: Wochentage -> * (0-7)

so wird automatisch das Zertifikat verlängert und die Konfig des NGINX aktualisiert
Der Skriptbefehl wird hier also z.B. immer am 1. Tag jeden Monats nachts um 4:00 gestartet.

8) Ändern der Verlängerungskonfigurationsdatei

Wenn ein Zertifikat ausgestellt wird, erstellt Certbot standardmäßig eine Verlängerungskonfigurationsdatei, die die beim Ausführen von Certbot ausgewählten Optionen verfolgt.
Dies ermöglicht es Certbot, die gleichen Optionen wieder zu nutzen, wenn es um die Erneuerung geht. Diese Erneuerungskonfigurationsdateien befinden sich unter /etc/letsencrypt/renewal/CERTNAME.

Für erweiterte Aufgaben der Zertifikatsverwaltung ist es möglich, die Konfigurationsdatei für die Erneuerung des Zertifikats manuell zu ändern,
aber dies ist nicht empfehlenswert, da es die Fähigkeit von Certbot, die Zertifikate zu erneuern, beeinträchtigen kann.
Wenn man die Konfigurationsdatei für die Erneuerung ändern möchte, ist es empfehlenswert, die Gültigkeit mit dem Befehl certbot renew --dry-run zu testen.

Quelle und erweiterte Informationen: https://letsencrypt.readthedocs.io/en/latest/using.html#renewing-certificates

Verfasser: Andreas Preuss
Letzte Änderung: 28-05-2018 09:31


Installation und Konfiguration von NGINX

Einfache Standartinstallation von NGINX
Die Installation von Nginx ist relativ simpel, die Konfiguration etwas weniger simpel für den Umsteiger, aber durchaus machbar! Einmal durchgeführt, läuft der neue Webserver wesentlich schneller und leistungsstärker als der Apache2.
Der Server hat dann weniger Speicherverbrauch, eine hohe Flexibilität und ist vor allem robuster und sicherer. NGINX läuft richtig konfiguriert auch zusammen mit Apache2.  Wenn man nun einen Webserver auf dem Raspberry Pi, Arduino, Asus Tinker Board oder dem Cubieboard realisieren möchte, kommt man um NGINX gar nicht mehr herum, weil hier der Apache2 durch seinen höheren Speicherverbrauch und seine langsamere Geschwindigkeit gar keinen Sinn mehr macht.

Die Installation:

Zum Installieren wird unter Debian Stretch zum Beispiel folgender Befehl mit dem Paket nginx eingegeben:

sudo apt-get install nginx

Danach kann auch schon NGINX gestartet werden mit folgenden Befehlen.

sudo /etc/init.d/nginx start

oder

sudo service nginx start

Wie wir feststellen funktioniert allerdings noch kein PHP.
Ab Version 1.8 legt Nginx ein HTML-Verzeichnis unter /var/www ab.
Falls noch kein PHP für den Webserver installiert wurde, einfach unter Debian Stretch diesen Befehl ausführen:

sudo apt install php7.2-fpm php7.2-cli php7.2-dev php7.2-mysql php7.2-curl php7.2-gd php7.2-json php7.2-opcache php7.2-igbinary php7.2-imagick php7.2-redis php7.2-mbstring php7.2-soap php7.2-xml php7.2-zip

Und wir passen die Datei /etc/nginx/fastcgi_params an:

sudo vim /etc/nginx/fastcgi_params
fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;
 
# define SCRIPT_NAME per domain after including this file
#fastcgi_param  SCRIPT_NAME         $fastcgi_script_name;
 
fastcgi_param   REQUEST_URI         $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;
fastcgi_param   REQUEST_SCHEME      $scheme;
fastcgi_param   HTTPS               $https if_not_empty;
 
fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;
 
fastcgi_param   REMOTE_ADDR         $remote_addr;
fastcgi_param   REMOTE_PORT         $remote_port;
fastcgi_param   SERVER_ADDR         $server_addr;
fastcgi_param   SERVER_PORT         $server_port;
fastcgi_param   SERVER_NAME         $server_name;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;
 
# httpoxy fix (see https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/)
fastcgi_param   HTTP_PROXY          "";

Speichern in VIM mit :wq.
Zum Abschluss muss Nginx neu geladen werden und wenn Apache2 läuft, dieser gestoppt werden.
service apache2 stop
/etc/init.d/nginx reload

Einfache Einrichtung von NGINX:
Die virtuellen Hosts liegen Standartmässig in /etc/nginx/sites-available/default.
Die Standart Konfiguration sieht in der Regel folgendermassen aus:

server {
     listen 80;                            ## Listen für IPv4;
     listen [::]:80 ipv6only=on;           ## Listen für IPv6;
     server_name _;
     root /var/www/html;                   ## Der Webserver-Root-Ordner
     index index.php index.html index.htm; ## Festlegung der Index-Dateien
     location / {
       try_files $uri $uri/ =404;
     }
     #error_page 404 /404.html;            ## 404 Fehlerseite
     # Alle 50x Fehlerseiten auf Standardfile /50x.html weiterleiten
     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
        root /var/www/html;
     }
     # PHP Skripte zu FastCGI an 127.0.0.1:9000 leiten
     location ~ \.php$ {
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include snippets/fastcgi-php.conf;
     }
     # Verbiete Zugriff auf alle .htaccess Dateien. 
     # Dieser Eintrag nur wenn man den root Ordner faulerweise einfach auf den Apache Pfad gelegt hat.
     location ~ /\.ht {
       deny all;
       }
     }

Die ersten beiden Zeilen geben Nginx an, auf Port 80 sowohl IPv4 als auch IPv6 Adressen anzunehmen.
Hier kann man natürlich auch 8080 oder jeden anderen, freien Port verwenden.
server_name _; bewirkt, dass dies ein Catchall vhost ist (jeder beliebige vhost wird angenommen).
Hier kann natürlich ebenfalls auch jeder andere Hostname eingetragen werden, z. B. für meineSeite.de:

 server_name meineSeite.de; 

Die Zeile index gibt an, dass in diesem root-Pfad, die index.php, index.html oder index.htm in als Index-Datei erkannt und verwendet werden soll, sofern vorhanden.
Für php ist der location Teil wichtig: location ~ \.php$ { … }.
So kann auch php einwandfrei verwendet werden, wie man es von Apache gewohnt ist. Zur Erhöhung der Sicherheit kann man auf Fehlerseiten die nginx-Version ausblenden, so wird es möglichen Angreifern erschwert die Version herauszufinden, falls Schwachstellen dieses Releases ausgenutzt werden könnten. Wir rufen somit die Hauptkonfiguration auf:

 vim /etc/nginx/nginx.conf 

eingeben und folgende Zeile auskommentieren. (Das # Zeichen entfernen)

 server_tokens off; 

An dieser Stelle können wir unseren NGINX Server gleich etwas optimieren:
Zuerst werden wir die Worker-Prozesse der /etc/nginx/nginx.conf anpassen, da auch nginx Multicore-Techniken unterstützt. Die Anzahl der zu benutzenden CPUs muss nginx angegeben werden. Die CPU-Anzahl kann so ausgelesen werden:

cat /proc/cpuinfo | grep processor

Die Ausgabe wird in etwas so aussehen:

processor       : 0
processor       : 1
processor       : 2
processor       : 3

Entsprechend der Ausgabe handelt es sich um ein Singlecore (ein Prozessor) System, oder um eines mit 4 Cores (Quadcore) oder mehr. Entsprechend der Anzahl an Cores sind die Worker-Prozesse in der nginx.conf zu bestimmen:

user www www-user;
worker_processes 1;     # 1 bei Singlecore; 2 bei Dualcore, usw....
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
 
events {
    worker_connections 768;
    multi_accept on;
    }
....

Nun gibt es noch einen Worker Wert in der nginx.conf, die worker_connections. Diese geben effektiv an, wieviel Verbindungen ein Worker-Prozess bedienen soll. Aktuelle Browser bauen allein 2 bis 8 Verbindungen zu einem Webserver auf. Im privaten Umfeld kann der Wert bei 256 (Das ist z.B. Standard beim Raspberry) belassen werden, Websites mit viel Traffic können 1024 oder mehr setzen. Hier habe ich einen Mittelwert von 768 eingestellt. Mit multi_accept wird nginx angewiesen, soviele Verbindungen wie möglich für Anfragen bereitzustellen.

Aktivierung der GZIP-Komprimierung von nginx
Dies hat effektiv zur Folge, das etwas weniger Bytes durch die Leitungen geschickt werden müssen, zu Lasten der Rechenpower. Besonders bei großen Systemen wie WordPress oder Magento macht sich die Komprimierung allerdings sehr zum Vorteil bemerkbar.
Wenn man allerdings sehr hohen Traffic erwartet und die Rechenleistung extrem gering halten möchte, wie z.B. auf einem virtuellen Cloud-Server (hier kostet zusätzliche Rechenleistung oft mehr), geht man den anderen Weg und lässt die gzip Komprimierung laut Default ausgeschaltet.

##
# Gzip Settings
##
# gzip off;
# gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Es gibt noch viele Möglichkeiten die Performance non NGINX zu steigern, aber wir steigen hier für die einfache Konfiguration erst mal aus und ich werde versuchen dies in einer Extra Faq zu behandeln.

Mit dem VIM Befehl :wq die nginx.conf speichern und beenden.

Neuladen des Servers wie gewohnt:

/etc/init.d/nginx reload

Konfiguration der MariaDB Datenbank:
Die Default-Einstellungen sind für unsere Installation schon recht brauchbar. Ein paar Defaultwerte gibt es jedoch anzupassen: Wir rufen also die Konfigurationsdatei auf und passen diese an:

Für die Installation der Datenbank MariaDB verwende ich immer folgende Installationsroutine:

sudo apt install mariadb-server mariadb-plugin-tokudb percona-toolkit
vim /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
 
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8
 
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server  = utf8
collation-server      = utf8_general_ci
character_set_server  = utf8
collation_server      = utf8_general_ci
 
# Zugang der Firewall überlassen
bind-address = 0.0.0.0

Auch wollen wir TokuDB in MariaDB aktivieren:

vim /etc/mysql/conf.d/tokudb.cnf
[mariadb]
# See https://mariadb.com/kb/en/how-to-enable-tokudb-in-mariadb/
# for instructions how to enable TokuDB
#
# See https://mariadb.com/kb/en/tokudb-differences/ for differences
# between TokuDB in MariaDB and TokuDB from http://www.tokutek.com/
plugin-load-add=ha_tokudb.so
 
[mysqld]
default_storage_engine = tokudb

Mit dem Befehl :wq des Editors VIM jeweils speichern und beenden.
 Die Datenbank wird mit:

service mysql restart

neu gestartet.
Dies war die einfachste und schnellste Standartkonfiguration von NGINX mit kleiner Optimierung.
Das heisst über die IP des Servers ist die Standard NGINX Startseite nun aufzurufen, MySQL und PHP laufen.

In einer weiteren FAQ versuche ich eine individuelle erweitere Konfiguration mit mehreren virtuellen Domains mit NGINX übersichtlich zu erklären.

Verfasser: Andreas Preuss
Letzte Änderung: 28-05-2018 17:12


Linux » Befehlszeile

Datei- und Ordnerrechte unter Linux allgemein

Unter Linux sind jeder Datei und jedem Ordner drei Rechteebenen zugeordnet.
Sie gelten für:  
- Eigentümer
- Gruppe
- Alle anderen  
Jeder dieser Ebenen lassen sich gesonderte Rechte zuordnen.
Diese Rechte sind:  
- r wie read für das Leserecht
- w wie write für das Schreibrecht
- x wie execute für das Recht, eine Datei auszuführen (bei Verzeichnissen bedeutet das x, dass das Verzeichnis geöffnet werden darf).  
Wer mit ls -l den Inhalt eines Linux-Verzeichnisses anzeigen lässt, sieht links die Dateirechte, beispielsweise rwxrw-r--. Diese Rechte gelten von links nach rechts gelesen für den Eigentümer einer Datei rwx, für die Gruppe rw- und für die anderen Benutzer r--.
Falls an erster Stelle ein d steht, handelt es sich um ein Verzeichnis.   Diese Rechte lassen sich auch in Zahlen ausdrücken. Dabei steht jeweils eine Ziffer für eine Rechteebene, die erste Ziffer für den Eigentümer, die zweite für die Gruppe und die dritte für alle anderen.
Die Ziffer selbst ergibt sich aus den genehmigten Rechten:   r = 4 w = 2 x = 1  
Die gegebenen Rechte werden einfach zusammengezählt. 
Beispiel: Soll der Eigentümer die Datei lesen, schreiben und ausführen dürfen, so addiert man 4 + 2 + 1 und erhält 7.  
Soll die Gruppe die Datei nur ansehen und ausführen dürfen, so ergibt 4 + 1 die 5.
Und die anderen dürfen gar nichts, haben also die 0.
So ergibt sich in diesem Beispiel für die Dateirechte die 750.
Und die kann man mit dem Befehl chmod in Linux setzen.  
Häufig steht vor den drei Ziffern an erste Stelle noch eine vierte.
Die setzt die Attribute set user ID, set group ID und sticky. In Samba bleibt diese Ziffer meist bei 0. Mehr zu den Attributen verrät man chmod.  
Eigentümer und Gruppe einer Datei oder eines Ordners lassen sich mit den Befehlen chown und chgrp ändern.
Mehr dazu verraten die entsprechenden man-Einträge.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


MySQL Root - Passwort ändern

(Wenn root noch kein Passwort hat):

 # mysqladmin -u root password NEUESPASSWORT

(Wenn root schon ein Passwort hat):

 # mysqladmin -u root -p ALTESPASSWORT NEUESPASSWORT

Passwort anderer Accounts ändern:

# mysqladmin -u USER -p ALTESPASSWORT NEUESPASSWORT

MySQL Passwörter direkt in mysql ändern:
1) Über die Kommandozeile am mySQL Server anmelden:

mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

Wenn man das root Passwort nicht in /etc/mysql/my.cf oder unter Debian z.B. in /etc/mysql/debian.cf findet, kann man es neu setzen. Das ist relativ einfach und schnell gemacht.

1) mySQL Server anhalten: 

/etc/rc.d/init.d/mysql stop

2) mySQL Server manuell mit der Option " –skip-grant-tables" starten:

/usr/local/mysql/bin/safe_mysqld –skip-grant-tables

3) Über die Kommandozeile am mySQL Server anmelden:

# mysql -u root -p

2) In die mysql Datenbank wechseln:

mysql> use mysql;

3) Passwort für USER ändern:

mysql> update user set password=PASSWORD("NEUESPASSWORT") where User='USER';

4) Die User-Rechte neu laden:

mysql> flush privileges;
mysql> quit

5) mySQL Server wieder starten:

/etc/rc.d/init.d/mysql start

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Esentutl.exe - Ein vielseitiges Datenbankwerkzeug

Wenn eine Datenbank fehlerhaft oder beschädigt ist, können die Daten aus einer Sicherung wiederhergestellt oder mit "Esentutl" repariert werden. "Esentutl" ist ein mächtiges Befehlszeilen-Dienstprogramm, das in einer gegebenen Speichergruppe mit dem Informationsspeicher verknüpfte Dateien wie ESE-Dateien (Extensible Storage Engine), Datenbankdateien (*.edb), Streamingdateien (*.stm) und Protokolldateien (*.log) verarbeitet.
Das Tool kann von der Befehlszeile aus für jeweils eine Datenbank ausgeführt werden. Hiermit kann eine Vielzahl von Datenbankaufgaben wie Reparatur, Onlinedefragmentierung und Integritätsprüfungen ausgeführt werden.

Um eine Datenbank zu reparieren, sollte man natürlich zuerst die Datenbank-, Log- und Checkpoint-Files kopieren und ein separates Verzeichnis ablegen. Zuvor sollte der Datenbankdienst auch beendet sein d.h. die Bereitstellung der Datenbank aufheben. Dann kann man eine privilegierte Eingabeaufforderungs-Sitzung öffnen und in das Verzeichnis mit dem Datenbankduplikat wechseln.

ESENTUTL.EXE

  • Der Reparaturmodus von "Esentutl" kann zum Reparieren einer fehlerhaften oder beschädigten Datenbank verwendet werden.
    esentutl /p "C:\recover\Datenbank-Einkauf.edb" /o
  • Der Modus für Protokollwiederherstellung und Datenbankwiederherstellung wird zum erneuten Einspielen von Transaktionsprotokolldateien in eine Datenbank verwendet.
  • Der Modus für das Erstellen einer Speicherabbilddatei kann verwendet werden, um Datenbank und Transaktionsprotokolldateien in Beziehung zu setzen und um weitere Informationen hierüber abzurufen.
  • Mit dem Prüfsummenmodus wird die Dateiintegrität einer Datenbank geprüft.
    esentutl /g "C:\restore\ntds.dit" /!10240 /8 /o
  • Der Modus für das Erstellen einer Dateikopie dient zum schnellen Kopieren sehr großer Dateien.
  • Im Defragmentierungsmodus kann eine Datenbank offline komprimiert werden, wobei die Größe der Datenbankdateien durch das Entfernen von Leerraum reduziert wird.

    Beispiel zur Defragmentierung einer Exchange Datenbank:

    esentutl /d "D:\Datenbank1\Exchange-DB-01.edb"

    Hier noch ein paar wichtige Optionsschalter:
    /p (Ursprüngliche Datenbank wird nicht überschrieben. Braucht mehr Speicherplatz)
    /t (Erstelle eine temporäre Datenbank unter angegebenen Pfad D:\TMP_DB\)

Beispiel zur Reperatur einer Active Directory Datenbank (Hard Recovery):

esentutl /p C:\Windows\NTDS\restore\ntds.dit /!10240 /8 /o

Anschliessendes mounten der Datenbank:

dsamain.exe -dbpath "C:\Windows\NTDS\restore\ntds.dit" -ldapport 5123 -allownonadminaccess -allowupgrade

Danach mit der MMC "Benutzer und Computer" die Datenbank auf Port 5123 öffnen.

Sehr hilfreich ist auch die Funktion von Esentutl große Dateien von mehren Gigabyte zu kopieren. Hier spielt es keine Rolle welche Art von Dateien. Normalerweise könnte man XCOPY oder ROBOCOPY von der Kommandozeile verwenden, jedoch ist hier Esentutl deutlich schneller und zeigt sogar einen Fortschrittsbalken an:

Copy with Esentutl

Hier ein praktisches Beispiel für die Batch Verarbeitung:

:KOPIEREN
cls
COLOR 2E
set SOURCE=%USERPROFILE%\Desktop
set DEST=H:\Online-Speicher\Archive
for %%f in (%SOURCE%\*.7z) do (
ESENTUTL /y %%f /D %DEST%\%%~nxf
)

In diesem Fall befindet sich eine 48 GB große 7zip Datei auf dem Desktop und wird nach Laufwerk H: kopiert.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:49


Was bedeutet beim booten von Debian die Meldung "intel_rapl: no valid rapl domains"?

Virtualbox Linux Fehlermeldung beim Start

Startet man ein Debian oder Ubuntu System in einer Virtual Box, so kann es sein, dass einem während des Bootvorganges die Fehlermeldung "no valid rapl domains found in package 0" auffallen.
Diese Fehlermeldung besagt, dass Linux das Modul nicht laden kann, da es üblicherweise auf echten PCs starten würde. RAPL (Running Average Power Limit) ist einfach eine Energieverwaltung von Intel.
Trotzdem kann dies mit der Zeit auf den Wecker fallen.

Dies war beim Linux Kernel eine Änderung, die im Oktober 2013 eingeführt wurde, um den Intel RAPL Power Capting Treiber im Linux Kernel zu unterstützen. Diese Meldung ist nicht störend und hat keinen Einfluss auf die Leistung oder Funktionalität des Systems, da es sich nur um ein Energieverwaltungsmodul handelt. Wenn die Virtualisierungssoftware z.b. VirtualBox diesen Treiber unterstützt (und der Host unterstützt erweiterte Power-Funktionen), wird die Meldung ausgeblendet.
Hier kann man den Quellbaum des Moduls überprüfen, um zu prüfen, was es tut.

Es gibt also Zwei Lösungen um hier Abhilfe zu schaffen:
In VirtualBox PAE/NX aktivieren:

oder das Modul auf die Blackliste setzen und vom Laden ausschliessen.

echo 'blacklist intel_rapl' >> /etc/modprobe.d/blacklist.conf
reboot

Mit modprobe können Module zur Laufzeit des Systems ge- und entladen werden.
Bei Debian : nano /etc/modprobe.d/fbdev-blacklist.conf
Bei Ubuntu : nano /etc/modprobe.d/blacklist.conf
Bei Suse (Leap): /etc/modprobe.d/50-blacklist.conf

Die Sperrlisten im Verzeichnis /etc/modprobe.d/ haben üblicherweise den Namen blacklist-Modulname.conf, d.h. der Dateiname kann frei gewählt werden, sollte aber mit dem Präfix blacklist- beginnen um direkt über die Funktion zu informieren. Darüber hinaus existiert auch eine "allgemeine" Datei, die nur den Namen blacklist.conf trägt. Diese Datei sollte man allerdings nicht komplett überschreiben, sondern bei Bedarf weitere Einträge anhängen.

Eine ausführlichere Beschreibung über die Kernelmodule gibt es hier

Zum Schluss noch alle Treiber die zum Starten des Systems notwendig sind und nicht zum Kernel gehören einmal neu laden.

sudo update-initramfs -u -k all

Jetzt sollte beim nächsten Bootvorgang die Fehlermeldung nicht mehr vorhanden sein.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:22


OpenSSL auf Debian aktualisieren/installieren

OpenSSL ist die am meisten verwendete SSL-Bibliothek des Planeten.
Wie auch bei Apache liegt im Debian-Repository meist eine veraltete
OpenSSL-Version vor (1.0.1), welche sogar noch anfällig für Heartbleed-Attacken ist.

Um Auf die neuste Version Snapshot Version (1.1.0g) zu aktualisieren,
müssen wir daher OpenSSL auf unserem System selbst kompilieren und installieren.

Schritt 1: Vorbereitung
Zunächst werden hierfür die benötigten Pakete zur Kompilierung installiert:

apt-get install autoconf python libtool build-essential

Schritt 2: Download von OpenSSL
Hierfür laden wir OpenSSL herunter und entpacken es:

wget wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz -O openssl-1.1.0g.tar.gz
tar xfz openssl-*.tar.gz

Schritt 3: Kompilierung von OpenSSL
Kompilierung unseres OpenSSL Sourcecode Packetes:

cd openssl-*
sudo ./config --prefix=/usr zlib-dynamic --openssldir=/etc/ssl shared
sudo make
sudo make test

Schritt 4: Installation von OpenSSL

sudo make install

Schritt 5: Überprüfung der Installation
Nun sollte nun OpenSSL installiert sein, mit Hilfe des Befehls:

openssl version

kann die aktualisierte Version getestet werden.
In einigen Fällen wird trotzdem nicht die aktuelle Version angezeigt.
In diesem Fall hilft folgende Lösung:

$ mv /usr/bin/openssl /root/
$ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
openssl version

OpenSSL 1.1.0g 5 Jan 2018

Diese Prozedur funktioniert sowohl als Neuinstallation, als auch als Update.

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:21


Linux Terminal Anwendungen - Kommandozeilen Apps

Das Linux Terminal ist nicht nur ein sehr effizientes Werkzeug zum Arbeiten, sondern es ist in der Befehlsverarbeitung sehr schnell und verbraucht weniger Ressourcen wie eine graphische Oberfläche mit Maussteuerung. Dies liegt mitunter daran, dass die Shells (Kommandozeileninterpreter) unter Unix wesentlich leistungsfähiger sind als zum Beispiel der DOS-Kommandozeileninterpreter. Außerdem ist eine Shell bei manchen Aufgaben einem grafischen Benutzerinterface überlegen, da durch die Shell-Syntax zum Beispiel Ablaufsteuerungen und Programmrückmeldungen einbezogen werden können, was bei grafischen Anwendungen meist nicht möglich ist. Bei vielen Nutzern und auch von mir wird weiterhin in der Regel die Kommandozeile bevorzugt.

Im Laufe der vielen Jahre (meine erst Berührung mit Linux war:  S.u.S.E. Linux 4.3 - seit 1996) sind einige interessante, leistungsfähige Terminal-Programme entstanden, die sehr nützliche Funktionen beinhalten und alles über die Kommandozeile erledigen lassen. Hierbei kann man weitestens auf die "Clickie-Buntie" Oberfläche wie Gnome, KDE und viele mehr, vollständig verzichten.

Ich trage auf dieser Seite einige der kleinen Kommandozeilen - Anwendungen zusammen, von den bekanntesten bis zu einigen wohl etwas unbekannteren. Die meisten Programme habe ich mit der APT Paketverwaltung von Debian / Ubuntu getestet, aber sicher funktionieren auch viele mit dpkg, opkg, ipkg yum oder pacman oder sind als Quellcode für das jeweilige System kompilierbar.

Archivierung:

Automation:

Ansible
Ein Leichgewichtiges und schnelles Konfigurationsmanagement für Linux. Es ermöglicht die automatisierte Bereitstellung, Softwareverteilung, Konfiguration und Upgrades auf allen Clients im Netzwerk. Es kommt komplett ohne Agenten auf dem Clienten aus und benötigt auf den Systemen lediglich einen SSH-Server und eine aktuelle Python-Installation.
Debian-Benutzer können die gleiche Quelle wie das Ubuntu-PPA nutzen.
Folgende Zeile zu den Quellen unter /etc/apt/sources.list sollte dann ergänzt werden:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main

Dann mit folgenden Befehlen unter Debian (Debian,Jessie und Stretch) installieren:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
$ sudo apt-get update
$ sudo apt-get install ansible

Mit ansible kann sich jeder Netzwerk-Administrator mit wenig Aufwand seine eigene Sammlung an Skripten zum Systemmanagement erstellen. Vor allem die große Auswahl an bestehenden yaml-Verteilungsscripten (Playbooks) macht es auch Einsteigern sehr leicht, mit ansible gute Erfolge zu erzielen. Für viele Linux-Admins sind die kleinen und großen ansible-Helferlein aus dem IT-Alltag gar nicht mehr wegzudenken. Wer einmal das Konzept und die Einfachheit von ansible verstanden hat, verlässt sein Büro bei 100 Rechnern im Haus nur noch wegen der Mittagspause.

fswatch - Überwacht Dateien und Verzeichnisänderungen unter Linux und MAC OS X.

Backup:

Amanda
Open Source Netzwerk-Backup für Linux, Windows, UNIX und OS X. AMANDA setzt sich aus den Wörtern "Advanced Maryland Automatic Network Disk Archiver" zusammen. Es ist eine professionelle Backup-Lösung, die es dem IT-Admin ermöglicht, einen einzigen Master-Backup-Server einzurichten, um mehrere Hosts über das Netzwerk auf Bandlaufwerke/Wechsler oder Festplatten oder optische Medien auch verschlüsselt zu sichern. Amanda verwendet dabei native Utilities und Formate (z.B. Dump und/oder GNU tar) und kann eine große Anzahl von Servern und Workstations mit mehreren Versionen von Linux oder Unix sichern. Amanda verwendet einen nativen Windows-Client, um auch Microsoft Windows-Desktops und -Server zu sichern.

Bacula
Verwalten von Backups, Wiederherstellungen und Verifizierungen von Computerdaten über ein Netzwerk von Computern unterschiedlicher Art.

BorgBackup
BorgBackup (kurz: Borg) ist ein deduplizierendes Backup-Programm. Optional unterstützt es Komprimierung und authentifizierte Verschlüsselung. Es ist eine deutlich verbesserte Form der Backupsoftware Attic.

Das Hauptziel von Borg ist es, einen effizienten und sicheren Weg zur Datensicherung zu bieten. Die verwendete Technik der Datendeduplizierung macht Borg für tägliche Backups geeignet, da nur Änderungen gespeichert werden. Die authentifizierte Verschlüsselungstechnik macht es geeignet für Backups auf nicht vollständig vertrauenswürdige Zielen wie z.B. externe Cloudumgebungen.

# Bevor eine Sicherung durchgeführt werden kann, muss zuerst ein Repository initialisiert werden:
$ borg init --encryption=repokey /pfad/zu/repo

# Sichern der Verzeichnisse ~/src und ~/Documents in ein Archiv namens Montag:
$ borg create /path/to/repo::Montag ~/src ~/Dokumente

# Am nächsten Tag kann ein neues Archiv mit dem Namen Dienstag erstellt werden:
$ borg create --stats /path/to/repo::Dienstag ~/src ~/Dokumente

Dieses Backup wird viel schneller und viel kleiner, da nur neue, nie zuvor gesehene Daten gespeichert werden. 
Die Option --stats bewirkt, dass Borg Statistiken über das neu erstellte Archiv ausgibt, 
wie z.B. die Menge an eindeutigen Daten (die nicht mit anderen Archiven geteilt werden)

Verschlüsselte Server-Backups mit Duply und Duplicity
Einfaches Erstellen von GPG-verschlüsselten, komprimierten Backups beliebiger Daten fast überall. Backups in lesbarer Form irgendwo im Netz ablegen? Das ist keine gute Idee. Die Backups allerdings zuerst vollständig verschlüsseln und danach auf einen beliebigen Online-Speicherplatz wegschieben? Das hört sich schon eher ganz gut an! Genau das kann Duplicity, und dank Duply vereinfacht sich dessen Handhabung auf wenige, sehr einfache Befehle. Duply dient als Wrapper für Duplicity und reduziert die Handhabung von Sicherung und Wiederherstellung auf das Wesentliche. Hier einmal ein paar einfache Beispiele:

// Status der Backups anzeigen
# duply mein_backup_profil status

// Backup erstellen
# duply mein_backup_profil backup

// Vor kurzem gelöschten Pfad wiederherstellen (vor vier Tagen)
# duply mein_backup_profil restore /tmp 4D

// Einzelne Datei aus letztem Backup wiederherstellen und unter neuem Namen abspeichern
# duply mein_backup_profil fetch etc/passwd /tmp/passwd_restored

// Einen gelöschten Ordner wiederherstellen und unter neuem Namen abspeichern (vor 5 Tagen)
# duply mein_backup_profil fetch etc /tmp/etc_folder_restored 5D

Duply und Duplicity besitzen keine grafische Oberfläche und eignen sich deshalb vor allem für automatisierte Server-Backups. Für den Desktop gibt es das GUI Werkzeug Déjà Dup, das mit einer grafischen Oberfläche ebenfalls auf Wunsch verschlüsselte Backups erstellt.

mysqldump-secure
Sicheres mysqldump-Skript mit Verschlüsselung, Komprimierung, Protokollierung, Blacklisting und Nagios Monitoring Integration.

Benchmark:

apt-get install sysbench
sysbench --test=cpu --num-threads=4 --cpu-max-prime=20000 run

Cloud:

Content Erstellung:

Dateimanagement:

Datenbanken:

Datenverarbeitung:

Download Tools:

E-Mail:

Entwicklung:

FTP:

Grafik:

Aewan ist ein auf Curses basierendes Programm, das die Erstellung und Bearbeitung von Ascii-Art von der Kommandozeile ermöglicht. Der Benutzer kann den Cursor mit den Pfeiltasten und den Zeichen "malen" durch Drücken der entsprechenden Tasten auf dem Bildschirm bewegen. Es gibt Dialogfelder, in denen der Benutzer Vorder- und Hintergrundfarben sowie fette und blinkende Attribute auswählen kann.



Der Benutzer kann auch rechteckige Bereiche der Leinwand auswählen, um sie zu verschieben, zu kopieren und einzufügen.
Aewan unterstützt auch'intelligentes' horizontales und vertikales Spiegeln (z.B. konvertiert'\' in'/', usw.).

Was Aewan von ähnlichen Projekten unterscheidet, ist die Tatsache, dass es mit mehreren Ebenen (Layern) arbeiten kann und die Möglichkeit hat, Transparenz und Sichtbarkeit für jede Ebene ein- und auszuschalten. Es gibt einen Ebenendialog, über den der Benutzer die Reihenfolge der Ebenen ändern kann. So kann jede Ebene unabhängig voneinander bearbeitet werden, um eine zusammengesetzte Zeichnung zu erzeugen. Anstatt die Ebenen für das Compositing zu verwenden, ist es auch möglich, die Ebenen als Rahmen für eine Animation zu verwenden,
so dass der Benutzer auch Ascii-Animationen mit Aewan erstellen kann.

Aewan kann Animationen in einen "less movie" exportieren, d.h. eine normale Datei, die die Animation zeigt, wenn sie im  Pager oder ähnlichen Programm durchgeblättert wird (sogar Notepad funktioniert, wenn keine Farbe benötigt wird). Es kann auch ein Shellscript exportieren, das die Animation auf dem Terminal abspielt, wenn es ausgeführt wird.

Das Dateiformat ist einfach zu strukturiert, so dass es leicht ist, eine Terminal-basierte Anwendung zu schreiben,
die die Aewan-Dateien zur Anzeige auf dem Bildschirm verwendet. Derzeit läuft es auf dem Linux-Terminal, rxvt, xterm, dem Cygwin-Terminal und der FreeBSD-Konsole. Somit läuft es in der Konsole von Linux, Mac OSX und in der Hybrid Linux Version von Windows 10.

Hier gibt es eine Beschreibung des Dateiformates:
http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=aewan

AEWAN - Ascii-art Editor
http://aewan.sourceforge.net/

Installation unter Debian 9:

sudo apt-get install aewan

Weite Quellen:
Ascii Art Sammlung: http://copy.r74n.com/ascii-art
Ascii Art Archiv: https://www.asciiart.eu/
Ascii-Art Movies: http://www.romanm.ch/ascii-movies
Ascii-Art Online Konverter: https://www.ascii-art-generator.org/de.html
Ascii-Art Online Konverter: https://manytools.org/hacker-tools/convert-images-to-ascii-art/

Internet:

eLinks - Ein textbasierter moderner Webbrowser für die Konsole.
ELinks ist der coolste Kommandozeilen-Webbrowser, tatsächlich ist es der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird als auch moderne Webseiten unterstützt. Er lässt sich sowohl mit der Tastatur als auch der Maus bedienen.



Entwickelt wurde der schlanke und schnelle Textbrowser ELinks von Jonas Fonseca. Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Hier habe ich extra etwas ausführlicher über eLinks geschieben.
Weitere Quellen: http://www.kompx.com/en/elinks.htm

IRC:

Konverter:

Linux:

Mac OS X:

.

Medien:

.

Netzwerke:

IPTraf-(ng)
Wer das Netzwerk-Verhalten von Servern mit Linux-Betriebssystem analysieren will, benötigt ein entsprechendes Monitoring-Tool. Das textbasierte IPTraf ist per Standard selten in Linux-Distributionen installiert. Allerdings ist es in vielen Repositories, wie beispielsweise bei Ubuntu oder Debian enthalten. Somit lässt es sich bequem über die üblichen Mechanismen einspielen. Im Falle Ubuntu oder Debian wird es mit diesem Befehl

sudo apt-get install iptraf-ng

installiert und dann mit Root-Rechten gestartet, da der Paketfilter ausgelesen werden muss.

Das Packet iptraf ist z.B. in Debian 9 nur noch als Platzhalter vorhanden und wurde durch die neue Version iptraf-ng iptraf-(new generation) ersetzt.

# Allgemein
sudo iptraf-ng 
# Beispiel
sudo iptraf-ng ppp0 

Ein universelles Werkzeug, das diverse Netzwerk-Statistiken über das LAN erstellt. IPTraf ist ein interaktives, farbiges auf ncurses-basierendes Netzwerkstatistikprogramm (LAN Monitor), das verschiedene Netzwerk Statistiken erzeugt, einschließlich TCP Info, UDP Zähler, ICMP und OSPF Information, Ethernet Lastinformation, Node Statistiken, IP Checksummen Fehler, usw. Man kann hier diverse Filter einsetzen. Sollte der Server mehr als eine Netzwerkkarte besitzen, kann diese auch explizit ausgewählt und diese bestimmte Netzwerkkarte, die überwacht werden soll, angezeigt  und protokolliert werden.

cbm
Der Color Bandwidth Meter (cbm)
- Ist eine kleine farbige Terminalanwendung, um den aktuellen Datenverkehr durch alle Netzwerkgeräte anzuzeigen.

sudo apt-get install cbm

Quellen: http://www.isotton.com/software/unix/cbm/

Präsentation:

 

Produktivität:

 

RSS:

Screensaver: 

CMatrix
Cmatrix ist ein einfaches Konsolenprogramm, das wie der beliebte Sci-Fi-Film "Matrix" die coolen Matrix-Scrolling-Linien, die als Schriftzeichen aller Art vom oberen Rand des Fensters auf den unteren hinunterfallen im Terminal darstellen.

Installation unter Debian / Ubuntu:

sudo apt-get install cmatrix

Um das Programm zu beenden, 'q' drücken.
Asynchrones Scrollen (wie in dem ursprünglichen Film) geht mit:

cmatrix -a -C green -u 6 -s 

Die Optionen:
-a : ein asynchrones Scrollen
-b : Fettgedruckte Zeichen einschalten
-B : Alle Zeichen fettgedruckt (überschreibt -b)
-f : Erzwingt, dass der linux $TERM-Typ eingeschaltet ist.
-l : Linux-Modus (setzt die Schriftart "matrix.fnt" in der Konsole)
-o : Scrollen oldstyle verwenden
-n : Keine fetten Zeichen (überschreibt -b und -B)
-s : "Bildschirmschoner"-Modus, Beenden beim ersten Tastendruck
-x : X-Fenstermodus, kann verwendet werden wenn xterm mtx.pcf verwendet.
-V : Druckversionsinformationen und Beenden
-u delay : Geschwindigkeit 0 - 9, Voreinstellung 4
-C color : Gültige Farben sind: green, red, blue, white, yellow, cyan, magenta und black.

Alle Optionen und Anweisungen:

man cmatrix

Spiele:

Ascii Sector ist ein kostenloses Konsolen-Spiel für Windows, Mac OS X und Linux. Ein wenig vergleichbar mit Wing Commander Privateer. Man beginnt mit einem einfachen Raumschiff und kann dann Missionen annehmen oder Waren tauschen, um genug Geld zu verdienen, um das eigene Schiff aufzurüsten oder ein neues zu kaufen.

Man kann tödliche Kämpfe im Weltraum, auf dem Boden und an Bord von Raumschiffen austragen, und mit der Skriptsprache Ascii Sector kann man auch eigene Quests für das Spiel erstellen oder Spaß mit den Quests anderer Spieler haben.
Download:http://www.asciisector.net/

Suchen:

System:

htop
Um die Systemleistung anzuzeigen gibt es das Programm htop. Es zeigt interaktiv alle momentan ausgeführten Prozesse sowie deren Belastung im System an. Mit htop kann man allerdings nicht nur durch die Prozessliste scrollen, man hat auch die Möglichkeit, schnell und einfach bestimmte Signale an Prozesse zu senden. Es bietet zudem die Möglichkeit, Prozessbäume anzuzeigen und ist sehr anpassbar.
htopDie Prozesse lassen sich nach verschiedenen Kriterien sortieren, die über F6 ausgewählt werden können. Es erscheint ein kleines Menü am linken Anzeigerand, aus dem das Sortierkriterium ausgewählt werden kann.
<pre>sudo apt-get install htop</pre>
Homepage: http://hisham.hm/htop/

Terminal:

 

Text Editoren:

Nano
Der nano Editor ist ein kleiner, beliebter Text-Editor für Linux, der in der Regel bei den neueren Ubuntu und Debian (+ Raspbian) Installationen dabei ist. Zur Installation gibt man unter Debian / Ubuntu folgenden Befehl ein:

sudo apt-get install nano

Im Editor navigiert man mit den Pfeil- und Bildlauftasten durch die Datei. Aktionen wie Schließen, Speichern, Suchen, Ausschneiden, Kopieren, Einsetzen usw. erledigt man über Tastenkombinationen. Bei angepasster Konfiguration auch mit der Maus.


Die wichtigsten Shortcuts blendet Nano jeweils in den unteren beiden Statuszeilen ein. Nano verwendet in der Voreinstellung die systemweite Einrichtungsdatei /etc/nanorc. Diese kann man als Vorlage zu einer eigenen Konfiguration verwenden um z.B. Farbgebung, Mausaktivität und sogar Syntax Highlighting zu konfigurieren. Mit dem folgenden Befehl erzeugt man im Home-Verzeichnis eine Kopie.

cp /etc/nanorc ~/.nanorc

Bei OpenSuse und Debian ist Farbgebung und das Syntax Highlighting deaktiviert: In /etc/nanorc (bzw., wenn man eine Kopie erzeugt hat, in ~/.nanorc) sind die erforderlichen Einträge zwar vorhanden, aber durch eine vorangestellte Raute auskommentiert. Das kann man mit folgendem Kommando sehr schnell beheben:

sed -i "s/^# include/include/" ~/.nanorc

Für erweiteretes oder angepasstes Syntax Highlighting, wenn man die Farbgebung für die einzelnen Sprachen anpassen möchte, kopiert man die Dateien aus /usr/share/nano/ ins eigene Home-Verzeichnis, zum Beispiel in ein verstecktes Verzeichnis namens ~/.nano und passt sie dann in einem Texteditor an. Danach bindet man diese Syntaxdateien dann in der Datei ~/.nanorc über include ein.

Verschlüsselung:

 

Versions Kontrolle:

 

VPN:>

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 16:36


Überwachung von Dateien und Verzeichnisänderungen unter Linux mit fswatch

fswatch ist ein einfacher plattformübergreifender Dateiänderungs-Monitor für die Befehlszeile, der Benachrichtigungen erält, wenn der Inhalt der angegebenen Dateien oder Verzeichnishierarchien geändert oder modifiziert werden. Er führt vier Arten von Überwachungen auf verschiedenen Betriebssystemen aus, wie z.B.:

  • Ein Monitor, der auf der Dateisystem-Ereignis-API von Apple OS X aufbaut.
  • Ein Monitor, der auf kqueue basiert, einer Benachrichtigungsschnittstelle, die in FreeBSD 4.1 ebenfalls auf vielen *BSD-Systemen, einschließlich OS X, unterstützt wird.
  • Ein Monitor, der auf der File Events Notification API des Solaris-Kernels und seiner Ausgründungen basiert.
  • Ein Monitor, der auf inotify basiert, einem Kernel-Subsystem, das Änderungen am Dateisystem von Anwendungen anzeigt.
  • Ein Monitor basierend auf ReadDirectoryChangesW, einer Windows-API, die Änderungen in einem Verzeichnis aufzeichnet.
  • Ein Monitor, der regelmäßig den Status des Dateisystems überprüft, die Änderungszeiten der Dateien im Speicher hält und Änderungen am Dateisystem manuell ermittelt (was überall funktioniert, wo stat verwendet werden kann).

Die Features von fswatch:
Es Unterstützt mehrere betriebssystemspezifische APIs und ermöglicht rekursive Verzeichnisüberwachung. Es führt Pfadfilterung durch, indem es reguläre Ausdrücke einschließt und ausschließt. Es unterstützt anpassbare Datensatzformate und periodische Leerlauf-Ereignisse.
So kann man fswatch in Linux-Systemen installieren:
Leider ist das fswatch-Paket nicht für die Installation aus den Standard-System-Repositories in allen Linux-Distributionen verfügbar. Die einzige Möglichkeit, die neueste Version von fswatch zu installieren, besteht darin, sich aus den Quellen die Applikation selbst zu kompilieren, wie in der folgenden Installationsanleitung beschrieben:

Zuerst die neueste fswatch tar Datei mit folgendem wget Befehl holen und wie gezeigt installieren:

$ wget https://github.com/emcrisostomo/fswatch/releases/download/1.11.3/fswatch-1.11.3.tar.gz
$ tar -xvzf fswatch-1.11.3.tar.gz
$ cd fswatch-1.11.3
$ ./configure
$ make
$ sudo make install 

Wichtig:
Sicherstellen, dass die GNU GCC (C und C++ Compiler) und Entwicklungswerkzeuge (auf Debian/Ubuntu) auf dem System installiert sind, bevor fswatch aus dem Quelltext kompiliert wird. Wenn nicht, wird es mit folgenden Befehlen auf den jeweiligen Linux-Distributionen installiert:

# yum group install 'Development Tools' [On CentOS/RHEL] 
# dnf group install 'Development Tools' [On Fedora 22+ Versions] 
$ sudo apt-get install build-essential [On Debian/Ubuntu Versions] 

Auf Debian/Ubuntu-Distributionen kann es beim Ausführen des Befehls fswatch zu folgendem Fehler kommen:

fswatch: error while loading shared libraries: libfswatch.so.6: cannot open shared object file: No such file or directory

Um dies zu beheben, muss man die Links und den Cache zu den dynamischen Bibliotheken aktualisieren, bevor fswatch verwendet werden kann. Dies erledigt man mit folgendem Befehl:

$ sudo ldconfig

Benutzung von fswatch unter Linux
Die allgemeine Syntax für die Ausführung von fswatch ist:

$ fswatch [option] [path]

Unter Linux wird empfohlen, den Standardmonitor inotify zu verwenden. Die verfügbaren Monitore können mit der Option -M oder - list-monitors aufgelistet werden:

$ fswatch -M
$ fswatch --list-monitors

Mit dem folgenden Befehl kann man Änderungen im aktuellen Verzeichnis z.B. /home/user verfolgen, wobei die Ereignisse alle 4 Sekunden an die Standardausgabe gesendet werden. Mit der Option -l oder --latency kann man die Latenzzeit in Sekunden einstellen, die Standardeinstellung ist 1 Sekunde.

$ fswatch -l 4 . 

fswatch - Änderungen im Home-Verzeichnis überwachen Dieser Befehl überwacht alle 5 Sekunden die Änderungen an der Datei /var/log/auth.log:

$ fswatch -l 5 /var/log/auth.log 

Mit der Option -t oder --timestamp wird der Zeitstempel für jedes Ereignis gedruckt, um die Uhrzeit im UTC-Format zu drucken, muss die Option -u oder --utf-time verwendet wwerden. Man kann die Zeit auch mit der Option -f oder --format formatieren:

$ fswatch --timestamp /var/log/auth.log

Als nächstes weist -x oder --event-flags fswatch an, die Ereignisflags neben dem Ereignispfad zu drucken. Man kann die Option -event-field-seperator verwenden, um Ereignisse mit dem entsprechenden Trennzeichen auszugeben.

$ fswatch --events-flags ~ /var/log/auth.log

Um den numerischen Wert eines Ereignisses auszugeben, das Änderungen im Heimatverzeichnis und der Datei /var/log/auth.log anzeigt, verwendet man die Option -n oder --numeric wie unten beschrieben:

$ fswatch --numeric ~ /var/log/auth.log

Weitere detaillierte Verwendungsmöglichkeiten und Informationen findet man in der fswatch-Manualseite:

$ man fswatch

oder direkt im fswatch Github Repository

Verfasser: Andreas Preuss
Letzte Änderung: 04-06-2018 13:20


Debian mit fail2ban gegen Brute-Force und DDoS Attacken absichern

Fail2Ban ist ein kleines, ressourcenschonendes Programm, das Logfiles verschiedenster Programme (z.B.: Apache, ssh, postfix …) überwacht und basierend auf Einträgen in den Logfiles Ereignisse auslöst. Ein sogenannter "Logparser". Zusammen mit einem ssh-Server können damit z.B. die Anzahl der Einloggversuche begrenzt werden. Die Verwendung von Fail2Ban ist aber noch viel universeller. Gerade auf Mehrbenutzersystemen ist es oft nicht möglich den ssh-Port zu verändern weil viele Benutzer einfach auf den Rechner zugreifen müssen. Leider können auch Angreifer relativ leicht in das System durch die Brute-Force-Methode einbrechen, indem sie einfach solange Kombinationen aus Benutzername und Passwort ausprobieren, bis sie ein passendes Paar gefunden haben. Das Programm fail2ban verhindert genau dieses "ausprobieren". Es untersucht die Logfiles des Systems nach fehlgeschlagenen Loginversuchen und sperrt dann die Internetadresse (IP) des Angreifers für eine gewisse Zeit.

sudo apt-get update
sudo apt-get install fail2ban

Danach kann eine eigene Konfigurationsdatei /etc/fail2ban/jail.local angelegt werden, welche die Voreinstellungen der /etc/fail2ban/jail.conf überschreibt. Oder man erstellt sich am Besten einfach eine Kopie der Standart Konfigurationsdatei, die man den gewünschten Anforderungen anpasst :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Wichtig:
Immer sich selber (eigene IP) in die ignore-ip "Whiteliste" der jail.conf eintragen, damit man sich nicht selber aussperrt oder ausgesperrt werden kann.

sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
 
# "ignoreip" kann eine IP-Adresse, eine CIDR-Maske oder ein DNS-Host sein. 
# Fail2ban wird nicht einen Host verbieten, der mit einer Adresse in dieser Liste übereinstimmt. 
# Mehrere Adressen können sein mit Leerzeichen (und/oder Komma) definiert werden.
# Daran denken immer einen Client Zugang für root lassen. 
# ignoreip = 127.0.0.1/8 192.168.0.11 (Hier wird die Whitelist definiert)  
ignoreip = 127.0.0.1/8 192.168.0.1/24 148.251.187.218 87.138.XXX.XXX 217.110.XX.XXX 217.110.XX.XXX
 
# "bantime" is the number of seconds that a host is banned.
#bantime = 604800 # (= eine Woche)
#bantime = 86400  # (= ein Tag)
#bantime = 600     #(= 10 Minuten)
bantime  = 3600   # (=1 Stunde)
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds. 
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
 
#
# JAILS
#

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
#
# SSH servers
# 

[ssh]
enabled  = true
port     = ssh,https
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

[ssh-ddos] enabled = true port = ssh,https filter = sshd-ddos logpath = /var/log/auth.log bantime = 604800 maxretry = 2 [sshd] # SSH Login absichern enabled = true logpath = /var/log/auth.log maxretry = 3

Dienst neu starten:

sudo service fail2ban restart 
# oder 
sudo /etc/init.d/fail2ban restart

Folgende Einträge sollten in der jail.local immer aktiviert sein:

ssh
dropbear
pam-generic
ssh-dos
apache all

Alle Bans werden in der /var/log/fail2ban.log gespeichert. Und wir ermitteln wir die Login Versuche aus der log /var/log/apache2/error.log oder entsprechende andere Log's.

tail -f /var/log/apache2/error.log  #(realtime zuschauen)

Nachschauen welche Regeln durch Fail2Ban definiert wurden:

iptables -L

Status Prüfen:

sudo fail2ban-client status

Oder speziell nur den fail2ban Status apache:

sudo fail2ban-client status apache

Man kann IP-Adressen auch manuell sperren oder aufheben. Zum Beispiel, um eine IP-Adresse (192.168.10.15) mit einer apache-JAIL Regel auszusperren:

sudo fail2ban-client set apache banip 192.168.10.15

Dies kann auch wieder entsperrt werden.

sudo fail2ban-client set apache unbanip 192.168.10.15

Auf diese Weise kann man schnell Fail2ban testen, ob es wie erwartet funktioniert oder nicht. Die Verwendung von fail2ban ist ein guter und einfacher Weg, um DDoS Attacken und Brute-Force-Angriffe zu stoppen. Es ist auch eine gute Möglichkeit, die Anzahl der Bad Requests, die man erhält, zu begrenzen. LOG's anschauen und reagieren Wöchentlich sollte man eigentlich bei einem Produktivserver die LOGS in /var/log auswerten und evt. Reaktionen tätigen.
Weitergehende Infos:
https://linuxwiki.de/Fail2Ban
https://wiki.ubuntuusers.de/fail2ban/
https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern

Verfasser: Andreas Preuss
Letzte Änderung: 29-06-2018 09:44


MySQL Dump mit Skript ausführen

Auch von Datenbanken sollten regelmässig Backups erstellt werden. Um ein Backup einer Datenbank oder gleich mehreren anzulegen empfiehlt sich mysqldump. Es gibt auch die Möglichkeit ein Backup mit phpmyadmin oder ähnlichen Frontends anzufertigen. Allerdings müssen diese oft extra installiert werden und bei umfangreichen Datenbanken stösst man schnell an Einschränkungen wie z.B PHP-Timeouts. Mysql/MariaDB bringt bei der Installation schon die nötigen Backup-Tools mit. Daher müssen diese nicht extra installiert werden.
Das dump_databases.sh - Script sichert mittels mysqldump alle bekannten Datenbanken (db1_1, db2_2 und db3_3 ...) in /root/mysql_backup in den Unterordner /act und rotiert ggf. vorher /act nach /prev.
Scriptdatei: dump_databases.sh in /root/

#!/bin/bash

# variables
cnf_file="/root/.mysql_dump.cnf"
save_to="/root/mysql_backup"
db_directory=$1
db_list="db1_1 db2_2 db3_3"

# check if save directory exists
if [ ! -d ${save_to} ]; then
	mkdir -p ${save_to}
fi

# set rights for it
chmod 0700 ${save_to}

# log start
date +"%Y-%m-%d %H:%M:%S: *** starting db backup script" >> ${save_to}/dump.log

# check if 'prev' directory exists
if [ -d "${save_to}/prev" ]; then

	# delete previous backup
	date +"%Y-%m-%d %H:%M:%S: delete /prev" >> ${save_to}/dump.log
	rm -fR ${save_to}/prev
fi

# check if 'act' directory exists
if [ -d "${save_to}/act" ]; then

	# move actual to previous backup
	date +"%Y-%m-%d %H:%M:%S: move /act to /prev" >> ${save_to}/dump.log
	mv ${save_to}/act ${save_to}/prev
fi

# create 'act' directory
date +"%Y-%m-%d %H:%M:%S: create /act" >> ${save_to}/dump.log
mkdir -p ${save_to}/act

# run through db directory
for db_name in ${db_list}; do

    # if name of db exists as directory
	if [[ -d "${db_directory}/${db_name}" ]]; then

		# append log
		date +"%Y-%m-%d %H:%M:%S: dump ${db_name} to /act" >> ${save_to}/dump.log
		
		# Je nach Serverauslastung und Datenbankgroesse gibt es unterschiedliche Möglichkeiten (plain, gzip, xz, bzip2) das SQL zu komprimieren.
                # Aus eigenen Messungen einer 5GB und 200GB großen, bereits teilkomprimierten DB ist xz -1 der beste Kompromiss aus Kompressionlevel 
                # und -geschwindigkeit (Auf -1 ist xz 3x schneller als bzip2 bei nur ca. 9% größerem Archiv.). 
                # Daher ist das auch standardmässig im Script voreingestellt. Falls eine andere Kompression gewünscht ist, einfach die jeweilige Zeile 
                # in der dump_databases.sh ein- und alle andere auskommentieren, bzw. ändern

		# dump db plain to sql file
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} > ${save_to}/act/${db_name}.sql 2>> ${save_to}/dump.log

		# dump db to gzip file (very fast, low compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | gzip > ${save_to}/act/${db_name}.sql.gz 2>> ${save_to}/dump.log

		# dump db to xz file (normal to very slow, great compression)
		mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | xz -1 > ${save_to}/act/${db_name}.sql.xz 2>> ${save_to}/dump.log

		# dump db to bzip2 file (slow, good compression)
		# mysqldump --defaults-file=${cnf_file} --no-create-db --no-create-info --skip-comments ${db_name} | bzip2 > ${save_to}/act/${db_name}.sql.bz2 2>> ${save_to}/dump.log
	fi
done


# log finish
date +"%Y-%m-%d %H:%M:%S: finished db backup script" >> ${save_to}/dump.log

exit 0

ausführen als root:

Folgendes ist als als root allerdings vorher durchzuführen, damit mysqldump per crontab gestartet wird. Ggf. muss die Angabe zum Pfad des MySQL-Verzeichnisses (default: /var/lib/mysql ) im folgeden angepasst werden. Das Script braucht den Pfad um vor dem Dump zu prüfen, welche der DBs existiert.

cd ~
 
# Optional externer Download des Scripts vom anderen Server (for root only)
# wget -nv -N http://my_own_github_archive.int/debianinstall/server/dump_databases.sh

chmod 0700 dump_databases.sh
chmod +x dump_databases.sh

# create crontab.txt to define CronJobs
printf "# dumping databases mondays and fridays at 03:00\n" >> /root/crontab.txt
printf "0  3 * * 1 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
printf "0  3 * * 5 /root/dump_databases.sh /var/lib/mysql > /dev/null 2>&1\n" >> /root/crontab.txt
 
# set crontab configruation with crontab.txt (list actual config with crontab -l)
crontab crontab.txt
 
# create .mysql_dump.cnf and make it only accessable to root (don't write a password in command line, edit it in file)
printf "[client]\n" > /root/.mysql_dump.cnf
printf "host     = localhost\n" >> /root/.mysql_dump.cnf
printf "user     = root\n" >> /root/.mysql_dump.cnf
printf "password = \n" >> /root/.mysql_dump.cnf
printf "socket   = /var/run/mysqld/mysqld.sock" >> /root/.mysql_dump.cnf
chmod 0600 .mysql_dump.cnf

In der erstellten .mysql_dump.cnf bitte manuell das MySQL-Passwort setzen: /root/.mysql_dump.cnf
[client]
host = localhost
user = root
password = Mein_Passwort
socket = /var/run/mysqld/mysqld.sock

Verfasser: Andreas Preuss
Letzte Änderung: 05-06-2018 17:07


Sichere Passwörter mit dem Passwortgenerator pwgen erstellen

Wie der Name schon vermuten lässt, generiert das Programm pwgen zufällige Passwörter.
Installiert wird in der Regel über die Packetquellen.

Bei Debian / Ubuntu einfach:

sudo apt-get install pwgen

Weiterhin können wir das Erstellen der Passwörter mit einigen Parametern beeinflussen.
-0 keine Zahlen im Passwort
-A ohne große Buchstaben
-v keine Vokale im Passwort
-B keine mehrdeutigen Zeichen z.B. 1 und l
-N erzeuge Anzahl N Passwörter
-s erzeuge sehr sichere Passwörter

Eine ausführliche Info gibt es wenn man sich die Hilfe pwgen -h oder manpages man pwgen anzeigen lässt. Die Parameter lassen sich miteinander kombinieren z.B: Dieser Aufruf erzeugt drei sehr sichere Passwörter ohne mehrdeutige Zeichen mit einer Länge von 12 Zeichen und genau einem Passwort pro Zeile.

pwgen -s -B -N 3 -1 12

vg3LkM3vyaMa
3c3pgxT9gyjP
sjJKvp3KrTpx

Das automatische Erstellen von Passwörtern ist immer sehr zu empfehlen. Nicht immer gelingt es ein solch starkes Passwort aus dem Kopf zu generieren. Mehr Infos findet man auf der Projektseite von pwgen. https://sourceforge.net/projects/pwgen/

Das entsprechchend ähnliche Projekt für Windows mit GUI gibt es PwGen Win zu finden.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:59


Anpassung der Linux Bash-Prompt Eingabe mit tput

Das Aussehen des Bash Promptes wird in der Variablen PS1 in der Datei ~/.bashrc festgelegt. Die PS1 Variable besteht im einfachsten Fall aus einer Zeichenkette. Zum Beispiel:

PS1='MyPrompt >'
# oder einfach nur
PS1='>'
# Es können aber auch Befehle benutzt werden.
PS1='´pwd´ >'
# Hier würde zum Beispiel das aktuelle Arbeitsverzeichniss gefolgt von einem Leerzeichen und dem größer Zeichen als Prompt angezeigt werden.

In diesem Beispiel wird der Username (\u), Hostname (\h) und der Vollständige Pfad des aktuellen Arbeitsverzeichnisses (\w) angezeigt.

PS1="\u@\h \w> "

Mit dem Linux Befehl tput lassen sich hier auf sehr einfache Weise Color und Cursor Verhalten anpassen:

$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"

In der PS1-Umgebungsvariablen kann man jeden beliebigen Linux-Befehl direkt ausführen, indem man ihn im Format $(linux_command) angibt. Im folgenden Beispiel wird der Befehl $(date) ausgeführt, um die aktuelle Uhrzeit in der Eingabeaufforderung anzuzeigen.

PS1="\u@\h [\$(date +%k:%M:%S)]> " # Formatierte Zeitausgabe
# oder
PS1="\u@\h [\t]> " # hh:mm:ss Format
# oder
PS1="[\@] \u@\h> " # 12-Stunden (am/pm) Format

Aber auch in Scripten oder einfach so im Terminal hat man vielleicht den Wunsch eine Hervorhebung der Textausgabe durchführen zu können. Dies geht sehr bequem mit dem tput Befehl und seinen Einstellungsparametern:

tput Zeilen- Spalten- und Cursorposition:
    tput cols
    tput lines
    tput cup 6 8 - Cursorposition einstellen
    tput cnorm - Cursor anzeigen
    tput civis - Cursor verstecken

tput Farbeinstellungs Eigenschaften:

    tput setab [1-7] - Setzen der Hintergrundfarbe mittels ANSI-Escape
    tput setb  [1-7] - Setzen der Hintergrundfarbe
    tput setaf [1-7] - Setzen der Vordergrundfarbe mittels ANSI-Escape
    tput setf  [1-7] - Setzen der Vordergrundfarbe

tput Text Mode Eigenschaften:

    tput bold - Fettdruck einstellen
    tput dim  - halbhellen Modus einschalten
    tput smul - Unterstreichung starten
    tput rmul - Unterstreichung verlassen
    tput rev  - Umkehrung einschalten
    tput smso - In den Hervorgehobenen-Modus wechseln (Fettdruck bei rxvt)
    tput rmso - Verlassen des Standout-Modus
    tput sgr0 - Alle Attribute ausschalten

    tput reset - Alle Einstellungen zurücksetzen

Beispiel:

echo 'tput smul'Unterstrichen'tput rmul'

Farb-Codes für tput:
0=Schwarz, 1=Rot, 2=Grün, 3=Gelb, 4=Blau, 5=Magenta, 6=Cyan, 7=Weiß
tput ermöglicht es auch, eine Reihe von Befehlen gleichzeitig auszuführen. Wenn man beispielsweise den Bildschirm löschen und den Cursor auf eine bestimmte Position setzen möchte, kann man wie folgt vorgehen:

$ tput -S < clear
> cup 2 4
> END

Hinweis: Wenn man Vorder- und Hintergrund des Terminals auf die gleiche Farbe setzt, kann man den Cursor nicht mehr sehen. Zum Zurücksetzen "tput reset" ausführen.

Verfasser: Andreas Preuss
Letzte Änderung: 06-06-2018 16:54


MariaDB Performance Optimierung

Heute sind MySQL und MariaDB eines der am häufigsten verwendeten RDBMS für Webanwendungen wie WordPress, Joomla, Magento und andere. Diese Beschreibung zeigt einige grundlegende, aber nützliche Tipps, wie man die Leistung von MySQL/MariaDB optimieren könnte. Wir gehen hierbei davon aus, dass bereits MySQL oder MariaDB installiert wurde.
Jedes MySQL-Setup ist einzigartig und erfordert zusätzliche Überlegungen, bevor Änderungen vorgenommen werden. Die MySQL/MariaDB-Konfigurationsdatei befindet sich in /etc/my.cnf. Jedes Mal, wenn diese Datei geändert wird, muss auch der MySQL-Dienst neu gestartet werden, damit die neuen Änderungen wirksam werden.

# So kann man den MySQL Server neu starten:
 /etc/init.d/mysql restart

# So kann man den Server anhalten:
/etc/init.d/mysql stop

# So kann man den MySQL Server starten nachdem er gestoppt wurde 
/etc/init.d/mysql start

Swappiness in MySQL vermeiden
Swapping ist ein Prozess, der auftritt, wenn das System einen Teil des Speichers auf einen speziellen Speicherplatz namens "swap" verschiebt. Das Ereignis wird normalerweise angezeigt, wenn der physische Speicher Ihres Systems erschöpft ist und das System die Informationen auf die Festplatte verschoben hat, anstatt etwas RAM freizugeben. Die Festplatte ist viel langsamer als das RAM.
Standardmässig ist die Option aktiviert:

# sysctl vm.swappiness 
vm.swappiness = 60

# Um Swappiness zu deaktivieren, ändert man den Eintrag auf:
sysctl -w vm.swappiness=0

MySQL Max-Verbindungen einstellen
Die Direktive max_connections sagt dem Server, wie viele gleichzeitige Verbindungen erlaubt sind. Der MySQL/MariaDB-Server erlaubt den in max_connections + 1 angegebenen Wert für Benutzer mit SUPER-Privilegien. Die Verbindung wird nur für die Zeit geöffnet, in der die MySQL-Abfrage ausgeführt wird - danach wird sie geschlossen und eine neue Verbindung kann an ihre Stelle treten. Zu viele Verbindungen können eine hohe RAM-Auslastung verursachen und den MySQL-Server sperren. Normalerweise benötigen man für kleine Websites zwischen 100-200 Verbindungen, während größere Websites 500-800 oder mehr benötigen. Der Wert, den man hier verwendet, hängt stark von der speziellen MySQL/MariaDB-Nutzung ab.
So kann man den Wert von max_connections dynamisch ändern, ohne den MySQL-Dienst neu starten zu müssen:

# mysql -u root -p
mysql> set global max_connections := 300;

MySQL thread_cache_size konfigurieren
Die Direktive thread_cache_size legt die Anzahl der Threads fest, die der Server zwischenspeichern soll. Wenn der Client die Verbindung trennt, werden seine Threads in den Cache gestellt, wenn sie kleiner als die thread_cache_size sind. Weitere Anfragen werden durch die Verwendung der im Cache gespeicherten Threads abgeschlossen. Um Ihre Performance zu verbessern, kann man die thread_cache_size auf eine relativ hohe Zahl setzen. Um die Thread-Cache-Trefferrate zu ermitteln, kann man die folgende Technik verwenden:

mysql> show status like 'Threads_created';    # Threads_erzeugt
mysql> show status like 'Connections';        # Verbindungen

Folgende Formel kann nun angewendet werden, um den Prozentsatz der Thread-Cache-Trefferrate zu berechnen:

100 - ((Threads_erzeugt / Verbindungen) * 100)

Wenn man eine niedrige Zahl erhält, bedeutet das, dass die meisten der neuen mysql-Verbindungen einen neuen Thread starten, anstatt aus dem Cache zu laden. In solchen Fällen würde man sicherlich die thread_cache_size erhöhen wollen. Das Gute dabei ist, dass die thread_cache_size dynamisch geändert werden kann, ohne dass der MySQL-Dienst neu gestartet werden muss. Dies kann man so erreichen:

mysql> set global thread_cache_size = 16;

Deaktivieren des MySQL Reverse DNS-Lookups
Standardmäßig führt MySQL/MariaDB einen DNS-Lookup der IP-Adresse/Hostname des Benutzers durch, von dem die Verbindung kommt. Für jede Client-Verbindung wird die IP-Adresse überprüft, indem sie in einen Hostnamen aufgelöst wird. Danach wird der Hostname wieder in eine IP aufgelöst, um sicherzustellen, dass beide übereinstimmen. Dies kann leider zu Verzögerungen bei schlecht konfiguriertem DNS oder Problemen mit dem DNS-Server führen. Aus diesem Grund könnte man den Reverse-DNS-Lookup deaktivieren, indem man folgendes in der Konfigurationsdatei hinzufügt:

[mysqld]
# Skip reverse DNS lookup of clients
skip-name-resolve

Nach dieser Änderung nicht vergessen den MySQL Dienst neu zu starten.

MySQL query_cache_size konfigurieren
Wenn man viele sich wiederholende Abfragen hat und sich die Daten nicht oft ändern, könnte man den Query-Cache anpassen. Oft wird das Konzept hinter der query_cache_size nicht verstanden und man setzt diesen Wert auf Gigabyte, was zu einer Verschlechterung der Performance führt. Der Grund dafür ist die Tatsache, dass Threads den Cache während der Updates sperren müssen. Normalerweise sollte ein Wert von 200-300 MB mehr als ausreichend sein. Wenn die Website relativ klein ist, kann man versuchen, den Wert von 64M zu erhöhen und die Zeit etwas verlängern. Folgenden Einstellungen können in der MySQL-Konfigurationsdatei vorgenommen werden:

query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M

tmp_table_size und max_heap_table_size konfigurieren
(Nur bei Verwendung von MyISAM) Beide Direktiven sollten die gleiche Größe haben und das Schreiben auf Datenträgern möglichst verhindern. Die tmp_table_size ist die maximale Größe der internen In-Memory-Tabellen. Bei Überschreitung des betreffenden Limits wird die Tabelle in die MyISAM-Tabelle auf der Festplatte konvertiert. Dies wirkt sich auf die Performance der Datenbank aus. Empfehlung in der Regel die Angabe von 64M für beide Werte für jedes GB RAM auf dem Server.

[mysqld]
tmp_table_size= 64M
max_heap_table_size= 64M

Aktivieren von MySQL Slow Query Logs
Das Protokollieren langsamer Abfragen kann helfen, Probleme mit der Datenbank zu ermitteln und diese zu beheben. Dies kann einfach durch Hinzufügen der folgenden Werte in der MySQL-Konfigurationsdatei aktiviert werden:

slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1

Die erste Direktive ermöglicht die Protokollierung von langsamen Abfragen, während die zweite Direktive MySQL sagt, wo die eigentliche Protokolldatei gespeichert werden soll. Verwendet man long_query_time, um die Zeitspanne zu definieren, die als lang angesehen wird, bis die MySQL-Abfrage abgeschlossen ist.

Überprüfen auf ungenutzte MySQL-Verbindungen (Idle Connections)
Leere Verbindungen verbrauchen Ressourcen und sollten nach Möglichkeit unterbrochen oder aufgefrischt werden. Solche Verbindungen befinden sich im "Schlaf"-Zustand und bleiben in der Regel über einen längeren Zeitraum erhalten. Um nach leeren Verbindungen zu suchen, kann man den folgenden Befehl ausführen:

# mysqladmin processlist -u root -p | grep "Sleep"

Dies gibt eine Liste der Prozesse, die sich im Ruhezustand befinden aus. Das Ereignis erscheint, wenn der Code eine persistente Verbindung zur Datenbank verwendet. Bei Verwendung von PHP kann dieses Ereignis bei Verwendung von mysql_pconnect auftreten, das die Verbindung öffnet, danach Abfragen ausführt, die Authentifizierung entfernt und die Verbindung offen lässt. Dies führt dazu, dass alle Puffer pro Thread im Speicher gehalten werden, bis der Thread stirbt. Das erste, was Sie hier tun wäre, ist, den Code zu überprüfen und zu reparieren. Wenn man keinen Zugriff auf den ausgeführten Code hat, sollte man die wait_timeout-Direktive ändern. Der Standardwert ist 28800 Sekunden. Man kann ihn sicher auf etwa 60 Sekunden reduzieren:

wait_timeout=60

MySQL max_allowed_packet setzen
MySQL teilt Daten in Pakete auf. Normalerweise wird ein einzelnes Paket als eine Zeile betrachtet, die an einen Client gesendet wird. Die Direktive max_allowed_packet definiert die maximale Paketgröße, die gesendet werden kann. Wenn man diesen Wert zu niedrig setzt, kann eine Abfrage zum Stillstand kommen und man erhält einen Fehler im MySQL-Fehlerprotokoll. Es wird empfohlen, den Wert auf die Größe des größten Pakets zu setzen. Änderung in der Datei my.ini oder ~/.my.cnf, indem man die einzelne Zeile unter [mysqld] die Datei aufnimmt:

nano /etc/mysql/my.cnf
max_allowed_packet=500M # (natürlich individuell, je nachdem was man braucht) unter der Sektion [MYSQLD]!  Nur am unteren Rand der Datei zu platzieren, funktioniert nicht!
# So kann die Einstellung sofort für alle geändert werden, bis der Server neu startet:
SET GLOBAL max_allowed_packet=1073741824;

MySQL-Leistungstuning prüfen
Die Messung der MySQL/MariaDB-Performance sollte man regelmäßig durchführen. Dies zeigt immer auf, ob sich etwas in der Ressourcennutzung ändert oder verbessert werden muss. Für das Benchmarking stehen viele Tools zur Verfügung, aber ich möchte Ihnen eines vorschlagen, das einfach und leicht zu bedienen ist. Das Tool heißt mysqltuner. Um es herunterzuladen und auszuführen, verwendet man den folgenden Befehlssatz: Quelle: https://github.com/major/MySQLTuner-perl/

# wget http://mysqltuner.pl/ -O mysqltuner.pl
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
# perl mysqltuner.pl
# oder
# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xf master
# cd MySQLTuner-perl/
# ./mysqltuner.pl 

Man erhält einen ausführlichen Bericht über den MySQL-Service und Empfehlungstipps.

Optimieren und Reparieren von MySQL-Datenbanken
Manchmal stürzen MySQL/MariaDB-Datenbanktabellen ziemlich leicht ab, besonders wenn der Server unerwartet heruntergefahren wird, plötzlich das Dateisystem beschädigt wird oder während des Kopiervorgangs, wenn noch auf die Datenbank zugegriffen wird. Überraschenderweise gibt es ein kostenloses Open-Source-Tool namens'mysqlcheck', das Datenbanken aller Tabellen unter Linux automatisch überprüft, repariert und optimiert.

# mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
# mysqlcheck -u root -p --auto-repair --check --optimize databasename
# oder
# mysqlcheck -u root -p --auto-repair -c -o your_database
# mysqlcheck -u root -p --auto-repair -c -o --all-databases

Wenn man nun wissen will, was der Befehl während der Prüfung macht, fügt man einfach dem Parameter --debug-info wie unten gezeigt hinzu. Dies ist hilfreich, wenn man z.B. eine große Tabelle überprüft.

# mysqlcheck --debug-info -u root -p --auto-repair -c -o your_database your_table
Enter password:
# Ausgabe z.B:
your_database.your_table  - Table is already up to date

User time 0.00, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 344, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 12, Involuntary context switches 9

 

Sämtliche Änderungen sollten in einer separaten Datei, die von der /etc/mysql/my.cnf includiert wird eingetragen werden, damit bei eventuellen Software Upgrades keine Einstellungen überschrieben werden können.
Ausgehend von meiner bisherigen MariaDB Erfahrung habe ich für meine Anforderungen in meine mariadb.conf Datei folgendes ergänzt:

# /etc/mysql/conf.d/mariadb.cnf
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
#############################################
# Bessere CPU-Auslastung mittels pool-of-threads statt one-thread-per-connection
#  -> https://mariadb.com/kb/en/threadpool-in-55/
thread_handling         = pool-of-threads
 
# Die soll MariaDB selbstständig auf die Anzahl der Cores einstellen
#thread_pool_size       = 12
 
# Nach wie viel ms soll ein neuer Thread in einem Pool generiert werden, wenn der aktive Thread nicht fertig wird
thread_pool_stall_limit = 20
 
# Wie viele Thread sind pro Pool sind möglich
thread_pool_max_threads = 300
 
# Das ist noch unklar, doch trotz pool-of-threads limitiert weiterhin max_connections, daher hier pool_size * max_threads
max_connections         = 3600
interactive_timeout     = 1080
wait_timeout            = 360
 
# Mit diesen Port kann trotzdem zugegriffen werden, wenn alle Threads ausgeschöpft sind. Gut zur Administration
extra_port             = 3307
extra-max-connections  = 48

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 23:11


Nützliche Shell-Aliase für Linux / Unix & Mac OS X

Ein Bash-Alias ist nichts anderes als die Abkürzung zu Befehlen. Der Alias-Befehl erlaubt es dem Benutzer, einen beliebigen Befehl oder eine Gruppe von Befehlen (einschließlich Optionen und Dateinamen) durch Eingabe eines einzigen Wortes oder Zeichens zu starten. Verwende den Befehl alias, um eine Liste aller definierten Aliase in deinem System anzuzeigen. Man kann benutzerdefinierte Aliase zur ~/.bashrc-Datei hinzufügen. Mit diesen Aliasen hat man die Möglichkeit sich die Tippzeit verkürzen, intelligent zu arbeiten und die Produktivität an der Eingabeaufforderung zu erhöhen. Beispielsweise können lange Befehle, die man häufig braucht, durch eine kürzere Version ebenso benutzt werden. Dieser Faq-Beitrag zeigt, wie man Aliase erstellt und verwendet und gibt meiner Meinung ein paar praktische Beispiele für Bash-Shell-Aliase. Die allgemeine Syntax für den Alias-Befehl für die Bash-Shell lautet wie folgt:

alias
..
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
alias g-commit='git add . --all && git commit -a -m '
alias g-log='git log --pretty=format:"%h - %an, %ar : %s"'
alias g-stash='git add . --all && git stash save '
alias l='ls ${LS_OPTIONS} -lA'
alias ll='ls ${LS_OPTIONS} -l'
alias ls='ls ${LS_OPTIONS}'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...

Standardmässig zeigt der Befehl "alias" eine Liste von Aliasen an, die für den aktuellen Benutzer definiert sind. Um einen Alias zu erstellen, verwendet man die folgende Syntax:

alias name=value
alias name='command'
alias name='command arg1 arg2'
alias name='/path/to/script'
alias name='/path/to/script.pl arg1 arg2'

In diesem Beispiel ist Alias c für den häufig verwendeten Clear-Befehl, der den Bildschirm löscht, indem man nur den Buchstaben c eingibt und die ENTER-Taste drückt:

alias c='clear'

Wie man einen Bash-Alias löscht/entfernt
Aliase werden mit dem Befehl alias erstellt und aufgelistet und mit dem Befehl unalias entfernt. Die Syntax ist:

unalias aliasname
unalias c 
unalias foo

Hier sollte man auch den Alias aus der Datei ~/.bashrc mit einem Texteditor löschen.

Wie man Bash-Shell-Aliase dauerhaft macht
Der Alias c bleibt nur während der aktuellen Anmeldesitzung gültig. Sobald man sich ausloggt oder das System neu startet, ist der Alias c verschwunden. Um dieses Problem zu vermeiden, fügen man den gewünschten Alias in die eigene ~/.bashrc-Datei hinzu:

nano ~/.bashrc
# Der Alias c für den aktuellen Benutzer kann durch Eingabe der folgenden Zeile dauerhaft gemacht werden:
alias c='clear'

Datei speichern und schliessen. Systemweite Aliase (d.h. Aliase für alle Benutzer) können in die Datei /etc/bashrc mit root-Rechten eingetragen werden. Bitte beachten, der Alias-Befehl wird dann in verschiedene Shells eingebaut, darunter ksh, tcsh/csh, ash, bash und andere. Ein Hinweis zum privilegierten Zugriff Man kann folgenden Code in ~/.bashrc hinzufügen:

# if user is not root, pass all commands via sudo #
if [ $UID -ne 0 ]; then
    alias reboot='sudo reboot'
    alias update='sudo apt-get upgrade'
fi

OS-spezifische Aliase
Man kann den Code wie folgt in ~/.bashrc mit der case-Anweisung hinzufügen:

### Get os name via uname ###
_myos="$(uname)"
 
### add alias as per os using $_myos ###
case $_myos in
   Linux) alias foo='/path/to/linux/bin/foo';;
   FreeBSD|OpenBSD) alias foo='/path/to/bsd/bin/foo' ;;
   SunOS) alias foo='/path/to/sunos/bin/foo' ;;
   *) ;;
esac

Aliase sind benutzerabhängig. Dies bedeutet, dass jeder Benutzer für seinen Account beliebig viele Aliase anlegen kann. Andere Benutzer können von ihrem eigenen Account nicht auf diese Abkürzungen zugreifen. So kann jeder Benutzer seine individuellen Aliase einrichten. Außerdem kann ein Benutzer die Aliase des anderen Benutzers so nicht böswillig manipulieren. Natürlich gibt es auch viele Situationen, in denen ein Alias wirklich praktisch ist. So muss man zum Mounten einer CD je nach System entweder mount /cdrom wie bei Debian (und seinen Derivaten, z.B. Storm Linux und Corel Linux) und SUSE oder mount /mnt/cdrom wie bei Red Hat (und seinen Derivaten, z.B. Mandrake) eingeben. Man erspart sich Tipparbeit und vereinheitlicht das Ganze durch folgende Aliase:

alias cdrom="mount /cdrom" alias ucdrom="umount /cdrom"

Der auszuführende Befehl der Aliase ist natürlich anzupassen, wenn der Mountpunkt an einer anderen Stelle liegt. Wenn man bestimmte Folgen von Befehlen häufig eingibt, macht es immer Sinn, sich dafür einen Alias einzurichten. Mehrere Befehle können in der Bash durch ein Semikolon voneinander getrennt in eine Zeile geschrieben werden. Beispiel:

alias cdmnt="mount /mnt/cdrom; cd /mnt/cdrom; ls"

 

Im Folgenden habe ich weitere Beispiele aufgelistet, die als alias in Frage kommen könnten:

# Steuerung der ls Befehlsausgabe
# Der Befehl ls listet den Inhalt des Verzeichnisses auf und die Ausgabe wird eingefärbt:
## colrierung der ls Ausgabe ##
alias ls='ls --color=auto'
 
## Verwendung eines langen Listenformates ##
alias ll='ls -la'

## Zeige versteckte Dateien ##
alias l.='ls -d .* --color=auto'

# Steuerung des cd-Befehlsverhaltens
## Loswerden deR Meldung Befehl ist nicht vorhanden. ##
alias cd..='cd ..'

# Schnell aus dem Verzeichnis kommen
## ein schneller Weg, um aus dem aktuellen Verzeichnis herauszukommen. ##
alias ..='cd ..'
alias ...='cd ../../../'
alias ....='cd ../../../../'
alias .....='cd ../../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../..'

# Ausgabe des Steuerbefehls grep
## Der Befehl grep ist ein Befehlszeilenprogramm zum Durchsuchen von Klartextdateien nach Zeilen, die einem regulären Ausdruck entsprechen:
## Einfärben der Grep-Befehlsausgabe für einfache Bedienung (gut für Log-Dateien)##
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# Starte Rechner mit mathematischer Unterstützung
alias bc='bc -l'

# Sha1-Bericht erstellen
alias sha1='openssl sha1'

# Erstellen von übergeordneten Verzeichnissen bei Bedarf
## Der mkdir Befehl wird verwendet, um ein Verzeichnis zu erstellen:
alias mkdir='mkdir -pv'

# Diff-Ausgabe einfärben
## Man kann Dateien Zeile für Zeile mit diff vergleichen und ein Tool namens colordiff verwenden, um die Ausgabe einzufärben:
alias diff='colordiff'

# Macht die Ausgabe von Mount-Befehlen schön und lesbar.
alias mount='mount |column -t'

# Einfache Befehlskürzel zur Zeitersparnis
alias h='history'
alias j='jobs -l'

# Erstellen eines neuen Befehlssatzes
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias nowtime=now
alias nowdate='date +"%d-%m-%Y"'

# Den Editor vim als Standard setzen
alias vi=vim
alias svi='sudo vi'
alias vis='vim "+set si"'
alias edit='vim'

# Kontrollausgabe des Netzwerktools ping
## Stopt nach dem Senden der Anzahl der ECHO_REQUEST-Pakete (wie bei der Windows Eingabeaufforderung)#
alias ping='ping -c 5'
# Nicht abwarten Intervall 1 Sekunde, Schnellgang #
alias fastping='ping -c 100 -s.2'

# Zeige offene ports
## Verwendung des Befehls netstat, um schnell alle TCP/UDP-Ports auf dem Server aufzulisten:
alias ports='netstat -tulanp'

# Wakeup sleeping servers
# Wake-on-LAN (WOL) is an Ethernet networking standard that allows a server to be turned on by a network message. You can quickly wakeup nas devices and server using the following aliases:
## replace mac with your actual server mac address #
alias wakeupnas01='/usr/bin/wakeonlan 00:11:32:11:15:FC'
alias wakeupnas02='/usr/bin/wakeonlan 00:11:32:11:15:FD'
alias wakeupnas03='/usr/bin/wakeonlan 00:11:32:11:15:FE'

# Control firewall (iptables) output
# Netfilter is a host-based firewall for Linux operating systems. It is included as part of the Linux distribution and it is activated by default. This post list most common iptables solutions required by a new Linux user to secure his or her Linux operating system from intruders.
## shortcut  for iptables and pass it via sudo#
alias ipt='sudo /sbin/iptables'
 
# display all rules #
alias iptlist='sudo /sbin/iptables -L -n -v --line-numbers'
alias iptlistin='sudo /sbin/iptables -L INPUT -n -v --line-numbers'
alias iptlistout='sudo /sbin/iptables -L OUTPUT -n -v --line-numbers'
alias iptlistfw='sudo /sbin/iptables -L FORWARD -n -v --line-numbers'
alias firewall=iptlist

# Debug web server / cdn problems with curl
# get web server headers #
alias header='curl -I'
 
# find out if remote server supports gzip / mod_deflate or not #
alias headerc='curl -I --compress'

# Add safety nets
# do not delete / or prompt if deleting more than 3 files at a time #
alias rm='rm -I --preserve-root'
 
# confirmation #
alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
 
# Parenting changing perms on / #
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

# Update Debian Linux server
# apt-get wird für die Installation von Paketen über das Internet (ftp oder http) verwendet.
# Man kann somit auch alle Pakete in einem Arbeitsgang aktualisieren: # distro specific - Debian / Ubuntu and friends # # install with apt-get alias apt-get="sudo apt-get" alias updatey="sudo apt-get --yes" # update & upgrade on one command alias update='sudo apt-get update && sudo apt-get upgrade' # Update RHEL / CentOS / Fedora Linux server # yum command is a package management tool for RHEL / CentOS / Fedora Linux and friends: ## distrp specifc RHEL/CentOS ## alias update='yum update' alias updatey='yum -y update' # Tune sudo and su # become root # alias root='sudo -i' alias su='sudo -i' # Pass halt/reboot via sudo # shutdown command bring the Linux / Unix system down: # reboot / halt / poweroff alias reboot='sudo /sbin/reboot' alias poweroff='sudo /sbin/poweroff' alias halt='sudo /sbin/halt' alias shutdown='sudo /sbin/shutdown' # Control web servers # also pass it via sudo so whoever is admin can reload it without calling you # alias nginxreload='sudo /usr/local/nginx/sbin/nginx -s reload' alias nginxtest='sudo /usr/local/nginx/sbin/nginx -t' alias lightyload='sudo /etc/init.d/lighttpd reload' alias lightytest='sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -t' alias httpdreload='sudo /usr/sbin/apachectl -k graceful' alias httpdtest='sudo /usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS' # Alias into our backup stuff # if cron fails or if you want backup on demand just run these commands # # again pass it via sudo so whoever is in admin group can start the job # # Backup scripts # alias backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type local --taget /raid1/backups' alias nasbackup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01' alias s3backup='sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01 --auth /home/scripts/admin/.authdata/amazon.keys' alias rsnapshothourly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotdaily='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotweekly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias rsnapshotmonthly='sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' alias amazonbackup=s3backup # Desktop specific play avi/mp3 files on demand ## play video files in a current directory ## # cd ~/Download/movie-name # playavi or vlc alias playavi='mplayer *.avi' alias vlc='vlc *.avi' # play all music files from the current directory # alias playwave='for i in *.wav; do mplayer "$i"; done' alias playogg='for i in *.ogg; do mplayer "$i"; done' alias playmp3='for i in *.mp3; do mplayer "$i"; done' # play files from nas devices # alias nplaywave='for i in /nas/multimedia/wave/*.wav; do mplayer "$i"; done' alias nplayogg='for i in /nas/multimedia/ogg/*.ogg; do mplayer "$i"; done' alias nplaymp3='for i in /nas/multimedia/mp3/*.mp3; do mplayer "$i"; done' # shuffle mp3/ogg etc by default # alias music='mplayer --shuffle *' # Set default interfaces for sys admin related commands ## vnstat is console-based network traffic monitor. dnstop is console tool to analyze DNS traffic. tcptrack and iftop commands displays information about TCP/UDP connections it sees on a network interface and display bandwidth usage on an interface by host respectively. ## All of our servers eth1 is connected to the Internets via vlan / router etc ## alias dnstop='dnstop -l 5 eth1' alias vnstat='vnstat -i eth1' alias iftop='iftop -i eth1' alias tcpdump='tcpdump -i eth1' alias ethtool='ethtool eth1' # work on wlan0 by default # # Only useful for laptop as all servers are without wireless interface alias iwconfig='iwconfig wlan0' # Get system memory, cpu usage, and gpu memory info quickly ## pass options to free ## alias meminfo='free -m -l -t' ## Den grössten Spreicherfresser über top ermitteln alias psmem='ps auxf | sort -nr -k 4' alias psmem10='ps auxf | sort -nr -k 4 | head -10' ## Die grössten CPU Belastungen aufrufen ## alias pscpu='ps auxf | sort -nr -k 3' alias pscpu10='ps auxf | sort -nr -k 3 | head -10' ## Server CPU Information ausgeben ## alias cpuinfo='lscpu' ## ältere Systeme verwenden: /proc/cpuinfo ## ## alias cpuinfo='less /proc/cpuinfo' ## # Control Home Router # The curl command can be used to reboot Linksys routers. # Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix. alias rebootlinksys="curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'" # Reboot tomato based Asus NT16 wireless bridge alias reboottomato="ssh admin@192.168.1.1 /sbin/reboot" # Resume wget by default # The GNU Wget is a free utility for non-interactive download of files from the Web. It supports HTTP, HTTPS, and FTP protocols, and it can resume downloads too: alias wget='wget -c' # different browser for testing website alias ff4='/opt/firefox4/firefox' alias ff13='/opt/firefox13/firefox' alias chrome='/opt/google/chrome/chrome' alias opera='/opt/opera/opera' #default ff alias ff=ff13 # default browser alias browser=chrome # A note about ssh alias # Do not create ssh alias, instead use ~/.ssh/config OpenSSH SSH client configuration files. It offers more option. An example: Host server10 Hostname 1.2.3.4 IdentityFile ~/backups/.ssh/id_dsa user foobar Port 30000 ForwardX11Trusted yes TCPKeepAlive yes You can now connect to peer1 using the following syntax: $ ssh server10 ## set some other defaults ## alias df='df -H' alias du='du -ch' # top is atop, just like vi is vim alias top='atop' ## nfsrestart - must be root ## ## refresh nfs mount / cache etc for Apache ## alias nfsrestart='sync && sleep 2 && /etc/init.d/httpd stop && umount netapp2:/exports/http && sleep 2 && mount -o rw,sync,rsize=32768,wsize=32768,intr,hard,proto=tcp,fsc natapp2:/exports /http/var/www/html && /etc/init.d/httpd start' ## Memcached server status ## alias mcdstats='/usr/bin/memcached-tool 10.10.27.11:11211 stats' alias mcdshow='/usr/bin/memcached-tool 10.10.27.11:11211 display' ## quickly flush out memcached server ## alias flushmcd='echo "flush_all" | nc 10.10.27.11 11211' ## Remove assets quickly from Akamai / Amazon cdn ## alias cdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai' alias amzcdndel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon' ## supply list of urls via file or stdin alias cdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile akamai --stdin' alias amzcdnmdel='/home/scripts/admin/cdn/purge_cdn_cache --profile amazon --stdin'

Dieser Beitrag fasst verschiedene Arten der Verwendung von *nix bash-Aliasen zusammen: - Setzen von Standardoptionen für einen Befehl (z.B. eth0 als Standardoption für ethtool-Befehl über alias ethtool='ethtool eth0'). - Korrektur von Tippfehlern (cd... fungiert als cd... über den Alias cd..='cd...'). - Reduzierung der Tipparbeit. - Der Standardpfad eines Befehls, der in mehreren Versionen auf einem System existiert (z.B. GNU/grep befindet sich unter /usr/local/bin/grep und Unix grep unter /bin/grep. Um GNU grep zu verwenden, verwenden Sie den Alias grep='/usr/local/bin/grep' ). - Hinzufügen der Sicherheitsnetze zu Unix durch interaktive Befehle durch Setzen von Standardoptionen. (z.B. rm, mv und andere Befehle). - Kompatibilität durch Erstellung von Befehlen für ältere Betriebssysteme wie MS-DOS oder andere Unix-ähnliche Betriebssysteme (z.B. alias del=rm).

Verfasser: Andreas Preuss
Letzte Änderung: 10-06-2018 01:27


Elinks ein Text-basierender Webbrowser für die Konsole

ELinks ist nicht nur der coolste Kommandozeilen-Webbrowser. Tatsächlich ist es auch der einzige Kommandozeilen-Webbrowser, der mehr oder weniger noch aktiv entwickelt wird und auch moderne Webseiten unterstützt. Entwickelt wurde der schlanke Textbrowser ELinks von Jonas Fonseca.

Man kann sich ELinks als den Firefox auf der Kommandozeile vorstellen, nur schneller und besser. Ziel war es einen klassischen Open-Source Browser für die Konsole zu erstellen, der sehr flexibel ist und auch Frames und Tabellen darstellen kann. Da sich ELinks als einfacher Textbrowser nur auf die Texte und nicht auf Sripte, etc konzentriert ist ELinks so sicher wie kaum ein anderer Browser. Gerade die grafischen Browser liegen im Vergleich um Längen dahinter. Er kann zusätzlich an eigene Bedürfnisse angepasst und durch Perl-, Lua- oder Guile-Skripte erweitert werden. Webstandards sind nicht unbedeutend für ELinks, so beherrscht er eine Vielzahl von Protokollen, etwa HTTP, HTTPS, FTP (mit SSL Support) IPV4 oder auch darstellung lokaler Dateien. Zusätzliche Protokollunterstützung besteht für BitTorrent-Finger, Gopher, SMB und NNTP. Er beherrscht die Darstellung von Farben, beinhaltet eine Lesezeichenverwaltung, ermöglicht Tabbed-Browsing und stellt Tabellen und Franmes akurat dar. ELinks funktioniert unter Linux, FreeBSD, OpenBSD, Solaris, IRIX, HPUX, Digital Unix, AIX, OS/2, BeOS, RISC OS und MacOS X und ist auch meist verfügbar durch alle Linux/BSD-Paketmanager. Ein Port für Win32 befindet sich im Beta-Stadium. Download hier. Die Installation unter Debian oder Ubuntu zum Beispiel kann einfach über den Packetmanager vorgenommen werden:

sudo apt-get update
sudo apt-get install elinks

Zum starten kann man einfach elinks eingeben, oder auch gleich einen Domain-Namen hinzufügen:

elinks http://elinks.or.cz/  # elinks Homepage

Sobald man im Programm ist, kann man die Taste "g" verwenden, um die Adressleiste aufzurufen. Oder man drückt die Escape Taste. Damit öffnet man die Menüzeile. Weitere Tastaturbefehle:

g - URL aufrufen                  s - Lesezeichen
h - History                       o - Optionen (z.B. Einstellungen)
t - Neue Registerkarte öffnen     T - Link als neuen Tab öffnen
<> - Links/rechts verschieben     Home - zum Seitenanfang
End - zum Seitenende gehen        Links - zurückgehen
Rechts - Hyperlink folgen         Nach oben - vorheriger Hyperlink
Nach unten - nächster Hyperlink   / - Suche
\ - HTML ansehen                  [ - Scrollfenster nach links
] - Fenster nach rechts scrollen  c - Reiter schließen
q - beenden                       d - Hyperlink herunterladen
Strg r - Aktualisieren       

Die Datei /home/username/.elinks/elinks.conf enthält die Konfigurationsinformationen für ELinks. Damit kann man das Verhalten von ELinks auf vielfältige Weise konfigurieren: z.B.: Protokollverhalten, Tastaturbelegung, Farben für das Rendering und die Benutzeroberfläche. Die Datei wird beim Start gelesen und nur bei Bedarf gespeichert. Alle in diesem Dokument beschriebenen Optionen können in ELinks vollständig konfiguriert werden, so dass keine Bearbeitung von elinks.conf in der Regel erforderlich ist. Die Tastenbelegungen können auch in der elinks.conf angegeben werden.
SYNTAX
Die Syntax der Konfigurationsdatei ist sehr einfach. Die Datei elinks.conf ist eine freie ASCII-Textdatei, die im jeweiligen home Verzeichnis des Users abgespeichert wird. Die Datei kann zusätzliche Registerkarten und Zeilenumbrüche zur Formatierung enthalten. Schlüsselwörter in der Datei sind case-sensitive. Kommentare beginnen wie üblich mit dem Zeichen # und enden am Ende der Zeile:

# Use asynchronous DNS resolver?
set connection.async_dns = 1
# horizontal text margin.
set document.browse.margin_width = 3
# Default document codepage.
set document.codepage.assume = "ISO-8859-1"
# User defined protocol handlers
set protocol.user.mailto.unix = "mutt %h -s \"%s\""

Verfasser: Andreas Preuss
Letzte Änderung: 12-06-2018 16:10


Debian Systemzeit synchronisieren

Einige Debianserver betreibe ich in einer VM und habe oft nach einem Suspend das Problem, dass Datum und Uhrzeit nicht mehr aktuell sind. Oft greift die entsprechende Sync-Einstellung in den VMWare-Tools nicht. Es wäre also sinnvoll die Zeit Online über einen NTP Server synchronisieren zu können. Das NTP Protokoll ist dazu da, um die Zeit auf einem Server mit einem zentralen Zeitserver abzugleichen. Hierbei schafft die Installation eines NTP Daemons Abhilfe. Dieser ist bei den einzelnen Distributionen schon als Paket vorhanden und kann ganz einfach installiert werden.

sudo apt-get install ntp

Danach ist mit einem Editor der Wahl die Konfigurationsdatei /etc/ntp.conf zu öffnen und der Eintrag der Zeitserver anzupassen. Unter pool.ntp.org kann man sich zum Beispiel den für sich passenden NTP-Server heraussuchen.
Bei Debian Linux kann man beispielsweise folgende Server für Deutschland in die Datei /etc/ntp.conf einfügen bzw. die bestehenden mit "server" beginnenden Zeilen ersetzen:

server  ntp1.hetzner.de  iburst
server  ntp2.hetzner.com iburst
server  ntp3.hetzner.net iburst
server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Hier wird bei jedem Start des NTP Dienstes ein beliebiger deutscher Server abgefragt. Dies stellt sicher, daß die Anfragen über viele Server verteilt werden und erhöht gleichzeitig die Zuverlässigkeit. Abschliessend muss der ntpd noch neu gestartet werden.

service ntp restart

Es kann notwendig sein, dass man einmal nachdem man den NTP Server installiert hat, die Zeit manuell synchronisiert. Dies geht entweder mit ntpd oder mit ntpdate (muss bei Debian zusätzlich installiert werden):

service ntp stop  # NTP stoppen
ntpd -q -g        # synchronisieren
service ntp start # NTP wieder starten

Die Option -g bedeutet, dass ntpd auch synchronisiert, wenn die Zeit mehr als 1000 Sekunden abweicht.
Die Option -q bedeutet, dass ntpd nur einmal ausgeführt wird.

Absicherung
Da NTP ein UDP-basiertes Protokoll ist, kann es leicht für DDoS-Angriffe mißbraucht werden. Da bei falscher Konfiguration die Antwort größer als die Anfrage ausfällt, wird so ein Angriff verstärkt. Eine entsprechende Konfiguration, welche nur die deutschen NTP-Pool server nutzt, könnte wie folgt aussehen:

restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

restrict    127.0.0.1
restrict -6 ::1

server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Bei dieser Konfiguration sind Veränderungen und Statusabfragen nur noch lokal möglich. Zeitinformationen können mit und von jeder IP aus abgerufen werden. Alternativ ist es möglich alle Anfragen zu blockieren und Zeitinformationen nur mit explizit erlaubten Zeitservern auszutauschen. Folgendes Beispiel erlaubt nur den Austausch von Zeitinformationen mit den Hetzner NTP Servern

restrict    default ignore
restrict -6 default ignore

restrict    127.0.0.1
restrict -6 ::1

server ntp1.hetzner.de iburst
restrict    213.239.239.164 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a0a1::2:1 nomodify notrap nopeer noquery

server ntp2.hetzner.de iburst
restrict    213.239.239.165 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a101::2:3 nomodify notrap nopeer noquery

server ntp3.hetzner.de iburst
restrict    213.239.239.166 nomodify notrap nopeer noquery
restrict -6 2a01:4f8:0:a112::2:2 nomodify notrap nopeer noquery

Uhrzeit in Hardwareuhr schreiben
Damit der Server nach einem erneuten Booten mit einer völlig falschen Zeit hochkommt, kann man noch die Uhr in die Hardwareclock schreiben.

hwclock --systohc

Die Urzeit kann mit dem Befehl date ausgegeben werden:

# Tag (01 bis 31)
getDay=$(date "+%d")
	
# Wochentag (Montag bis Sonntag)
getDayName=$(date "+%A")
	
# Monat (01 bis 12)
getMonth=$(date "+%m")

# Monatsname (Januar bis Dezember)
getMonthName=$(date "+%B")
	
# Jahr (ab 1970)
getYear=$(date "+%Y")

# Jahr (kurz: 00 bis 99)
getYearShort=$(date "+%y")
	
# Stunde (kurz: 00 bis 23)
getHour=$(date "+%H")

# Minute (kurz: 00 bis 59)
getMinute=$(date "+%M")

# Sekunde (kurz: 00 bis 59)
getSecond=$(date "+%S")
	
# Format: HH:MM:SS
getTime=$(date "+%T")
	
# Format: DD.MM.YYYY HH:MM:SS
getDateTime=$(date "+%d.%m.%Y %T")

# Format: DD.MM.YYYY HH:MM:SS.Nanosekunden
# Beispiel: 2014-01-02 17:43:38.226981463
getDateTime=$(date "+%Y-%m-%d %T.%N")
	
# Dauer
startTime=$(date "+%s")
endTime=$(date "+%s")
runTime=$(echo $endTime - $startTime | bc)

Verfasser: Andreas Preuss
Letzte Änderung: 13-06-2018 17:21


Konsolenbefehle zum Arbeiten mit Git

Git ist eine Software zur Versionsverwaltung von Projekten. Man kann damit einfach zu alten Ständen zurückspringen oder mit mehreren Leuten an einem Projekt arbeiten. Git ist im Laufe der Zeit von allen anderen Versionskontrollsystemen für mich der Hauptfavorit geworden. Die meisten anderen Systeme wie (CVS, Subversion, Perforce, Bazaar usw.) betrachten die Informationen, die sie verwalten, als eine Menge von Dateien und die Änderungen, die über die Zeit hinweg an einzelnen Dateien vorgenommen werden.
Git betrachtet seine Daten eher als eine Reihe von Snapshots eines Mini-Dateisystems. Jedes Mal, wenn man committet (d.h. den gegenwärtigen Status des Projektes als eine Version in Git speichert), sichert Git den Zustand sämtlicher Dateien in diesem Moment („Snapshot“) und speichert eine Referenz auf diesen Snapshot. Um dies möglichst effizient und schnell tun zu können, kopiert Git unveränderte Dateien nicht, sondern legt lediglich eine Verknüpfung zu der vorherigen Version der Datei an. Dies ist ein wichtiger Unterschied zwischen Git und praktisch allen anderen Versionskontrollsystemen.

Installation
git für Linux herunterladen und installieren.
git für OS X herunterladen und installieren.
git für Windows herunterladen und installieren.

Einstellungen
Die Datei /etc/gitconfig ist die globale Konfigurationsdatei, die für jeden Anwender des Systems und all ihre Projekte gelten. Die Werte in der Datei ~/.gitconfig gelten ausschließlich für den User und all seine Projekte. Wenn man git config mit der Option --global verwendet, wird diese Datei verwendet. Die Datei .git/config im Git Verzeichnis eines Projektes enthält Werte, die nur für das jeweilige Projekt gelten. Diese Dateien überschreiben Werte aus den jeweils vorhergehenden Dateien in dieser Reihenfolge. D.h. Werte in beispielsweise .git/config überschreiben diejenigen in /etc/gitconfig.
Auf Windows Systemen sucht Git nach der .gitconfig Datei im $HOME Verzeichnis z.B.: C:\Dokumente und Einstellungen\$USER. Es schaut auch immer nach /etc/gitconfig.
E-Mail Adresse und Editor konfigurieren

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs
$ git help config # Weitere Hilfe zur Konfiguration

Dies ermöglicht, das push ausgeführt werden, ohne das branchname origin/branchname geschrieben werden muss ?!

git config --global push.default simple

Folgender Befehl definiert, wonach Line-Endings beim checkout konvertiert werden

git config --global core.eol lf

UTF-8 einstellen, wodurch auch Umlaute in Commits möglich sind

git config --global i18n.commitEncoding 'utf8'
git config --global i18n.logOutputEncoding 'utf8'

Init
Ein bare Repo auf repo.my_online_repo.de erstellen und ein neues lokales Repo master reinpushen:

mkdir -p ~/_pfad_zum_repo/reponame.git
cd ~/_pfad_zum_repo/reponame.git
git init --bare --shared
git config core.sharedRepository group
chown -R git:git ~/_pfad_zum_repo/reponame.git
chmod 0770 ~/_pfad_zum_repo/reponame.git

Danach wieder lokal weiter arbeiten und ein Verzeichnis zu einen GIT Repo umwandeln:

cd /_pfad_zum_repo/reponame
git init
git add .
git commit -m "Migrate to Git"
git remote add origin "ssh://username@repo.mobiletrend.de/~/_pfad_zum_repo/reponame.git"
git push origin master:master

Danach ist das lokale Git mit dem Remote Bare Repository verbunden, als würde es von dort geklont worden sein.

git branch -a

Um danach ein schlichtes git pull verwenden zu können, muss das lokale Repo noch wissen, mit welchem remote brachen es verbunden ist. Da vorher im master gepusht wurde, wäre also folgendes als Einstellung richtig:

git branch -u origin/master

Branch
Einen neuen Branch anlegen

git branch 
# ... oder anlegen und direkt in den Branch wechseln...
git checkout -b branchname

Einen neuen Branch anlegen, diesen von einem Remotebranch ableiten und tracken (womit pull/push funktioniert)

git branch -t branchname origin/branchname

Einen (neuen/lokalen) Branch pushen und das Tracking setzen, damit push/pull automatisch funktionieren

git push -u origin branchname

(pushes the "branchname" branch to "origin" remote and sets up tracking) Einen lokalen Branch löschen

git branch -d branchname

Einen remote Branch löschen

git push origin :branchname

Einen (temporären) lokalen Branch erstellen, der auf den Stand eines alten Commits ist. Dafür muss der Hashcode des Commits bekannt sein:

git checkout -b temp 95817e231b02686c8cf420bea54864aeea7348ff

Commit Fügt alle Dateien zum Index hinzu, und bemerkt auch alle gelöschten Dateien und Pfade:

git add . --all

Commit, der alle Files staged, und eine Bemerkung über die Veränderung anfügt

git commit -a -m "bla"

Merge Einen Branch auf Stand des Masters aktualisieren Ggf. funktioniert ein schlichtes merge ?

git checkout branchname
git merge master

Ein Vorteil gegenüber git rebase ist, das es die History des Branches nicht verändert, sondern nur eine Art Merge-Commit durchführt, wodurch der Branch dann auf Stand des Masters ist

git checkout master
git branch rebase_state
git checkout feature
git merge rebase_state
git branch -d rebase_merge

Ein Branch erstellen und auf den Stand eines anderen Branches bringen

git checkout master
git branch neuerbranch
git checkout neuerbranch
git merge andererbranch

Verfasser: Andreas Preuss
Letzte Änderung: 15-06-2018 16:59


Schreiben des Ordners System Volume Information auf USB unterbinden

Ein extrem störendes Merkmal in Windows ist, dass wenn man ein USB Laufwerk anschliesst, sich darauf ein Systemordner mit Namen "System Volume Information" einfach automatisch erstellt. Eigentlich ist dieser Ordner systemrelevant. Er enthält als Hauptaufgabe unter anderem Systemwiederherstellungspunkte. Doch auf unserem unseren USB-Datenträger absolut störend und oft nicht nur auf ein paar wenige Gigabytes beschränkt, es kann vorkommen, dass der Ordner "System Volume Information" weitaus mehr Platz belegt als gewünscht ist. Der unerwünschte Ordner kann zwar gelöscht werden, aber nach kurzer Zeit oder spätestens nachdem wir den USB-Speicher wieder erneut eingesteckt haben wiederholt sich die ganze Sache. Wenn man mit diesem Problem konfrontiert ist, kann man sich zumal immer wieder über diese in Windows eingebaute Frechheit ärgern. Die Löschung des berüchtigten Ordners auf dem USB-Speicher ist zunächst nicht ohne etwas Aufwand zu bewerkstelligen.

Vollzugriff-Rechte für Ordner vergeben
Um diesen Ordner entfernen zu können, müssen die Benutzerrechte geändert werden. Das geht dauerhaft aber logischerweise nur bei Ordnern, die danach bestehen bleiben. Da man allerdings das ganze Verzeichnis System Volume Information löschen will, würden damit auch eventuelle Rechte-Einstellungen verschwinden.
Die einfachste Möglichkeit, dem aktuellen Anwender einen Vollzugriff auf diesen Ordner zu geben, ist die Verwendung eines DOS- oder Konsolenbefehls. Unter „Start – Ausführen“ kann man diesen Befehl auch ausführen, man muss nicht extra ein Konsolenfender mit cmd aufrufen.
Der Befehl „cacls“ ist dazu geeignet, dem Anwender Vollzugriff auf den Ordner System Volume Information zu geben. Die entsprechende Befehlszeile lautet:

# alt: cacls "E:\System Volume Information" /E /G %username%:F
# nach Win 10 Upd 2
icacls "C:\System Volume Information" /grant Username:F /t

# „c:\System Volume Information“ (mit den Anführungszeichen!) ist der Ort des Ordners. Hier also Laufwerk C.
# Der Parameter /E legt fest, dass die ACL (Access Control List) angepasst wird.
# /G username:F besteht aus drei Teilen:
# - G ändert die Benutzerberechtigung.
# - username ist in diesem Fall der Name des Benutzers, der momentan am System als Administrator angemeldet ist.
# - Und direkt dahinter folgt :F, was dem benannten User den Vollzugriff auf den Ordner gibt.

Diese Befehlskette hat allerdings nur die Rechte geändert. Dadurch wurde noch nichts gelöscht.

Den Ordner "System Volume Information" löschen
Alternativ kann man nun nach der ersten Befehlszeile den Ordner System Volume Information auch einfach über den Windows-Explorer löschen. Das Löschen geschieht durch den nachfolgenden Befehl:

rd /S /Q "c:\System Volume Information"

#    rd (remove directory) ist der Befehl, einen Ordner zu löschen
#    /S legt fest, dass alle Dateien und Unterordner darin gelöscht werden
#    /Q bestimmt, dass das still und ohne weitere Nachfrage erfolgt
#    „c:\System Volume Information“ (immer mit den Anführungszeichen!) ist in diesem Fall der Ort des Ordners auf Laufwerk C.

Will man jeden Tag mit einem sauberen System starten, oder den Vorgang immer Parat haben, kann man die beiden oben genannten Befehle natürlich auch in eine Batchdatei als Stapelverabeitung abspeichern. Um zum Beispiel den Ordner System Volume Information auf Laufwerk C,D,E und F löschen zu wollen, könnte in der Batchdatei folgendes stehen:

@echo off & setlocal enabledelayedexpansion 
chcp 1252
echo.
echo System Volume Information Ordner löschen
cacls "c:\System Volume Information" /E /G %username%:F
cacls "d:\System Volume Information" /E /G %username%:F
cacls "e:\System Volume Information" /E /G %username%:F
cacls "f:\System Volume Information" /E /G %username%:F
echo.
rd /S /Q "c:\System Volume Information"
rd /S /Q "d:\System Volume Information"
rd /S /Q "e:\System Volume Information"
rd /S /Q "f:\System Volume Information"
echo.
pause
echo Ordner "System Volume Information" erfolgreich gelöscht.

Ob alles geklappt hat, lässt sich leicht kontrollieren… denn dann ist der Ordner System Volume Information gelöscht worden.
Wenn man nun dem Windows System komplett von vorn herein verbieten möchte den Ordner "System Volume Information" auf Wechseldatenträgern zu erstellen, gibt es hier zwei Möglichkeiten dieses Problem zu bewältigen:
Einmal über eine Lokale Gruppenrichtlinie oder direkt über die Windows Registrierung.

Die Erstellung des Ordners "System Volume Information" über die Gruppenverwaltung deaktivieren.
In Windows 10/8.1 Pro & Enterprise Editions & Server, drückt man einfach die Windows Key + R Kombination, gibt gpedit.msc in das Run-Dialogfeld ein und drückt auf Enter, um den Lokalen Gruppenrichtlinieneditor zu öffnen.
Wir navigieren innerhalb des Gruppenrichtlinieneditors zu:
Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten -> Suche
Und wählen dort die Einstellung:
Hinzufügen von Speicherorten auf Wechseldatenträgern zu Bibliotheken nicht zulassen.


Im oben gezeigten Fenster auf Aktiviert klicken (rot unterstützen), dann auf Übernehmen und anschließend auf OK.
Der lokale Gruppenrichtlinien-Editor kann nun beendet und das Gerät neu gestartet werden.
Nun sollte man nicht mehr länger mit dem Problem konfrontiert sein.

Die Erstellung des Ordners "System Volume Information" über die Registrierung deaktivieren.
Wir haben aber auch die Möglichkeit über den Registry Editor einen Eintrag zu erstellen, der das ständige Schreiben des Ordners "System Volume Information" auf USB Datenträgern dauerhaft verhindert.
Dazu drücken wir die Windows-Taste + R-Kombination, geben regedit in das Dialogfeld Ausführen ein und drücken die Eingabetaste, um den Registrierungseditor zu öffnen.

Innerhalb des Regisrierungseditor navigieren wir zu:
   HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search

Wir ändern hier im Schlüssel DisableRemovableDriveIndexing den Wert zu 1und klicken auf OK.
Nun kann der Registrierungseditor beendet und das System neu gestartet werden.
Dies sollte das Problem ebenfalls dauerhaft beheben.

Verfasser: Andreas Preuss
Letzte Änderung: 09-07-2018 16:46


Anwenden des Befehlszeilen basierten Bildprozessors NConvert

Wenn man regelmäßig die Größe von Bildern ändert, dreht, zuschneidet oder mehrere Bilder konvertieren muss, dann gibt es für die Konsole einige sehr effektive Tools mit denen man sich die Arbeit vereinfachen und automatisieren kann. Ein sehr ausgereiftes Werkzeug ist zum Beispiel traditionell ImageMagic oder GraphicsMagick mit sehr umfangreichen und auch programmierbaren Funktionen, die zeitweise aber auch durch sehr viele Schalter wie (-d /x -g) etwas kryptisch erscheinen.

Ein meiner Meinung nach auch sehr anwenderfreundliches Werkzeug, auf das Wesentlichste bezogen, ist das Programm NConvert. Es ist ein Multiformat-Kommandozeilen-Image-Konverter für Win32, Linux, DOS, OS/2 und viele andere Plattformen. Auch dieses Programm hat schon eine Menge an Funktionen, mit Werkzeugen zum Zuschneiden, Ändern der Größe und Drehen von Bildern, zum Optimieren von Helligkeit, Kontrast und Farbe, zum Anwenden von Schärfe- oder Weichzeichnungsfiltern, zum Hinzufügen von Wasserzeichen und sogar zum Entfernen oder Bearbeiten von Metadaten.

Das Programm liest mehr als 500 Bildformate und kann in mehr als 70 Formaten exportieren. Es ist natürlich immer noch ein Kommandozeilen-Tool, aber es ist sehr leicht zu benutzen.

Hier einige Beispiele zur einfachen Konvertierung und Speicherung:

# Einfaches eingescanntes Bild als GIF abspeichern:
nconvert -out gif ScannedImage1.jpg

Das ist natürlich nur eine sehr einfache Aufgabe, aber auch fortgeschrittenere Befehle sind immer noch sehr verständlich:

# Hier wird die Größe aller JPEGs im Ordner verdoppelt dann als PNGs gespeichert:
nconvert -out png -Resize 200% 200% *.jpeg 

# Hier wird die Farbpallette aller GIFs im Ordner erhöht und als JPEG-Dateien gespeichert:
nconvert -out jpeg -truecolors *.gif

# Hier wird von allen JPEGs im Ordner die Farbpalette reduziert und anschliessend als GIF gespeichert:
nconvert -out gif -dither -farben 256 *.jpeg

Oder bei Verwendung von Bildsequenzen:
Zum Beispiel, indem wir die 11 Dateien: datei00.pic, datei01.pic, ...., datei10.pic in JPEG konvertieren und mit dem Namensmuster res0.jpg, res1.jpg, ...., res10.jpg abspeichern.

# Konvertierung einer Bildsequenz:
nconvert -out jpeg -n 1 10 1 -o res#.jpg file##.pic

# Einfaches Konvertieren mit Größenänderung:
nconvert -out png -resize 510 230 *.jpeg
nconvert -out png -ratio -resize 510 0 *.jpeg
nconvert -out png -ratio -resize 0 510 *.jpeg
nconvert -out png -Resize 200% 200% *.jpeg

Das % Zeichen kann dazu verwendet werden, um den Quelldateinamen im Zieldateinamen angeben zu können:

# Hier wird eine Datei namens result_file.jpg erzeugt:
nconvert -out jpeg -o result_%.jpg file.tga 

# Achtung : In Windows DOS Batch-Dateien muss man %% statt % schreiben ! 

Auch bei dem Programm NConvert sollte man sich natürlich mit den verschiedenen Konsolen-Befehlen vertraut machen.

# Der übliche Befehl -help zeigt die verfügbaren Optionen an:
nconvert -help  
# Oder gleich den Hilfetext in die Datei "nchelp.txt" speichern, um ihn besser lesen zu können.
nconvert -help > nchelp.txt 

Sobald man jedoch die Grundlagen verstanden hat, bietet NConvert eine enorme Flexibilität. Man kann Skripte erstellen, und bei Bedarf beliebig ausführen; zu einer bestimmten Tageszeit; wenn das System startet, im Leerlauf oder beim Herunterfahren; vor oder nach der Ausführung anderer Programme und vieles mehr. NCconvert wird mit einem Skript gesteuert, indem man beispielsweise mehrere Konvertierungen von mehreren Arten von Bild-Dateien durchführt:

### -out png -rtype lanczos -resize 200% 150%
screenshot1.bmp
screenshot2.bmp
screenshot3.bmp
### -out gif -rtype lanczos -resize 500% 500% -oil 10 -colours 32
F:\icons\smile.bmp
### -out bmp -rtype lanczos -resize 30% 30% -oil 2 -rotate_flag smooth -rotate 45
selfportrait.png
mydog.png

Diese Befehle einfach in eine Textdatei speichern, z.B. "nc.txt", und dann nconvert mit dieser Datei als einzigen Parameter ausführen:

nconvert nc.txt

Es gibt auch eine grafische GUI-Version, die XNConvert heisst.

Hiermit kann man z.B. sehr umfangreiche Bearbeitungen auch mit visueller GUI und Maus erstellen, als Script abspeichern und über ein Bash- oder Batch Script ausführen.

Einschränkungen:
- Die Funktion Text hinzufügen verwendet die Win32-API und ist nur unter Win32 verfügbar.
- Einige exotische Bildformate verwenden externe DLL's und sind nur unter Win32 verfügbar.
- Wenn man eine Skriptdatei verwendet, sollte man mehrere Leerzeichen in den Konvertierungsdefinitionen vermeiden, da sie unnötig den Parser verwirren könnten.
- Das Konvertieren sehr großer Bilder oder das Skalieren auf eine sehr große Größe erfordert viel Speicherplatz und kann bei zu wenig Speicher unter Umständen möglicherweise nicht immer funktionieren.
- NConvert ist in seiner DOS Variante eine 32-Bit-DOS-Anwendung, die den "DOS/32A Extender" verwendet.

Verfasser: Andreas Preuss
Letzte Änderung: 06-07-2018 10:01