Hallo,
ich habe eine LXC-Umgebung (root-Zugriff auf host und Container). Nun möchte ich dem Client ermöglichen auf dem Host bestimmte "Befehle" auszuführen, aber nicht direkt ausführen, sondern "aliased". Ich definiere also einen eigenen Befehl der vom Client akzeptiert wird und via Bash-Script in den richtigen umgesetzt wird.
z.b. der Client schickt "diskfree" und auf dem Host wird "df -h" ausgeführt und die Ausgabe soll direkt auf stdout des Client ausgegeben werden.
Der alias ist aus Sicherheitsgründen, damit der Client nicht alles mögliche dem Host schicken kann und dieser es ungeprüft ausführt
ich bilde mir ein sowas ähnliches mal mit Netcat gesehen zu haben, finde aber den Artikel oder Beispiele mit den eingeschränkten Befehlen nicht mehr
edit:
ich habe es teilweise so hinbekommen:
Host:
/usr/local/sbin/hostinfo.sh:
1 2 3 4 5 | #!/bin/bash while read line do echo "received $line" done |
netcat-server starten mit dem Script als "Shell":
1 | nc -v -l -p 7777 -e /usr/local/sbin/hostinfo.sh |
nun vom client etwas an den Server schicken:
1 2 | echo "test" | nc 10.0.3.1 7777 received test |
nun müsste nach der Ausgabe Schluss sein...
habe schon versucht, die Schleife wegzulassen (also nur "read line" statt while ... done), aber da wird der Server nach dem ersten Befehl beendet...
1 2 3 4 | :~$ echo "test" | nc 10.0.3.1 7777 received test :~$ echo "blah" | nc 10.0.3.1 7777 (UNKNOWN) [10.0.3.1] 7777 (?) : Connection refused |
außerdem bekomme ich noch einen häßlichen Fehler "10.0.3.10: inverse host lookup failed: Unknown host" ⇒ ip in /etc/hosts definiert...funktioniert erstmal.
bleibt noch das beenden-Problem...scheinbar muss ich die Schleife drinlassen, damit sich der Server nicht beendet...aber dann soll der Client nicht hängenbleiben
auch mit dem k-flag (damit soll nc eigentlich offen bleiben, nachdem der client disconnected ist) klappts nicht (server beendet sich):
1 | nc -k -lp 7777 -e /usr/local/sbin/hostinfo.sh |
die meisten Beispiele, die man si findet sind ohne -p...ohne -p funktioniert es bei mir aber nicht
1 | nc -k -l 7777 |
auf zweitem Terminal:
1 | netstat -tulpen | grep 7777 |
zeigt nichts an
Am nächsten komme ich damit (habe nur noch keine idee für eine Abbruchbedingung):
while true ; do nc -lp 7777 -e /usr/local/sbin/hostinfo.sh; done;
Gruß Frank