AZ's Blog » Internet https://azapps.de Einmal mit Profis arbeiten… Sat, 28 Jun 2014 13:46:52 +0000 de-DE hourly 1 http://wordpress.org/?v=4.2.4 Phusion Passenger und Apache mit Debian https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/ https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/#comments Thu, 03 Jan 2013 18:49:06 +0000 https://azapps.de/?p=284 Debian… dieser Hort uralter Software – Aber man muss es halt nutzen. In den Debian–Stable repos ist Ruby 1.8. eingetragen. Aktuell ist aber Ruby 1.9.3. Die Installation von Rails und vor allem dem Phusion Passenger gestaltete sich für mich ziemlich schwierig. Wie es trotzdem klappt, kannst du hier nachlesen.

Ruby installieren

Die Ruby–Version aus der Paketverwaltung kann man wie gesagt vergessen. Also müssen wir rvm nutzen. Am praktischsten ist es, rvm gleich Systemweit zu installieren:

curl -L https://get.rvm.io | sudo bash -s stable

Wichtig ist hier, den Befehl nicht als Root, sondern mit sudo auszuführen, weil rvm einige Variablen benötigt, die mit root anders gesetzt sind
Dann installierst du dir die aktuelle Ruby–Version:

rvm install 1.9.3
rvm use 1.9.3

Nun habe ich mir meine Rails–Applikation geholt und die benötigten Gems mit

bundle install

installiert.

Phusion Passenger einrichten

Passanger installieren:

gem install passenger

Nun muss noch das Modul für Apache installiert werden:

rvmsudo /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0.18/bin/passenger-install-apache2-module

Den Pfad zur Installation musst du Gegebenenfalls anpassen.
Jetzt nur noch die Apache Konfiguration anpassen und danach kann es losgehen:

Füge folgende Zeilen am Ende der /etc/apache2/apache.conf (o.ä.) hinzu:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0
.18/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0.18
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p362/ruby

Dann erstellst du einen neuen Virtuellen Host: (z.B. /etc/apache2/sites-enabled/yourhost.com.conf)

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public    
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

Danach musst du die Seite aktivieren und dann Apache neu laden (oder neu starten):

sudo a2ensite yourhost.com.conf
sudo service apache2 restart

Anwendung vorbereiten

Wenn noch nicht getan, solltest du genau jetzt

bundle install

durchführen. Danach erstellen wir die Datenbank und kompilieren die Assets vor:

rake db:migrate RAILS_ENV="production"
bundle exec rake assets:precompile

Wenn du nun deine Seite aufrufst, sollte alles Funktionieren. Wenn eine Leere Seite mit irgendwas mit „Sorry“ kommt, schau in deinen Logs nach: /var/log/apache2/error.log Wenn eine Phusion–Passanger–Fehlerseite kommt, dann lies nach, was dort steht.

Mehr dazu unter…

]]>
https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/feed/ 0
Owncloud Design zerschossen? https://azapps.de/blog/2012/11/19/owncloud-design-zerschossen/ https://azapps.de/blog/2012/11/19/owncloud-design-zerschossen/#comments Sun, 18 Nov 2012 23:31:18 +0000 https://azapps.de/?p=179 Ich habe mir Owncloud eingerichtet und nach dem einloggen hat es immer das Design vollkommen zerschossen. Grund für den ziemlich alten Bug ist die zlib–Kompression von PHP. Eine schöne Lösung dafür habe ich bislang nicht gefunden. Ich musste leider die Kompression ausschalten.

Ändere dazu folgende Zeile in der /etc/php5/apache2/php.ini (Debian):

zlib.output_compression = Off

Nun funktioniert Owncloud wieder, nur werden die Seiten ab sofort leider nicht mehr komprimiert und es werden somit mehr Daten über die Leitung geschickt

]]>
https://azapps.de/blog/2012/11/19/owncloud-design-zerschossen/feed/ 0
PDF Export mit Rails und LaTeX https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/ https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/#comments Wed, 14 Nov 2012 19:19:33 +0000 https://azapps.de/?p=159 Für ein Praktikum an der Uni sollte ich mir überlegen, wie man am besten mit Rails einen PDF-Export realisiert. Ich habe mich im Endeffekt für die Kombination von LaTeX und dem Gem rails-latex entschieden. Wieso und wie die Implementierung aussieht liest du weiter unten.

Grundlegendes

Es gibt eigentlich drei Arten wie man mit Rails relativ einfach PDF’s generiert. Alle haben ihre Vor- und Nachteile, deshalb musst du selbst entscheiden, ob meine Lösung auch in deinem Fall die beste ist.

HTML zu PDF–Konverter

Die gibt es, die gibt es auch für Rails. Die Vorteile liegen auf der Hand:

  • Du kannst HTML, also ist es einfach zu schreiben
  • Du musst dich nirgendwo einarbeiten

Doch die Nachteile überwiegen:

  • Diese Konverter sind meistens ziemlich langsam
  • Man kann wenige PDF-Spezielle Sachen machen (z.B. Kopf– und Fußzeilen)

Prawn oder ein anderer In–Ruby–PDF–Generator

Du schreibst Rails–Code direkt in deiner Anwendung und lässt dir von dem Gem einfach das PDF generieren.

Vorteile:

  • Man muss keine externen Programme aufrufen
  • Man kann den Code in Ruby schreiben und muss nichts neues lernen

Nachteile:

  • Der PDF-Generierungscode ist meistens ziemlich schlecht überschaubar
  • Anpassungen sind relativ schwer vorzunehmen
  • Nicht wiederverwendbar für andere Dokumente

LaTeX

Du generierst mit Rail LaTeX-Code, jagst diesen durch den LaTeX–Parser und bietest die PDF zum Download an.

Vorteile:

  • Portabler Code
  • LaTeX kann auch jemand schreiben, der vom Programmieren sonst keine Ahnung hat
  • Viele Anpassungsmöglichkeiten (Du kannst auch gleich eine Präsentation schreiben)

Nachteile:

  • LaTeX muss installiert sein und LaTeX ist groß…

Umsetzung

Am entspannten ist es wohl, wenn man den Gem rails-latex benutzt. Füge es in das Gemfile hinzu:

gem rails-latex

Danach natürlich mit bundle install installieren.

Damit Rails weiß, wie es PDF-Anfragen handhabhaben soll, musst du noch in der config/initializers/mime_types.rb den Mimetype setzen:

Mime::Type.register "application/pdf", :pdf, ['text/pdf'], ['pdf']

Der Rest ist ziemlich simpel gestalten:

Wenn du einen Link auf eine PDF-Datei setzen willst, tust du dies folgendermaßen:

<%= link_to "print", story_path(@story,:format => :pdf) %>

Weiterhin solltest du dir passende Views anfertigen:

  • app/views/layouts/application.pdf.erbtex
  • app/views/[view]/[seite].pdf.erb

Dort kannst du ganz normalen LaTeX–Code mit Embedded Ruby schreiben.

Wenn du willst, dass pdflatex 2 mal läuft kannst du das in der application.pdf.erbtex einstellen:

<% @latex_config={:parse_twice => true} %>

 Fehlerbehebung

Der PDF-Viewer zeigt nichts an, oder sagt, das PDF ist ungültig? Schau doch mal nach, was der Server antwortet.

Bei mir kam lange Zeit ein 406 Not Acceptable Fehler. Der Grund daran liegt an den respond_to – Blöcken in den Controllern. Warum genau weiß ich nicht, schau doch einfach in die Dokumentation und sag mir Bescheid 😉

Das zu beheben war ganz einfach: Lösche die Blöcke, die sind überflüssig.

Lesenswertes

]]>
https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/feed/ 0
Probleme mit Kippo bzw. Python https://azapps.de/blog/2012/11/04/probleme-mit-kippo-bzw-python/ https://azapps.de/blog/2012/11/04/probleme-mit-kippo-bzw-python/#comments Sun, 04 Nov 2012 17:13:34 +0000 https://azapps.de/?p=153 Ich hab mir mal meine Logs durchgesehen und mir ist aufgefallen, dass es ein paar Leute gibt, die Versuchen sich per SSH bei mir einzuloggen. An sich habe ich da nichts dagegen. Aber das ist ein anderes Thema, über das ich demnächst berichten werde.

Zur Sache: Ich habe mir Kippo aus dem SVN geholt und die entsprechenden Pakete installiert. Beim starten kam folgende Fehlermeldung:

 ./start.sh
Starting kippo in background...Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py",
line 626, in run
    runApp(config)
  File "/usr/lib/python2.6/dist-packages/twisted/scripts/twistd.py",
line 23, in runApp
    _SomeApplicationRunner(config).run()
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py",
line 374, in run
    self.application = self.createOrGetApplication()
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py",
line 439, in createOrGetApplication
    application = getApplication(self.config, passphrase)
---  ---
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py",
line 450, in getApplication
    application = service.loadApplication(filename, style, passphrase)
  File
"/usr/lib/python2.6/dist-packages/twisted/application/service.py", line
390, in loadApplication
    application = sob.loadValueFromFile(filename, 'application', passphrase)
  File "/usr/lib/python2.6/dist-packages/twisted/persisted/sob.py", line
210, in loadValueFromFile
    exec fileObj in d, d
  File "kippo.tac", line 15, in 
    from twisted.conch.ssh import factory, keys
  File "/usr/lib/python2.6/dist-packages/twisted/conch/ssh/factory.py",
line 21, in 
    from twisted.conch.ssh import keys
  File "/usr/lib/python2.6/dist-packages/twisted/conch/ssh/keys.py",
line 20, in 
    from pyasn1.type import univ
exceptions.ImportError: No module named type

Failed to load application: No module named type

Bei Meinem Debian 6 ist wohl etwas in der Paketverwaltung schief gegangen, denn es hat pyasn1 nicht richtig initialisiert.

Einen Tip für die Lösung des Problems lieferte ein Blick in die postint-Behandlung des pyasn1-Pakets:

 dpkg  -I /var/cache/apt/archives/python-pyasn1_0.0.11a-1_all.deb postinst
#!/bin/sh
set -e
# Automatically added by dh_pysupport
if which update-python-modules >/dev/null 2>&1; then
        update-python-modules  python-pyasn1.public
fi
# End automatically added section

Bei mir war das update-python-modules-Skript nicht im $PATH drin.
Die Lösung war ganz einfach:

sudo /usr/sbin/update-python-modules  python-pyasn1.public

Hat alle Probleme behoben und nun kann Kippo gleich loslaufen…

[edit] Da habe ich den Lösungsansatz her: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=622086 [/edit]

]]>
https://azapps.de/blog/2012/11/04/probleme-mit-kippo-bzw-python/feed/ 2
Spaß mit Chrome https://azapps.de/blog/2012/10/19/spas-mit-chrome/ https://azapps.de/blog/2012/10/19/spas-mit-chrome/#comments Fri, 19 Oct 2012 14:01:44 +0000 https://azapps.de/?p=145 Chrome macht einige Sachen anders als die „Anderen“. Wenn man im Firefox entwickelt und sich dann die Sachen im Chrome anschaut kann es passieren, dass da gar nichts funktioniert.

Es liegt wohl eher daran, dass Chrome die Sachen „richtiger“ macht als die anderen, aber wenn man nicht daran denkt, kann man ziemlich lange den Fehler suchen. Hier die Sachen, die mir aufgefallen sind:

(Es geht übrigens um JavaScript und PHP 😉 )

Objekte

Angenommen, du willst eine Sortierte Key–Value– Liste an den Browser per JSON schicken und JavaScript soll die dann anzeigen.

PHP-Code (kann auch ne andere Sprache sein:

<?php
echo json_encode(array(
  'foo'=>'bar',
  'bla'=>'blubb'
));
?>

Dann dürfte beim Browser ungefähr folgendes ankommen:

{'foo':'bar','bla':'blubb'}

Soweit so klar. Bei einem Firefox, IE, etc… kann man mit JavaScript auf dieses Objekt in der „richtigen“ Reihenfolge zugreifen. Chrome sortiert das Objekt aber so, wie es will. Das ist laut JS-Spezifikation auch vollkommen ok, nur sollte man einfach darauf achten.

So macht man es richtig: (und besser)

<?php
echo json_encode(array(
  array('foo'=>'bar'),
  array('bla'=>'blubb')
));
?>

Das erzeugt folgenden JSON-Code:

[
  {'foo':'bar'},
  {'bla':'blubb'}
]

Man muss dazu natürlich auch den JavaScript-Code umschreiben, das ist dann aber Standartkomform und funktioniert in allen Browsern.

[edit]

Die Alternativvariante wäre noch Folgende:

<?php
echo json_encode(array(
  array('key'=>'foo','val'=>'bar'),
  array('key'=>'bla','val'=>'blubb')
));
?>

[/edit]

Variablendeklarationen

Es sei folgender JS-Code gegeben:

function foo(blubb) {
  if(typeof(blubb)!='Object'){
    return
  }
  var blaaa=blubb.foo;
}

Beim FF & Co macht dieser Code keine Probleme. Wenn die Funktion im Chrome aber mit einem Nicht-Objekt aufgerufen wird, schmeißt dieser einen Fehler. Warum?

Dies liegt daran, dass Chrome alle Variablendeklarationen, die mit var … anfangen stets an den Anfang der Funktion schieben. Man kann nun entweder die Variablen am Anfang der Funktion ohne Wert deklarieren oder man lagert die Variablen in einen else-Zweig aus.

Dateiupload

Das Chrome Uploads anders behandelt, als man es gewöhnt ist, habe ich bereits hier beschrieben.

]]>
https://azapps.de/blog/2012/10/19/spas-mit-chrome/feed/ 0
PHP – Probleme mit dem Datei-Upload in Google Chrome https://azapps.de/blog/2012/10/03/php-probleme-mit-dem-datei-upload-in-google-chrome/ https://azapps.de/blog/2012/10/03/php-probleme-mit-dem-datei-upload-in-google-chrome/#comments Wed, 03 Oct 2012 12:36:57 +0000 https://azapps.de/?p=135 Google Chrome tanzt beim Datei-Upload aus der Reihe. Mein Formular funktioniert in allen Browsern (sogar IE) außer dem Chrome.

Das Problem ist, dass Chrome numerische Werte im $_FILES-Array benötigt.

Die Lösung ist dementsprechend einfach. Statt

<form action="index.php" method="post" enctype="multipart/form-data">
<label for="file">Datei:</label><br />
<input type="file" name="file" id="file"/><br />
<input type="submit" value="Upload" />
</form>

Muss man das Formular zu

<form action="index.php" method="post" enctype="multipart/form-data">
<label for="file">Datei:</label><br />
<input type="file" name="file[]" id="file"/><br />
<input type="submit" value="Upload" />
</form>

abändern und im PHP-Code noch statt auf

$_FILES['file']['tmp_name']

auf

$_FILES['file']['tmp_name'][0]

zugreifen.

]]>
https://azapps.de/blog/2012/10/03/php-probleme-mit-dem-datei-upload-in-google-chrome/feed/ 1
OpenVPN ganz einfach https://azapps.de/blog/2012/09/07/openvpn/ https://azapps.de/blog/2012/09/07/openvpn/#comments Fri, 07 Sep 2012 18:58:48 +0000 https://azapps.de/?p=84 Es gibt ziemlich viele Tutorials zum Thema OpenVPN im Netz zu finden, heute trage ich nicht mit einem weiteren bei, sondern empfehle nochmals ausdrücklich das Wunderbare Arch-Wiki. Ich habe noch kein anderes so gutes Tutorial zu diesem Thema gelesen und auch sonst gibt es da sehr guten Content. Also hier ist der Link: OpenVPN

Wenn man dann noch das Internet weiterreichen will: OpenVPN Bridge

]]>
https://azapps.de/blog/2012/09/07/openvpn/feed/ 0
Multi-Domain SSL mit Apache und openssl https://azapps.de/blog/2012/09/06/multi-domain-ssl-apache/ https://azapps.de/blog/2012/09/06/multi-domain-ssl-apache/#comments Thu, 06 Sep 2012 08:16:23 +0000 https://azapps.de/?p=79 Lange schon wollte ich SSL bei mir laufen lassen, doch irgendwie habe ich es die letzten Male nicht geschafft, Apache richtig einzurichten. Aber eigentlich ist die Einrichtung trivial. Hier gibt es eine kurze Anleitung, wie man das macht.

Problemstellung

Will man für mehrere Domains unter einer IP-Adresse SSL anbieten, dann stand man früher vor einem Problem: Der Server weiß erst nach dem TLS-Handshake zur welchen Domain sich der Client verbinden will. Das liegt daran, dass alles bis auf die IP-Adresse verschlüsselt übertragen wird. Somit war es nicht möglich, für eine IP mehrere SSL-Zertifikate zu vergeben.

Seit einiger Zeit unterstützt aber Apache SNI (Server Name Indication) Dabei wird schon beim ersten Schritt des TLS-Handshakes die Virtuelle Domain übertragen und der Server weiß somit, welches Zertifikat er senden soll.

Das funktioniert überall prima, bis auf eine Ausnahme: Der Internet-Explorer <7 und alle IE’s unter Windows XP. Aber da dies unwichtige Randgruppen sind, ignorieren wir die am besten gleich mit 😉

SNI wird seit Apache 2.2.12 (bei Debian haben ist grad 2.2.16 aktuell) also sollte das kein Problem sein.

Konfiguration

Global

Damit SSL überhaupt funktioniert, musst du das Modul mod_ssl aktivieren:

a2enmod ssl

Die globale Konfigurationsdatei liegt bei mir in /etc/apache2/ports.conf. Dort solltest du, falls nicht vorhanden, folgende Zeilen hinzufügen:

     NameVirtualHost *:443
     Listen *:443
    SSLStrictSNIVHostCheck off

Dies lässt Apache auf dem Standart-SSL Port horchen und richtet dafür Virtuelle Hosts ein. die Vorletzte Zeile sagt, dass Apache Browser, die SSL wollen, aber kein SNI beherrschen ignorieren soll. Wenn du einen default_ssl-Host hast, dann solltest du in der /etc/apache2/sites-available/default_ssl.conf folgendes stehen haben:

<VirtualHost *:443>
…

Seiten-Konfiguration

Für jede Seite, die per SSL erreichbar sein soll, generierst du am besten ein eigenes Zertifikat. Ich lege die Zertifikatsdateien in /etc/apache2/ssl/ ab. Falls nicht vorhanden, erstelle dieses Verzeichnis.

Die nächsten Schritte solltest du für jede Domain durchführen.

Zertifikat erstellen

openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/domain.pem -keyout /etc/apache2/ssl/domain.pem

statt domain, setzt du am besten deinen Domain-Namen ein (Haha). Diesen Key, der im Klartext gespeichert wird, schützt du am besten vor neugierigen Augen:

chmod 400 /etc/apache2/ssl/domain.pem

Konfigurationsdatei bearbeiten

Diese sollten in dem Ordner /etc/apache2/sites-available/ liegen. Hier  ein fertiges Beispiel:

<VirtualHost *:80>
        DocumentRoot "/home/example.com/htdocs"
        ServerName example.com
        <Directory "/home/example.com/htdocs">
                allow from all
                Options -Indexes
        </Directory>
</VirtualHost>

<VirtualHost *:443>
        ServerName example.com
        DocumentRoot "/home/example.com/htdocs"
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/example.pem
        <Directory "/home/example.com/htdocs">
                allow from all
                Options -Indexes
        </Directory>
</VirtualHost>

Die beiden VirtualHost-Statements unterscheiden sich nur durch den Port und durch die beiden SSL*-Zeilen. bei SSLCertificateFile trägst du einfach den Pfad zu deinem Zertifikat ein.

Fertig, das war doch nicht schwer oder?

Zum nachlesen

]]>
https://azapps.de/blog/2012/09/06/multi-domain-ssl-apache/feed/ 0
msmtp für E-Mailversand (auch für PHP) https://azapps.de/blog/2012/08/07/msmtp/ https://azapps.de/blog/2012/08/07/msmtp/#comments Tue, 07 Aug 2012 09:30:54 +0000 https://azapps.de/?p=52 Wenn man keinen eigenen Mailserver laufen hat und trotzdem E-Mails vom Server aus verschicken möchte, kann man einfach einen vorhandenen SMTP-Server nutzen und den E-Mail-Versand darüber abwickeln. Dafür eignet sich das Paket MSMTP hervorragend. Es ist einfach zu konfigurieren und sehr flexibel.

Bis vor kurzem habe ich SSMTP benutzt, doch dieses Paket wird laut ArchWiki seit 2009 nicht mehr weiterentwickelt. Außerdem ist MSMTP wesentlich flexibler, da man viele unterschiedliche Accounts nutzen kann.

Installation und Einstellungen

Die Installation geht wie immer ganz einfach über deinen Paketmanager:

sudo aptitude install msmtp

Wenn du zentrale Accounts nutzen willst, von denen aus jeder auf deinem Server E-Mails verschicken kann, dann erstelle die Datei /etc/msmtprc mit folgendem Inhalt:

defaults
tls on
tls_starttls off
tls_trust_file /etc/ssl/certs/smtprelaypool.cer

account default
host smtprelaypool.ispgateway.de
port 465
user foo@example.com
password geheim
auth plain
from foo@example.com
logfile /var/log/msmtp.log

Das sind die Einstellungen, die du brauchst, wenn du E-Mails über einen Provider verschickst, der den ispgateway.de nutzt. Bei GMail musst du darauf achten, den Port auf 587 zu setzen. Bei einigen Servern solltest du auch statt »auth plain« »auth on« benutzen. Ansonsten ist die Datei selbsterklärend. Bei dem Zertifikat lohnt es sich erst zu schauen, ob es nicht schon hier vorhanden ist: /etc/ssl/certs/ca-certificates.crt. Ansonsten gibt es das aktuelle Zertifikat bei deinem Provider.

Das tolle an MSMTP ist, dass du mehrere Accounts anlegen kannst: Erstelle einfach einen neuen Abschnitt in der gleichen Datei, der mit account ACCOUNTNAMEanfängt, den Rest kannst du von oben abschauen. Außerdem kann jeder Nutzer eine unter ~/.msmtprc seine eigenen Accounts anlegen.

Testen

Um zu testen, ob der Versand funktioniert kannst du einfach folgenden Befehl nutzen:

echo -e "Subject: Test Mail\r\n\r\nDas ist eine Test-Mail" |msmtp --debug --from=foo@example.com -t bar@example.com

Bei –from trägst du bitte die E-Mail die in der Konfiguration bei from steht ein. und -t ist die Empfängeradresse. Wenn es nicht klappt, dann musst du schauen, was du in der Konfigurationsdatei falsch gemacht hast. Du kannst relativ einfach aus den Log-Meldungen ablesen, was den Fehler verursacht hat.

PHP Konfigurieren

Damit PHP die E-Mails über diesen Account E-Mails verschickt, musst du nur eine Zeile in der PHP.ini ändern (/etc/php5/apache2/php.ini):

sendmail_path = /usr/bin/msmtp -t

Danach noch schnell den Apache neu starten und fertig.

Mit diesem PHP-Skript kannst du ganz einfach testen, ob alles geklappt hat:

if ( mail ( 'foo@example.com', 'Test mail', 'Es funktioniert.' ) );
echo 'Mail wurde gesendet';
else
echo 'Fehler';

Quellen

http://www.absolutelytech.com/2010/07/17/howto-configure-msmtp-to-work-with-gmail-on-linux/

]]>
https://azapps.de/blog/2012/08/07/msmtp/feed/ 2
ZeroBin https://azapps.de/blog/2012/08/06/zerobin/ https://azapps.de/blog/2012/08/06/zerobin/#comments Mon, 06 Aug 2012 21:10:48 +0000 https://azapps.de/?p=39 Es kommt öfter mal vor, dass man mal längere Textausschnitte (z.B. Log-Meldungen oder Programmcode) posten möchte, aber man es nicht unbedingt per E-Mail senden, oder in einem Forum eintragen will.

Dafür gibt es seit langer Zeit das tolle Tool PasteBin. Einziges Manko: Die Sachen werden unverschlüsselt gespeichert. Vor einiger Zeit hat Sébastien Sauvage das tolle Tool ZeroBin veröffentlicht, welches Einträge per JavaScript verschlüsselt. So sieht der Server nie, was eigentlich geschrieben wurde.

Ich habe nun einen eigenen ZeroBin-Server laufen, und zwar hier: zero.azapps.de.

Noch ein paar  technische Informationen und Tipps zur Installation:

Technische Informationen

URL

Die URL eines Eintrags ist folgendermaßen aufgebaut:

http://zero.azapps.de/?4c31c4883b6dd29f#A5rWM2NAkRD8QMbaADmDT2fHMaXSwwz2rs09JQVO9Nk=

Der Interessante Teil ist logischerweise der nach dem »?« .

Als erstes steht dort die ID des Eintrags (4c31c4883b6dd29f). Dies ist einfach eine JSON-Datei auf dem Server, die sich PHP holt und an den Browser schickt. Soweit so gut, aber der Interessante Teil ist der nach der Raute. Das ist der Schlüssel zum Ent– und Verschlüsseln. Dieser wird vom Browser nicht an den Server geschickt, also kann der Server selber die Daten nicht entschlüsseln, und außerdem kann man auch über einen unsicheren Kanal mit dem Server kommunizieren, ohne dass ein Angreifer mitlesen kann. Es ist natürlich klar, dass, sobald der Key dem Angreifer bekannt ist, er alles mitlesen kann.

Verschlüsselung

Das eigentlich interessante an ZeroBin ist die Verschlüsselung und Entschlüsselung. Diese funktioniert nämlich im Browser und basiert auf AES-256. Das ist zum heutigen Zeitpunkt ein ziemlich guter Verschlüsselungsalgorithmus. Da dieser Symmetrisch ist, kann man sogar Konversationen mit einem einzigen Schlüssel führen.

Die JavaScript-Implementierung des Algorithmus stammt von der Stanford–Universität: Stanford Javascript Crypto Library.

Installation

Lade dir das aktuelle Script hier herunter, oder noch besser, klone es dir aus dem Git-Repo:

git clone git://github.com/sebsauvage/ZeroBin.git

Dann lege noch folgende Ordner an:

mkdir data
mkdir tmp

Der data-Ordner ist für die Text(JSON)-Dateien (ZeroBin braucht keine Datenbank) und der tmp-Ordner ist für das Template (RainTPL) da. Logischerweise müssen beide Ordner für PHP beschreibbar sein:

chmod 777 -R tmp/ data/

Das wars auch schon. Viel Spaß mit ZeroBin.

Ich werde vielleicht noch versuchen einen Syntax-Highlighter und einen Datei-Upload (Unverschlüsselt :( ) für ZeroBin zu basteln.

]]>
https://azapps.de/blog/2012/08/06/zerobin/feed/ 0