Posts mit dem Label Bash werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Bash werden angezeigt. Alle Posts anzeigen

Mittwoch, 11. Juni 2014

Nützliche Dinge rund um die Bash und den Prompt

Da wir Admins generell faul sind, suchen wir Wege um unsere Arbeit effizienter zu gestalten.

Unter Linux gibt es da mit der Bash einige schöne Möglichkeiten, von denen ich einige mal vorstellen möchte:

(Alle Beispiele gehören in die $HOME/.bash_alias, damit sie auch beim Login aktiv sind)

Farbige Manpages (kann natürlich auch in die /etc/environments eingetragen werden)

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

Textdateien

alias t="tail -f -n200" # t /var/log/apache2/error.log -> tail wird im fortlaufenden Modus gestartet
alias nocomment='grep -Ev '\''^(#|$)'\''' # nocomment /etc/apache2/apache2.conf -> Ausgabe der Zieldatei, allerdings ohne Kommentare
alias lvim="vim -c \"normal '0\"" # erneut die zuletzt geöffnete Datei im vim öffnen

 

 Nützliche "Tools"

alias mkdir="mkdir -pv" # erstellung von rekursiven Ordnern und Anzeige der zuerstellenden Ordner
alias lsmount="mount|column -t" # formatierte Ausgabe von mount
alias path='echo -e ${PATH//:/\\n}' # formatierte Ausgabe des Path

# System
alias meminfo='free -m -l -t' # erweiterte RAM Ausgabe
alias psmem='ps auxf | sort -nr -k 4' # sortierte Ausgabe aller Prozesse nach RAM Auslastung
alias pscpu='ps auxf | sort -nr -k 3' # sortierte Ausgabe aller Prozesse nach CPU Auslastung
alias j="jobs -l" # Ausgabe der aktiven Jobs (Strg+Z, fg)
alias h="history" # Kurzform für Ausgabe der History

# Datum
alias nowtime='date +"%T"' # formatierte Ausgabe der Uhrzeit
alias nowdate='date +"%d-%m-%Y"' # formatierte Ausgabe des Datums

# Netzwerk
alias ports='netstat -tulanp' # Anzeige aller offenen Ports

# Web
alias header='curl -I' # Abruf des Headers von Argument Webseite 
alias headerc='curl -I --compress' # same, allerdings mit Komprimierung
alias apache2test='/usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS' # Apache2 Configtest 

function cdl(){ cd "$@"; ls -al;} # Bei der Nutzung von cdl, anstelle von cd, wird nun der Inhalt des Zielordners angezeigt

## Zeigt die aktuelle Verzeichnisstruktur an, sehr huebsch
function tree(){
        pwd
        ls -R | grep ":$" | \
        sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
}

# Für die Apt Nutzer unter uns
alias upd="apt-get update" # refresh der sourcen
alias del="apt-get remove " # Entfernen (kein purge!) von Paketen
alias get="apt-get install " # Installation von Paketen
alias upg="apt-get upgrade" # Aktualisierung des Systems 
alias searchpkg="apt-cache search " # Paketsuche
alias update="apt-get update && apt-get upgrade" # Refresh der Sourcen und Aktualisierung der Pakete kombiniert



Wenn man diese Funktionen / Aliases und Variablen in der .bash_alias verankert hat, erspart man sich eine Menge Zeit und kann diese Zeit in die Weiterentwicklung der System-Landschaft stecken.

Tipp: Natürlich gibt es da noch mehr Möglichkeiten,  einfach mal sich selber über die Schulter schauen und überlegen ob man sein Nutzverhalten nicht mit eigenen Aliases/Funktionen noch optimieren kann


Bei Fragen bitte einfach kurz melden :-)

Mittwoch, 24. Juli 2013

Wie löscht man sicher, effizient und automatisiert Daten

Bei meiner neuen Stelle schnappt man auch viele Dinge nebenbei auf, die verbessert werden wollen.

Ein Beispiel ist das sichere Löschen von Notebooks / PCs / Servern zum Leasing-Ende, damit auf keinen Fall sensible Daten das Unternehmen verlassen und später bei Ebay landen können.

Bisher wurden die Geräte händisch mit einer DBAN (Darik's Boot and Nuke) CD einzeln gestartet und anschließend mit manueller Bestätigung gelöscht.
Als Löschmethode kam dabei DoD 5220.22-M Full zum Einsatz

Kurzer Exkurs zu DBAN:
DBAN unterstützt natürlich noch mehr Methoden:
  • Quick Erase: 1x mit "0" überschreiben, eigentlich nur bei Virenbefall empfehlenswert
  • RCMP TSSIT OPS-II: 8x mit Zufallswerten überschreiben, geht allerdings
  • DoD Short (5220.22-M): Schritt 1 (mit "0" überschreiben), 2 (mit "1" überschreiben) und 7 (mit "Zufalls"werten überschreiben) des "vollen" DoD  5220.22-M
  • DoD Full (5220.22-M): 7x überschreiben
  • Gutmann: 35x Durchläufe (http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html), wobei der Erfinder mittlerweile selbst gesagt, dass diese Variante über das Ziel hinaus schießt. 
  • PRNG: Pseudo Random Number Generator, wie der Name sagt, wird die Festplatte mit "Zufalls"-zahlen (bei heutigen Rechenwerke gibt es keine echte Zufälligkeit) überschrieben. Die Anzahl der Durchläufe kann angegeben werden.
Meine Empfehlung geht bei weniger sensiblen Daten zu DoD Short / PRNG mit 2-3 Durchläufen und bei sensibleren Daten zu DoD Full / PRNG 4-6 Durchläufe.

Je nach Auswahl der Löschmethode und Größe der Festplatten kann das Löschen der Geräte lange dauern, aber was tut man nicht alles für das sichere Löschen der Daten.


Um die Löschmethode effizienter durchzuführen, habe ich die Idee gehabt, einfach einen PXE-Server mit automatischem Löschen aufzusetzen, dieser soll komplett von der restlichen Netzwerk-Infrastruktur getrennt sein, theoretisch wäre es natürlich möglich den PXE-Server auf bestimmte MAC-Adressen einzuschränken, das führt aber in meinem Fall nicht ans Ziel.


Dazu wird im ersten Schritt ein Ubuntu 12.04 Server installiert, es reicht dabei eine minimale Installation, z.B. auf Oracle VirtualBox oder auf kleiner, energieeffizienter Hardware wie z.B. Raspberry Pi.

Nach erfolgter Installation loggt man sich via SSH oder Lokal auf dem System ein und installiert die nötigen Dienste via apt-get.

# paketquellen erneuern
apt-get update

# Installation tftpd-hpa, isc-dhcp-server, syslinux, wget (optional, wenn dban via winscp
# übertragen wird)
apt-get install tftpd-hpa isc-dhcp-server syslinux wget

# stoppen des dhcp-server Dienstes 
service isc-dhcp-server stop

# stoppen des tftpd-hpa Dienstes
service tftpd-hpa stop


Da nun die Dienste soweit installiert sind, geht es an die Konfiguration eben dieser, dazu werden die entsprechenden Konfiguration mit dem Lieblingseditor geöffnet und bearbeitet.

vim /etc/dhcp/dhcpd.conf (absolute minimal Konfiguration):
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
# Achtung: idealerweise wird ein Netz genommen, welches noch nicht vorhanden ist
# Die Netzmaske muss entsprechend der maximal möglichen PXE-Clients gewählt werden,
# bei mir reicht ein /24 vollkommen aus
subnet 192.168.220.0 netmask 255.255.255.0 {
       range 192.168.220.5 192.168.220.240;
       # hier kommt die eigene IP, also des PXE-Servers
       next-server 192.168.220.1;
       # pre boot loader, kommen wir später zu 
       filename "/pxelinux.0";
}

Die Konfiguration des tftpd-hpa ist, Stand Juli 2013, für unsere Zwecke ausreichend und kann dementsprechend im Standard gelassen werden, ggf. kann die Listen-Address (/etc/default/tftpd-hpa) noch auf

Nun beginnen  die Vorbereitungen für das DBAN PXE-Image, dazu wird das Image von www.dban.org via wget oder lokal heruntergeladen und auf den Server, z.B. unter /usr/src, abgelegt und gemountet.

# Download DBAN
wget -O /usr/src/dban-2.2.27.iso "http://downloads.sourceforge.net/project/dban/dban/dban-2.2.7/dban-2.2.7_i586.iso?r=http%3A%2F%2Fwww.dban.org%2Fdownload&ts=1374667513&use_mirror=surfnet"
# Mount der CD
mount -o loop /usr/src/dban-2.2.27.iso /mnt
# Kopieren der dban Dateien in das TFTP Verzeichnis
cp -r /mnt/* /var/lib/tftpboot

Anschließend brauchen wir noch ein Pre-Boot Environment, dazu bedienen wir uns bei syslinux:
# Kopieren 
cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot
# preboot cfg
mkdir /var/lib/tftpboot/pxelinux.cfg
# einfügen der Konfiguration
echo "DEFAULT autonuke"

LABEL autodban
 KERNEL dban.bzi
 APPEND nuke="dwipe --autonuke --method dod522022m" silent
" > /var/lib/tftpboot/pxelinux.cfg/default

Damit haben wir nun alle nötigen Schritte vorbereitet.

Da ich relativ paranoid bin, habe ich das automatische Starten des DHCP-Servers deaktiviert, dadurch wird man gezwungen den DHCP-Server manuell und dadurch bewusst zu starten.
Wichtig: seit Upstart muss man dieses allerdings an zwei Stellen tun!
# deaktiviere init.d dhcp-server beim boot
update-rc -f isc-dhcp-server remove
# deaktivere upstart dhcp-server beim boot
echo "manual" > /etc/init/isc-dhcp-server.override
# starte tftpd-hpa beim boot
update-rc.d tftpd-hpa defaults

Damit der DHCP-Server gestartet werden kann, muss noch die IP-Konfiguration angepasst werden, dazu wird die Datei /etc/network/interfaces mit dem Lieblingseditor geöffnet und eine statische IP eingetragen werden:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.220.1
        netmask 255.255.255.0

Nach einem Reboot haben wir nun alle nötigen Arbeiten erledigt und können das automatische Löschen durch Starten des DHCP-Servers beginnen.

Aber Achtung, verbindet das System niemals, mit gestartetem DHCP-Server, mit dem lokalen LAN, denn der neue DHCP-Server könnte schneller als die anderen DHCP-Server antworten und das Telefon würde anschließend wohl nicht mehr still stehen ;-)

Bei Fragen bitte einfach melden!

Montag, 15. Juli 2013

Meine entwickelten Nagios Plugins

Da ich sehr viel im Bereich Monitoring, speziell Nagios und Icinga, unterwegs bin, habe ich natürlich mit der Zeit auch einige Plugins selbst geschrieben oder auch andere Plugins nach meinen Vorstellungen, Anforderungen überarbeitet bzw. Funktionen nachgerüstet.

Meine eigenen Plugins sind meist in PHP oder Bash geschrieben, die überarbeiteten Plugins sind in PHP, Perl, Powershell, Python etc. geschrieben.

Die meisten davon gibt es zum freien Download bei http://exchange.nagios.org

Diese Plugins will ich hier kurz vorstellen:

Eigenentwicklungen:
  • check_beronet (geschrieben in PHP)
    Überprüft die hervorragenden VoIP Gateways (ISDN,FXS/FXO,PRI zu SIP) der deutschen Marke Beronet (http://www.beronet.com)
    • Fehler der Ports (inkl. Performance Daten)
    • Status des Links
    • Gesamt Anrufe + durchschnittliche Zeit pro Gespräch (inkl. Performance Daten)
    •  Momentane Anrufe (inkl. Performance Daten)
    • Auslastung der Box/Karte (inkl. Performance Daten)
    • Systeminformationen: Revision, Firmware, Seriennummer
    • Uptime
  • check_all4xxx (geschrieben in PHP)
    Überprüft Sensorboxen [ALL4000/ALL4500] der deutschen Marke Allnet auf Schwellenwerte (z.B. Temperatur, Luftfeuchtigkeit, Rauchsensor, Lichtsensor, ...) und gibt diese inkl. Performance Daten zurück.
    Die Sensoren werden über Zahlenwerte ausgewählt.
  • check_otrs_tickets.php (geschrieben in PHP)
    Eines meiner weiteren Lieblingsprodukte, OTRS das führende Open-Source Ticket-Request System.
    Dieses Plugin überprüft eine konfigurierte OTRS Datenbank auf eine Menge an Tickets. Damit es flexibel ist, können die IDs der entsprechenden States und Queues über einen Parameter abgefragt und konfiguriert werden. Liefert ebenfalls Performance Daten zurück.
  • check_file_count.sh (geschrieben in BASH)
    Überprüft einen Pfad auf eine konfigurierbare Menge an Dateien und gibt die älteste Datei zurück (im Anwendungsfall gibt es einen Spooler, der manchmal nicht aufräumt..), inkl. Performance Daten.
  • check_file_count.ps1 (geschrieben in Powershell)
    Das selbe Plugin, nur für Windows. Überprüft einen Pfad auf eine konfigurierbare Menge an Dateien, inkl. Performance Daten.
Überarbeitete/übernommene Plugins:
  • check_printer (geschrieben in PHP) - hinzugefügt/überarbeitet: Performance Daten, zusätzliche Drucker, snmp v2c, snmp v3 vorbereitet, Bug-Fixes
    Dieses Plugin fragt die gängigsten Drucker mit SNMP 1/v2c und später mit SNMP Version 3 ab
    • counter - z.B. Menge an bisherig gedruckten Seiten, inkl. Performance Daten
    • toner/Ink  - liefert den Füllstand des Toners oder der Tinte zurück, inkl. Performance Daten
    • paper -  liefert den Füllstand der Papiertrays zurück (jedes tray kann separat abgefragt werden!), inkl. Performance Daten
    • hardware - gibt Hardware-Daten (z.B. CPU) zurück
    • parts - gibt den Zustand bestimmter Bauteile zurück
    • alerts - gibt Ereignisse zurück, unwichtige Ereignisse werden soweit ignoriert
    • accounting -  gibt den Status einer vorher konfigurierten Kostenstelle zurück
  • check_ups (geschrieben in PERL) -  hinzugefügt/überarbeitet check_APC: Schwellenwerte, Verbleibende Zeit auf Batterie, Ausgabe, Bug-Fixes
    Dieses Plugin fragt die gängigen USVen ab
    • Globaler Status
    • UPS/USV Type
    • Batteriekapazität
    • Leistung in %
    • Temperatur
    • Leistung in Wh
    • Verbleibende Zeit auf Batterie
    • Seriennummer, Herstellungsdatum (informativ..), Firmware-Version

Das sind natürlich nicht alle, aber schon mal eine gewisse Auswahl, vielleicht hilft es dem einen oder anderen mal.

Falls jemand Interesse, Ideen für neue Plugins oder Änderungen an bestehenden Plugins hat, bitte einfach kurz melden.

Donnerstag, 11. Juli 2013

Wie ändert man den Hostnamen bei einem Ferrari OfficeMaster Gateway

Da unsere Ferrari OfficeMaster Gateways regelmäßig aussteigen und anschließend das Log das Ferrari Messaging Server fluten, habe ich das Logging Ziel auf einen anderen Host umgestellt, der mehr Speicher und Auswertungsmöglichkeiten hat (Logstash + ElasticSearch + Graylog2)

Da die Hostnamen der OMGs aber nicht wirklich eindeutig sind und ich keine bessere Möglichkeit gefunden habe, den Hostnamen anderweitig zu ändern, habe ich mich per SSH mit der Box verbunden und die Skripte durchforstet.

Dabei habe ich folgende Stelle in /etc/init.d/omg.setup gefunden:


# Perhaps hostname defined by user
if [ -e /data/hostname ] ; then
    hn=$(</data/hostname)
    hostname ${hostnamepar} ${hn}
    echo "export HOSTNAME=${hn}" >>/tmp/cmdline
fi


Aus diesem Ausschnitt geht hervor, dass man einfach nur den Hostnamen in /data/hostname ablegen muss, folgender Befehl nimmt einem das ab:

echo "HOSTNAME" > /data/hostname

Anschließend muss die Box neugestartet werden, damit die Änderungen aktiv werden.