Ich habe eine Frage über die Zugriffskontrolle in Apache 2. Ich glaube nicht, dass es relevant ist, aber ich es auf einem Raspberry laufen Pi 2 mit Raspbian.apache2 erlauben nur Benutzer 'x' zu öffnen URL 'example.com/private/x'
Es gibt mehrere Benutzer, die die Website verwenden können. Es gibt jedoch einen Ordner, in dem jeder Benutzer seinen eigenen Ordner hat. Jeder Benutzer sollte nur Zugriff auf seinen eigenen Ordner und keine anderen Ordner haben.
Das Problem, das ich habe ist, dass es scheint, dass die einzige Möglichkeit, dies zu tun ist, jeden Ordner der Konfigurationsdatei hinzuzufügen, die es ziemlich zeitaufwendig macht, einen Benutzer hinzuzufügen. Gibt es einen anderen Weg?
Zur Klarstellung:
Lets sagen, es gibt drei Benutzer: Benutzer
x
,
y
und
z
.
Alle von ihnen Zugang zu
https://example.com/
, aber keine anderen Benutzer als Benutzer
x
sollen Zugang zu
https://example.com/private/x/
haben, niemand außer Benutzer
y
sollte Zugang zu
https://example.com/private/y/
hat, und nur Benutzer
z
soll Zugang zu
https://example.com/private/z/
haben.
Was ich bisher gemacht und versucht habe:
Ich habe alle Zugriffe auf den Standort
/private
verweigert, in der Hoffnung, ich könnte dann den verschiedenen Benutzern Zugriff auf ihre jeweiligen Ordner geben.
Ich habe versucht, das zu tun, indem Sie Zugriff auf den Speicherort
/private/%{REMOTE_USER}/
und
/private/%{REMOTE_IDENT}/
gewähren, die beide nicht funktionierten.
Ich habe auch versucht, eine
<If>
Direktive zu verwenden, um zu überprüfen, ob die URL auf
/private/%{REMOTE_USER}/
abgestimmt ist, aber das hat auch nicht funktioniert.
Ich habe versucht, etwas in der Apache-Dokumentation zu finden, die mir helfen kann, aber ich konnte nichts finden, was mich näher an die Antwort bringen könnte.
Zusammenfassend: ist es möglich, dies ohne Hinzufügen aller Standorte zur Konfigurationsdatei zu tun, und wenn ja, wie ist das möglich?
Vielen Dank im Voraus für Ihre Eingabe, Desirius
PS: Ich habe fast vergessen, und ich bin nicht sicher, ob es relevant ist, aber die Authentifizierung verwendet PAM getan, in etwa die folgende Weise:
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
AddExternalGroupMethod unixgroup environment
</IfModule>
AuthType Basic
AuthBasicProvider external
AuthExternal pwauth
GroupExternal unixgroup
Require unix-group www-priv
Also war ich noch dabei und fand etwas!
Ab 2.4.8 werden benannte Gruppen und Rückverweise erfasst und in die Umgebung mit dem entsprechenden Namen mit dem Präfix "MATCH_" und in Großbuchstaben geschrieben. Dadurch können Elemente von URLs innerhalb von Ausdrücken und Modulen wie mod_rewrite referenziert werden. Um Verwirrung zu vermeiden, werden nummerierte (unbenannte) Rückwärtsreferenzen ignoriert. Benutzt stattdessen benannte Gruppen.
<LocationMatch "^/combined/(?<sitename>[^/]+)">
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
</LocationMatch>
(Letzter Teil der LocationMatch directive von der Apache-Dokumentation.)
Nun dachte ich Verwendung dieses auf folgende Weise zu machen:
<LocationMatch "^/private/(?<user>[^/]+)">
Require expr "%{REMOTE_USER} == %{MATCH_USER}"
</LocationMatch>
Aber Apache wird nun nicht neu starten. Es wird neu gestartet, wenn die Require
Zeile auskommentiert ist, aber nicht anders. Folgendes funktionierte auch nicht:
Also ich suche immer noch diese Frage zu lösen, aber der Fokus hat sich leicht verschoben. Wenn es eine Antwort auf gibt Wie kann ich Require
verwenden, um zu überprüfen, ob der authentifizierte Benutzer der Benutzer von einer Variablen ist?, dann würde das möglicherweise die ganze Frage lösen.
Wie immer, danke im Voraus für jede Eingabe!
Desirius
Edit 2:
Ich fand heraus, dass auch Require expr "true"
funktioniert nicht. Ich vermute, Require expr
, um die Probleme zu erstellen ...