Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Von einem C# Programm aus einen Linux Rechner steuern
Christoph K.
myCSharp.de - Member

Avatar #avatar-3248.png


Dabei seit:
Beiträge: 817
Herkunft: Köln

Themenstarter:

Von einem C# Programm aus einen Linux Rechner steuern

beantworten | zitieren | melden

Hallo zusammen,

ich möchte gerne von einem C# Programm aus einen Befehl an einen Linux Rechner absenden. Zusätzlich müsste dieser Befehl auch Binärdaten (Bilddateien) mitbekommen und das ganze sollte am besten über eine IP-Verbindung übertragen werden.
Im Endeffekt suche ich ein vorgefertigtes Framework, welches z.B. einen HTTP-Endpunkt bereitstellt, der Daten entgegennimmt und diese Daten in einen Shell -Befehl umwandelt.
Bevor ich anfange, das selber zu programmieren, wollte ich mal fragen, ob es hierfür nicht schon irgendwas Fertiges gibt?

VG
Christoph
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.879
Herkunft: Düsseldorf

beantworten | zitieren | melden

ASP.NET

Ein Programm, dass eine HTTP-Nachricht direkt in einer Shell ausführt, wäre allerdings ein krasses Sicherheitsrisiko.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 235

beantworten | zitieren | melden

Zitat von Palladin007
Ein Programm, dass eine HTTP-Nachricht direkt in einer Shell ausführt, wäre allerdings ein krasses Sicherheitsrisiko.

Ein Sicherheitsrisiko ist es nur, wenn der HTTP(S)-Endpunkt nicht entsprechend abgesichert ist.

Aber muss es HTTP sein oder warum nicht einfach SSH?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.812
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

SSH ist dafür gedacht. Skript ausführen :


string host = "...";
string cmd = "tar -cvzpf /home/backup/" + dir + @"_$(date +\%F_\%H\%M\%S).tar.gz www/" + dir + "/";
ConnectionInfo info = new ConnectionInfo(host, 22, "...", new AuthenticationMethod[] { new PasswordAuthenticationMethod("...", "...") });
SshClient client = new SshClient(info);
try
{
	client.Connect();
	Thread.Sleep(1000);
	while (!client.IsConnected) { }
	var result = client.RunCommand(cmd);
}
catch (Exception ex)
{
	Error("Fehler beim Verbinden mit der SSH Shell :\r\n\r\n" + ex.Message);
}
client.Disconnect();
client.Dispose();

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.312

beantworten | zitieren | melden

Zitat von dannoe
Ein Sicherheitsrisiko ist es nur, wenn der HTTP(S)-Endpunkt nicht entsprechend abgesichert ist.
Allein die Evaluierung eines solchen Commands aus egal welchem Kontext ist ein krasses Sicherheitsrisiko für das gesamte System.
HTTPS hilft Dir hier nur teilweise, allein aufgrund von SSL-Interception, das immer ein Risiko bei HTTPS ist.

Daher arbeiten fertige Tools hier auch mit einer Allow List vom Commands.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 235

beantworten | zitieren | melden

Mit "abgesichert" meinte ich nicht nur das Konfigurieren und Benutzen von SSL, sondern eher dass der Sender des Befehls auch entsprechend authentifiziert und autorisiert ist. Was von Serverseite geprüft werden muss.

Wenn man es abstrakt sieht, dann ist HTTP(S) auch nur ein Protokoll wie SSH. Jeder SSH Daemon führt dir nach entsprechender Authentifizierung und Autorisierung jegliche Befehle auf dem System aus.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.312

beantworten | zitieren | melden

Zitat von dannoe
Wenn man es abstrakt sieht, dann ist HTTP(S) auch nur ein Protokoll wie SSH. Jeder SSH Daemon führt dir nach entsprechender Authentifizierung und Autorisierung jegliche Befehle auf dem System aus.
Technisch ja, Implementierung nein.
HTTPS steht ja für HTTP over SSL mit dem Unterschied, dass HTTP Clients (auch Browser) einfach jedes Zertifikat annehmen. HTTPS steht nur dafür, dass die Verbindung prinzipiell mal verschlüsselt ist. Daher ist HTTPS ohne Certificate Pinning (Standardverhalten) auch anfällig für SSL Interception.
Reine SSH Clients validieren aber das Zertifikat, was im Resultat also sicherer gegen SSL Interception ist.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.879
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat von dannoe
sondern eher dass der Sender des Befehls auch entsprechend authentifiziert und autorisiert ist

Es bleibt dennoch ein enormes Sicherheitsrisiko.
Wie stellst Du sicher, dass der Sender nicht unter fremder Kontrolle steht?

Du solltest immer darauf achten, dass dein Server abgesichert ist und wenn Du einer externen Instanz erlaubst, beliebigen Code auszuführen, öffnest Du Tür und Tor für Angreifer.
Besser wäre es, wenn man die konkreten Anwendungsfälle mit entsprechenden Parametern in genau dem Rahmen implementiert, den man braucht, nicht mehr, nicht weniger.
Wenn der Sender dann unter fremder Kontrolle steht, kann der zwar unerlaubt auf die API zugreifen, aber auf dem Server hat er maximal den Einfluss, den die implementierten Funktionen erlauben.

Lässt Du stattdessen frei Zugriff auf die Shell zu, könnte der Angreifer absolut alles machen.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.312

beantworten | zitieren | melden

Zitat von Palladin007
Wie stellst Du sicher, dass der Sender nicht unter fremder Kontrolle steht?
Das haste aber bei jeder Remote Technologie. Der Unterschied ist, dass es bewährte, sicherere Methoden dazu gibt.
Ein heimisches Learning-by-Doing Projekt gehört aber leider nicht zu ebengleichen.

Daher sollte man wirklich was fertiges nehmen, was natürlich auch ein entsprechendes SDK sein kann.
Aber Googlen/auf GitHub suchen kann Christoph K. auch allein ;-)
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.879
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat von Abt
Das haste aber bei jeder Remote Technologie
Natürlich, deshalb sollte der Sender ja auch nicht mehr machen können, als er braucht.
Also kein Shell-Zugriff, sondern nur passgenau definierte Funktionen, die gar keinen Spielraum bieten.
private Nachricht | Beiträge des Benutzers