Weboberfläche für Samba-Shares

MusicJunkie666

Commander
Registriert
März 2013
Beiträge
2.757
Servus,

Folgende Anforderung: Ich möchte es möglich machen, mit einem Browser auf vorhandene, teilweise userbezogene Samba-Shares zuzugreifen. Heißt: Anmelden im Webinterface mit vorhandenen Benutzern (LDAP Auth?), automatisches Mounten von vordefinierten Shares mit den vorher eingegebenen Benutzerdaten und Anzeigen, Herungerladen und Hochladen von Dateien inkl. korrektem Setzen von Berechtigungen.
Da es spezifisch dafür keine Anwendungen gibt, habe ich überlegt, das mit Owncloud o.Ä. zu lösen. Owncloud kann zwar Samba-Shares als Datenspeicher verwenden, allerdings wird natürlich nur mit dem User www-user und der Gruppe www-data darauf zugregriffen, was in dem Fall nutzlos wäre.

Habt ihr so etwas schon gemacht? Gibt es Möglichkeiten, eine der existierenden "Personal Cloud"-Webapps (Owncloud, Seafiles...) dafür zu verwenden? Habt ihr eine Idee, wie das zu lösen wäre?

LG
MusicJunkie
 
Dein Problem ist nicht Owncloud sondern das lokale mounten der Netzwerkshares auf deinem PC. Wie willst du das vom Browser aus machen ohne ActiveX?
 
Die Shares sollen auch nicht lokal auf dem PC gemountet werden. Der Benutzer soll vom Browser aus auf seine Shares zugreifen können und auch IM Browser Dateien hoch- und runterladen.
 
Und wie sieht dieses "zugreifen" genau aus? Was wird mit den Dateien gemacht? Hoch und runterladen macht ein Webformular.
 
Das habe ich oben versucht zu beschreiben.
Benutzer loggt sich ein, lädt die Datei die er gerade benötigt runter, bearbeitet sie und lädt die neue Datei hoch. Bis hierher genau wie bei Owncloud.
Dabei sollen aber die Berechtigungen so gesetzt werden, als hätte der Benutzer das Laufwerk lokal bei sich gemountet und hätte die Datei einfach nur hochkopiert. Also bspw. 700 für den aktuellen Benutzer, wenn er in sein persönliches Laufwerk speichert.
 
Du willst sftp. Benutz filezilla.
 
Nein, ich will um Gottes Willen kein FTP, sonst würde ich (S-)FTP nutzen. Soweit bin ich auch schon, danke.
 
Das kann alles der Webserver machen. Dafür braucht man keinen Highlevel Internet 2.0 Scheiss...
 
Das kann bestimmt kein Webserver. Nicht mal der allmächtige Apache.

Ich versuche mich mal besser auszudrücken:

Folgende Situation:

Im Netz A sitzen Benutzer an ihren Maschinen, haben Samba-Shares (1x persönlich, /home/-Ordner, 1x Allgemein pro Abteilung) lokal am PC gemountet und speichern dort ihre Dokumente.

Im Netz B mit anderer Domäne ist es nicht möglich, die Netzlaufwerke aus Netz A zu verbinden, da die Firewall nur Traffic auf den Ports 80 und 443 erlaubt. Das ist nicht zu ändern und außerdem es ist den Benutzern dort per GPO verboten, händisch Netzlaufwerke zu verbinden.
Ich möchte es aber möglich machen, aus Netz B auf die Daten auf den Netzlaufwerken in Netz A zuzugreifen. Dafür wäre es nötig, dass der Server nach der Authentifizierung per LDAP die nötigen Netzlaufwerke verbindet und eine Weboberfläche bietet, um auf die Dateien darauf zuzugreifen; heißt, die Ordnerstruktur anzeigen, Dateien runter- und wieder hochladen.

Der Tipp mit WebDAV bringt mich schon weiter, werde mich damit mal beschäftigen.
 
Hallo, du kannst dein Vorhaben mit Owncloud realisieren.
Owncloud selbst wird mit dem Webuser betrieben, die Software selbst greift jedoch per smbclient auf die Samba Shares zu.

Die Benutzerauthentifizierung kannst du per LDAP [LDAP-Auth] oder Samba [Samba-Auth] realisieren.

Bei der Samba Authentifizerung hatte ich auf meinem Debian Testsystem das Problem, dass der Login, obwohl erfolgreich, nicht erkannt wurde [https://github.com/owncloud/apps/issues/1974], Abhilfe schafft dieser Workaround:
Code:
   * "apps/user_external/lib/smb.php" mit einem Editor öffnen
   * Die Zeile
      } else if ($retval != 0) {
     durch
      } else if (($retval != 0) && (strpos($lastline, 'NT_STATUS_BAD_NETWORK_NAME') == false)) {
     ersetzen.


Als Administrator kannst du die Samba Shares einbinden [external storage] oder dem Benutzer überlassen.

Wenn du die Samba bzw. LDAP Authentifizierung (LDAP Benutzer/Passwort = SAMBA Benutzer/Passwort) verwendest, dann kannst du "SMB / CIFS using OC login" nutzt, dadurch können sich alle Samba Benutzer per Owncloud einloggen.
Falls das Home Share dem Benutzernamen entspricht, kann dieses automatisch mit der Funktion "Username as share" eingebunden werden.
Weitere Shares müssen per Hand eingetragen werden, hat z.B. ein Benutzer Zugriff auf das Share "testdir", dann erfolgt die Einbindung per "SMB /CIFS using OC login" und als Share wird "testdir" eingetragen. Bei allen Benutzern, die Zugriff auf dieses Share haben, müsste dieses in Owncloud sichtbar sein.

Eine Alternative zu Owncloud ist pydio, welches auch SAMBA/LDAP Auth unterstützt.

EDIT:

Eine weitere Alternative, welche ich vergessen habe aufzuführen, ist smbwebclient. Die Authentifikation und Kommunikation mit dem Samba Server wird per smbclient geregelt. Shares werden automatisch aufgelistet.

Aber anscheinend wird der Code nicht mehr gewartet.

Da Version 2.9.1 einen Fehler mit der Downloadfunktion hat und ich den Link zur gepatchten Version nicht einfügen kann (URL nicht auf der Whitelist, phpclasses punkt org - Seite wird als Spamschleuder kritisiert, wollte aber die Quelle angeben.), habe ich noch schnell den Patch erstellt.
Code:
--- smbwebclient-2.9.1.php      2015-05-07 00:04:24.485522527 +0200
+++ smbwebclient-2.9.1b.php     2015-05-07 00:03:42.604886423 +0200
@@ -47,7 +47,7 @@
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
-$SMBWEBCLIENT_VERSION = '2.9.1';
+$SMBWEBCLIENT_VERSION = '2.9.1b';
 ###################################################################

 class smbwebclient extends samba {
@@ -1062,7 +1062,7 @@
 function ClamAV ($file)
 {
        $out = preg_split("\n",`clamscan $file`);
-       if (ereg('^'.$file.': (.*) FOUND$', $out[0], $regs)) {
+       if (preg_match('/^'.$file.': (.*) FOUND$/', $out[0], $regs)) {
                $this->status = 'VIRUS: '.$regs[1];
                return true;
        } else {
@@ -1416,7 +1416,7 @@
                $this->time = $this->files[$this->name]['time'];
                if (! $this->cfgCachePath) {
                        $this->DumpFile('', $this->name);
-                       $this->_SmbClient('get "'.$this->name.'" - "', $this->parent, '', true);
+                       $this->_SmbClient('get "'.$this->name.'" \"-\" "', $this->parent, '', true);
                } else {
                        $this->tempFile = $this->cfgCachePath . $this->fullPath;
                        if (@filemtime($this->tempFile) < $this->time OR !file_exists($this->tempFile)) {
@@ -1468,7 +1468,7 @@

        if ($message <> '') $cmdline = "echo ".escapeshellarg($message).' | '.$cmdline;

-       $cmdline .= ($dumpFile) ? '2>/dev/null' : '2>&1';
+       $cmdline .= ($dumpFile) ? ' 2>/dev/null' : ' 2>&1';

        if ($command == 'compress') {
                $tmpfname = tempnam("/tmp", "swcZ");
 
Zuletzt bearbeitet: (Alternative smbwebclient)
Vielen Dank für deine Antwort, pfd. Das hilft mir schon sehr viel weiter.
Ich werde mich erst mal mit Owncloud beschäftigen, pydio klingt auch ganz interessant. smbwebclient habe ich auch gefunden, aber eine Software, die nicht mehr gewartet wird möchte ich nicht unbedingt produktiv einsetzen...

Edit: Update:
Owncloud 8.0.3 scheint einen Bug zu haben, der SMB using OC login nicht möglich macht. Bekomme beim Zugriff auf die Samba-Shares folgenden Eintrag in die Logs:
Code:
Exception: {"Message":"","Code":0,"Trace":"#0 \/var\/www\/owncloud\/apps\/files_external\/lib\/config.php(456): OC\\Files\\Storage\\SMB_OC->__construct(Array)\n#1 \/var\/www\/owncloud\/apps\/files_external\/lib\/config.php(358): OC_Mount_Config::getBackendStatus('\\\\OC\\\\Files\\\\Stora...', Array, false)\n#2 \/var\/www\/owncloud\/apps\/files_external\/settings.php(47): OC_Mount_Config::getSystemMountPoints()\n#3 \/var\/www\/owncloud\/lib\/private\/app.php(720): include('\/var\/www\/ownclo...')\n#4 \/var\/www\/owncloud\/settings\/admin.php(93): OC_App::getForms('admin')\n#5 \/var\/www\/owncloud\/lib\/private\/route\/route.php(135) : runtime-created function(1): require_once('\/var\/www\/ownclo...')\n#6 [internal function]: __lambda_func(Array)\n#7 \/var\/www\/owncloud\/lib\/private\/route\/router.php(250): call_user_func('\\x00lambda_100', Array)\n#8 \/var\/www\/owncloud\/lib\/base.php(782): OC\\Route\\Router->match('\/settings\/admin')\n#9 \/var\/www\/owncloud\/index.php(36): OC::handleRequest()\n#10 {main}","File":"\/var\/www\/owncloud\/apps\/files_external\/lib\/smb_oc.php","Line":47}

Scheint den Entwicklern schon bekannt zu sein, ich hoffe auf einen baldigen Fix...
 
Zuletzt bearbeitet:
Zurück
Oben