Kategorien
Linux security

Webhosting Datei und Ordnerrechte korrigieren.

Da viele dubiose Anleitungen behaupten das in Webhosting Paketen, Dateien ungewöhnliche Rechte erhalten sollen. Die meisten Anleitung sind der Überzeugung das die einzigen gültigen Rechte für einen Ordner 777 seien, das jedem alles erlaubt sein soll.
Manchmal sollen auch völlig chaotische Dateirechte, möglichst kreativ vergeben werden.

Die meisten Provider geben jedoch die Rechte 644 für Dateien und 755 für Ordner vor. Häufig werden, wenn “andere” Schreibrechte bekommen auch die Aufrufe über http blockiert, ein freundliches “403 Forbidden” wird dann den Besuchern angezeigt.

Dieses Rechtegewirr kann jedoch durch 3 einfache Zeilen in der Linux Shell schnell wieder behoben werden.

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
find . -name .ht* -exec chmod 640 {} \;

 

Kategorien
Forensik Linux

Wo finde ich die Dateien der MySQL Datenbank?

Um das Datenverzeichnis einer MySQL Datenbank zu finden kann in der my.cnf Daten nachgesehen werden.

Die Datei my.cnf ist häufig im Verzeichnis /etc oder /etc/mysql zu finden. In der Datei befindet sich eine Zeile “datadir = [Verzeichnis]”, dieses [Verzeichnis] ist der Ort an dem Auf der Festplatte des Servers die Daten der MySQL Datenbank liegen.

Die folgende Zeile gibt das Verzeichnis direkt aus.:

find /etc -name my.cnf 2>/dev/null -exec cat {} \;|\
grep datadir|cut -d= -f2-

Erklärung der Zeile:

  •  find
    • sucht nach Dateien im Verzeichnis /etc mit dem Namen my.cnf
  • cat
    • gibt den Inhalt der gefundenen Datei aus
  • grep
    • gibt nur die Zeile die datadir enthält aus
  • cut
    • gibt alles nach dem Gleichheitszeichen aus
Kategorien
CL-35B2 Forensik Linux security Workstation

Linux: eine einfache und “schöne” Festplattenfüllanzeige

Ich stelle euch hier mein Script zur Festplattenfüllanzeige meiner Server zur verfügung, da viele meiner Freunde das Script von mir wünschten.

Ich habe das script auf meinen Server in der .bashrc Datei hinterlegt und es zeigt nach dem Login auf den Server, auch via SSH, werden die Fülldaten aller eingebundenen Datenträger angezeigt.

Die Ausgabe des Scriptes enspricht diesem Bild

Die Farben der Rahmen wird bei einer Belegung von 80% nicht mehr grün sondern gelb und ab sowie ab 90% Festplattenfülle in Rot dargestellt.

Die Breite der Darstellung passt sich beim Aufruf automatisch der im Terminalfenster verfügbaren Breite des Fensters an.

Auf meinem CL-25B2 NAS habe dieses Script, anstelle der .bashrc Datei in der Datei /etc/profile.local hinterlegt, so das die Festplattenfüllanzeige bei jedem Login angezeigt wird, nicht nur bei einem bestimmten Benutzer.

Für Verbesserungsvorschläge bin ich immer Dankbar, diese bitte in die Kommentare 😉

#!/bin/bash

# Ausgabe eines Statusbalkens
statusbalken() {
 if [ $# != 1 ]
  then
   exit;
 fi

 used=$(df "$1"|tail -n 1|awk '{print $3}')
 total=$(df "$1"|tail -n 1|awk '{print $2}')

 e=$(printf "\033")
 end="$e[0m"
 COLUMNS=$(tput cols)
 COLUMNS=$((COLUMNS-9))

 PERCENT=$(echo "$used $total 100"|awk '{printf ("%i", $1/$2*$3 )}')
 percent=$(echo "$used $total $COLUMNS"|awk '{printf ("%i", $1/$2*$3 )}')

 COLOR="$e[1;31m"
 if [[ $PERCENT -lt 90 ]] ;then
  COLOR="$e[1;33m"
 fi
 if [[ $PERCENT -lt 80 ]] ;then
  COLOR="$e[1;32m"
 fi

 printf " Disk usage: %s\n ${COLOR}[${end}" "$1"
 for (( i=0; i< percent; i++ ))
 do
  printf "%b" "#"
 done

 for (( i=percent; i<COLUMNS; i++ ))
 do
  printf "%b" "-"
 done
 printf "${COLOR}]${end}%3d%%\n" "$PERCENT"
}

# Laufwerke ermitteln
drives=$(mount|grep -E '^\/'|awk '{print $3}')

for var in $drives
do
 statusbalken "$var"
done

Da im WordPress die Formatierung von Shellscripten immer ungewünscht “angepasst” wird, zusätzlich hier noch ein Download-Link für das Script.: http://dl.loteks.de/drives.sh

Kategorien
Forensik Linux security

Festplatten Seriennummern unter Linux herausfinden

Um im PC-oder NAS Gehäuse immer gleich die richtige Festplatte zum Tauschen zu finden, muss im ID bzw. die Seriennummer der Festplatte herausgefunden werden.

Da leider nicht jedes NAS auf der Shell auch alle Befehle erlaubt Beziehungsweise alle Befehle anbietet, hier eine Liste mit 4 Methoden die Seriennummer von Festplatten unter Linux auszulesen.:

udebadm

udevadm info --query=property --name=/dev/sda | grep "^ID_SERIAL_SHORT=" | sed "s/ID_SERIAL_SHORT=//g"

Unter “–name=/dev/” wird das Laufwerk angegeben, die Ausgabe ist nur die Seriennummer.

hdparm

hdparm -i /dev/sda | sed -ne '/SerialNo/{s/.*SerialNo=\s*\(.*\)/\1/ ; p}'

Die Festplatte wurd als “-i /dev/sda” angegeben, alternativ können hier mehrere Festplatten mit “-i /dev/sd[ab]” angegeben werde. Die Ausgabe ist ausschließlich die Seriennummer.

smartctl

smartctl -i /dev/sda|sed -ne '/Serial\ Number\:/{s/.*Serial\ Number\:\s*\(.*\)/\1/ ; p}'

Auch bei smartctl wird mit “-i /dev/sda” die fragliche Festplatte angegeben. Die Ausgabe ist ausschließlich die Seriennummer.

 grep, awk, sed

ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'

gibt alle Festplatten mit den zugehörigen Seriennummern und Bezeichnung aus.

Kategorien
Allgemein Linux security

RETTET TrueCrypt…

Da TrueCrypt auf der offiziellen Internet Seite eine Anleitung zur Umstellung auf unsicherere Software, wie zum Beispiel “BitLocker”, gestellt hat und aus Archiven verschwindet hier ein Spiegel der letzten Aktuellen Version! Bewahrt es gut auf!

Ich hoffe es finden sich Entwickler die TrueCrypt weiterführen!!!

Die Checksummen der Dateien (Bitte mit den Dateien und Checksummen aus Drittquellen vergleichen!)
md5sum:

  • bb355096348383987447151eecd6dc0e truecrypt-7.1a-linux-x64.tar.gz
  • 09355fb2e43cf51697a15421816899be truecrypt-7.1a-linux-x86.tar.gz
  • 89affdc42966ae5739f673ba5fb4b7c5 truecrypt_7.1a_mac_os_x.dmg
  • 102d9652681db11c813610882332ae48 truecrypt-7.1a-source.tar.gz
  • 7a23ac83a0856c352025a6f7c9cc1526 truecrypt_setup_7.1a.exe

sha1sum:

  • 086cf24fad36c2c99a6ac32774833c74091acc4d truecrypt-7.1a-linux-x64.tar.gz
  • 0e77b220dbbc6f14101f3f913966f2c818b0f588 truecrypt-7.1a-linux-x86.tar.gz
  • 16e6d7675d63fba9bb75a9983397e3fb610459a1 truecrypt_7.1a_mac_os_x.dmg
  • d43e0dbe05c04e316447d87413c4f74c68f5de24 truecrypt-7.1a-source.tar.gz
  • 7689d038c76bd1df695d295c026961e50e4a62ea truecrypt_setup_7.1a.exe

STELLT AUCH IHR SPIEGEL DES QUELLCODES!

Kategorien
Postfix security

Nützliche OpenSSL Commands

Zertifikat vom “pem” in das “pkcs12” Format konvertieren

openssl pkcs12 -export -out mycert.p12 \
-inkey userkey.pem -in usercert.pem \
-name "Mein Zertifikat"

Zertifikat vom “pkcs12” in das “pem” Format wandeln

openssl pkcs12 -in host.domain.p12 \
-clcerts -nokeys -out host.domain.cert.pem \
openssl pkcs12 -in host.domain.p12 -nocerts \
-nodes -out host.domain.key.pem

host.domain.cert.pem kan ruhig lesbar gespeichert werden, der Key host.domain.key.pem darf jedoch nur durch root lesbar sein.

chown root.root host.domain.key.pem
chmod 0400 host.domain.key.pem

Zertifikat vom .pkcs12 Format in das .pem Format konvertieren

openssl pkcs12 -in export.p12 -clcerts -nokeys \
-out $HOME/.globus/usercert.pem
openssl pkcs12 -in export.p12 -nocerts \
-out $HOME/.globus/userkey.pem

Das Benutzerzertifikat usercert.pem darf jedem bekannt sein, der Private Schlüssel userkey.pem darf jedoch ausschließlich durch den Benutzer lesbar sein.:

chmod 0400 $HOME/.globus/userkey.pem

Passwort eines .pem private keys ändern

openssl rsa -in $HOME/.globus/userkey.pem -des3

Es erfolgt eine Abfrage des alten, sowie des neuen Passwortes

Informationen über das Zertifikat

“alle” Informationen:

openssl x509 -text -in cert.pem

Aussteller

openssl x509 -noout -in cert.pem -issuer

für wen ist das Zertifikat ausgestellt

openssl x509 -noout -in cert.pem -subject

bis zu welchem Datum ist das Zertifikat gültig?

openssl x509 -noout -in cert.pem -dates

den “hash” des Zertifikates ausgeben:

openssl x509 -noout -in cert.pem -hash

den “md5” fingerprint des Zertifikates ausgeben:

openssl x509 -noout -in cert.pem -fingerprint

Zertifikat verifizieren

openssl verify cert.pem
Kategorien
Forensik Linux security

CD Laufwerke bremsen

Aktuelle versuche ich ein paar vor mehr als 10 Jahren gebrannte CD- und DVD-Rohlinge zu retten. Die Daten lassen sich bei den meisten zu ca. 80% lesen.

Ich habe die beschädigten CDs und DVDs in 4 verschiedenen, je einem im PC- und einem im Laptop eingebauten DVD Laufwerk und einem “billigen” USB DVD Laufwerk und meinem neu zu diesem Zweck erworbenen Blue-Ray USB-Laufwerk.
Bei allen Laufwerken erhalte ich das gleiche Ergebniss, es fehlen gut verteilt über den gesammten Datenträget einzelne Blöcke.

Den Rettungversuch habe ich unter UBUNTU 13.10 mit “dvdisaster” durchgeführt und es lassen sich tatsächlich noch ein paar zusätzliche Prozente mit verringerter Laufwerksgeschwindigkeit aus den alten beschädigten CD- und DVD-Rohlingen holen.

Die Geschwindigkeit lässt sich unter Linux mit dem folgenden Befehl recht einfach, in meinem Besipiel auf “4x”, heruntersetzen.:

# hdparm -E 4 /dev/hdc

Leider lassen sich auch mit dieser Methode zwar mehr, aber nur selten wirklich alle Daten retten.

Die Positiven Punkte an dieser Anpassung?

  • Daten die sonst verloren wären lassen sich doch noch lesen
  • Die Einstellung ist beim Reboot wieder weg (oder mit einer Null an stelle der 4)
  • ein einfacher hdparm Befehl
Kategorien
Forensik Linux

Mod-Rewrite Funktionstest

mod_rewrite will manchmal nicht das tun was ich von ihm verlange. Manchmal habe ich auch eine mir unverständliche .htaccess Datei mit mod_rewrite Regeln die ich beim besten willen nicht nachvollziehen kann und auch wieder einfach nicht das tun was die READ.ME oder der Eigentümer der Datei behauptet.

Um in einer solchen Situation feststellen zu können ob das mod_rewrite auf dem Webserver funktionsfähig ist muss ich das irgendwie testen können.

Um einen solchen Test durchzuführen benötige ich drei  Dateien.
Eine .htaccess Datei und zwei HTML Dateien.
Wenn ich dann versuche nach dem Anlegen der Dateien diese aufzurufen.

Meine .htaccess Datei erhält den folgenden Inhalt:

RewriteEngine on
RewriteBase /
RewriteRule ^testing.php$ modrewrite.php

In der ersten Zeile starte ich, so vorghanden, das mod_rewrite, so das die beiden folgenden Zeilen, RewriteBase und RewriteRule, für den Apache eine Bedeutung erhalten. In der Zweiten Zeile lege ich die Basis der Umschreibe Regel fest. In der finalen dritten Zeile der .htaccess-Datei lege ich fest das alle Aufrufe welche die Datei testing.php erreichen sollen anstelle dieser die Datei modrewrite.php erreichen.
Wenn diese Regeln greifen ist es durch diese nicht möglich den Inhalt von “testing.php” zu erhalten.

Meine beiden PHP Dateien erhalten den folgenden Inhalt:
modrewrite.php

<?php echo "mod_rewrite und PHP ".phpversion()." sind OK"; ?>

testing.php

<?php echo "mod_rewrite ist nicht funktionsfaehig"; ?>

Nach dem Anlegen der Dateien kann im Browser versucht werden die Internetseite http://domain.tld/testing.php auszurufen. Nur wenn im Browser der Text “mod_rewrite und PHP X.Y sind OK” erscheint funktioniert mod_rewrite. Wenn etwas anderes angezeigt wird, “mod_rewrite ist nicht funktionsfaehig”, “echo “mod_rewrite ist nicht funktionsfaehig”;” oder sogar “Fehler 500: Internal Server Error”, ist der Webserver nicht entsprechend eingerichtet und mod_rewrite kann leider nicht genutzt werden.

Kategorien
Linux security

OpenSSH Schützen…

OpenSSH abschalten

Auf vielen Systemen wird kein SSH Server benötigt, da der sicherste Dienst ist der ist, der nicht läuft schalten wir start des SSH Servers auf solchen Systemen am besten ab.
unter Fedora via:

chkconfig sshd off

unter Debian und Ubuntu via:

sudo update-rc.d -f ssh remove

Ausschließlich SSH Protocol Version 2 verwenden

in der Konfigurationsdatei /etc/ssh/sshd_config sollte die Verwendung des SSH Protokolls 2 erzwungen werden. Die Version 1 ist stark veraltet und sollte aus Sicherheitsgründen deaktiviert werden.

Protocol 2

SSH nur bestimmten Benutzern erlauben

Zur Übersichtlichkeit sollte immer via AllowUsers direktive in der Konfigurationsdatei /etc/ssh/sshd_config aufgezählt werden wer zugriff erhält. Ausschließlich bei zu vielen Benutzern oder sehr häufigen wechseln sollte mit der DenyUsers direktive eine Liste mit verbotenen Benutzern angegeben werden.

AllowUsers root vivek jerry

Idle Log Out Timeout festlegen

SSH Sitzungen von Benutzern die längere Zeit inaktiv sind sollten aus der SSH Sitzung geworfen werden. So kann keine SSH Sitzung missbraucht werden weil sie vergessen wurde.

ClientAliveInterval 300
ClientAliveCountMax 0

.rhosts Dateien der Benutzer ignorieren.

SSH kann den veralteten rsh Befehl emulieren, dies sollte, da es selten verwendet und häufig misbraucht wird, unterbunden werden.

IgnoreRhosts yes

Host basierende Authentifizierung abschalten

HostbasedAuthentication no

root-Login abschalten

Der root-Login sollte verboten werden, da automatische Passwort such Scripte zumeist Passwörter für den Benutzer root suchen.

PermitRootLogin no

Ein Banner einbinden

Ein Banner ist kein direkter Schutz Ihres SSH Servers. Das Banner zeigt einem eventuellen Angreifern das dies ein Konfigurierter SSH Server ist, es also vermutlich nicht lohnt es überhaupt zu versuchen.
Hierzu wird in der SSH Konfigurationsdatei /etc/ssh/sshd_config ein Banner angegeben.

Banner /etc/issue

Die Datei /etc/issue enthält das Banner, welches vor dem Login angezeigt werden soll.

Ändere den SSH Port und

Lege in der SSH Konfiguration, unter /etc/ssh/sshd_config, fest auf welche IP-Adressen SSH hört und unter welchen Port der SSH Server erreichbar sein soll.

Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5

Nutze die Public Key basierte Authentifizierung

SSH Key erstellen

ssh-keygen -t rsa

zum erstellen eines SSH Schlüssels verwenden.

SSH Public Key übertragen

mit dem folgendem Befehl den Public-Key auf den Server übertragen:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

wenn ssh-copy-id nicht verfügbar ist kann der Public-Key

cat ~/.ssh/id_rsa.pub | ssh user@server 'umask 077; cat >> .ssh/authorized_keys'

SSH-Server konfigurieren

In der Konfiguration /etc/ssh/sshd_config, die Publick-Key Authentifizierung aktivieren.

PubkeyAuthentication yes

Key automatisch laden

Auf den Clients, den Computer die sich via SSH zum Server verbinden sollen ist es schön, wenn die Keys beim Laden schon im RAM sind. Hierzu gibt es je nach Betriebssystem verschiedene Tools.:

  • unter Windows: Pageant
  • unter Linux: ssh-agent
  • unter MacOS: ssh-agent (seit Version 10.5 Leopard teil des Systems)

Unter Linux kann in der ~/.bashrc mit einem kurzen Script der ssh-agent beim Login geladen werden.:

test "$SSH_AUTH_SOCK" || exec ssh-agent $SHELL -c "ssh-add; exec $SHELL -login"

Chroot SSHD

In der Konfiguration /etc/ssh/sshd_config kann seit SSH 4.8p1 die Funktion chroot() zum Einrichten eines Changeroot Gefängnisses verwendet werden. Der Benutzer wird nach dem Login in sein Heimatverzeichnis einzusperren.

Subsystem sftp internal-sftp

Match group sftponly
   ChrootDirectory /home/%u
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand internal-sftp

Das Verzeichnis in das via chroot() gewechselt werden soll muss dem Benutzer root gehören. Nach dem chroot() Aufruf wechselt die SSH Sitzung in ein Verzeichnis relativ zum neuen root-Verzeichnis, aus diesem Grund wechseln wir das Heimatverzeichnis auf “/”.

# chown root:root /home/user
# usermod -d / user
# adduser user sftponly
Kategorien
Forensik Linux security

Verzeichnisstruktur mit nur “bestimmten” Dateien kopieren

Die Verzeichnisse in denen ich meine Bildarchive verwalte wurden mit der Zeit von verschiedenen Archiv Programmen mit unglaublichen mengen an .sqlite und .xml und .txt und ähnlichem aufgefüllt die ich für meine Backups nicht benötige. Die Metadaten werden von den meisten Bildverwaltungen ohnehin zusätzlich in die exif Daten der Bilder geschrieben.

Da ich zum zusammenkopieren meiner “Backup-Zeile” eine ganze Weile herumprobieren musste habe ich diesen Blogbeitrag verfasst.?

Einzeiler zum kopieren einer Verzeichnisstruktur und aller “.jpg” Dateien:

rsync -aP --partial --size-only --include "*/" --include "*.jpg" --exclude "*" /media/sdkarte/ /media/Bildarchive2013

rsync – Programm zur Synchronisation von Daten

-a fasst die folgenden Optionen zusammen:

  • -r lässt rsync rekursiv arbeiten
  • -l kopiert symbolische Links
  • -p behält Rechte bei
  • -t behält Zeiten bei,
  • -g behält Gruppenrechte bei
  • -D behält Gerätedateien bei (nur wenn root rsync startet)

-P macht rsync gesprächig und gibt den fortschritt der Syncroisierung aus
–partial unfolständige Dateien beibehalten und fortsetzen
–size-only nur die Dateigröße prüfen
–include mit in der Sicherung durchführen
–exclude nicht mit in der Sicherung zufügen ausser ausrücklich includiert

Die Kamera nimmt die Bilder und auch zusätzliche GPS Informationen in Ordner auf, die dem Jahr-Monat-Tag entspricht. Die GPS und Richtungs Informationen die die Kamera in zusätzlichen Dateien aufnimmt brauche ich nicht im Archive und lasse sie auf diese weise einfach aus.