seeseekey.net - Invictus Deus Ex Machina

Vor ein paar Tagen ist mein erstes Buch Selfhosting — Server aufsetzen und betreiben erschienen. Das Buch dreht sich thematisch um das Hosting und dem Betrieb eines eigenen Servers und begleitet den Leser bei der Auswahl des passenden Anbieters, führt ihn in Linux als verwendetes Betriebssystem ein und begleitet ihn beim Aufsetzen konkreter Serverprojekte, wie das Aufsetzen von Mail-, Web– und anderen Serverdiensten. In den abschliessenden Kapiteln wird auf weitere wichtige Sachverhalte wie die Sicherheit und das Backup des eigenen Servers eingangen, so das der Leser einen guten Einblick in den Betrieb eines Servers gewinnt.

Erhältlich ist das Buch unter anderem bei Amazon, Beam, eBook.de, iTunes und Thalia. Im Buch selbst ist ein Code enthalten, mit welchem man zusätzlich zum gekauften Buch eine DRM freie Version beziehen kann.

Für den Hackerspace in Neubrandenburg waren wir auf der Suche nach der Möglichkeit ein Kiosk-System unter Ubuntu 12.04 LTS einzurichten. Das System sollte dabei hochfahren, den Browser öffnen und eine Webseite im Vollbild darstellen. In dieser Anleitung wird dabei davon ausgegangen, das System mit der Serverversion von Ubuntu 12.04 LTS installiert wurde. Nach der Installation muss im ersten Schritt der Desktop nachinstalliert werden:

apt-get install ubuntu-desktop

Der installierte Desktop wird beim nächsten Neustart automatisch ausgeführt, so das hier keine weitere Konfiguration notwendig ist. Nun legen wir den Nutzer für den Kioskbetrieb an:

adduser kiosk

Dieser Nutzer soll beim Neustart automatisch angemeldet werden. Dazu wird die Datei /etc/lightdm/lightdm.conf bearbeitet. In diese Datei wird dabei folgendes eingetragen:

[SeatDefaults]

autologin-guest=false
autologin-user=kiosk
autologin-user-timeout=0
autologin-session=lightdm-autologin
user-session=ubuntu
greeter-session=unity-greeter

Damit sind die ersten grundlegenden Schritte fertiggestellt und der Rechner kann neugestartet werden. Der Rechner fährt nun hoch und loggt sich mit dem Nutzer kiosk ein. In unserem Fall wurde nun der Bildschirm um 90 Grad über die Systemeinstellungen gedreht, da die Webseite hochkant angezeigt werden sollte. Damit der Bildschirm nicht nach einer gewissen Zeit ausgeht, sollte der Bildschirmschoner und die automatische Sperrung in den Systemeinstellungen unter Helligkeit und Sperren deaktiviert werden. Anschließend sollte im Terminal:

gsettings set org.gnome.desktop.screensaver idle-activation-enabled false

eingeben werden. Im Nutzerordner des Nutzers kiosk wird nun eine Datei mit dem Namen firefox.sh angelegt. Die angelegte Bash-Datei wird mit folgendem Inhalt gefüllt:

#!/bin/bash
setterm -blank 0
sleep 90;
while true;
do
 firefox -url http://example.org/
      sleep 0.1s;
done

Im Firefox selbst sollte ein Add-On für den Kiosk-Modus installiert werden. Hier stehen mKiosk und R-kiosk zur Auswahl. Mit dem Add-On wird der Firefox in die Möglichkeiten versetzt die Webseite im Vollbild anzuzeigen. Für den automatischen Start des Firefox werden nun folgende Zeilen zur .profile–Datei des Nutzers kiosk hinzugefügt:

# Start firefox
./firefox.sh &

Die 90 Sekunden Verzögerung in dem Skript dienen dazu, dem System genug Zeit für die Initialisierung und die Bildschirmdrehung zu geben. Damit der Mauszeiger nicht zu sehen ist, bietet sich das Paket unclutter an. Mit:

unclutter -idle 0.01 -root

wird der Mauszeiger nach der definierten Zeit ausgeblendet, bis er wieder bewegt wird.

Vor einigen Tagen ist mir ein Mailserver (bestehend aus Postfix und Dovecot) begegnet, welcher in der mail.err regelmäßig folgende Ausgabe wiederholte:

Apr 2 13:16:35 service dovecot: lda(root): Error: chdir(/root/) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +x perm: /root, dir owned by 0:0 mode=0700)
Apr 2 13:16:35 service dovecot: lda(root): Error: chdir(/root) failed: Permission denied
Apr 2 13:16:35 service dovecot: lda(root): Error: user root: Initialization failed: Namespace '': stat(/root/Maildir) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +x perm: /root, dir owned by 0:0 mode=0700)
Apr 2 13:16:35 service dovecot: lda(root): Fatal: Invalid user settings. Refer to server log for more information.

Der Dovecot-Service versucht auf einen Maildir–Ordner im Nutzerverzeichnis des Nutzers root zuzugreifen, was allerdings nicht gelingt. Einfach lösen lässt sich dieses Problem in dem man einen Alias für die Mailzustellung zum Nutzer root anlegt. Dazu wird im ersten Schritt die Datei /etc/aliases bearbeitet. In dieser Datei kann der entsprechende Alias eingetragen werden:

root: webmaster@example.com

Nachdem die Datei gespeichert wurde, muss die Datei in ihre binäre Form überführt werden und die entsprechenden Services neugestartet werden:

newaliases
service dovecot restart
service postfix restart

Damit werden die Mails von root im entsprechenden Postfach hinterlegt und die Fehlermeldung gehört der Vergangenheit an.

Bei Linutop handelt es sich um eine Reihe von Kleinstrechnern. Der Linutop 2 ist dabei Baujahr 2008, besitzt einen AMD Geode LX800, welcher mit 800 Mhz getaktet ist. Daneben befindet sich in dem Gerät 512 MiB Arbeitsspeicher. Auf einem solchen Gerät wollte ich nun Ubuntu in der Servervariante installieren. Als Version kommt dabei nur die 12.04 LTS, welche bis April 2017 unterstützt wird, in Frage.

Der Grund hierfür ist das der AMD Geode LX800 kein PAE unterstützt, neue Ubuntu-Versionen dieses aber zwingend voraussetzen. Im ersten Schritt muss die Netboot-Variante (non-pae) heruntergeladen werden. Die mini.iso kann dann mit Tools wie UNetbootin auf einem USB Stick gespielt werden.

Ein Linutop 2

In diesem Fall wird das System von und auf diesem USB-Stick installiert. Der Grund dafür ist der 1 Gigabyte große Flashspeicher welcher nicht ausreicht um das System zu installieren. In der Standardkonfiguration weist Ubuntu der Systempartionen 512 MB und der Swap-Partion ebenfalls 512 MB zu. Wenn man der Systempartion die gesamten 1000 Megabyte zuweist, sollte sich der Ubuntu Server auch auf dem internen Flashspeicher installieren lassen, allerdings verfügt man dann nur noch über knapp 100 Megabyte freien Speicher.

Wenn man bei der Installation stattdessen das ganze auf einem angeschlossenen USB Stick installiert, sollte auch genug Platz für andere Aufgaben da sein. Die 1 Gigabyte große Flashdisk, kann dabei als Swapspeicher genutzt werden. Für die Installation muss der Linotop ans Netz angeschlossen sein. Nachdem man die grundlegenden Einstellungen vorgenommen hat, dauert die Installation zirka 60 bis 90 Minuten. Anschließend kann das System genutzt werden.

Mein vor einiger Zeit aufgesetzter Proxyserver startete nicht mehr. Stattdessen bekam ich von Polipo nur noch die Meldung:

Starting polipo: Couldn't open log file /var/log/polipo: Permission denied

Allerdings ließ sich das ganze relativ problemlos aus der Welt schaffen:

touch /var/log/polipo
chmod 640 /var/log/polipo
chown proxy:proxy /var/log/polipo

Danach konnte der Dienst mittels:

service polipo restart

wieder gestartet werden.

Wenn man ein Init-Skript schreibt, kann man natürlich jedesmal von Neuem beginnen. Einfacher ist es wenn man sich eines Templates bedient. Felix H. Dahlke stellt ein solches bereit. Bei diesem Template muss nur noch das Verzeichnis der Anwendung, der Nutzername und das Kommando selbst definiert werden. Der Rest wird vom Template bereitgestellt. Nachdem man sich auf Basis des Templates ein passendes Skript unter /etc/init.d/ definiert hat, muss das ganze nur noch mit den passenden Attributen versehen werden und, auf Wunsch zu den defaults hinzugefügt werden:

chmod a+x /etc/init.d/newservice
update-rc.d newservice defaults

Lizenziert ist das Template unter der MIT-Lizenz und damit freie Software. Denn passenden Template-Quellcode findet man auf GitHub.

Vor einigen Tagen war ich auf der Suche nach einem Kommando um die Netzwerkaktivität eines Rechners nach Protokollen separiert anzeigen. Wie nicht anderes zu erwarten bin ich dann bei Netstat gelandet. Mittels:

netstat -s

kann man sich einen Report aufgeteilt nach Protokollen anzeigen lassen. Das könnte dann z.B. so aussehen:

Ip:
    20715767 Pakete insgesamt empfangen
    0 weitergeleitet
    0 eingehende Pakete verworfen
    20713510 eingehende Pakete ausgeliefert
    12353060 Anforderung gesendet
Icmp:
    720 ICMP-Meldungen empfangen
    0 Input-ICMP-Meldung fehlgeschlagen.
    ICMP-Eingabehistogramm:
        Ziel unerreichbar: 304
        Echo Anfragen: 416
    9238 ICMP Nachrichten gesendet
    0 ICMP Nachrichten fehlgeschlagen
    ICMP-Ausgabehistogramm:
        Ziel unerreichbar: 8822
        Echo Antworten: 416
IcmpMsg:
        InType3: 304
        InType8: 416
        OutType0: 416
        OutType3: 8822
Tcp:
    364 aktive Verbindungsöffnungen
    298756 passive Verbindungsöffnungen
    6285 fehlerhafte Verbindungsversuche
    57555 Verbindungsrücksetzungen empfangen
    1 Verbindungen aufgebaut
    10493162 Segmente empfangen
    15405980 Segmente ausgesendet
...

Wenn man einen OpenVPN-Server in der Standardkonfiguration betreibt, wird man sich unter Umständen wundern, an welcher Stelle ist das OpenVPN Log zu finden ist. Das liegt daran das der OpenVPN-Server das ganze in /var/log/syslog speichert. Möchte man nun die OpenVPN betreffenden Punkte filtern so sollte man auf der Konsole folgendes eingeben:

grep VPN /var/log/syslog

Alternativ kann man auch die OpenVPN-Konfiguration anpassen. Dazu muss die Datei /etc/openvpn/server.conf bearbeitet werden. Dort gibt es eine Option log-append, welche wie folgt angepasst wird:

log-append /var/log/openvpn.log

Nach einem Neustart des Service mittels:

service openvpn restart

wird die neu eingestellte Logdatei genutzt.

Unter Ubuntu gibt es neben den halbjährlichen Versionen auch solche welche über einen längeren Zeitraum unterstützt werden. Diese sogenannten Long Term Releases erscheinen dabei alle zwei Jahre und werden fünf Jahre lang unterstützt. Bei Ubuntu kann man das System nun so konfigurieren das nur LTS Versionen oder jedes Release zum Upgrade angeboten wird. Möchte man diese Einstellung ändern, so muss man im Terminal:

nano /etc/update-manager/release-upgrades

eingeben. Im Editor öffnet sich dann folgende Datei:

# Default behavior for the release upgrader.

[DEFAULT]
# Default prompting behavior, valid options:
#
#  never  - Never check for a new release.
#  normal - Check to see if a new release is available.  If more than one new
#           release is found, the release upgrader will attempt to upgrade to
#           the release that immediately succeeds the currently-running
#           release.
#  lts    - Check to see if a new LTS release is available.  The upgrader
#           will attempt to upgrade to the first LTS release available after
#           the currently-running one.  Note that this option should not be
#           used if the currently-running release is not itself an LTS
#           release, since in that case the upgrader won't be able to
#           determine if a newer release is available.
Prompt=lts

Dort kann man unter Prompt die gewünschte Einstellung festlegen und bekommt damit vom System nur noch Hinweise wenn die gewünschten Versionen erscheinen.