XOR Logik mit 3 Inputs

Kürzlich musste ich ein Powershell Script schreiben, das zu Anfang die Argumente prüfen sollte. Das Script kann mit 3 Parameter aufgerufen werden: -Install, -Uninstall und -Action
Von diesen 3 Parameter darf jeweils nur einer gleichzeitig verwendet werden, also habe ich ein paar logische Operatoren zusammen verknüpft und voilà dies ist das Ergebnis:

if(($Install -and $Uninstall -and $Action) -or -not ($Install -xor $Action -xor $Uninstall))
{
	Write-Host -ForegroundColor Red "Invalid Parameters please read script header for usage"
	exit(1)
}

Die Wahrheitstabelle für ein XOR Gatter mit 3 Inputs:

$a = $true,$false,$false
$a[0] -xor $a[1] -xor $a[2] #true
$a = $true,$true,$false
$a[0] -xor $a[1] -xor $a[2] #false
$a = $true,$true,$true
$a[0] -xor $a[1] -xor $a[2] #true
$a = $true,$false,$true
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$true,$true
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$false,$true
$a[0] -xor $a[1] -xor $a[2] #true
$a = $false,$false,$false
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$true,$false
$a[0] -xor $a[1] -xor $a[2] #true

3InputXOR

Dateien mit OpenSSL ver/entschlüsseln

Verschlüsseln

openssl aes-256-cbc -salt -in archive.tar.gz -out archive.tar.gz.enc

Es folgt eine Aufforderung zur Eingabe des Passwortes
enter aes-256-cbc encryption password:

Entschlüsseln

openssl aes-256-cbc -d -in archive.tar.gz.enc -out archive.tar.gz

Es folgt eine Aufforderung zur Eingabe des Passwortes
enter aes-256-cbc decryption password:

Raspberry Pi Edimax Wifi Adapter einrichten

Der Edimax war einer der ersten verfügbaren Wifi Adapter für die Raspberry Pi. Das Einrichten ist relativ einfach für einigermassen versierte Linux User. Bei Distributionen wie z.B OpenElec 4.0 kann der Wifi Adapter auch direkt in XBMC konfiguriert werden.
Beim konfigurieren unter Raspbian habe ich bemerkt, dass wenn länger keine Aktivität auf dem Adapter stattfindet, dieser in einen Sleep Mode ähnlichen Zuständ fällt und ich ihn nicht mehr wecken konnte. Weiter unten wird beschrieben wie dieser Zustand verhindert werden kann.
raspberry_pi_edimax

Installation Edimax USB Wifi Adapter

Der USB Adapter muss eingesteckt sein. Wird er im laufenden Betrieb eingesteckt startet die Raspberry Pi neu.

OS Update

sudo apt-get update
sudo apt-get upgrade

Dies kann unter Umständen eine Weile dauern

Das Interface konfigurieren

sudo nano /etc/network/interfaces

Die Grundkonfiguration sollte folgendermassen aussehen:

auto lo
auto wlan0
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Diese Konfiguration setzt die IP Adresse via DHCP Server.
Möchte man eine fixe IP setzten muss die Konfiguration wie folgt abgeändert werden:
Address, Netmask und Gateway den eigenen Ansprüchen entsprechend anpassen

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

WPA Konfiguration 1

In der Datei /etc/network/interfaces folgende Ergänzungen machen

iface wlan0 inet dhcp
        wpa-ssid "ssid"
        wpa-psk "password"

WPA Konfiguration 2

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

SSID und PSK mit den eigenen Angaben ersetzten

network={
ssid="SSID-HIER-EINSETZEN"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="WIFI-PASSWORT-HIER-EINSETZTEN"
}

“Sleep” Mode verhindern

sudo nano /etc/modprobe.d/8192cu.conf

Folgende Zeilen hinzufügen

# Disable power management
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Neustart

Die Konfiguration ist abgeschlossen, nun die Raspberry Pi neustarten.
 

Windows Passwort des lokalen Administrators ändern ohne Rechte

Das nachfolgende Szenario ist schon länger bekannt, jedoch möchte ich damit wieder einmal darauf hinweisen, wie wichtig es ist eine Festplatten Verschlüsselung einzusetzen.
Wenn eine Windows Installation unverschlüsselt ist, kann relativ einfach eine Shell mit den höchsten Rechten (NT AUTHORITY\System) gestartet werden. Damit lässt sich absolut alles mit einem System machen, wie z.B das Passwort des lokalen Adminstrators ändern um sich damit anzumelden.
Um diese Shell zu starten bedienen wir uns dem Windows Feature Eingabehilfen auf dem Login Bildschirm, welches immer als NT AUTHORITY\System Benutzer gestartet wird.
Es gibt verschiedene Varianten an diese Shell zu gelangen:

Variante 1: Programm kopieren (einfachere)

  1. Zielsystem mit WinPE oder Linux (mit NTFS Lese/Schreibberechtigungen) starten
  2. C:\Windows\System32\Utilman.exe nach Utilman.exe.bak umbenennen
  3. C:\Windows\System32\cmd.exe kopieren nach C:\Windows\System32\Utilman.exe
  4. Neustarten und die Eingabehilfen starten
  5. net user administrator <neuesPasswort>

winpe_utilman
windows_login_utilman

Variante 2: Image File Exection Options (komplexere)

  1. Zielsystem mit WinPE oder Linux (mit NTFS Lese/Schreibberechtigungen) starten
  2. Registry Hive C:\Windows\System32\config\SOFTWARE laden
  3. Zum Schlüssel (vom Zielsystem) wechseln KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  4. Neuen Schlüssel erstellen mit Namen utilman.exe
  5. In diesem Schlüssel einen String Value erstellen Name = debugger Value = cmd.exe
  6. Neustarten und die Eingabehilfen starten
  7. net user administrator <neuesPasswort>

SSH Socks Proxy

  1. Machmal muss ich auf die Schnelle auf einen Service in meinem Heim Netzwerk zugreifen ohne grossen Aufwand, wie z.B Port Forwarding zu konfigurieren. Dafür eignet sich am besten ein Socks Proxy via SSH Tunnel.

Voraussetzungen

  • SSH Server im internen Netzwerk
  • ssh Client

Vorteile

  • schnelle unkomplizierte Konfiguration
  • verschlüsselte Verbindung auch für unsichere Protokolle (http, ftp etc.)
  • Port Forwarding kann “umgangen” werden

Vorgehensweise

Ich zeige die Vorgehensweise auf OSX 10.9. Der SSH Server ist OpenSSH auf einer Synology Diskstation.
SSH Tunnel vom Client zum Server öffnen

ssh -D 8000 root@irbe.ch

Dies öffnet eine SSH Session zu irbe.ch und erstellt einen SOCKS Proxy auf Port 8000.
OSX Konfigurieren

  1. Unter den Netzwerkeinstellungen links die aktive Verbindung auswählen und Weitere Optionen … wählen
  2. Unter Proxies SOCKS Proxy anwählen, als IP 127.0.0.1 eintragen und Port 8000

SOCKSProxy

OSX automatische statische Routen für L2TP/IPSec VPN Tunnel

Um nach dem Aufbau eines L2TP/IPSec Tunnels mittels OSX eingebauter VPN Software automatisch eine statische Route hinzuzufügen bietet Apple folgendes Szenario:
File /etc/ppp/ip-up erstellen mit folgendem Inhalt:

#!/bin/sh
/sbin/route add SUBNET $5

SUBNET ersetzen mit dem Subnet, welches durch den VPN Tunnel geroutet werden soll (z.B 192.168.0.0/16)
Nun die Rechte des Scripts anpassen (als Root):

chmod 0755 /etc/ppp/ip-up

Dieses File wird nun jedes Mal ausgeführt, wenn ein VPN Tunnel aufgebaut wird.
Die Route wird automatisch wieder gelöscht, sobald der VPN Tunnel getrennt wird.

Kali Linux USB Stick auf dem Mac

Zu Testzwecken möchte ich einen USB Stick erstellen, von dem ich Kali Linux booten kann, wenn möglich ohne grosse Änderungen an OS X vornehmen zu müssen.
Anforderungen
– USB Stick (minimum 8GB)
– Macbook, iMac etc.
– Virtualisierungs Software (VirtualBox, VMware Fusion etc.)
Kali Linux 64bit ISO
refit
Guide
Als erstes erstellen wir auf dem USB Stick 3 Partitionen mittels Apple’s “Disk Utility”.

1. Partition: 100 MB HFS+
2. Partition: 100 MB FAT32
3. Partition: Rest FAT32

diskutility_partitioning
Danach laden wir rEFIt herunter und kopieren den Ordner “efi” auf die 1. Partition des USB Sticks.
Als nächstes öffnen wir eine Konsole und führen folgenden Befehl aus (USBSTICKPART1 durch 1. Partition des USB Sticks ersetzten!)

cd /Volumes/USBSTICKPART1/efi/refit; sudo sh enable.sh

Nun starten wir die Virtualisierungs Software erstellen eine neue VM und hängen das Kali ISO an.
Der USB Stick muss in der VM ersichtlich sein.
Da diese Schritte je nach Virtualisierungs Software unterschiedlich sind gehe ich nicht im Detail darauf ein.
Nun folgt die Installation von Kali auf den USB Stick. Ich werde nur die relevanten Schritte aufzeigen:

Das wars! Um Kali Linux nun zu starten während dem einschalten des Mac die Option Taste gedrückt halten, rEFIt auswählen und dann Linux auswählen.
refit_bootscreen
Diese Prozedur kann mit allen Linux Derivaten durchgeführt werden.

Mac OSX 10.7 Clear Phantom NFS Mount

Hinweis auf: http://hints.macworld.com/article.php?story=20120717055242729
 
This is a hint about phantom NFS shares that may linger on your system long after you stopped accessing the share, and that may cause slowdowns and errors with various disk utilities. The information here applies to Lion, and may differ in earlier and later versions.
I used to have a NAS device that I named “dns323,” and which was visible in the Finder as an NFS share. (The unit used a Linux-formatted disk.) In the past few months, whenever I used the excellent Yasu system maintenance utility, it would report an error message, saying that the file “dns323” wasn’t found. I eventually realized that this problem started when I stopped using that NAS device. I also noticed that Find Any File was starting very slowly; and when I used Find Any File to see if it could find any trace of “dns323,” it listed the file in its results list, but said that the item had disappeared.
I eventually realized that there was a directory named “dns323” in my user folder, but that directory wasn’t visible in the Finder, even if I made invisible files visible. The directory name was visible in Terminal, but if I tried to cd into it, I got a message saying “Connection refused.” None of the standard Unix commands for deleting a directory had any effect; I typically got a message saying “Resource busy” when I tried.
Eventually, with the help of the experts on the forum on this site, I found that “dns323” was listed in the table of mounts that appeared in Terminal when I entered typed the df command. The dns323 item was listed as “map -static” which, as I understand from other posts, means that it’s a mount that isn’t actually mounted, but which the system has ready for mounting when needed.
After a lot of other effort, I finally discovered what was creating this phantom mount. There was a .plist file in this folder: /var/db/dslocal/nodes/Default/mounts. The .plist file contained a name that was something like 10.0.1.8%2Fmnt_a2.plist (I’m writing that from memory); the name began with the IP address that the share had when I used it.
I didn’t try deleting or moving this plist file while running OS X normally, but I think (on the basis of other postings in other forums about similar files) I could have used sudo rm <filename> to delete it. Instead I booted into single-user mode and moved the file to another location where I could restore it if needed (although I didn’t need it). I then booted normally again, opened Terminal and entered rmdir ~/dns323, which was successful.
After this, Find Any File started working at top speed again, and Yasu stopped reporting an error. If file utilities and directory listings seem sluggish on your system, then it may be worth looking for files that create phantom shares in the directory listed above.

Synology Diskstation Management via Reverse Proxy mit DSM 5

Update
Gemäss diversen Problemen mit der Weiterleitung via /dsm habe ich den Beitrag abgeändert, so dass eine Subdomain verwendet wird z.B https://ds.domain.tld
Damit sollte es auch keine Konflikte mit den Apache Konfigurationen für PhotoStation etc. mehr geben.
Wer mit eingeschränkten Möglichkeiten im Internet unterwegs ist (z.B vom Firmennetzwerk aus oder Internetcafe) bei dem die Mangement Ports der Synology Diskstation (http:5000 und https:5001) gesperrt sind aber dennoch auf seine Diskstation zugreifen möchte kann dies via Reverse Proxy einfach bewerkstelligen. Dazu wird der eingebaute Apache Webserver in Kombination mit dem Modul mod_proxy verwendet. Auf diese Weise können alle Dienste, welche einen anderen Port als http/80 oder https/443 verwenden angeboten werden.
Ich habe ein ganz einfaches Script geschriben, dass die nötigen Schritte vornimmt.
Damit der Reverse Proxy eingerichtet werden kann muss die Webstation aktiviert sein.
Synology_Webstation
Danach via SSH auf die Diskstation einloggen und folgendes in der Console ausführen

wget -O install_reverseProxy.sh https://www.irbe.ch/wp-content/uploads/scripts/Synology_reverseProxy.sh
chmod +x install_reverseProxy.sh
nano install_reverseProxy.sh

Bei der Variable URL die eigene eintragen
Nano Editor schliessen mit Ctrl + X, danach y drücken zum überschreiben und mit Enter den Pfad bestätigen

und Script starten mit

./install_reverseProxy.sh
rm install_reverseProxy.sh

Source Code des Scripts

#!/bin/sh
#You must change this Variable to suit your Hostname
#----------------------------------------------------
URL="ds.irbe.ch" #The main URL of the site
#----------------------------------------------------
#Normally you do not have to change these variables
ReverseProxyFile="/usr/local/etc/reverse_proxy.conf" #Path to the ReverseProxyFile
config="/etc/httpd/sites-enabled-user/httpd-ssl-vhost.conf-user"
apache="httpd -k"
#Create the Reverse Proxy File
echo "
<IfModule !proxy_module>
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
</IfModule>
NameVirtualHost *:443
<VirtualHost *:443>
ServerName $URL
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
 ProxyVia Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://localhost:5001/
ProxyPassReverse / https://localhost:5001/
</VirtualHost>
" > $ReverseProxyFile
#Include the Reverse Proxy File in the main apache config file
echo "include $ReverseProxyFile" >> $config
#Restart the apache service
$apache restart

Nun kann der Diskstation Manager via https://ds.domain.tld aufgerufen werden

Das low Budget DIY Media Center Teil 2

Customizing

Zentrale XBMC Library

Achtung: Dieses Feature ist als kompliziert und experimental aufgeführt.
Alle XBMC Instanzen die auf die zentrale Library zugreifen müssen dieselbe Version von XBMC haben!

Da ich mehrere Raspberry Pi’s mit XBMC im Haus habe möchte ich die Library an einem zentralen Ort speichern, damit ich sie nur an einem Ort aktuell halten muss und die “watched” Status überall zur Verfügung habe. Ebenso wird die aktuelle Position in einem Film gespeichert (wenn er beendet wird) und kann dann in einem anderen Zimmer an der Stelle fortgesetzt werden.
Die Lösung dafür heisst: MySQL
Da ich sowiso sämtliche Medien von meinem NAS streame und dieses ohnehin 24/7 online ist war es naheliegend MySQL darauf zu installieren und die XBMC Library zu hosten. Für die XBMC Konfiguration bedeutet das lediglich ein kleiner Eingriff.
Im File (muss von Hand erstellt werden falls noch nicht vorhanden):

nano ~/.xbmc/userdata/advancedsettings.xml

muss foldendes ergänzt werden (wenn das File bereits existiert nur den Text von <videodatabase> bis </videolibrary> kopieren), bei den Tags <host> muss die IP Adresse des MySQL Servers eingetragen werden:

<advancedsettings>
    <videodatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </videodatabase>
    <musicdatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </musicdatabase>
     <videolibrary>
          <importwatchedstate>true</importwatchedstate>
     </videolibrary>
</advancedsettings>

Der vollständige XBMC Artikel dazu ist hier

Der Infrarot Empfänger

Als Infrarot Empfänger dient mir eine einfach TSOP4838 Diode, welche an den GPIO Pins des Raspberry angeschlossen werden. Für die Verbindung habe ich aus einem alten Computer das Speaker Kabel, welches vom Mainboard zum Gehäuse führt genommen.
tsop4838_wiring]20130611-185242.jpg

Harmony Konfiguration

Als Fernbedienung verwende ich eine Logitech Harmony One+. Diese ist etwas komplizierter zum konfigurieren als eine herkömmliche RC6 Infrarot Fernbedienung. Die wichtigesten Punkte:

  • XBMC als Microsoft Media Center SE einrichten
  • Device Delay Settings für XBMC gemäss Screenshot einstellen
  • Device Command Repeat für XBMC gemäss Screenshot einstellen

XBMC Device Typ
harmony_deviceTyp
Device Delay Settings
harmony_devicedelay
Device Command Repeat Settings
harmony_deviceCMDrepeat

Die Lirc Konfiguration

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Thu Jun  6 17:16:50 2013
#
# contributed by
#
# brand:                       HarmonyOne.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
  name  HarmonyOne.conf
  bits           13
  flags RC6|CONST_LENGTH
  eps            30
  aeps          100
  header       2665   860
  one           472   414
  zero          472   414
  pre_data_bits   24
  pre_data       0x1BFF83
  gap          105899
  min_repeat      2
#  suppress_repeat 2
#  uncomment to suppress unwanted repeats
  toggle_bit_mask 0x8000
  rc6_mask    0x100000000
      begin codes
          KEY_UP                   0x1BE1
          KEY_LEFT                 0x1BDF
          KEY_DOWN                 0x1BE0
          KEY_RIGHT                0x1BDE
          KEY_OK                   0x1BDD
          KEY_BACK                 0x1BDC
          KEY_PAUSE                0x1BE9
          KEY_STOP                 0x1BE6
          KEY_PLAY                 0x1BE9
          KEY_FASTFORWARD          0x1BEB
      end codes
end remote