beidermachtvongreyscull
Goto Top

Ich benötige Anregungen zur Entwicklung und Umsetzung eines Konzepts für einen Server zur Dateibereitstellung im I-Net

Guten Tag Kollegen,

ich habe folgendes Problem:

  • Per Verordnung müssen wir unseren Kommunikationspartnern eine Dateibereitstellungsplattform anbieten.
  • Die Plattform muss zwei Klassen von Dateien vorgangsbezogen anbieten:
    • pro Kommunikationspartner eines Vorgangs (Zugriff nur für den einzelnen Kommunikationspartner)
    • für alle Kommunikationspartner eines Vorgangs (Zugriff für alle, die in den Vorgang involviert sind)
  • Pro Vorgang können mehrere tausend Kommunikationspartner vorkommen
  • Anonymisierung ist erforderlich im Zuge der DSGVO. Die Kommunikationspartner dürfen sich auf dieser Plattform nicht erkennen.

Stand der Dinge

Wir verwenden eine Verwaltungssoftware, die die Vorgänge zentral verwaltet und gewisse Tabellenexporte erlaubt.
Es wäre also möglich, hieraus eine Liste der Kommunikationspartner zu exportieren. Die Datensätze enthielten auch eine eindeutige ID, die zur Anonymisierung herangezogen werden könnte.

Die Verwendung von Plattformen wie OwnCloud, nextCloud u.d.gl. scheidet aus meiner Sicht aus, da das Anlegen der Nutzerkonten vorallem in dieser Stückzahl händisch nicht in guter Zeit zu machen scheint. Selbst wenn es ginge, müssten unsere Mitarbeiter sicherstellen, dass das jeweilige Nutzerkonto auch nur den Vorgängen (1:n-Beziehung ist möglich) zugeordnet ist, die wirklich es betreffen.

Plattformen, die den Upload von einzelnen Dateien ermöglichen (wie z.B. Jirafeau) gefallen mir dahingehend sehr, aber hier verlagert sich die Last und die Fehleranfälligkeit auf die Kommunikationswege mit den Partnern.

Was ich mir vorstellen könnte...

...ist eine Lösung auf Basis einer Kombination aus SAMBA + htpasswd + htgroup + htaccess + Apache + FancyIndexing.

Die Überlegung ist, dass unsere Mitarbeiter eine zentrale Tabelle im CSV-Format pflegen. Jeder Mitarbeiter kann für seine Vorgänge die entsprechenden Exporte machen und bereinigt diese so, dass jeder Datensatz nur noch folgendes enthält:

1. Spalte: Name
2. Spalte: eindeutige ID
3. Spalte: VBA-makrogeneriertes Zufalls-PW
4. Spalte: Vorgangsnummer
5. Spalte: VBA-makrogenerierter Link zum Dateiverzeichnis des jeweiligen Kommunikationspartners auf dem Server

Überlegung zu Spalte 2:
Zur Anonymisierung und korrekten Zuordnung der für einen bestimmten Partner vorgesehenen Dateien, reicht es meiner Ansicht nach aus, wenn das Dateisystem immer nach dem Schema "\\server\vorgangsnr\Partner-ID\" aufgebaut ist.

Überlegung zu Spalte 3 + 5:
Das halte ich für realisierbar, solange das Schema wie oben beschrieben statisch und programmatissch nachvollziehbar bleibt.

Zum Dateibereitstellungsserver:

Intern würde er, wie man an den Links erkennt, mittels Samba unseren Mitarbeitern die Dokumentenzuordnung in die Vorgänge ermöglichen.
Wenn ich die Partner-ID als Präfix im Dateinamen verwende, kann ich das auch noch per Skript (in diesem Fall VBScript) automatisieren.

Nach außen würden die Dateien über Apache angeboten.
Mittels htaccess + htpasswd + htgroup würde ich versuchen, die Struktur entsprechend zu sichern und hier käme die automatische Auswertung der zentralen CSV-Tabelle zum Tragen:

Jedes Mal, wenn ein Mitarbeiter diese Tabelle ändert, kopiert er sie auf den Server in ein bestimmtes Verzeichnis. Ein Bash-Script läuft durch die Datei durch und prüft in der Reihenfolge:

1. Existiert ein Verzeichnis passend zur Vorgangsnummer?
Wenn ja, dann weiter zum nächsten Schritt, sonst erstelle es und generiere passende htaccess-Datei darin.

2. Existiert ein Verzeichnis passend zur Vorgangsnummer und Partner-ID (Unterordner zur Vorgangsnummer)?
Wenn ja, weiter zum nächsten Schritt, sonst prüfe, ob Erstellung laut Tabelle erforderlich, erstelle ggfs. Verzeichnis + htaccess-Datei.

3. Existiert der Nutzer passend zur Vorgangsnummer?
Wenn ja, fertig, sonst erteile Zugriff auf korrespondierendes Vorgangs- und Partnerverzeichnis



Ich könnte mir solch einen Verzeichnisbaum vorstellen:
.
^---www-root
          ^---.htaccess¹
          ^---Vorgang1
                     ^---.htaccess²
                     ^---Partner-ID1
                                ^--- .htaccess³
                                ^--- Partner-ID1-Datei1.pdf
          ^---Vorgang2
                     ^---Partner-ID2
                                 ^--- .htaccess³
                                 ^--- Partner-ID2-Datei1.pdf


Zu den einzelnen htaccess-Dateien:
htaccess¹:
In dieser Datei würde ich das FancyIndexing definieren (und hoffen, dass diese Einstellung für die Unterverzeichnisse auch greift und sicherstellen, dass die htaccess-Dateien in den Verzeichnissen ausgeblendet und geschützt sind.

htaccess²:
Pro Vorgang eine htaccess. Sie definiert, welche Gruppe von Nutzern in diesen Ordner rein kann. Dazu könnten die entsprechenden Datensätze der CSV auf Basis der Vorgangsnummer zusammengefasst werden. Die Partner-ID ist der Nutzername. Also müsste bei Nichtvorhandensein des Vorgangsverzeichnisses neben der htaccess eine passende htpasswd per Skript angelegt werden.

htaccess³:
Pro Nutzerverzeichnis unter einem Vorgang wird eine erstellt. Sie erlaubt nur den Zugriff durch den Nutzer, dessen username, der dem Verzeichnisnamen entspricht, da es die Partner-ID ist, der erfolgreich authentifiziert wurde. Auch diese Datei würde per Skript automatisch erstellt werden.


Bevor ich mich jetzt ans Bauen, Testen und Analysieren mache...
...wollte ich mal nach Eurem fachlichen Rat fragen.

Ich möchte so viel wie möglich automatisieren. Speziell die Erstellung der Nutzer und entsprechender Verzeichnisstrukturen.

Ich habe zwar noch eine gewisse Erfahrung mit Apache und htaccess (weil ich so etwas in vereinfachter Form manuell mal gemacht habe), allerdings schon lange nicht mehr auf aktuellem Stand und was Scripting unter Linux angeht, muss ich gestehen, dass ich da überhaupt nicht sicher bin, was machbar ist und was nicht von meinen obigen Überlegungen.

Relativ sattelfest bin ich mit Ubuntu-Server. Der wäre auch meine Präferenz, da ich LAMP-Systeme bisher immer damit aufgebaut habe, die gängigen Befehle, Konfigdateien und Verzeichnisaufbau von daher noch gewohnt bin.

Meine Fragen zu Linux, Apache, htaccess, Linux-Scripting an diejenigen, die darin Erfahrung haben:

Haltet Ihr obiges Konzept überhaupt für umsetzbar?
Mir ist klar, dass bei Änderung an den htaccess-Dateien der Apache-Dienst ggf. reloaden muss. Das ist kein Problem.

Erstellung der benötigten .htaccess-Dateien aus einer Vorlage mit Platzhalter abgeleitet oder besser direkt per Skript?
Ich weiß nicht, was da besser ist, geschweige denn ob das mit Skript überhaupt machbar ist.

Welche Script-Sprache wäre am besten geeignet? Bash, Perl oder gar etwas anderes?
Ich bin in keiner der Sprachen sattelfest und müsste mich einarbeiten. Deswegen frage ich, mit welcher Script-Sprache ich alles erschlagen könnte.

Gibt es die Möglichkeit, mittels .htaccess Verzeichniseinstellungen auf untergeordnete Objekte zu "vererben"?
...so dass ich nur auf oberster Ebene den Rahmen für Darstellung und Sicherheit definiere und nach unten weitergebe.

Könnte man das auch auf Skriptebene weiterspinnen, so dass Änderungen in einem Verzeichnis per E-Mail automatisch kommuniziert werden?
Wenn die zentrale CSV pro Datensatz auch eine E-Mailadresse enthielte, könnte man dann im Falle, dass Verzeichnisänderungen im Vorgangsverzeichnis (neue Dateien eingefügt) stattfinden, dieses Ereignis an alle betroffenen Kommunikationspartner (über die Unterverzeichnisse über die CSV zurückverfolgbar) und im Falle, dass Änderungen in einem bestimmten Verzeichnis eines Partners stattfinden, diese an genau den einen per E-Mail automatisiert versenden?

Und jetzt die Gretchenfrage an alle:
Kennt vielleicht jemand eine solche Plattform (Cloud-Plattformen scheiden aus. Wir müssen das selbst hosten.), auf der das obige Konzept umsetzbar wäre?

Habt vielen Dank für Eure Zeit!

Und Euch, die antworten: habt nochmals Dank für jeden richtungsweisenden Hinweis!


Viele Grüße
bdmvg

Content-Key: 644444

Url: https://administrator.de/contentid/644444

Printed on: April 16, 2024 at 10:04 o'clock

Member: Daemmerung
Solution Daemmerung Jan 27, 2021 at 19:09:14 (UTC)
Goto Top
Hallo,

fern ab von deinen Überlegungen, möchte ich doch nochmal mit NextCloud um die Ecke kommen.

NextCloud bietet eine mächtige API an, mit der du sowohl User als auch Berechtigungen für User anlegen/setzen kannst. Aus meiner Sicht ist dein Vorhaben gerade mit dieser Plattform gut realisierbar, ohne sich dort eigene Lösungen von der Picke aus zu basteln.

UserManagement:
https://docs.nextcloud.com/server/15/developer_manual/app/users.html

Shares:
https://docs.nextcloud.com/server/15/developer_manual/core/ocs-share-api ...

Web-Hooks:
https://docs.nextcloud.com/server/15/developer_manual/app/hooks.html#ava ...

Du schriebst zwar, dass Cloud-Lösungen rausfallen, aber NextCloud kannst du ja selbst hosten.

Viele Grüße
Daemmerung
Member: beidermachtvongreyscull
beidermachtvongreyscull Jan 27, 2021 at 21:38:25 (UTC)
Goto Top
Guten Abend/Morgen/Tag (Nichtzutreffendes streichen face-smile ),

hab vielen Dank für diese Info. Ich gebe zu, ich habe nicht an die Möglichkeit gedacht, dass man da über eine API auch ran kommen könnte.

Ich ziehe es in Betracht, auch wenn es meine Programmierfähigkeiten massiv übersteigt.
Muss mal schauen, ob wir da eine externe Ressource einkaufen.

Viele Grüße
bdmvg
Member: Daemmerung
Solution Daemmerung Jan 28, 2021 at 13:33:04 (UTC)
Goto Top
Gerne!
Denk dran: Bei einer API benötigst du nicht unbedingt große Programmierskills. Du könntest die API auch innerhalb von Scripts nutzen bzw. da, wo du deine Stärken hast. Wenn du dich schon an Bash-Scripts traust, könntest du vielleicht auch damit ansetzen.

Viele Grüße
Member: beidermachtvongreyscull
beidermachtvongreyscull Jan 28, 2021 at 14:15:24 (UTC)
Goto Top
Ich schau mir mal die Beispiele in deren Doku an und suche mal im Netz.
Vielleicht gibt es Bash-Scripts, die es etwas schlüssiger machen.

Viele Grüße und hab nochmals Dank.
Member: beidermachtvongreyscull
Solution beidermachtvongreyscull Feb 24, 2022 at 16:49:58 (UTC)
Goto Top
Ich habe das jetzt anders gelöst.

Ich nutze einen selbstgehosteten Ubuntu-Server mit der Software zend.to v6.11-2.

Funktioniert, wie ich es mir vorgestellt habe!