Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
25
Januar 2015
Klaus Moser
Klaus Moser

Ubuntu 14.04 - EncFs auf Cloud-Speicher

Da man ja inzwischen Cloud-Speicher quasi hinterhergeworfen bekommt, bietet es sich an diesen z.B. als Backup-Speicher für seine Daten zu verwenden um diese ggf. vor Elementarschäden wie Feuer, Wasser, usw. zu schützen.

Das Problem ist dass man bei Cloud-Speichern natürlich nie weiß wer alles Zugriff auf die Daten hat. Bleibt also nur noch die Möglichkeit die Daten zu verschlüsseln.

Ein verschlüsseltes Dateisystem in einer Container-Datei, wie  man es z.B. mit cryptsetup erzeugen kann ist wenig praktikabel, da bei einer Änderung an einer Datei im verschüsselten Dateisystem die gesamte Container-Datei hochgeladen werden müsste. Bei mehreren GB Daten ist dieser Ansatz keine gute Idee.

Eine Lösung des Problems ist z.B. EncFS (encryption FileSystem). Laut ubuntuusers.de besteht allerdings eine potentielle Schwachstelle. Diese ist für meine Zwecke allerdings ein vertretbares Risiko.

Installation

Die Installation erfolgt mit

sudo apt-get install encfs

Als nächstes müssen die Benutzer, die encfs verwenden können sollen in die Benutzergruppe fuse aufgenommen werden:

sudo usermod -aG fuse BENUTZERNAME

Konfiguration

Als nächstes legen wir zwei Verzeichnisse an. Das erste Verzeichnis enthält die verschüsselten Daten auf dem Cloud Speicher und das andere dient als Mount-Point für das entschlüsselte Dateisystem auf dem wir arbeiten können.

mkdir -p /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

Im Verzeichnis /media/cloud/1und1/webdav ist in diesem Beispiel unser 1und1-Onlinespeicher gemounted. Es geht aber auch jeder andere wie z.B. Dropbox, Google Drive, etc.

Diese beiden Verzeichnisse verbinden wir jetzt mit encfs.

encfs /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

Dabei ist das erste Verzeichnis das Verzeichnis mit dem wir arbeiten können. Dieses ist an sich nur ein Mountpoint in den das zweite Verzeichnis, in dem die verschlüsselten Daten gespeichert werden sollen, eingehängt wird.

Als nächstes wird man gefragt, welchen Modus man benutzen möchte:

Neuer verschlüsselter Datenträger wird erstellt.
Bitte wählen Sie eine der folgenden Optionen:
"x" für den Expertenmodus,
"p" für den vorkonfigurierten Paranoia-Modus,
etwas anderes oder eine Leerzeile wählt den Standard-Modus.
?>

Normalerweise kann man hier p für den vorkonfigurierten Paranoia-Modus wählen. Hat man als Cloud-Speicher z.B. 1und1 und damit eine Begrenzung der Länge der Pfadnamen auf z.B. 250 Zeichen, kann das schnell eng werden. Ist das der Fall muss man mit x den Expertenmodus verwenden.

Es werden im Folgenden die gewünschten Parameter abgefragt:

Manuelle Konfiguration gewählt.
Die folgenden Verschlüsselungsalgorithmen sind verfügbar
1. AES : 16 byte block cipher
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits
2. Blowfish : 8-Byte-Blockchiffre
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits

Hier wählt man z.B. 1 für AES.

Bitte wählen Sie eine Schlüssellänge in Bit. Die von Ihnen gewählte Verschlüsselung
unterstützt Längen von 128 bis 256 Bit in 64 Bit Schritten.
Zum Beispiel:
128, 192, 256

Hier kann man je nach Sicherheitsempfinden und verfügbarer Rechenleistung die Schlüssellänge wählen. Es gilt um so höher um so sicherer. Beispielweise also 256.

Wählen Sie eine Blockgröße (in Byte) aus. Der ausgewählte Algorithmus
unterstützt Größen von 64 bis 4096 Byte in Schritten von je 16 Byte.
Oder drücken Sie Enter, um die Vorgabe (1024 Byte) zu übernehmen

Damit kann man festlegen wie viele Bytes encfs auf einmal verarbeitet. Ein höherer Wert veringert den Overhead der beim Verschlüsseln entsteht, führt aber auch dazu dass zum Lesen eines Teilbereiches einer Datei mehr Daten entschlüsselt werden müssen. Ein Mittelwert ist hier also nicht verkehrt. Z.B. der Standardwert 1024.

Die folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze Dateinamen

Hier wird es jetzt interessant. Wir wählen hier 3 für möglichst kurze Dateinamen.
Mit 2 könnten wir die Verschlüsselung der Dateinamen auch ganz deaktivieren wenn man so etwas möchte. Wir wählen also 3.

Enable filename initialization vector chaining?
This makes filename encoding dependent on the complete path,
rather then encoding each path element individually.
The default here is Yes.

Dieses Feature erhöht die Sicherheit beim Verschlüsseln von Dateinamen in dem es den ganzen Pfad zum Verschlüsseln verwendet. Zwei gleiche Ordner- oder Dateinamen sehen in unterschiedlichen Pfaden somit anders aus.

Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
The default here is Yes.

Dieses Feature erhöht die Sicherheit indem es zu einer Datei Zufallsdaten hinzufügt, damit zwei gleiche Dateien im verschlüsselten Zustand nicht gleich aussehen.

Enable filename to IV header chaining?
This makes file data encoding dependent on the complete file path.
If a file is renamed, it will not decode sucessfully unless it
was renamed by encfs with the proper key.
If this option is enabled, then hard links will not be supported
in the filesystem.
The default here is No.

Ist dieses Feature aktiv, kann man keine Hardlinks mehr verwenden, eine Datei lässt sich aber auch nicht mehr entschlüsseln, wenn sie ausserhalb des encfs umbenannt wurde. Die Daten innerhalb der Datei sind damit an dessen Pfad gebunden.

Enable block authentication code headers
on every block in a file?  This adds about 12 bytes per block
to the storage requirements for a file, and significantly affects
performance but it also means [almost] any modifications or errors
within a block will be caught and will cause a read error.
The default here is No.

Dieses Feature beeinflusst die Performance negativ, dafür wird jeder Block in jeder Datei mit einer kryptografischen Prüfsumme versehen und es ist damit praktisch unmöglich eine Datei zu manipulieren ohne dass die Änderung auffällt. Ist genug Rechenleistung vorhanden, kann man hier yes auswählen.

Sollen jedem Block-Vorspann Zufallsbytes hinzugefügt werden?
Das wird die Leistung veringern, aber sicherstellen, dass die
Blöcke unterschiedliche Sicherheitscodes verwenden. Sie können das selbe
Resultat mit geringeren Leistungseinbußen erzielen, indem Sie die dateispezifischen Initialisierungsvektoren aktivieren.
Auswahl der Anzahl der Bytes, von 0 (Keine Zufallsbytes) bis 8:

Da wird vorher die dateispezifischen Initialisierungsvektoren aktiviert haben ist das hier nicht mehr nötig.

Enable file-hole pass-through?
This avoids writing encrypted blocks when file holes are created.
The default here is Yes.

Bin mir nicht sicher. verhindert möglicherweise das Schreiben leerer Blöcke in Dateien. Aktivieren macht denke ich Sinn.

Zum Abschluss erfolgt eine Zusammenfassung der Konfiguration:

Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Chiffre: "ssl/aes", Version 3:0:2
Dateinamenskodierung: "nameio/stream", Version 2:1:2
Schlüssellänge: 256 Bits
Blockgröße: 1024 Byte, enthält 8 Byte MAC-Kopf
Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten.
Dateinamensverschlüsselung benutzt IV Verkettungsmodus.
File holes passed through to ciphertext.

Als letztes wird das Kennwort verlangt:

Nun wird ein Kennwort für das Dateisystem benötigt.
Da es keinen Mechanismus zur Wiederhestellung gibt, müssen Sie
sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl
nächträglich geändert werden.

Damit ist die Einrichtung abgeschlossen und jetzt wird jede Datei, die wir in /media/cloud/1und1/encfs anlegen verschlüsselt in die Cloud hochgeladen.

Die folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze DateinamenDie folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze Dateinamen

Um das Verzeichnis wieder auszuhängen gibt man folgendes ein:

fusermount -u /media/cloud/1und1/encfs

Um das Verzeichnis wieder einzuhängen gibt man erneut

encfs /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

ein. Nach Eingabe des Passworts wird das verschlüsselte Dateisystem unter /media/cloud/1und1/webdav/Backup eingehängt.

Möchte man z.B. für Scripts das Passwort automatisch übergeben, verwendet man folgenden Befehl:

echo "mypassword" | encfs --stdinpass /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs
Samstag
17
Januar 2015
Klaus Moser
Klaus Moser

Ubuntu 14.04 - DLNA - Plex

Bin zwischenzeilich zu einer anderen Lösung gekommen mit der ich jetzt sehr zufrieden bin. Einfach einen Raspberry Pi nehmen und Kodi installieren. Dann reichen auch normale Dateifreigaben per NFS oder SMB um die eigene Mediensammlung abzuspielen.

Bei meiner Recherche nach DLNA Servern bin ich auf ein weiteres Paket gestoßen, dem ich auch einen Versuch zugestehen möchte. Der Plex Media Server ist mehr als nur ein DLNA Server. Er ist leider nicht in den Paketquellen von Ubuntu zu finden, aber es gibt ein .deb Paket für Ubuntu als Download. Außerdem ist eine umfassende Dokumentation vorhanden.

Also Paket herunterladen:

wget http://downloads.plexapp.com/plex-media-server/0.9.9.7.429-f80a8d6/plexmediaserver_0.9.9.7.429-f80a8d6_amd64.deb

Plex benötigt ein paar Pakete die installiert sein müssen

sudo apt-get install avahi-daemon avahi-utils libavahi-core7 libdaemon0 mime-support  ureadahead

und installieren:

sudo dpkg -i plexmediaserver_0.9.9.7.429-f80a8d6_amd64.deb

Ist die Installation abgeschlossen kann man sich an der wirklich sehr schicken Weboberfläche unter <serverip>/web anmelden. Dort registriert man sich für Plex und kann einige weitere Einstellungen treffen und erste Medien Bibliotheken anlegen.

Ubuntu 14.04 - DLNA - Plex

DLNA (Digital Living Network Alliance) ist ein Standard für Geräte in der digitalen Unterhaltungselektronik, mit dem es möglich ist unterschiedliche Geräte mit Multimedia-Inhalten zu versorgen.

Unter Ubuntu gibt es eine ganze Reihe freier und kommerzieller DLNA Server. In diesem Beitrag werde ich den teil-kommerziellen DLNA Server Plex testen. Das Paket ist nicht in den offiziellen Quellen verfügbar und der Lizenztyp wird als Freemium angegeben. Das bedeutet dass die Basisfunktionen kostenlos genutzt werden können nur Erweiterungen sind kostenpflichtig.

Für den Test wurde die Version 0.9.12.4.1192-9a47d21_amd62 des plexmediaserver verwendet.

Eine gute Anleitung gibt es wie immer unter ubuntuusers.de.

Installation

Das Paket ist nicht in den Repositories vorhanden und muss von der Website heruntergeladen werden.

Damit der Server richtig läuft schlägt ubuntuusers.de vor noch die Pakete avahi-daemon und avahi-utils zu installieren.

sudo apt-get install avahi-daemon avahi-utils

Auf der Website kann man unter Downloads wählen ob man Plex auf einer NAS oder einem Computer installieren möchte. Für die Installation unter Ubuntu wählen wir Computer aus. Im folgenden Dialog wählen wir unter Ubuntu die für unser System zutreffende Architektur aus (32/64Bit).

Das heruntergeladene Paket kann man jetzt entweder über den Software-Center oder über die Kommandozeile installieren:

dpgk -i plexmediaserver_0.9.12.4.1192-9a47d21_amd64.deb

Plex installiert dabei gleich ein Update-Repository (/etc/apt/sources.list.d/plexmediaserver.list) um das Paket auf dem aktuellsten Stand zu halten.

Konfiguration

Damit Plex auf die Dateien der Bibliothek zugreifen kann muss für den Benutzer plex, unter dem der Server läuft, eine Zugriffsberechtigung für diese eingerichtet werden.

Dies könnte man z.B. machen indem man den Owner der Dateien auf plex ändert. Alternativ kann man den Benutzer plex auch in eine Gruppe aufnehmen, die allen Dateien zugewiesen ist.

Die Einstellungen des Mediaservers sind in der Datei

/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Preferences.xml

gespeichert. Eine bequemere Möglichkeit als die Datei zu editieren ist die Einstellungen über die Web-Oberfläche vorzunehmen.

Ein paar Einstellungen lassen sich nicht über die Web-Oberfläche setzen, siehe dazu Advanced Server Settings. Um den Server in Betrieb zu nehmen sind diese Einstellungen jedoch nicht relevant.

Webinterface

Das Webinterface ist unter http://<plex-Server>:32400/web zu erreichen. Wobei <plex-server> durch die IP oder den Hostnamen des Rechners ersetzt werden muss auf dem der plexmediaserver läuft.

Am Webinterface merkt man direkt dass es sich um ein kommerzielles Produkt handelt. Hier sind offensichtlich viele Stunden an Entwicklungsarbeit investiert worden.. Die meisten Einstellungen sowie die Medien-Bibliotheken können hier eingerichtet werden.

 

Plex hinter Apache Proxy

Steht der Plex Server ggf. hinter einer Firewall und möchte nicht noch einen weiteren Port für den Zugriff auf das Webinterface des Plex Media Servers öffnen, so kann man auch den Apache so konfigurieren, dass er als Proxy fugiert und die Anfragen an den Plex Media Server durchreicht.

Dazu muss das Apache Modul mod_proxy und mod_proxy_http installiert und aktiviert werden.

sudo a2enmod proxy proxy_http

Jetzt kann man die Proxyweiterleitungen definieren. Dazu legt man die Datei /etc/apache2/conf-available/plex.conf an und fügt folgenden Inhalt ein:

<IfModule mod_proxy.c>
        <Location /web>
                ProxyPass http://localhost:32400/web
                ProxyPassReverse http://localhost:32400/web
        </Location>
        <Location /system>
                ProxyPass http://localhost:32400/system
                ProxyPassReverse http://localhost:32400/system
        </Location>
        <Location /servers>
                ProxyPass http://localhost:32400/servers
                ProxyPassReverse http://localhost:32400/servers
        </Location>
        <Location /accounts>
                ProxyPass http://localhost:32400/accounts
                ProxyPassReverse http://localhost:32400/accounts
        </Location>
        <Location /myplex>
                ProxyPass http://localhost:32400/myplex
                ProxyPassReverse http://localhost:32400/myplex
        </Location>
        <Location /photo>
                ProxyPass http://localhost:32400/photo
                ProxyPassReverse http://localhost:32400/photo
        </Location>
        <Location /clients>
                ProxyPass http://localhost:32400/clients
                ProxyPassReverse http://localhost:32400/clients
        </Location>
</IfModule>

Als nächstes muss diese Konfiguration aktiviert werden:

sudo a2enconf plex

Damit der Apache jetzt nicht als Open Proxy läuft, sollte man, sofern nicht anders gewünscht, die Datei /etc/apache2/conf-available/proxy_default.conf mit folgenden Inhalt anlegen:

<IfModule mod_proxy.c>
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
</IfModule>

Wenn der Parameter ProxyRequests Off nicht eingetragen wird läuft der unter mod_proxy_html liegende mod_proxy als Open Proxy was ein Sicherheitsproblem darstellt.

Diese Konfiguration noch aktivieren mit:

a2enconf proxy_default

Und anschließend der Apache neu gestartet werden:

sudo service apache2 restart

Jetzt ist der Plex Media Server sowohl mit als auch ohne SSL Verschlüsselung unter mein.server.de/plex erreichbar.

Will man sicherstellen, dass man nicht doch einen Open Proxy gebastelt hat, kann man sich per telnet auf den Apache verbinden und versuchen Inhalte einer andere Website zu laden:

telnet www.mydomain.com 80

Steht die Verbindung, gibt man folgendes in das Terminal ein

GET http://www.google.de/ HTTP/1.1

Der Server darf jetzt nicht die Seite von Google ausgeben, sondern muss eine Fehlermeldung oder die eigene Website ausgeben.

HTTP/1.1 400 Bad Request
Date: Mon, 20 Jul 2015 09:58:38 GMT
Server: Apache/2.2.12 (Linux/SUSE)
Content-Length: 309
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.12 (Linux/SUSE) Server at www.yahoo.com Port 80</address>
</body></html>
Connection closed by foreign host.

Wird die Seite von Google ausgegeben ist noch etwas an der Konfiguration falsch.

In den Einstellungen von Plex muss jetzt noch unter Server > Remote Access unter Port manuell eingeben den Port auf z.B. 443 einstellen, wenn man eine verschlüsselte Verbindung möchte oder 80 falls man dies nicht wünscht. Ist dieses Eingabefeld nicht vorhanden oben rechts auf Erweiterte Anzeige klicken.

Mittwoch
14
Januar 2015
Klaus Moser
Klaus Moser

Ubuntu - Logrotate Fehler

Seit kurzem landeten Mails mit folgenden Inhalt in meinem Postfach:

/etc/cron.daily/logrotate: error: error running shared postrotate script for '/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log ' run-parts: /etc/cron.daily/logrotate exited with return code 1

In dem Script /etc/logrotate.d/mysql-server wird eine Verbindung zur MySQL-Datenbank hergestellt. Dies schlug in diesem Fall fehl, weil die Zugangsdaten in /etc/mysql/debian.cnf nicht den Zugangsdaten des Benutzers debian-sys-maint in MySQL entsprachen.

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = xxxxxxxxxxxxxxxx
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = xxxxxxxxxxxxxxxx
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Fehlt der Benutzer kann man ihn anlegen mit

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxxxxxxxxxxx'

Sollte der Benutzer existieren, kann man auch einfach dessen Passwort auf den Wert aus der Datei /etc/mysql/debian.cnf zurücksetzen.

UPDATE `user` SET `Password`=PASSWORD('xxxxxxxxxxxxxxxx') WHERE `User`='debian-sys-maint'

Bei mir war der Fehler nach dieser Maßnahme behoben und es wurden keine Fehlermeldungen mehr geschickt.

Blog

Kmoser's Tech-Blog