Entwicklungsumgebung/Apache

Aus Delixs
Zur Navigation springen Zur Suche springen
Uberarbeiten Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben).


Webserver Apache

Installation

Der Apache HTTP (Web)-Server wird als traditionelles non-threaded-Modell installiert, was als nicht ganz so schnell wie das threaded-Modell, aber dafür als stabiler betrachtet werden kann.

Die Installation erfolgt mit

 aptitude install apache2-mpm-prefork

dabei wirde der Webserver Apache auch gleich gestartet. Die Kontrolle auf Funktionstüchtigkeit erfolgt mit dem Browser "lynx", indem dieser über

 lynx http://localhost

aufgerufen wird. Es erscheint eine Webseite mit dem Inhalt "It works!".

Diese Seite kann künftig unter /var/www/index.html durch eine eigene Seite ersetzt werden.

Um ein CGI-Script zu testen, erstellen Sie folgendes Script

<source lang="perl">

  1. !/usr/bin/perl

print "Content-type: text/html\n\n"; print '<html><body>';

print '

It works!

';

print '</body></html>'; </source>

und speichern es in /usr/lib/cgi-bin mit dem Dateinamen "test.pl" ab.

Der Aufruf des Scripts erfolgt an der Konsole mit

 lynx http://localhost/cgi-bin/test.pl

Ein Umbenennen der Datei mit der Endung ".cgi" und der entsprechende Aufruf sollte ebenso klappen.


Zertifikate für den Webserver erstellen und bereitstellen

Generieren Sie zuerst einen privaten Serverschlüssel ("server.key") ohne Passwort!

  openssl genrsa -out server.key 1024

Da kommt nur:

  Generating RSA private key, 1024 bit long modulus
  ....................++++++
  ............................++++++
  e is 65537 (0x10001)

der erzeugte server.key sieht dann so aus:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDCDvkOgSexJ1bpf1mFY2ffyOE0ZS9Hd/KFLGq8zVhLYvEAhlu7
jstzfSE3Mz02Oj/z+xACTtCEpU8fSh0Kn6ma9KnLw/rWR9b/Cip5PjPsu2afijin
M08emVKjxUSDVUGJH6CSwwg7J4wRoMWDa5jl3bxtYi9hrfobsh7jNJAUawIDAQAB
AoGAHJVB/+3sH77QoWHdmLUUlrSq3yHMPfWf5hetvRNt3uS65L3lgxG8S81xeAT3
Dia0RsaDDCP5uJ/0sIIlFux/eY7C9qRBrxwrbl27FokrVeNZC8+qJyMNLttz6Edi
K+0ysWi/W0FEZWqlibl6qW1HKN+H6y1jvqlELzvjUpuHJqECQQDk/SsdXG8bWdgK
6BGHgCFtfEBkpocjkwTUOItRN+qThOvkOOSjfQ7OEXLBWG5uBtBsi6Vb7FBaT5mA
0Pelw1VRAkEA2PMAaN74WXq5izHZc8TD/kAbgFL1khLFcfeZi9Nv9XYbdO8DUPXL
BOFuBaGslPWOpd2D9x745sBf35tzxREO+wJAX6uaeNDmpsG5rozYzgjtbmXMLYEZ
0vYYvWXGZy96dRnCyH4woFGeft/xVvBQau2z5LXPZ4Fq7OB23Mfxv7LFkQJALYzX
yS0Hd8IMsu0EewoVHIzZOVgxtzm5uvQBiRobp63kleiZCaaRubSbJROM6Lml+a1I
x9n46Hn7pzc8V2P9gQJBAIu+4eV0++ch8nr/wQdWGcBnmiwA0JPXnvuRQFcUcZ9P
c6wmnHJhfq4d0Zuhd5YeomeaFBu6LzfZE4bByo4vRJ4=
-----END RSA PRIVATE KEY-----

Bewahren Sie diesen Schlüssel gut auf und veröffentlichen Ihn keinesfalls.

Dann generieren Sie als zweiten Schritt eine Zertifikatsanfrage ("server.csr")

  openssl req -new -key server.key -out server.csr

Die erfolgten Eingaben (sonst einfach "."):

  Country Name (2 letter code) [AU]:DE
  State or Province Name (full name) [Some-State]:Germany
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:Delixs-Schule
  Common Name (eg, YOUR name) []:alix

Diese Datei "server.csr" sollte dann etwa so aussehen:

-----BEGIN CERTIFICATE REQUEST-----
MIIBhTCB7wIBADBGMQswCQYDVQQGEwJkZTEQMA4GA1UECBMHR2VybWFueTEWMBQG
A1UEChMNRGVsaXhzLVNjaHVsZTENMAsGA1UEAxMEYWxpeDCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEAwg75DoEnsSdW6X9ZhWNn38jhNGUvR3fyhSxqvM1YS2Lx
AIZbu47Lc30hNzM9Njo/8/sQAk7QhKVPH0odCp+pmvSpy8P61kfW/woqeT4z7Ltm
n4o4pzNPHplSo8VEg1VBiR+gksMIOyeMEaDFg2uY5d28bWIvYa36G7Ie4zSQFGsC
AwEAAaAAMA0GCSqGSIb3DQEBBQUAA4GBAC5SSYCxF6AFjgJnUmadIbOyyMqgu/pq
MBS6miJEeCbuBM4/0QT/Kj6AUtOTN53+d5owPt/QoV/oQxHP2gE6TnS4hqHDy2FW
zLCzopRydMdHC69+VXEaBeoi7mD8jYStsFfpgY412tZsC7UpzhPA0uPXjjXBLN2X
b7tbZsq6M0fn
-----END CERTIFICATE REQUEST-----


Überprüfen Sie nun unbedingt alle Angaben auf Korrekte Schreibweise mit:

  openssl req -noout -text -in server.csr

Die Ausgabe des Befehls sollte so aussehen:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=de, ST=Germany, O=Delixs-Schule, CN=alix
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c2:0e:f9:0e:81:27:b1:27:56:e9:7f:59:85:63:
                    67:df:c8:e1:34:65:2f:47:77:f2:85:2c:6a:bc:cd:
                    58:4b:62:f1:00:86:5b:bb:8e:cb:73:7d:21:37:33:
                    3d:36:3a:3f:f3:fb:10:02:4e:d0:84:a5:4f:1f:4a:
                    1d:0a:9f:a9:9a:f4:a9:cb:c3:fa:d6:47:d6:ff:0a:
                    2a:79:3e:33:ec:bb:66:9f:8a:38:a7:33:4f:1e:99:
                    52:a3:c5:44:83:55:41:89:1f:a0:92:c3:08:3b:27:
                    8c:11:a0:c5:83:6b:98:e5:dd:bc:6d:62:2f:61:ad:
                    fa:1b:b2:1e:e3:34:90:14:6b
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        2e:52:49:80:b1:17:a0:05:8e:02:67:52:66:9d:21:b3:b2:c8:
        ca:a0:bb:fa:6a:30:14:ba:9a:22:44:78:26:ee:04:ce:3f:d1:
        04:ff:2a:3e:80:52:d3:93:37:9d:fe:77:9a:30:3e:df:d0:a1:
        5f:e8:43:11:cf:da:01:3a:4e:74:b8:86:a1:c3:cb:61:56:cc:
        b0:b3:a2:94:72:74:c7:47:0b:af:7e:55:71:1a:05:ea:22:ee:
        60:fc:8d:84:ad:b0:57:e9:81:8e:35:da:d6:6c:0b:b5:29:ce:
        13:c0:d2:e3:d7:8e:35:c1:2c:dd:97:6f:bb:5b:66:ca:ba:33:
        47:e7


Erstellen jetzt abschließend das eigentliche Zertifikat ("server.crt"), indem Sie es selbst unterzeichnen.

  openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650


auf der Konsole erscheint:

  Signature ok
  subject=/C=de/ST=Germany/O=Delixs-Schule/CN=alix
  Getting Private key

Das fertige Zertifikat sehen Sie hier:

-----BEGIN CERTIFICATE-----
MIICAzCCAWwCCQCBnSDDZcUFmTANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJk
ZTEQMA4GA1UECBMHR2VybWFueTEWMBQGA1UEChMNRGVsaXhzLVNjaHVsZTENMAsG
A1UEAxMEYWxpeDAeFw0wOTAyMTUxOTE0NDRaFw0xOTAyMTMxOTE0NDRaMEYxCzAJ
BgNVBAYTAmRlMRAwDgYDVQQIEwdHZXJtYW55MRYwFAYDVQQKEw1EZWxpeHMtU2No
dWxlMQ0wCwYDVQQDEwRhbGl4MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC
DvkOgSexJ1bpf1mFY2ffyOE0ZS9Hd/KFLGq8zVhLYvEAhlu7jstzfSE3Mz02Oj/z
+xACTtCEpU8fSh0Kn6ma9KnLw/rWR9b/Cip5PjPsu2afijinM08emVKjxUSDVUGJ
H6CSwwg7J4wRoMWDa5jl3bxtYi9hrfobsh7jNJAUawIDAQABMA0GCSqGSIb3DQEB
BQUAA4GBAD+H9j/lmDoUX+nk4YEUFkVh23JGRCpysyEnswr+p5nlOU1ERA0F2SiQ
B85iA3XvX82G5871SZ7EA03qMaHwES4GFfeYFuiIzsew/tZ23LVCd0SHIEPuO/TQ
3/cTKSaoMm2cHlNaWsDnnfNOdYzDgYbtfFvP8uSxH6MXH20tENjO
-----END CERTIFICATE-----


Die Passphrase aus dem Key können Sie wieder entfernen, falls Sie oben doch eine eingegeben hätten:

  cp server.key server.key.orig
  openssl rsa -in server.key.orig -out server.key

Wenn Sie das Zertifikat ohne Passwort erzeugt hatten, entfällt dieser Schritt natürlich.


PHP

Installation von PHP

Das Paket libapache2-mod-php5 enthält das PHP5-Modul für den Webserver Apache 2, php5-mysql enthält das MySQL-Modul für PHP5 und php5-mhash stellt mhash-Funktionen bereit.

Die Installation erfolgt mit

 aptitude install libapache2-mod-php5 php5-mysql php5-mhash

Nach der Installation schalten Sie das PHP_Modul mit folgendem Befehl ein:

 a2enmod php5


wobei der Befehl Apache 2 enable module (kurz: a2enmod) verwendet wird.

Abschließend wird der Webserver Apache neu gestartet mit:

 /etc/init.d/apache2 restart


Test von PHP

Um PHP testen zu können, wird die eine Datei info.php benötigt. Mit dem Befehl:

 touch /var/www/info.php

erzeugen Sie diese Datei. In die Datei schreiben Sie mit einem beliebigen Editor folgende Zeilen rein:

<source lang="php"> <?php

 phpinfo();

?> </source>

Der Aufruf erfolgt nun über den Webserver mit dem Befehl:

 lynx http://localhost/info.php

Das Ergebnis sollte am Bildschirm eine recht lange Liste an Parametern und Variablen anzeigen.

Das MySQL-Modul kann erst später getestet werden, weil der MySQL-Server noch nicht eingerichtet ist. Keine Angst, wir vergessen es nicht.


Userdir

Einrichtung von Userdir

Es wird nun das userdir-Modul für die privaten Webseiten der Nutzer (/~nutzer) installiert und anschließend eingeschaltet mit:

 aptitude install libapache2-mod-ldap-userdir
 a2enmod userdir 

In der Datei /etc/apache2/sites-available/default werden folgende Zeilen nach der Stelle

CustomLog /var/log/apache2/access.log combined

ergänzt:

<source lang="text"> UserDir html_public

<Directory /home/lehrer/*/html_public> Options Indexes SymLinksIfOwnerMatch AllowOverride AuthConfig Limit FileInfo <LimitExcept GET POST> Order deny,allow Deny from all </LimitExcept> <Limit GET POST> Order allow,deny Allow from all </Limit> </Directory>

<Directory /home/schueler/*/html_public> Options Indexes SymLinksIfOwnerMatch AllowOverride AuthConfig Limit FileInfo <LimitExcept GET POST> Order deny,allow Deny from all </LimitExcept> <Limit GET POST> Order allow,deny Allow from all </Limit> </Directory>

</source>

und der Apache abschließend neu gestartet.

/etc/init.d/apache2 restart


Test von Userdir

Beim User mmustermann wurde im Homeverzeichnis das Unterverzeichnis html_public angelegt und eine Datei index.html erstellt. Die Rechte wurden für das Verzeichnis mit 755 und für die Datei mit 644 gesetzt. Der Owner wurde auf mmustermann geändert, die Gruppe root gelassen. Der Aufruf erfolgt mit

 http://localhost/~mmustermann/index.html


Weitere Werkzeuge

Installation von:


 aptitude install php5-cli php5-common php-pear


Das Paket "php5-cli" stellt einen Kommandozeileninterpreter /usr/bin/php5 zur Verfügung, der für das Testen von PHP-Scripten und auch für Shell-Scripting-Aufgaben verwendet werden kann. Das Paket "php5-common" enthält Beispieldateien und Dokumentationen für PHP5. Und "php-pear" enthält die Basis-PEAR-Klassenbibliothek für PHP.


phpLDAPadmin

Das Paket "phpldapadmin" enthält einen grafischen LDAP-Browser, der Konfigurations- und Wartungsarbeiten am LDAP-Baum ermöglicht.

Installation von:


 aptitude install phpldapadmin


Damit phpldapadmin arbeitet, werden die folgenden Korrekturen vorgenommen:

In der Datei /etc/phpldapadmin/apache.conf wird nach php_value include_path . ergänzt:

 php_admin_value safe_mode off
 php_admin_value open_basedir /var/lib/php5/:/usr/share/phpldapadmin/:/usr/share/doc/phpldapadmin/:/etc/phpldapadmin

Die letzte Zeile ist eine Zeile!

Und dann wird noch die Date /etc/phpldapadmin/config.php so angepasst, dass

  • ein Login per uid,
  • der Login per Full-DN und
  • der anonyme Bind

möglich wird.

Die geänderte Datei config.php:

<?php

$i=0;
$ldapservers = new LDAPServers;
$ldapservers->SetValue($i,'server','name','Alix per UID');
$ldapservers->SetValue($i,'server','host','localhost');
$ldapservers->SetValue($i,'server','base',array('dc=delixs-schule,dc=de'));
$ldapservers->SetValue($i,'server','auth_type','session');
$ldapservers->SetValue($i,'login','attr','uid');
$ldapservers->SetValue($i,'login','pass','');
$ldapservers->SetValue($i,'login','anon_bind',true);

$i++;
$ldapservers->SetValue($i,'server','name','Alix per Full-DN');
$ldapservers->SetValue($i,'server','host','localhost');
$ldapservers->SetValue($i,'server','port','389');
$ldapservers->SetValue($i,'server','base',array('dc=delixs-schule,dc=de'));
$ldapservers->SetValue($i,'server','auth_type','session');
$ldapservers->SetValue($i,'login','dn','');
$ldapservers->SetValue($i,'login','pass','');
$ldapservers->SetValue($i,'server','tls',false);
$ldapservers->SetValue($i,'server','low_bandwidth',false);
$ldapservers->SetValue($i,'appearance','password_hash','md5');;
$ldapservers->SetValue($i,'server','read_only',false);
$ldapservers->SetValue($i,'appearance','show_create',true);
$ldapservers->SetValue($i,'auto_number','enable',true);
$ldapservers->SetValue($i,'auto_number','mechanism','search');
$ldapservers->SetValue($i,'auto_number','search_base',null);
$ldapservers->SetValue($i,'auto_number','min','1000');
$ldapservers->SetValue($i,'auto_number','dn',null);
$ldapservers->SetValue($i,'auto_number','pass',null);
$ldapservers->SetValue($i,'login','anon_bind',true);
$ldapservers->SetValue($i,'custom','pages_prefix','custom_');
$ldapservers->SetValue($i,'unique_attrs','dn',null);
$ldapservers->SetValue($i,'unique_attrs','pass',null);

# SASL auth
$ldapservers->SetValue($i,'server','sasl_auth',true);
$ldapservers->SetValue($i,'server','sasl_mech','PLAIN');
$ldapservers->SetValue($i,'server','sasl_realm','EXAMPLE.COM');
$ldapservers->SetValue($i,'server','sasl_authz_id',null);
$ldapservers->SetValue($i,'server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i');
$ldapservers->SetValue($i,'server','sasl_authz_id_replacement','$1');
$ldapservers->SetValue($i,'server','sasl_props',null);


$friendly_attrs = array();

$friendly_attrs['facsimileTelephoneNumber'] = 'Fax';
$friendly_attrs['telephoneNumber']          = 'Phone';
$friendly_attrs['uid']                      = 'User Name';

$q=0;
$queries = array();
$queries[$q]['name'] = 'User List';
$queries[$q]['base'] = 'dc=delixs-schule,dc=de';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))';
$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto';

$q++;
$queries[$q]['name'] = 'Samba Users';
$queries[$q]['base'] = 'dc=delixs-schule,dc=de';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';

$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['base'] = 'dc=delixs-schule,dc=de';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';
?>


Webalizer

Damit immer volle Kontrolle über das Nutzungsverhalten auf dem Webserver möglich ist, wird die Analysesoftware "webalizer" installiert:

 aptitude install webalizer

Start:

 webalizer

Konfiguration:

 /etc/webalizer.conf

Reports erzeugen (Text noch unvollständig):

 cronjob....


Automatische Proxy-Konfiguration


Weblinks

Webserver

PHP

Webalizer



zurück | Hauptseite