Entwicklungsumgebung/Apache
![]() |
Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben). |
Der Webserver Apache
Installation von Apache
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 dem Befehl:
aptitude install apache2-mpm-prefork
Dabei wurde der Webserver Apache auch gleich gestartet. Die Kontrolle auf Funktionstüchtigkeit erfolgt sofort nach der Installation mit dem Text-Browser "lynx", indem dieser über
lynx http://localhost
aufgerufen wird. Es erscheint eine Webseite mit dem Inhalt "It works!".
- It works!
- Abbildung: It works!
Mit der Taste "q" beenden Sie den Textbrowser wieder und kommen so in Ihre Shell zurück.
Diese Seite kann künftig unter /var/www/index.html
durch eine eigene Seite ersetzt werden.
Konfiguration von Apache
Test von Apache
Um ein CGI-Script zu testen, erstellen Sie folgendes Script
<source lang="perl">
- !/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 und php5-mysql enthält das MySQL-Modul für PHP5.
Die Installation erfolgt mit
aptitude install libapache2-mod-php5 php5-mysql
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 (später /htdocs/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/teacher/*/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/students/*/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
Damit alle neuen Nutzer später automatisch über eine Webseite verfügen können, sind weitere Vorarbeiten nötig:
mkdir /etc/skel/html_public cd /usr/share/doc/adduser/examples/adduser.local.conf.examples/skel.other cp ./index.html /etc/skel/html_public
Mit diesen Befehlen wird die Musterseite erzeugt, die später jeder neue Nutzer automatisch in sein Homeverzeichnis gelegt bekommt.
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
lynx http://localhost/~mmustermann/index.html
Weitere Werkzeuge
Installation von:
aptitude install php5-cli php5-common php5-mhash 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. Das Paket "php5-mhash" stellt mhash-Funktionen bereit. 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....
WebDAV
Unter WebDAV (Web-based Distributed Authoring und Versioning) versteht man die Erweiterung des HTTP-Protokolls, um Benutzern das Bearbeiten von Dateien auf dem Webserver zu ermöglichen.
<source lang="text"> <Location "/pfad"> Options Indexes FollowSymLinks AllowOverride None order allow,deny allow from all
DAV On AuthType Basic
AuthLDAPBindDN cn=admin,dc=delixs-schule,dc=de AuthLDAPBindPassword SOMEPASS AuthLDAPURL ldap://127.0.0.1/cn=webmaster,ou=groups,dc=delixs-schule,dc=de?uid?sub?(objectClass=*)
AuthName "Webdav Zugriff" Require valid-user </Location> </source>
WebDAV-Client
- Mit "cadaver" kann ein Linux-Client auf WebDAV-Freigaben zugreifen, also Dateien herunterladen, ändern, erzeugen und auch löschen.
- Mittels "davfs2" können WebDAV-Freigaben als Filesysteme in fremde Linux-Systeme eingebunden (gemountet) werden, vergleichbar mit nfs-Freigaben.
- In Windows-Clients können WebDAV-Freigaben als Netzwerkfreigaben eingebunden werden.
Hinweis: Windows in Version Windows XP-Sp2 beherrscht keine BASIC-Authentifizierung von WebDAV-Freigaben. Zur Nachrüstung dieser Funktionalität muss erst der folgende Patch in der Registry erfolgen:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters] "UseBasicAuth"=dword:00000001
Speichern Sie diesen Patch einfach als Datei "webdav-xp.reg" ab und aktivieren ihn dann mittels Doppelklick.
Automatische Proxy-Konfiguration
- Definition: http://www.web-cache.com/Writings/Internet-Drafts/draft-ietf-wrec-wpad-01.txt
- siehe Hinweise unter: http://wiki.bsdforen.de/howto/automatische_proxy-konfiguration
Weblinks
Webserver
- http://www.apache.org
- http://httpd.apache.org/docs/2.0/de
- http://www.jfranken.de/homepages/johannes/vortraege/apache_inhalt.de.html
- virtuelle Hosts: http://www.tim-bormann.de/tutorial-installation-debian-etch-server/
PHP
Webalizer
Hans-Dietrich Kirmse, Klaus Werner 2009