← Back to team overview

sslug-teknik team mailing list archive

Re: Apache sp��l

 

On Thu, 03 Aug 2000, you wrote:
> Anders M wrote:
> > Men hvordan kan man gøre sådan
> > er der på startsiden er et link, når man trykker på det kommer boksen op
> > med brugernavn og password og alt efter hvilket navn og password man
> > skriver kommer man ind på en forskellig side?
>
> RewriteEngine on
> RewriteRule ^$ /%{REMOTE_USER}/ [R]
>
> Hvis nu brugeren "bent" logger ind, vil han blive sendt til /bent/

Der er flere måder at lave autorisation på.
Det nemmeste er apaches basic authorification, som laves ved at lægge en 
.htaccess fil i det bibliotek der skal beskyttes.

Det kan kombineres med ovenstående, som hører til i apache.conf.

Eksempel på .htaccess:

AuthUserFile /home/domain/public_html/beskyttet/.passwd
AuthGroupFile /home/domain/public_html/beskyttet/.group
AuthName Administration
AuthType Basic
 
<Limit GET POST>
require group users
</Limit> 


Som det ses, kaldes også på en brugerfil, .group, og en passwordfil, .password

.group:

administrators: preben
users: bent, preben, trine

.password:
bent:po2vWSQrn3tDI
prebentaRtvfniDKJUw
trine:omiHZbuvYTXFw  
 
gruppe- og password filerne bør faktisk ikke ligge i samme bibliotek, de 
kunne f.eks med fordel gemmes _under_ offentligt område, dvs utilgængeligt 
for webserveren.

Nedenstående script laver et password, som manuelt kan kopieres ind i 
passwordfilen:
#!/usr/bin/perl -w
 
# create a password suitable for a .passwd file for httpd

use strict;
use CGI;
use Cwd;
use CGI::Carp qw/fatalsToBrowser/;
my $q = new CGI;
 
print $q->header, $q->start_html(-title=>'Password generator');
print "<h1>Kryptering af passwords til beskyttede mapper</h1>",
        "<p>Indtast password ENS i begge felter og afsend. Det krypterede 
password vises nedenfor og kan kopieres til den relevante password fil.";
print $q->startform,
        $q->textfield(-name=>'p1'),
        "<br>",
        $q->textfield(-name=>'p2'),
        "<br>",
        $q->submit, $q->endform;
print "<hr>";
if ($q->param('p1') && ($q->param('p1') eq $q->param('p2'))) {
        print crypt($q->param('p1'),$q->param('p1'));
} elsif ($q->param('p1')) {
        print "<p>Du har ikke indtastet samme ord i de to felter - prøv 
igen.";
} else {
        print "Samme password skrives i begge felter, inden formen afsendes";
}
print "<hr>", "pwd: ", cwd(), $q->end_html; 


En anden måde er at lave en form for CGI program, der henter/gemmer 
brugernavn/password i en database, men så skal du til at programmere, det 
bedste er perl eller evt php, sammen med mysql, som er stabil og noget 
hurtigere end både postgresql og diverse kommercielle produkter.


-anders


Follow ups

References