cnremctrl - Server fuer das Linux-Fernsteuerprogramm cnRemoteControl
cnremctrl [-st] [-l /path/logfile] [--cmd01=/path/cmd] [--cmd02=/path/cmd] ... [--cmd10=/path/cmd]
Dieses Programm ist der Empfaenger oder Server einer Fernsteuerung fuer Linux-Rechner. Der Sender bzw. Client der Fernsteuerung ist das Microsoft Windows-Programm cnRemoteControl.exe.
Das Client-Programm hat je nach Konfiguration zwischen 1 und 10 Buttons. Mit der Betaetigung eines Buttons, z.B . Button Nr. 3, sendet der Client via TCP/IP auf Port 26056 den String Button03 zum Linux-Rechner.
cnremctrl verwendet den weit verbreiteten TCP-Wrappper xinetd(8). xinetd ist an den cnremctrl-Port gebunden und wird aktiv, wenn dort ein Paket eintrifft. Er ueberprueft anhand der IP-Adresse des Absenders, ob dieser berechtigt ist cnremctrl zu nutzen. Falls ja, wird der String Button03 an stdin von cnremctrl weitergeleitet.
cnremctrl ueberprueft daraufhin, ob das Kommando Nr. 3 konfiguriert ist und fuehrt es, falls vorhanden, per Systemaufruf aus. Alle stdout-Ausgaben und der Rueckgabewert des Kommandos werden von cnremctrl aufgezeichnet und zurueck zum Client gesandt. Dieser zeigt diese Informationen in einem log-Fenster an.
Konfiguration
Alle Programm-Einstellungen werden in /etc/xinetd.d/cnremctrl vorgenommen. Wenn der Daemon xinetd gestartet wird, parst er alle Dateien im Verzeichnis /etc/xinetd.d/ und bindet sich anhand der dort vorgefundenen Einstellungen an die entsprechenden Netzwerkports. Das Default-File fuer cnremctrl ist:
service cnremctrl { type = UNLISTED port = 26056 socket_type = stream protocol = tcp user = root server = /usr/local/bin/cnremctrl server_args = -s --cmd01=/path/to/command1 --cmd02=/command2%20-para wait = no instances = 1 per_source = 1 only_from = 1.2.3.4 1.2.3.5 192.168.0.0/24 log_type = SYSLOG daemon log_on_success = PID HOST EXIT DURATION log_on_failure = HOST ATTEMPT }
Ueblicherweise sind nur folgende Parameter anzupassen:
xinetd ist gut dokumentiert in der man-page xinetd(8).
Hinweis: Nach dem Aendern der Konfiguration muss xinetd das Konfigurationsverzeichnis neu einlesen, damit die Aenderungen wirksam werden! Unter Red Hat lautet das entsprechende Kommando /etc/rc.d/init.d/xinted reload und unter SuSE rcxinetd reload. Nach dem Reload sollte man auf xinetd-Fehlermeldungen auf der Konsole oder im System-Log achten. Wenn eine Konfigurationsdatei Fehler enthaelt, startet xinetd nicht.
Leerzeichen im Kommando-String
Falls ein Kommando Leerzeichen enthaelt, wie zum Beispiel ls -al, muessen diese durch %20 ersetzt werden. Der Aufruf lautet damit --cmdXY=ls%20-al.
Grund: xinetd interpretiert beim Parsen der Zeile server_args das Leerzeichen als Trennzeichen. Um die resultierende Aufsplittung von Kommandos mit Leerzeichen zu vermeiden, wuerde man ueblicherweise das Kommando durch Anfuehrungsstriche einschliessen (quoting). Das funktioniert bei xinetd nicht, so dass die Leerzeichenersetzung durchgefuehrt werden muss.
Sicherheit
Der Client sendet nur Strings wie ButtonXY zum Server. Es werden keine direkten Server-Kommandos zum Server geschickt, so dass auf diesem Wege keine Kommandos eingeschleust werden koennen.
Trotzdem sollte man von cnremctrl nur unkritische Kommandos ausfuehren lassen. Ausserdem sollte man den Zugriff auf vertrauenswuerdige IP-Adressen beschraenken (Parameter only_from). Gefaehrlich wird es, wenn man --cmd01=/bin/rm%20-rf%20/ und only_from = 0.0.0.0/32 konfiguriert und damit jedem erlaubt, den Server ins Nirwana zu schicken ;)
cnremctrl hinter einer Firewall
Wenn der Rechner mit iptables(8) geschuetzt wird, muessen zwei Regeln installiert werden, damit cnremctrl funktioniert. Beispiel:
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp --dport 26056 -j ACCEPT iptables -A OUTPUT -o eth0 -d 192.168.0.0/24 -p tcp --sport 26056 -j ACCEPT
(...)
/usr/local/bin/cnremctrl
/etc/xinetd.d/cnremctrl
/usr/share/man/de/man1/cnremctrl.1.gz
cnremctrl wird ueblicherweise von xinetd aufgerufen.
Zu Testzwecken kann cnremctrl auf der Kommandozeile gestartet werden. Beispiel:
cnremctrl -t --cmd01=ls%20-al Button01Es sollte folgende Ausgabe erscheinen:
Testmode: System command "ls -al" not executed
Copyright (c) 2020 Christian Nause-Müller. Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veroeffentlicht, weitergeben und/oder modifizieren, entweder gemaess Version 2 der Lizenz oder (nach Ihrer Option) jeder spaeteren Version.
Written by Christian Nause-Müller <cn at cntec dot de>
Die neueste Programm-Version, der Windows-Client cnRemoteControl.exe und weitere Informationen sind zu finden unter: https://sourceforge.net/projects/cnremctrl