Spacecontrol

Crystal Clear action run.png
Spacecontrol

Status: stable

Spacecontrol cat img.jpg
Beschreibung Spacesteuerung über SSH
Autor: bobapple, schinken
Flattr Flattr Spacecontrol
PayPal Spenden für Spacecontrol

Beschreibung

Bei uns gibt es einige Anhänger der Commandline, daher wollten wir unsere gängigen Tools nicht nur per Website steuern, sondern auch im Terminal. Viele der Tools können mit einer REST-Api angesteuert werden, das macht es sehr einfach Clients zu erstellen.

SSH

Die Steuerung soll für alle Mitglieder einfach erreichbar sein. Prinzipiell hat sich hier für uns also SSH angeboten. Wir sehen aber einen Nachteil darin jedem Mitglied einen SSH-User samt Passwort zu erstellen nur um ein paar CLI-Tools bedienen zu können. Die Möglichkeit einen einzigen User zu erstellen und das Passwort zu verbreiten, bietet uns aber auch nicht genügend Komfort. Bei dem Vorschlag einen SSH-User zu erstellen, der garkein Passwort besitzt zieht es wohl jedem Administrator die Zehennägel hoch. Wir haben uns dennoch dafür entschieden. Demensprechend musste das ganze abgesichert werden. Die erste Stufe ist, dass der Login nur vom Internen Netz möglich ist. Die nächste Stufe ist, dass der User direkt in einem chroot landet, in dem sich nur das nötigste befindet.

chroot

Das chroot wird mit Hilfe von jailkit erstellt. Mit den Tools die es mitbringt, kann man unter anderem auf einfache weise Binaries kopieren, da verwendete Libraries mitkopiert werden. Einen weiteren Vorteil bietet das Tool jk_chrootsh, das, wenn es als Login-Shell benutzt wird, den entsprechenden User direkt nach dem Login in ein chroot sperrt. Die CLI-Tools sind in Python geschrieben, daher befindet sich python2.7 zusammen mit allen Standard-Libs ebenfalls im chroot.

limits

Der User "spacecontrol" darf ausschließlich in sein Homeverzeichnis im chroot schreiben. Auf dem System hat er ein Volumen von maximal 100MB die er beschreiben darf (quota). Zusätzlich kann der User maximal 20 Prozesse gleichzeitig ausführen und maximal 200000kb Memory auf dem System nutzen.

busybox

Um die ganze Umgebung noch weiter einzuschränken wird als Shell busybox verwendet. Durch die vielen Konfigurationsmöglichkeiten lässt sich busybox auf eine sehr minimalistische Shell reduzieren. Leider gibt es keine Möglichkeit beim Login eine "Message of the day" auszuliefern. Um das aber dennoch zu ermöglichen ist ein kleiner patch für busybox entstanden. Sowohl die Config als auch der Patch befinden sich auf github: https://github.com/schinken/spacecontrol/tree/master/busybox

                                          _             _ 
 backspace                               | |           | |
 ___ _ __   __ _  ___ ___  ___ ___  _ __ | |_ _ __ ___ | |
/ __| '_ \ / _` |/ __/ _ \/ __/ _ \| '_ \| __| '__/ _ \| |
\__ \ |_) | (_| | (_|  __/ (_| (_) | | | | |_| | | (_) | |
|___/ .__/ \__,_|\___\___|\___\___/|_| |_|\__|_|  \___/|_|
    | |
    |_|   available tools: door          status
                           webrelais     ledboard

Command Line Tools

Für das Spacecontrol stehen mehrere Commandline-Tools zur Verfügung welche meist in Python geschrieben sind. Hierzu wurde argparse verwendet, um die Parameter komfortabel abzufragen. Die bisherigen Tools befinden sich im Spacecontrol GitHub-Repository. Für die REST-Anfragen wurde die Library python-requests genutzt, welche ein schönes Interface für HTTP-Requests zur Verfügung stellt.

Webrelais

Steuert die einzelnen Relais unserer Relaiskarte. Hier kann man ganz einfach das Notlicht oder auch die Rundumleuchte anschalten, sowie den aktuellen Status aller Relais erfragen. Relais die eine Authentifizierung besitzen können zur Zeit nicht geschalten werden - Feature: Pending.

Door

Ermöglicht das Öffnen und Schliessen der Tür mit dem eigenen Passwort. Das Passwort wird selbstverständlich nicht auf der Commandline ausgegeben und das Authentifizieren erfolgt über HTTPS.

Status

Zeigt den aktuellen Status der Open/Close API an. Dazu gehören die Anzahl der Member Devices, Member, unbekannte Geräte sowie die Nicknames der Mitglieder.

Ledboard

Dieses Tool stellt eine Schnittstelle zum LED Board dar. Hiermit lassen sich aktuell Textnachrichten an das Ledboard senden. Ein geplantes Feature ist die Anzeige von GIF-Animationen auf dem LED Board, welche einfach per Parameter angegeben werden.