cnRemoteControl Dokumentation

Christian Nause, cnremctrl at cntec dot de

v0.1.0, 28.03.2004


cnRemoteControl ist ein Client-Server-Projekt zur Fernsteuerung eines Linux-Rechners von einem Windows-PC.

Viele Linux-User sind faul. Ich auch. Daher habe ich schon lange nach einer Möglichkeit gesucht, meinen Linux-Server per Fernbedienung zu überwachen und zu steuern. Vielen geht es vielleicht ähnlich: Da steht die Linux-Kiste irgendwo im dunklen Server-Raum und verrichtet brav ihre Dienste. Ich arbeite zu vielleicht 90 % meiner Zeit an einem Windows-PC (gezwungenermaßen). Will man nur mal schnell ein Kommando auf dem Linuxrechner absetzen, startet man Telnet oder SSH, loggt sich ein, setzt das Kommando ab, loggt sich wieder aus und beendet die Shell. Das finde ich lästig.

Mit cnRemoteControl bediene ich den Linux-Rechner bequem per Klickibunti-Programm :) Vielleicht kann die/der eine oder andere ja auch was damit anfangen.

1. Einleitung

2. Installation und Bedienung


1. Einleitung

1.1 Wie funktioniert cnRemoteControl?

Das Prinzip ist einfach: Es gibt den Client, das Windows-Programm cnRemoteControl.exe und die Linux-Server-Applikation cnremctrl. Eigentlich ist cnremctrl gar kein Server-Programm, da das Netzwerk- und Daemon-Handling von xinetd übernommen wird, einem sogenannten TCP-Wrapper. Ich nenne cnremctrl der Einfachheit halber Server. Klickt man auf dem Client Button 3, wird das Kommando Button 3 gedrückt per TCP/IP zum Linuxrechner geschickt. Dort wacht xinetd über eine Menge von Portanfragen, unter anderem auch auf dem Port von cnRemoteControl. Trifft das TCP-Paket Button 3 gedrückt ein, wird xinetd aktiv und schaut nach, ob die Absender-IP-Adresse autorisiert ist, mit dem Server zu kommunizieren. Falls ja, leitet xinetd das Kommando weiter. cnremctrl überprüft nun, ob ein Kommando 3 konfiguriert ist und führt es, falls dies der Fall ist, per Systemaufruf aus. Alle Ausgaben werden zurück zum Client geschickt und dort angezeigt. Voilà.


1.2 Woher bekomme ich cnRemoteControl?

Wenn Du es nicht schon hast, schau mal hier auf meiner Sourceforge-Website: https://sourceforge.net/projects/cnremctrl. Ich empfehle den Download des Client-Binary-Archivs cnremotecontrol-*.zip und des Server-RPMs cnremctrl-*.i386.rpm. Damit funktioniert die Installation am schnellsten.

Das Server-RPM wurde erstellt unter RedHat 9. Wer mag, kann RPMs oder APTs für andere Distributionen erstellen, die ich gerne veröffentliche. Nimm dazu einfach Kontakt mit mir auf: cnremctrl at cntec dot de.

Hinweis: Diese Programme sind urheberrechtlich geschützt. Das Copyright liegt bei Christian Nause. Die Programme sind freie Software. Sie dürfen unter den Bedingungen der GNU General Public License benutzt, weitergeben und/oder modifiziert werden, entweder gemäß Version 2 der Lizenz oder jeder späteren Version. Eine Kopie der Lizenz ist hier zu finden: http://www.gnu.org/copyleft/gpl.html.


1.3 Weitere Infos

  • Sourceforge-Projekt-Website
  • Manpage cnremctrl(1) für das Server-Programm
  • Englische Dokumentation cnRemoteControl
  • xinetd-Homepage
  • Artikel im LinuxFocus zu xinetd

  • 1.4 Copyright

    Dieses Dokument ist urheberrechtlich geschützt. Das Copyright liegt bei Christian Nause. Das Dokument darf gemäß der GNU Free Documentation License, Version 1.2 oder höher, verbreitet werden. Insbesondere bedeutet dieses, daß der Text sowohl über elektronische wie auch physikalische Medien ohne die Zahlung von Lizenzgebühren verbreitet werden darf, solange dieser Copyright-Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt und ausdrücklich erwünscht. Bei einer Publikation in Papierform ist der Autor hierüber zu informieren und ein unentgeltliche Kopie der Publikation an den Autor zu senden. Eine Kopie der Lizenz ist hier zu finden: http://www.gnu.org/copyleft/fdl.html.


    1.5 Haftungsausschluß

    Der Autor erklärt sich nicht verantwortlich für irgendwelche Probleme, die direkt oder indirekt aus der Benutzung dieses Dokumentes und/oder der Programme cnRemoteControl.exe und cnremctrl resultieren. Kommentare und Fragen können unter der Adresse cnremctrl at cntec dot de direkt an den Autor gerichtet werden.


    1.6 Kontakt

    Kommentare und Fragen sind willkommen! Ich bin unter der Adresse cnremctrl at cntec dot de zu erreichen.


    1.7 Wie geht's weiter?

    Hhm, ich habe noch eine Menge Ideen. Die einfache Umschaltung zwischen verschiedenen Bediensprachen ist geplant. Auch eine Verwaltung von mehreren Rechnern über Karteikarten-Dialoge wäre prima. Ein KDE-, Gnome-, TCL- und DOS-Client ist angedacht. Mal sehen, wieviel Zeit ich erübrigen kann. Vielleicht hat jemand Lust mitzuprogrammieren - ich freue mich über Rückmeldungen.


    2. Installation und Bedienung

    Die Installation ist einfach. Der Client besteht aus drei Dateien, so dass auf ein Setup-Programm verzichtet werden kann. Alle notwendigen Einstellungen werden windowsüblich in einem Options-Dialog vorgenommen.
    Der Server ist als Binary-RPM, als Source-RPM und als tar-Archiv verfügbar. Es muss nach der Installation nur eine Konfigurationsdatei angepaßt werden.

    Die Bedienungsanleitung ist überschaubar: Button des gewünschten Kommandos klicken und die Kommando-Ausgabe im log-Fenster anschauen. That's it.


    2.1 Client

    Der Client ist getestet unter Windows 98, 2000, NT und XP. Da er nur Standard-Windows-API-Aufrufe benutzt, läuft er vermutlich unter jedem Windows mit installierter Winsock.

    Nach dem Entpacken des Binary-Archives cnremotecontrol-*.zip erhält man diese Dateien:

  • cnRemoteControl\cnRemoteControl.exe (Programm)
  • cnRemoteControl\cnRemoteControl.ini (Einstellungen)
  • cnRemoteControl\doc\cnRemoteControl.html (Diese Hilfedatei)
  • cnRemoteControl\doc\cnremctrl-man-de.html (Manpage cnremctrl)
  • cnRemoteControl\doc\images (Einige Snapshots)
  • Das Verzeichnis cnRemoteControl verschiebt man in ein Verzeichnis nach Wahl, zum Beispiel nach c:\programme. Am besten legt man noch einen Eintrag in der Taskleiste an, in dem man per drag and drop von c:\programme\cnRemoteControl\cnRemoteControl.exe eine Verknüpfung auf die Taskleiste zieht (Abb. 1).

    Verknüpfung in der Taskleiste
    Abb. 1: cnRemoteControl in der Taskleiste

    Abb. 2 zeigt das gestartete cnRemoteControl, bei dem Button 3 uptime gedrückt wurde.

    cnRemoteControl - Hauptdialog
    Abb.2: Hauptfenster

    Als nächstes muß cnRemoteControl konfiguriert werden. Dazu öffnet man den Dialog Options unter File - Options (Abb. 3).

    cnRemoteControl - Optionen
    Abb.3: Optionen

    Unter IP-Addr. or Name wird die IP-Adresse oder der Hostname des Linuxrechners eingetragen. Wird ein Hostname eingetragen, versucht cnRemoteControl die IP-Adresse per DNS zu ermitteln. Schlägt dies fehl, wird eine Fehlermeldung ausgegeben. In diesem Fall sollte man die Namensauflösung des Windows-Rechners überprüfen (siehe Datei hosts) oder einfach die IP-Adresse verwenden.

    Der Port ist der TCP/IP-Port des Servers cnremctrl. Voreingestellt ist 26056, es kann aber auch jeder andere (freie) Port verwendet werden. In diesem Fall muß das Serverprogramm entsprechend umkonfiguriert werden (Parameter port in /etc/xinetd.d/cnremctrl).

    Mit Timeout wird die Zeitspanne in Millisekunden festgelegt, in der vom Server eine Antwort erwartet wird. Trifft der Antwortstring nach Ablauf der Zeit nicht ein, erscheint eine Fehlermeldung (Abb. 4) und die Netzwerkverbindung wird beendet. Zulässige Werte liegen zwischen 0 und 20000 ms.

    cnRemoteControl - Timeout-Meldung
    Abb. 4: Timeout-Fehlermeldung

    In der Einleitung wird das Prinzip von cnRemoteControl schon skizziert: Klickt der Benutzer einen Button, wird keinesfalls ein Linuxkommando versendet, sondern lediglich ein String. Drückt der Benutzer z.B. Button 3, wird der String Button03 versandt. Damit der User weiß, welches Kommando mit welchem Button verknüpft ist, können die Buttons entsprechend beschriftet werden. Dazu trägt man unter Buttons die entsprechenden Texte ein.
    Dem aufmerksamen Leser ist es vielleicht schon aufgefallen: In Abb. 3 sind die Buttontexte mit dem Zeichen & versehen. Dies ist eine Markierung für Tastaturshortcuts. Über das dem & folgende Zeichen kann das Kommando auch per Tastendruck abgesetzt werden. Die Shortcuts sind im Hauptfenster durch die im Buttontext unterstrichenen Buchstaben erkenntlich.

    Mit der Checkbox Active können Buttons aktiviert und deaktiviert werden.

    Sec. steht für Security-Abfrage. Ist diese Box aktiviert, erscheint nach dem Klicken des entsprechenden Buttons eine Messagebox, in der das Kommando bestätigt werden muß oder abgebrochen werden kann (Abb. 5). Auf diese Weise werden versehentlich gestartete kritische Kommandos wie z.B. shutdown abgefangen.

    cnRemoteControl - Sicherheitsabfrage
    Abb. 5: Security-Abfrage

    Damit ist die Installation des Clients beendet und man kann sich der Serverinstallation widmen.


    2.2 Server

    Das Serverprogramm wurde getestet unter RedHat 7 und 9. Ich bin zuversichtlich, dass cnremctrl unter allen gängigen Linux-Distributionen, die auch xinetd unterstützen, gut funktioniert.

    Die Applikation besteht aus drei Dateien:

  • /usr/local/bin/cnremctrl (Programm)
  • /etc/xinet.d/cnremctrl (Einstellungen)
  • /usr/share/man/de/man1/cnremctrl.1.gz (deutsche Manpage)

  •     oder
  • /usr/share/man/man1/cnremctrl.1.gz (englische Manpage)
  • 2.2.1 Installation per RPM

    Die Installation ist einfach: rpm überprüft, ob xinetd >= 2.3 und popt >= 1.6 installiert sind. Ist dies nicht der Fall, ist jetzt der richtige Zeitpunkt dafür das nachzuholen. Über www.rpmfind.net sind die Pakete xinetd und popt schnell gefunden.

    Mit rpm -ivh cnremctrl-*.i386.rpm wird das Programm installiert. Handelt es sich um eine deutsche Linux-Installation, wird die deutsche Manpage installiert, andernfalls die englische.

    Anschließend ist die Konfigurationsdatei /etc/xinetd.d/cnremctrl anzupassen:

    # description: remote control server application
    # Christian Nause, March 25, 2004
    #
    # Please note space workaround!
    # If a command contains one or more spaces, e.g. "ls -al", you have to replace
    # every space with "%20", so the correct commandstring runs "--cmdXY=ls%20-al".
    
    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
    }
    
    Unter server_args sind die Kommandos einzutragen, die cnremctrl ausführen soll. Beispiel: Mit --cmd01=/path/to/command1 wird beim Klicken von Button 1 das Programm oder Skript /path/to/command1 gestartet.

    Zu beachten ist, dass alle Parameter unter server_args in einer Zeile stehen müssen. Es dürfen dort keine Zeilenumbrüche oder Backslashes \ stehen.

    Falls ein Kommando Leerzeichen enthält, wie zum Beispiel shutdown -h now, müssen diese durch %20 ersetzt werden. Der Aufruf lautet damit z.Bsp. --cmd05=shutdown%20-h%20now.
    Grund: xinetd interpretiert beim Parsen der Zeile server_args das Leerzeichen als Trennzeichen. Um die resultierende Aufsplittung von Kommandos mit Leerzeichen zu vermeiden, würde man üblicherweise das Kommando durch Anführungsstriche einschliessen (quoting). Das funktioniert bei xinetd nicht, so dass die Leerzeichenersetzung notwendig ist.

    Beim Parameter server_args kann außerdem eingestellt werden, ob und wie beim Aufruf von cnremctrl mitgeloggt werden soll. Mit --syslog wird jeder Aufruf im Systemlog mitgeschrieben und mit --logfile=/logfilepath wird eine separate Logdatei verwendet.

    Bei only_from sind alle IP-Adressen oder Subnetze in CIDR-Notation einzutragen, von denen cnremctrl "Aufträge" entgegennehmen darf. Beispiel: Mit only_from = 1.2.3.4 1.2.3.5 192.168.0.0/24 akzeptiert xinetd nur Anfragen von den IP-Adressen 1.2.3.4, 1.2.3.5 und aus dem Subnetz 192.168.0.1...192.168.0.254.

    Alle anderen Parameter brauchen nicht angepaßt zu werden. Weitere Infos zu den xinetd-Parametern sind auf der xinetd-Homepage oder in diesem Artikel im LinuxFocus zu finden.

    Hinweis: Nach dem Ändern der Konfiguration muss xinetd das Konfigurationsverzeichnis neu einlesen, damit die Änderungen 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 enthält, startet entweder xinetd nicht oder cnremctrl wird nicht aufgerufen. Falls xinetd nicht mehr startet, sind auch alle anderen Dienste die xinetd zur Verfügung stellt lahm gelegt!

    Wenn der Linuxrechner mit iptables geschützt wird, müssen 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
    

    Damit ist die Installation beendet und cnRemoteControl kann getestet werden. Mit dem Klicken eines Buttons beim Client sollte keine Fehlermeldung erfolgen und das entsprechende Kommando sollte auf dem Linuxrechner ausgeführt werden. Mit den angesprochenen Logging-Funktionen kann man evtl. auftretenden Fehlern schnell auf die Spur kommen. Weitere Infos zu cnremctrl sind der Manpage zu entnehmen.

    2.2.2 Compilieren und Installation vom Source-Archiv

    cnremctrl benötigt die Library popt, die - falls nicht auf dem System vorhanden - zuvor installiert werden muß.

    Als nächstes wird aus dem Source-Archiv cnremctrl-*.src.rpm oder cnremctrl-*.tgz mit rpm -ivh cnremctrl-*.src.rpm oder tar xzf cnremctrl-*.tgz ein Verzeichnis cnremctrl-*/ erzeugt, in dem sich die Quelldateien befinden. Mit dem üblichen make und make install werden die Quellen compiliert und installiert. Falls der Compiler die Warnung passing arg 3 of `poptGetContext' from incompatible pointer type ausgibt, ist dies harmlos und zu ignorieren. Das Thema wird im Internet in einigen Foren diskutiert.

    make install installiert das Programm (/usr/local/bin/cnremctrl) und die Konfigurationsdatei (/etc/xinet.d/cnremctrl). Die Manpage cnremctrl-de.1.gz (deutsch) bzw. cnremctrl-en.1.gz (englisch) muß von Hand installiert werden. Dazu benennt man sie um in cnremctrl.1.gz und kopiert sie in das man1-Verzeichnis. Mit /usr/bin/manpath kann bei Unklarheiten das richtige Verzeichnis ermittelt werden.

    Alle weiteren notwendigen Schritte sind in Kapitel 2.2.1 beschrieben.


    2.3 Sicherheit

    Das Thema Sicherheit darf nicht unerwähnt bleiben. Der Client versendet, wie schon erwähnt, nur Strings wie ButtonXY. Es werden keine ausführbaren Kommandos zum Server geschickt, so dass auf diesem Wege keine Befehle eingeschleust werden können.

    Hinweis: cnremctrl läuft als root, damit alle Kommandos ohne Einschränkung ausgeführt werden können. Es liegt in der Verantwortung des Administrators, keine sicherheitskritischen Einstellungen zu konfigurieren!

    Daher sollte man den Zugriff auf vertrauenswürdige IP-Adressen beschränken (Parameter only_from) und nur unkritische Kommandos fernbedienen. Gefährlich wird es, wenn man - Achtung: Scherz, nicht nachmachen! - --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...

    Hinweise auf evtl. vorhandene Sicherheitslücken sind erwünscht! Der geneigte Anwender sollte gelegentlich auf dieser Website (https://sourceforge.net/projects/cnremctrl) nachschauen, ob es Updates zu cnRemoteControl gibt.


    Top