SMB3

Jhue89

Bekanntes Mitglied
Hallo Zusammen,

ich hatte gerade eine kleine Diskussion bezüglich SMB1-3 und wollt mal eure Meinung dazu wissen.

SMB 1 und 2 weisen ja anscheinend große Sicherheitslücken auf, weshalb das in vielen Unternehmen gesperrt ist.
Also würde ja eigentlich nur noch SMB 3 infage kommen.
Aber SMB 3 ist doch nur noch mit einer Lizensierungspflichtigen Java Version möglich oder bin ich da falsch informiert?
Gibt es neben SMB noch andere möglichkeiten auf Netzwerk Ordner zuzugreifen?

Mir fällt da nur noch FTP / sFTP ein. Aber das hat ja auch seine Tücken.
 
K

kneitzel

Gast
Du bildest SMB doch nicht in Java ab sondern greifst auf die Möglichkeiten des Systems zurück. Daher hat das mit Java erst einmal nichts zu tun. Du greifst einfach auf \\server\share\... zu und die Kommunikation macht dann das System.

Zumal da ja auch sehr viel dazu kommt wie die Authentifizierung was in der Regel in Unternehmen über das System erfolgt. Du meldest Dich einmal mit dem System an und die Anmeldung gilt dann auch weiter.

Wobei das so natürlich auch Windows Spezifisch ist. Das wird relativ komplex mit Linux / Mac. Da kann man zwar mittels Kerberos sich anmelden, aber das Ticket muss man dann entsprechend für weitere Dinge nutzen ...

Edit: Ok, wenn es da noch eine eigene Java Implementierung sein soll wie von @LimDul beschrieben.
 

Jhue89

Bekanntes Mitglied
Du bildest SMB doch nicht in Java ab sondern greifst auf die Möglichkeiten des Systems zurück. Daher hat das mit Java erst einmal nichts zu tun. Du greifst einfach auf \\server\share\... zu und die Kommunikation macht dann das System.

Zumal da ja auch sehr viel dazu kommt wie die Authentifizierung was in der Regel in Unternehmen über das System erfolgt. Du meldest Dich einmal mit dem System an und die Anmeldung gilt dann auch weiter.

Wobei das so natürlich auch Windows Spezifisch ist. Das wird relativ komplex mit Linux / Mac. Da kann man zwar mittels Kerberos sich anmelden, aber das Ticket muss man dann entsprechend für weitere Dinge nutzen ...

Edit: Ok, wenn es da noch eine eigene Java Implementierung sein soll wie von @LimDul beschrieben.
Genau, das macht das System aber die benötigte lib. wird doch auch von Java bereit gestellt. Natürlich kann ich auch auf eine Open source lib. zurückgreifen. Aber so wie ich das mal gelesen habe will Oracel doch lizensgebüren für eine Kommerzielle Nutzung haben. Oder bin ich da falsch informiert?

Desweiteren sagte mir mal ein Android Programmierer das die meisten Opensource libs. sehr windows lastig sind womit er dann Probleme hat.
 

sascha-sphw

Top Contributor
Aber so wie ich das mal gelesen habe will Oracel doch lizensgebüren für eine Kommerzielle Nutzung haben. Oder bin ich da falsch informiert?
Oracle wollte das, richtig. Dann einfach nicht die Runtime von Oracle nehmen sondern eine alternative wie z. B. https://adoptopenjdk.net/. Gibt aber auch noch viele andere.

Desweiteren sagte mir mal ein Android Programmierer das die meisten Opensource libs. sehr windows lastig sind womit er dann Probleme hat.
Vermutlich hatte er da Probleme weil nicht alles was für den Desktop gut ist auch für Android gut ist. Hat aber mMn nichts mit Windows speziell zu tun. Wenn eine Open Source Lib in Java nicht Plattformunabhängig ist, würde ich die ohnehin nicht verwenden.
 
K

kneitzel

Gast
Genau, das macht das System aber die benötigte lib. wird doch auch von Java bereit gestellt.
Die Frage ist, was genau Du machen willst. Unter Windows funktioniert z.B. ein Zugriff auf Netzwerk-Ressourcen Problemlos auch über UNC Pfade. Da ist also gar nichts zu machen oder irgend etwas spezielles zu beachten. Der Java Prozess öffnet die angegebene Datei und dabei wird der Name halt im UNC Format angegeben. Das geht also an eine entsprechende Methode des Systems (z.B. fopen) und da ist das System verantwortlich.

Java:
    public static void main(String[] args) throws Exception {
        FileInputStream inputStream = new FileInputStream("\\\\server\\share\\some\\path\\file");
        System.out.write(inputStream.readAllBytes());
    }

Der Code hier zeigt aber: Das funktioniert nur dann, wenn ich auf einem System angemeldet bin das dann eben diesen Pfad öffnen kann. Das geht also wohl nur unter Windows und nur, wenn man da vom System die Berechtigungen hat.

Das lässt sich dann auch testen. Ein
copy \\server\share\some\path\file .
muss in der Eingabeaufforderung dann auch klappen.

Die Verantwortung, dass Ressourcen erreichbar sind, sind damit außerhalb Deiner Verantwortung. Das ist aus meiner Sicht auch sehr wichtig. Du willst die Verantwortung doch gar nicht haben! Was für Libraries willst Du einbinden? Das ist hoch dubios! Wenn ich da schaue, was es so gibt, dann frage ich mich, wie es da um die Sicherheit bestellt ist. Und willst Du Dir den Schuh anziehen?
Also lass dass doch den Firmen (um die geht es vermutlich). Die dürfen dann für Windows die aktuellen Patche einspielen. Wenn Systeme kein Windows sind, dann dürfen die da Ersatz finden (samba client, mac OS internes, was auch immer ...Dürfen die frei suchen und nutzen! Davon würde ich - so möglich - meine Finger lassen. Wenn Dein Produkt unabhängig ist, dann ist die ganze Security Debatte schon an Dir vorbei gegangen. Und den Schuh hat jemand anderes an!)

Ob die Anforderungen dies zulassen, weiss ich nicht. Evtl. sind Anforderungen da, dass es direkt funktionieren muss ohne dass ein Laufwerk gemappt wird, ohne dass der User Zugriff bekommt über ein geheimen User/Passwort mit dem die App sich verbindet oder so .. Ich habe da schon viel erlebt. Wenn die Anforderung da ist, dann hast Du evtl. keine Wahl. Aber ich würde da sowas halt vermeiden, wenn es irgendwie geht.

Hat den Vorteil, dass es Dir egal ist, wo die Datei wie liegt. Das kann ein UNC Pfad sein oder auch nicht. Dann ist das halt das Z: Laufwerk oder es ist auf einem Unix-System unter /mnt/blabla eingebunden oder oder oder ...

Ich hoffe, meine Sichtweise ist Deutlich geworden. Da geht es um die Vermeidung von unnötigen Komplexitäten.
 

Jhue89

Bekanntes Mitglied
Die Frage ist, was genau Du machen willst. Unter Windows funktioniert z.B. ein Zugriff auf Netzwerk-Ressourcen Problemlos auch über UNC Pfade. Da ist also gar nichts zu machen oder irgend etwas spezielles zu beachten. Der Java Prozess öffnet die angegebene Datei und dabei wird der Name halt im UNC Format angegeben. Das geht also an eine entsprechende Methode des Systems (z.B. fopen) und da ist das System verantwortlich.

Java:
    public static void main(String[] args) throws Exception {
        FileInputStream inputStream = new FileInputStream("\\\\server\\share\\some\\path\\file");
        System.out.write(inputStream.readAllBytes());
    }

Der Code hier zeigt aber: Das funktioniert nur dann, wenn ich auf einem System angemeldet bin das dann eben diesen Pfad öffnen kann. Das geht also wohl nur unter Windows und nur, wenn man da vom System die Berechtigungen hat.

Das lässt sich dann auch testen. Ein
copy \\server\share\some\path\file .
muss in der Eingabeaufforderung dann auch klappen.

Die Verantwortung, dass Ressourcen erreichbar sind, sind damit außerhalb Deiner Verantwortung. Das ist aus meiner Sicht auch sehr wichtig. Du willst die Verantwortung doch gar nicht haben! Was für Libraries willst Du einbinden? Das ist hoch dubios! Wenn ich da schaue, was es so gibt, dann frage ich mich, wie es da um die Sicherheit bestellt ist. Und willst Du Dir den Schuh anziehen?
Also lass dass doch den Firmen (um die geht es vermutlich). Die dürfen dann für Windows die aktuellen Patche einspielen. Wenn Systeme kein Windows sind, dann dürfen die da Ersatz finden (samba client, mac OS internes, was auch immer ...Dürfen die frei suchen und nutzen! Davon würde ich - so möglich - meine Finger lassen. Wenn Dein Produkt unabhängig ist, dann ist die ganze Security Debatte schon an Dir vorbei gegangen. Und den Schuh hat jemand anderes an!)

Ob die Anforderungen dies zulassen, weiss ich nicht. Evtl. sind Anforderungen da, dass es direkt funktionieren muss ohne dass ein Laufwerk gemappt wird, ohne dass der User Zugriff bekommt über ein geheimen User/Passwort mit dem die App sich verbindet oder so .. Ich habe da schon viel erlebt. Wenn die Anforderung da ist, dann hast Du evtl. keine Wahl. Aber ich würde da sowas halt vermeiden, wenn es irgendwie geht.

Hat den Vorteil, dass es Dir egal ist, wo die Datei wie liegt. Das kann ein UNC Pfad sein oder auch nicht. Dann ist das halt das Z: Laufwerk oder es ist auf einem Unix-System unter /mnt/blabla eingebunden oder oder oder ...

Ich hoffe, meine Sichtweise ist Deutlich geworden. Da geht es um die Vermeidung von unnötigen Komplexitäten.
Ich muss sagen du hast mir da an einigen stellen schon die Augen geöffnet.
Also wäre der sicherste Weg um auf einen Netzwerkordner zuzugreifen. Ein Netzlaufwerk anzulegen und dann ohne schnick schnack die benötigenten Dateien über einen FileInputStream zu lesen / zu schreiben.
 

Neue Themen


Oben