hans: htaccess

Hallo,
ich habe ein verzeichnis mit .htaccess geschützt, würde jetzt zusätzlich gerne mitprotokollieren wer sich eingeloggt hat.

im archiv habe ich dazu nix gefunden.
hätte jemand dazu eine idee?
danke
hans

  1. Hallo Hans,

    ich habe ein verzeichnis mit .htaccess geschützt, würde jetzt zusätzlich gerne mitprotokollieren wer sich eingeloggt hat.

    In den Logfiles des Apache-Webservers wird bei normaler Konfiguration der Benutzer eines jeden Requests mitgeloggt. Du musst natürlich Zugriff auf diese Logfiles haben.

    Christian

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
    1. In den Logfiles des Apache-Webservers wird bei normaler Konfiguration der Benutzer eines jeden Requests mitgeloggt. Du musst natürlich Zugriff auf diese Logfiles haben.

      Christian

      Genau hier liegt das Problem,den zugriff habe ich leider nicht.
      (uni-rechenzentrum wird die auch nicht rausrücken.)
      gibt es überhaupt alternativen ?
      evtl. in der access-datei einen pfad für die log-datei anzugeben?
      hans

      1. Hallo Hans,

        gibt es überhaupt alternativen ?

        Wenn Du PHP hast, könnte ich Dir das anbieten: </archiv/2003/1/33818/#m184760> (dann kannst Du auch protokollieren)

        Du könntest die Variante auch so modifizieren, dass Du keine .php-Endung brauchst:

        |- hauptverzeichnis/
               |- privat       (PHP-Datei ohne Endung)
               |- privat_dir   (Das Originalverzeichnis, das jetzt komplett gesperrt ist)
               |- .htaccess    (Inhalt unten)

        Inhalt der .htaccess:

        RewriteEngine On
        RewriteBase /pfad/vom/webserverstammbaum/zum/hauptverzeichnis
        RewriteRule ^privat/(.*)            privat.php/$1

        (Sofern Du mod_rewrite hast, sonst musst Du mit der .php-endung leben)

        Wenn PHP sogar als Modul installiert ist, kannst Du auch auf die Sessions verzichten, dann kannst Du direkt HTTP-Authentifizierung nehmen:

        http://de3.php.net/manual/de/features.http-auth.php

        Ich hoffe, Du kannst was damit anfangen.

        evtl. in der access-datei einen pfad für die log-datei anzugeben?

        Nein, das geht nicht, die Logdateien kannst Du nur in der zentralen Serverkonfigurationsdatei oder in den Virtaul-Hosts-Einstellungen (die fast immer auch in der zentralen Serverkonfigurationsdatei liegen) einstellen.

        Christian

        --
        Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
      2. Moin Moin !

        Genau hier liegt das Problem,den zugriff habe ich leider nicht.
        (uni-rechenzentrum wird die auch nicht rausrücken.)

        Seltsam, normalerweise sind Logfiles world-readable. Je nachdem, wie der Apache installiert wurde, liegen sie in einem von vielleicht 10 Standard-Verzeichnissen. Ein Aufruf von /bin/ls wird ja wohl noch erlaubt sein. ;-)

        Die Standard-Pfade findest Du bei www.apache.org, ein guter Start ist aber auch folgende Liste:

        /var/log/
        /var/apache/log/
        /var/log/apache/
        /opt/apache/log
        /usr/local/apache/log

        Variationen:

        httpd oder www statt apache
        /usr statt /var
        logs statt log

        Der einfachste Weg ist aber wohl, einfach mal mit dem Webmaster bzw. root@www zu reden.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
        Mein "Lieblings-Forums-Bug": http://cforum.teamone.de/phpbt/bug.php?op=show&bugid=103&pos=2
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
      3. Hi hans,

        In den Logfiles des Apache-Webservers wird bei normaler Konfiguration der Benutzer eines jeden Requests mitgeloggt. Du musst natürlich Zugriff auf diese Logfiles haben.
        Genau hier liegt das Problem,den zugriff habe ich leider nicht.
        (uni-rechenzentrum wird die auch nicht rausrücken.)

        hm, das kann ja ggf. auch ein datenschutzrechtliches Problem sein. (Auf dem Server meines Providers ist das access_log auch nicht world readable.)

        Hast Du innerhalb des Servers der Uni einen eigenen Virtual Host, also eine Subdomain?
        Wenn ja, dann wäre es einfach, für diesen Virtual Host ein separates access_log zu definieren, welches dann nur genau die Zugriffe auf Deinen Verzeichnisbaum enthalten würde:
           http://httpd.apache.org/docs/mod/mod_log_config.html#customlog
        Dieses könnte Dir das Rechenzentrum problemlos zur Verfügung stellen, ohne daß Du automatisch auch die Zugriffe auf andere Seiten sehen darfst. Das wäre dann nur eine Zeile mehr in der Server-Konfiguration - also kein besonderer Aufwand für Euer Rechenzentrum.

        Es könnte allerdings sein, daß Du nur ein generisches Benutzerverzeichnis besitzt (mit einem "~" als ersten Zeichen des URL nach der Domain) ... und die CustomLog-Direktive geht nun mal nicht für Verzeichnisse, sondern nur für Server und Virtual Hosts.

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
      4. Moin, wenn Du cgis auch im memberbereich installieren kannst dann kannst Du ein cgi ins member verzeichniss installieren,der Dir die ENV% in eine logdatei schreibt. Im memberbereich wird automatisch der remonte_user mitgeliefert,weil die sich ja angemeldet haben. Das cgi selbst kannst Du so <img SRC="stats.cgi" border="0" height="1" width="1"> auf der haubtseite einbinden. Ich benutze z.B. dieses cgi:

        #!/usr/local/bin/perl -w

        $logfile = "/log/stat.log";

        $exclude = 0;

        $my_addr =  "http://www.Deinhost.de/";

        used with the "exclude" portion

        $HomeDirURL = "member/index.html";

        again, change if you're not using SSI's

        $username         = $ENV{'REMOTE_USER'};

        ########## So much for that.. On with the show! #######

        Get the input

        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

        Split the name-value pairs

        @pairs = split(/&/, $buffer);

        foreach $pair (@pairs) {

        ($name, $value) = split(/=/, $pair);

        # Un-Webify plus signs and %-encoding

        $value =~ tr/+/ /;

        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

        # Stop people from using subshells to execute commands

        # Not a big deal when using sendmail, but very important

        # when using UCB mail (aka mailx).

        $value =~ s/~!/ ~!/g;

        # Uncomment for debugging purpose

        # print "Setting $name to $value<P>";

        $FORM{$name} = $value;

        }

        ($sec,$min,$hour,$mday,$mon,$wday,$yday,$isdst) = localtime(time);

        if ($sec < 10) {

        $sec = "0$sec";

        }

        if ($min < 10) {

        $min = "0$min";

        }

        if ($hour < 10) {

        $hour = "0$hour";

        }

        if ($mon < 10) {

        $mon = "0$mon";

        }

        if ($mday < 10) {

        $mday = "0$mday";

        }

        $month = ($mon + 1);

        @months = ("January","February","March","April","May","June","July","August","September","October","November","December");

        $date = "$hour:$min:$sec $mday/$month";

        Now that we know what the time/date is.. let's have fun

        {

        if ($exclude == 1)

        {

        &log unless ($ENV{'HTTP_REFERER'} eq $my_addr);

        } else {

        &log;

        }

        &redir;

        exit;

        }

        sub log {

        if (! open(LOG,">>$logfile")) {

        print "Content-type: text/html\n\n";

        print "Couldn't open $logfile so I'm bugging out..\n";

        exit;

        }

        print LOG "At $date, $username $ENV{'HTTP_REFERER'}, IP $ENV{'REMOTE_ADDR'} use $ENV{'HTTP_USER_AGENT'}.\n";

        close (LOG);

        }

        sub redir {

        print "Location: $HomeDirURL\n\n"; }

        Grüsse vom Alain

        --
        ...nobody is perfect I am nobody