PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache/WebDAV mit Zugangskontrolle



DCr33P
06.10.06, 23:12
Ich möchte gerne aus dem Netz über Apache mit WebDAV auf Ordner zugreifen können. Es soll jedoch eine Art Benutzerverwaltung geben. Es sollen sich User einloggen können und jeweils spezifischeRechte haben um auf freigegebene Ordner zu schreiben.

Habe einen Ordner mit dem Namen "Public"(bestehend aus 3 Ordnern) mit der </Alias> Directive freigegeben. Es sollen bestimme User in allen Ordnern von Public schreiben dürfen, andere hingegen nur lesen und in einen der Unterordner schreiben dürfen.Die Directiven "Limit" und "LimitExcept" sind schon mal gut um auf WebServer-Niveau freigaben zu machen.
Doch wie kann ich einen apache user account (durch htpasswd) mit unix accounts verbinden? Apache hat nur einen unix-user www-data. Mein Public Ordner "sieht" also nur den user www-data von apache und nicht die apache-user. Also kann ich nicht auf Basis der Unix-Rechte konfigurieren...

Bin noch neu mit Apache und habe keinen blassen Schimmer was die "standart-Methode" ist um Benutzer mit bestimmten Rechten aufs Dateisystem
zu verwalten :confused:

DCr33P
07.10.06, 22:01
Hat keiner einen kleinen Schups in die richtige Richtung für mich? :p

marce
07.10.06, 23:01
funktioniert genau so über .htaccess wie bei "regulären" Verzeichnissen.

DCr33P
09.10.06, 19:03
.htaccess bringt mich nicht weiter, denn fast alles was man über .htaccess machen kann, das kann man auch über die zentralen config dateien von apache machen. Habe jetzt etwas mit <LimitExcept> rumgespielt und für jeden unterordner von public eine <Directory> Direktive erstellt. Jetzt können zwar nur die 3 bestimmten user in die unterordner schreiben und der andere nicht, jedoch kann dieser die authentifizierung umgehen indem er sich direkt in den unterordner logt. Dann fragt der server nicht nach einem passwort.
Wenn ich zwei Limit oder require Direktiven mache, dann wird die zweite immer ignoriert :(

marce
09.10.06, 20:45
Damit ich dich richtig verstehe:

-public
+-public_a
+-public_b
+-public_c
und für jeden der Ordner sollen unterschiedliche User lesen und schreiben dürfen? (also User a in public_a, User b,c in public_b, User a,c in public_c und alle lesen in public)

Dann musst Du einfach in jeden Unterordner die entsprechende .htaccess-Datei reinlegen, in der definiert wird, wer dort was darf. Mit entsprechenden Gruppen, diese evtl. üder LDAP abgebildet kannst Du das "sogar" mit der normalen Uniix-Auth synchronisieren.

Wenn ich falsch liege mit meiner Anname, so skizziere doch bitte mal ausführlicher Deine Anforderung...

DCr33P
10.10.06, 00:40
Ok, mein public Ordner sieht folgendermaßen aus:

+public
- doc
- media
- stuff
- upload

User a,b und c dürfen in allen vier Ordnern (doc,media,stuff,upload) lesen und schreiben. User d darf in allen vier Ordnern lesen und nur in "upload" schreiben.
Habe in der config zu jedem der drei Ordner doc,media,stuff eine Directory und eine LimitExept Direktive.
Beispiel, Ordner "media":



Dav On
AuthType Basic
AuthName "password-protected area"
AuthUserFile /etc/apache2/.dc_passwd
# Require user user_a user_b user_c user_d # ZEILE (5)
Options Indexes MultiViews
AllowOverride All
Order allow,deny
allow from all
<LimitExcept GET HEAD CONNECT OPTIONS COPY PROPFIND>
Require user user_a user_b user_c
</LimitExcept>


Also nuruser a,b und c dürfen dort schreiben.

Das klappt auch wunderbar. Das Problem ist: Wenn ich mich direkt in den Ordner "media" einlogge, also nicht zuerst in den Ordner public, dann wird kein passwort verlangt. Das kann ich damit unterbinden dass ich Zeile (5) auskommentiere(Kommentar weg). Dann jedoch wird meine LimitExcept Direktive ignoriert und user_d kann dann wieder in "media" schreiben. Dasselbe passiert wenn ich in "media" eine .htaccess Datei reinbringe. Ich kann einfach nicht mehr als eine Limit-Direktive pro Ordner benutzen. Die zweite wird ignoriert.
Alles was ich mit .htaccess mache kann ich ja auch in den zentralen config-Dateien machen.

Wie soll ich es anstellen, dass man sich nicht direkt in "public/media" ohne passwort verbinden kann?

Heeeelp :confused:

marce
10.10.06, 06:59
... und wenn Du die entsprechenden Restriktionen direkt als .htaccess in den entsprechenden Ordner setzt?

korrekte, kascadierende .htaccess in der httpd.conf sind nicht so einfach - ich würde das über einzelne Files lösen (allein, weil man dann nicht jedesmal den Server neu starten muss, wenn sich was ändert).

Bei uns hier hat das jedenfalls bei Tests hier problemlos funktioniert - wenn wir es auch inzwischen nicht mehr einsetzen...

DCr33P
11.10.06, 23:06
Tut sich auch nichts.
Die .htaccess dateien in den jeweiligen ordnern "überstimmen" einfach nur meine zentralen dateien. Ich kann zwar in den public ordner eine .htaccess schreiben die nach dem passwort aller 4 Benutzer fragt, jedoch kann ich trotzdem ohne passwort auf public/media zugreifen wenn ich den pfad direkt angebe, da ja in media eine .htaccess datei steht mit:



<LimitExcept GET PROPFIND>
Require user user_a user_b user_c
</LimitExcept>


-> Solange man nur liest braucht mein keinen gültigen account...
Das zumindest sagen die 3 Zeilen aus. Ich will aber dass nach einem account gefragt wird (kein anonymer login also), jedoch user_c nicht schreiben darf. Diese 3 Zeilen hier "überstimmen" praktisch meine require anweisung in dem übergeordneten Ordner public.
Ich sitze schon tagelang an dem Problem. Kriege es einfach nicht hin.... :mad:

marce
12.10.06, 00:02
Du musst für jeden Ordner komplett alles definieren.

DCr33P
12.10.06, 00:11
AuthType Basic
AuthName "password-protected area"
AuthUserFile /etc/apache2/.htpasswd
<LimitExcept GET PROPFIND>
Require user user_a user_b user_c
</LimitExcept>



Das ist alles was ich in der .htaccess drin habe...