You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Niki Hammler <ma...@nobaq.net> on 2007/11/04 02:00:16 UTC

Selektives Require "xxx" für verschiedene URIs (awstats)

Hi,

Ich suche so etwas wie "if URI matches xxx; then a; else b;".

Besser ich beschreibe es konkret ;-)

Ich administriere einen großen Webserver bei dem es unterschiedliche
Webspaces gibt.

Für jeden Webspace ist eine bestimmte Gruppe verantwortlich ("web_xxx")
und jeder Gruppe sind Personen zugewiesen die Webmaster für den Webspace
sind. Diese Infos (alle User und Gruppen bzw. deren Zuordnung) kommen
aus einem LDAP.

Nun hab ich awstats "side-wide" installiert und ich möchte nun, dass der
Zugriff auf

/cgi-bin/awstats.conf

komplett unterbunden wird.

Die URLs

/cgi-bin/awstats.conf?config=xxx

soll nur von Mitgliedern der Gruppe "web_xxx" gestattet sein!

Dass ich mit Apache keine Variablensubstitution machen kann (und damit
das nicht elegant global machen kann) ist mir klar :-(

Aber es würde schon reichen, wenn ich bei jedem virtuellen Server
einfach eine betreffende Zeile für die Logs dazumachen könnte.

Um nicht die Basic-Auth für LDAP mehrfach schreiben zu müssen gibt es
eine "auth-ldap.conf" die dann included wird:
AuthType Basic
AuthName "Logfiles"
AuthLDAPUrl ldap://ldap-server/ou=people?uid?one
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off

Im der globalen Config will ich generell den Zugriff auf "awstats.pl"
unterbinden:

<FilesMatch "awstats.pl">
  Deny from all
</Files>

In jedem virtuellen Host:

<VirtualHost *>
  ServerName xxx.domain.tld
  [...]
  <FilesMatch "awstats.pl\?config=xxx">
    Include "auth-ldap.conf"
    Require group cn=web_xxx,ou=groups,dc=htu,dc=tugraz,dc=at
  </FilesMatch>
</VirtualHost>

Nun geht das aber nicht weil das vom globalen "überschrieben" wird. Gibt
es eine Möglichkeit, diese Überschreibung zu verhindern?

Als Alternative könnte ich das auch separat in die globale Config schreiben:

<Location /cgi-bin/>
  Include "auth-ldap.conf"
  <FilesMatch "awstats.pl\?config=site1">
    Require group cn=web_site1,ou=groups,dc=htu,dc=tugraz,dc=at
  </FilesMatch>
  # else if
  <FilesMatch "awstats.pl\?config=site2">
    Require group cn=web_site2,ou=groups,dc=htu,dc=tugraz,dc=at
  </FilesMatch>
  [...]
  #else
  Require user invalid
</Location>

Aber auch das geht nicht :-(

Ich hoffe es ist nun klar was ich meine.

Ich möchte für verschiedene URL-Patterns gerne separate "Require"
Anweisungen haben und ein generisches "else" Deny from all.


Wie bastle ich das am besten mit Apache?

Danke,
Niki


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


unklares Laufzeitproblem

Posted by Martin Ebert <ma...@wb-online.de>.
Liebe Liste,

Antwortzeit (nur _ein_ Projekt auf virtDomain!) ist neuer-
dings _10 Sekunden_ - aus Nutzersicht.
Es ist unklar, warum.

Gegeben sei ein dieser Indianer:
> Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c

Dort werkelt ein Wiki (usemod ohne Datenbank; alles filebasiert).
Das Wiki ist schlichtes Perl. Das Ganze _nur_ via SSL.

Das Ding ist völlig lastfrei: Da ist kein Traffic; vielleicht
15 Leute haben Zugriff ... und gucken alle drei Tage.

Nun habe ich neuerdings bei echten Seitenaufrufen (und nur
dort - andere Scriptteile gehen!) Antwortzeiten von 10 sec.

Das Perl-Script ist günstigerweise von der Konsole aus auf-
rufbar: Da meldet time so 1,2sec - was ich für akzepabel
halte (bei gegebenen Bedingungen).

Ich bin nun zunächst von irgend einem Timeout ausgegangen;
DNS als Verdachtsfall. Aber das kann es nicht sein: Der Aufruf
via Konsole tut ja mit 1,2 sec.

Der nächste Kandidat SSL kann es nun aber auch nicht sein:
Die Sonderseiten wie Suche etc (laufen via gleichem Script)
antworten deutlich schnell.

Dieser Frage vorgebeugt: Nein, am Script habe ich nicht geschraubt
in letzter Zeit.

Offen gesagt: Ich habe momentan so überhaupt keinen Plan, wo
ich bei der Fehlersuche ansetzen könnte. Alle Logik ist durch,
Schlangenöl und magisches Zaubersalz ist aus:

Wo kann ich denn messen, wenn der Aufruf auf dem Server ja
real akzeptabe Zeiten bringt?

Ich bin völlig ratlos.
Wie würdet ihr in einer solchen Situation weiter vorgehen?
Was wäre der nächste Schritt, was der übernächste?

Freundliche Grüße, Martin




--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Selektives Require "xxx" für verschiedene URIs (awstats)

Posted by Falk Hackenberger <ap...@spam.huckley.de>.
Nikolaus Hammler schrieb:
> Aber im Endeffekt hätte ich doch hier das gleiche Problem wie oben oder?
> Dann müsste ich dem Apache doch trotzdem sagen:
> 
> Denye alles unter /cgi-bin/ *ausser* /cgi-bin/awstats.pl?config=virt1.
> Ausser ich würde awstats umschreiben...
> 

Du benutzt doch regex,
deny auf
/cgi-bin/awstats\.pl$
erlaube auf
/cgi-bin/awstats.pl?config=virt1$
deny dann auf
/cgi-bin/awstats.pl.*

sollte imho gehen...

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Selektives Require "xxx" für verschiedene URIs (awstats)

Posted by Nikolaus Hammler <ni...@telematik.edu>.
Falk Hackenberger schrieb:
> Hallo,

Hi,

> ich glaub wir haben uns etwas missverstanden,

Hoffentlich, denn so hab ich noch eine Chance auf eine Lösung ;-)

> die Idee, mit der ich das lösen würde, geht davon aus das Du
> grundsätzlich auf
> 
> /cgi-bin/awstats.pl zugreifen kannst, wenn Du Dich erfolgreich
> authentifiziert hast.

Das Problem ist ja, dass die auf die Location

/cgi-bin/awstats.pl?config=virt1

und

/cgi-bin/awstats.pl?config=virt2

jeweils andere Gruppen (d.h. andere Require ldap-group xxx) zugreifen
können sollen!

Würd ich die Require-Anweisungen (und die Basic-Auth) direkt in
/cgi-bin/ setzen, so könnten User von virt2 auch auf die Statistiken von
virt1 zugreifen...

D.h. eigentlich würde es schon reichen wenn man eine auf eine bestimmte
Location ein "deny" machen könnte und dann verschiedene "Sublocations"
erlauben könnte. Sowas wie:

<Location /cgi-bin/>
  Deny from all
</Location>

<Location /cgi-bin/awstats.pl?config=virt1>
  # Das soll das vorige Deny überschreiben!
  Allow from 192.168.0.100
</Location>

<Location /cgi-bin/awstats.pl?config=virt2>
  Allow from 192.168.0.101
</Location>

[...]

> mod_rewrite hängt dann nur noch die auth info ran...
> ähnlich wie
> http://www.coxesroost.net/journal/2005/08/18/individual-webdav-documentroots,
> 
> das ganze ist nur eine Idee, keine Ahnung ob das geht um das ganze in
> eine Config zu coden, brauch ich hier erstmal etwas länger...

Auf den ersten Blick ist es glaub ich nicht das was ich suche aber
trotzdem mal danke, ich werd mir das genauer durchschauen.

> der Filesmatch ansatz sollte nicht funktionieren, weil Du ja auf get
> matchst, und nicht aufs file, außerdem hast Du immer das Problem, das
> die erste passende Rule matcht...

Genau :-(

> eine andre lsg (ohne Variablensubstitution) wäre, global nicht cgi-bin
> zu definieren (da wo Du awstats herholst),
> 
> sondern hübsch immer schön im Virtual host, mit den entsprechenden
> Rechten...

Aber im Endeffekt hätte ich doch hier das gleiche Problem wie oben oder?
Dann müsste ich dem Apache doch trotzdem sagen:

Denye alles unter /cgi-bin/ *ausser* /cgi-bin/awstats.pl?config=virt1.
Ausser ich würde awstats umschreiben...

lg,
Niki

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Selektives Require "xxx" für verschiedene URIs (awstats)

Posted by Falk Hackenberger <ap...@spam.huckley.de>.
Hallo,

ich glaub wir haben uns etwas missverstanden,

die Idee, mit der ich das lösen würde, geht davon aus das Du
grundsätzlich auf

/cgi-bin/awstats.pl zugreifen kannst, wenn Du Dich erfolgreich
authentifiziert hast.

mod_rewrite hängt dann nur noch die auth info ran...
ähnlich wie
http://www.coxesroost.net/journal/2005/08/18/individual-webdav-documentroots,

das ganze ist nur eine Idee, keine Ahnung ob das geht um das ganze in
eine Config zu coden, brauch ich hier erstmal etwas länger...

der Filesmatch ansatz sollte nicht funktionieren, weil Du ja auf get
matchst, und nicht aufs file, außerdem hast Du immer das Problem, das
die erste passende Rule matcht...

eine andre lsg (ohne Variablensubstitution) wäre, global nicht cgi-bin
zu definieren (da wo Du awstats herholst),

sondern hübsch immer schön im Virtual host, mit den entsprechenden
Rechten...

falk


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Selektives Require "xxx" für verschiedene URIs (awstats)

Posted by Niki Hammler <ma...@nobaq.net>.
Falk Hackenberger schrieb:
> Niki Hammler schrieb:
> 
>> Nun hab ich awstats "side-wide" installiert und ich möchte nun, dass der
>> Zugriff auf
>>
>> /cgi-bin/awstats.conf
>>
>> komplett unterbunden wird.
>>
>> Die URLs
>>
>> /cgi-bin/awstats.conf?config=xxx
>>
>> soll nur von Mitgliedern der Gruppe "web_xxx" gestattet sein!
>>
>> Dass ich mit Apache keine Variablensubstitution machen kann (und damit
>> das nicht elegant global machen kann) ist mir klar :-(
> 
> nur so als Idee:
> 
> eine url, die du nur gegen auth erreichen kannst,
> und Du nimmst dann die auth info und verarbeitest sie mit mod_rewrite.
> 
> verstanden, wo ich hin will?

Hi,

jein, ich denke das was du meinst hab ich bereits probiert.

Kannst du mir ein konkretes Beispiel geben?

Angenommen ich mache

<Location /cgi-bin/>
	Deny from all
</Location>

Und dann im VHost:

RewriteEngine on
RewriteRule ^/stats/$ /cgi-bin/awstats.pl?config=xxx

dann versucht das Modul ja nicht die *Location* zu nehmen sondern direkt
die Datei! Aber /var/www/webroot-des-vhosts/cgi-bin existiert ja gar
nicht weil es nur per "Alias /cgi-bin/ /usr/lib/cgi-bin" eingebunden wurde!

Will ich das umgehen mache ich ein [R]-Flag dran. Aber damit wird direkt
redirected wodurch ich ein 403 bekomme, da ich /cgi-bin/ als Location ja
gesperrt habe!

Im Übrigen ignoriert Apache meine Rewrite-Rule, wenn ich sie in /conf.d/
in die *globale* Sektion gebe:

RewriteEngine on
RewriteRule ^/stats/(.+)/?$ /cgi-bin/awstats.pl?config=$1

Falls du ein funktionierendes Beispiel hast wär ich dir da sehr dankbar!

lg,
Niki

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Selektives Require "xxx" für verschiedene URIs (awstats)

Posted by Falk Hackenberger <ap...@spam.huckley.de>.
Niki Hammler schrieb:

> Nun hab ich awstats "side-wide" installiert und ich möchte nun, dass der
> Zugriff auf
> 
> /cgi-bin/awstats.conf
> 
> komplett unterbunden wird.
> 
> Die URLs
> 
> /cgi-bin/awstats.conf?config=xxx
> 
> soll nur von Mitgliedern der Gruppe "web_xxx" gestattet sein!
> 
> Dass ich mit Apache keine Variablensubstitution machen kann (und damit
> das nicht elegant global machen kann) ist mir klar :-(

nur so als Idee:

eine url, die du nur gegen auth erreichen kannst,
und Du nimmst dann die auth info und verarbeitest sie mit mod_rewrite.

verstanden, wo ich hin will?

falk

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------