000
01.09.2004, 09:29 Uhr
Pablo
Supertux (Operator)
|
Na, endlich habe ich mir Zeit dafür genommen
Eine Website zu machen ist nicht schwer, HTML ist einfach und es gibt gute Tutorialen dafür. Die meisten kostenlosen Server wie Geocities bieten leider nur Support für htm bzw. html Dateien an. Wenn man aber eine dynamische Seite erstelle will, geht das meistens immer schief.
Gratis-Server mit ASP[1]/PHP/CGI/PERL Support ist sehr schwer zu finden, also bleibt als einzige Möglichkeit einen eigenen Webserver zu betreiben. Dabei sollte man sich fragen, welches Betriebsystem man benutzen soll. Ich werde darauf nicht eingehen, ich empfehle nur ein Unix-Derivat wie Linux oder BSD, Betreibsysteme, die damit sehr gut umgehen können.
Was ist LAMP
LAMP steht für Linux Apache MySQL PHP. Das ist die beliebteste Software Kombination, um einen eigenen Webserver zu betreiben. Dazu gehören auch andere Packete, die mehr Sicherheit und Leistung gewährleisten. Man kann auch andere Datenbankensystem benutzen wie LDAP oder einen anderen SQL Server. Man kann auch Perl statt PHP nehmen. Hier werde ich mich aber nur auf PHP konzentrieren.
Software & Libraries
Apache * Website: www.apache.org * Tarball: www.apache.org/dist/httpd/httpd-2.0.50.tar.gz * Version: 2.0.50 * Beschreibung: Apache Webserver
PHP * Website: www.php.net * Tarball: www.php.net/distributions/php-5.0.1.tar.bz2 * Version: 5.0.1 * Beschreibung: Eingebettete Skriptsprache für dynamische Websites
MySQL * Website: www.mysql.com/ * Tarball: ftp://ftp.free.fr/pub/MySQL/Downloads/MySQL-4.0/mysql-4.0.20.tar.gz * Version: 4.0.20 * Beschreibung: Schneller multi-thread, multi-user SQL Datenbankserver
OpenSSL * Website: www.openssl.org/ * Tarball: ftp://opensores.thebunker.net/pub/mirrors/openssl//source/openssl-0.9.7d.tar.gz * Version: 0.9.7d * Beschreibung: Toolkit für SSL v2/v3 und TLS v1
PostgreSQL (Optional) * Website: www.postgresql.org/ * Tarball: ftp://ftp5.fr.postgresql.org/pub/mirrors/postgresql/source/v7.4.5/postgresql-base-7.4.5.tar.bz2 * Version: 7.4.5 * Beschreibung: Sophisticated Object-Relational DBMS.
OpenLDAP (Optional) * Website: www.OpenLDAP.org/ * Tarball: ftp://ftp.u-aizu.ac.jp/pub/net/openldap//openldap-release/openldap-2.1.30.tgz * Version: 2.1.30 * Beschreibung: LDAP Suite for application and development tools
MM-Libs * Website: www.ossp.org/pkg/lib/mm * Tarball: ftp://ftp.ossp.org/pkg/lib/mm/mm-1.3.0.tar.gz * Version: 1.3.0 * Beschreibung: Shared Memory Abstraction Library
GD-Libs * Website: www.boutell.com/gd/ * Tarball: www.boutell.com/gd/http/gd-2.0.28.tar.gz * Version: 2.0.28 * Beschreibung: Eine graphische Bibliothek zur schneller Bilderzeugung.
jpeg-libs * Website: www.ijg.org/ * Tarball: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz * Version: 6b * Beschreibung: Bibliothek zur Manipulation von JPEG Bilder
Libpng * Website: www.libpng.org/ * Tarball: http://keihanna.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.5.tar.bz2 * Version: 1.2.5 * Beschreibung: Portable Network Graphics Bibliothek
FreeType * Website: www.freetype.org/ * Tarball: http://ovh.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.5.tar.bz2 * Version: 2.1.5 * Beschreibung: Eine gute und portable Font-Engine
Zlib * Website: www.gzip.org/zlib/ * Tarball: www.gzip.org/zlib/zlib-1.2.1.tar.bz2 * Version: 1.2.1 * Beschreibung: Standard (de)compression library
Tarballs Du musst die Tarballs (Sources) runterladen, damit du die Packeten kompilieren kannst. Das wird gut 2 Stunden dauern, je nach Geschwindigkeit des Rechners. Wenn die Sources runtergeladen sind, erstelle ein Verzeichnis in /usr/src und kopiere alle Dateien dort, damit man die Übersicht behalten kann; Vorschlag
bash: |
$ mkdir /usr/src/lamp
|
Es gibt 2 Arten von Dateien, die tar.gz (dabei ist tgz das gleiche Format) und tar.bz2 Dateien. Eine tar Datei ist eine Datei, die viele Dateien enthaltet. Mit einem Kompressionsalgorithmus wie wird diese tar Datei komprimiert, es gibt dabei 2 nützliche Programme dafür, gunzip (für .gz Dateien) und bunzip (für .bz2 Dateien). Aber man kann mit tar alles erledigen.
Um .tar.gz (und .tgz) Dateien zu dekomprimieren und öffnen, brauchst du:
bash: |
$ tar xzf dateiname.tar.gz
|
x steht für "Dekompression", z für gunzip und f für Dateiname wird angeben.
Um .tar.bz2 zu dekomprimieren und öffnen, brauchst du:
bash: |
$ tar xjpf dateiname.tar.bz2
|
j steht für bunzip und p für "erhalte die originalle Rechte"
Installation
Das erste was du machen musst, sind die Sources mit zu dekomprimieren. Wenn du alle Sources in /usr/src/lamp kompiert hast, und dort dekomprimiert hast, werden die Sources der Packete in /usr/src/lamp/packetname-version stehen.
Zlib Im Sourceverzeichnis vom Zlib folgendes eingeben:
bash: |
$ ./configure --prefix=/usr --libdir=/lib $ make && make install
|
Freetype Im Sourceverzeichnis vom Freetype folgendes eingeben:
bash: |
$ ./configure --prefix=/usr $ make && make install
|
GD-Lib Im Sourceverzeichnis vom GD-Lib folgendes eingeben:
bash: |
$ ./configure --prefix=/usr $ make && make install
|
jpeg-libs Im Sourceverzeichnis vom jpeg-libs folgendes eingeben:
bash: |
$ ./configure --prefix=/usr --enable-shared --enable-static $ make && make install
|
Libpng
Zitat von ./configure: |
There is no "configure" script for Libpng-1.2.5. Instead, please copy the appropriate makefile for your system from the "scripts" directory. Read the INSTALL file for more details
|
Wenn man versucht configure auszuführen, wird diese Meldung kommen. Dabei muss man aber eine bereits geschriebene Makefile kopiert werden.
Im Sourceverzeichnis vom libpng folgendes eingeben:
bash: |
$ cp scripts/makefile.linux makefile $ make && make install
|
MM-Libs Im Sourceverzeichnis vom MM-Lib folgendes eingeben:
bash: |
$ ./configure --prefix=/usr $ make && make install
|
MySQL Ok, MySQL braucht schon einige Minuten, bis es kompiliert ist, bei mir so etwa 20-30 Minuten. Im Sourceverzeichnis vom MySQL folgendes eingeben:
bash: |
$ ./configure --prefix=/usr \ --libexecdir=/usr/sbin \ --sysconfdir=/etc/mysql \ --localstatedir=/var/lib/mysql \ --with-raid \ --with-low-memory \ --enable-assembler \ --with-charset=latin1 \ --enable-local-infile \ --with-mysqld-user=mysql \ --with-extra-charsets=all \ --enable-thread-safe-client \ --with-client-ldflags=-lstdc++ \ --with-unix-socket-path=/var/run/mysqld/mysqld.sock \ --with-embedded-server $ make && make install
|
Die Datenbanken von MySQL werden in der Zukunft unter /var/lib/mysql gespeichert werden. Die Konfigurationsdatei von MySQL befindet sich unter /etc/mysql. Hier geh eine Tasse Kaffe trinken oder Kuchen essen, weil das lange dauern kann
Einmal kompiliert und installiert, vergewissere dich, ob es Das Verzeichnis /var/lib/mysql gibt. Sonst musst du es erzeugen.
bash: |
$ mkdir /var/lib/mysql
|
Dann (auch wenn es bereits existiert)
bash: |
$ chmod 700 /var/lib/mysql $ chown mysql:mysql /var/lib/mysql
|
Damit der MySQL Server automatisch gestaret wird [2]
bash: |
$ cp support-files/mysql.server /etc/rc????
|
So, jetzt müssen wir eine Datenbank erzeugen. MySQL ist leer, und es gibt keinerlei Daten über Benutzer, Rechte, Datenbanken, etc. Da die Daten in Binär Format gespeichert werden, sind wir nicht in der Lage sie selber zu schreiben. MySQL bietet jedoch ein Tool an, mit dem eine generische Datenbank erstellt wird. Dabei müssen wir mysql_install_db ausführen, falls nicht vorhanden (im Pfad) in den sources gibt es ein Verzeichnis, wo sich das befindet: scripts/mysql_install_db.
bash: |
$ mysql_install_db Preparing db table Preparing host table Preparing user table Preparing func table Preparing tables_priv table Preparing columns_priv table Installing all prepared tables
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /etc/init.d/mysql start (you have to start the server first!) /usr/bin/mysqladmin -u root -h supertux password 'new-password' /usr/bin/mysqladmin -u root password 'new-password' See the manual for more instructions.
Please report any problems with the /usr/bin/mysqlbug script!
The latest information about MySQL is available on the web at www.mysql.com Support MySQL by buying support/licenses at https://order.mysql.com
|
So, wie du da siehst, eine Datenbank namens mysql wurde erzeugt, sie speichert die ganze Information über die Datenbanken, Benutzer, Rechte, Hosts, usw. die du nachher bestimmen wirst. Eine zusätzliche Datenbank wird erzeugt namens test. Diese Datenabk ist eine spezielle Datenabk, wo jeder Benutzer (auch für anonymen binds) in die Datenbank schrieben kann. Sie dient mehr Testzwecken.
Damit wir ein Administration Passwort eingeben können, müssen wir den MySQL Server starten
bash: |
$ /usr/bin/mysqld_safe &
|
Ganz wichtig! Vergiss das & nicht!
Jetzt müssen wir das Passwort setzten
bash: |
$ /usr/bin/mysqladmin -u root -h localhost password dein_passwort_hier
|
So, jetzt müssen wir testen, ob alles läuft:
bash: |
$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 4.0.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.00 sec)
mysql> quit Bye
|
Wenn du das siehst (nachdem du dein Passwort und SHOW DATABASES; eingegeben hast) dann bist du mit MySQL fertig.
PostgreSQL Im Sourceverzeichnis vom PostgreSQL folgendes eingeben:
bash: |
$ ./configure --prefix=/usr $ make && make install
|
Die Datenbanken werden in /var/lib/postgresql installiert
OpenLDAP Im Sourceverzeichnis vom OpenLDAP folgendes eingeben:
bash: |
$ ./configure --prefix=/usr --libexecdir=/usr/lib/openldap $ make && make install
|
OpenSSL Im Sourceverzeichnis vom OpenSSL folgendes eingeben:
bash: |
$ ./configure --prefix=/usr --openssldir=/etc/ssl $ make && make install
|
Apache Im Sourceverzeichnis vom Apache folgendes eingeben:
bash: |
$ ./configure --prefix=/var/www --enable-so --enable-auth-digest\ --enable-mime-magic --enable-ssl\ --enable-suexec --enable-cgi --enable-vhost-alias --with-z=/usr/lib --with-ssl=/usr $ make && make install
|
Apache wird gebaut und in /var/www installiert. Dort befinden sich wichtige Verzeichnisse, wir bin conf und htdocs. In htdocs befinden sich html/php Dateien, die vom Webserver anzeigt.
PHP Im Sourceverzeichnis vom PHP folgendes eingeben:
bash: |
$ ./configure --prefix=/usr --with-apxs2=/var/www/bin/apxs --with-mysql \ --with-zlib --with-ftp --with-config-file-path=/var/www/conf --with-openssl \ --with-gd=/usr --with-ttf=/usr/lib --enable-gd-native-ttf --with-ldap --with-pgsql \ --with-mm --enable-track-vars=yes --enable-url-includes --enable-sysvshm=yes \ --enable-sysvsem=yes --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib \ --with-freetype-dir=/usr/lib $ make && make install $ cp php.ini-dist /var/www/conf/php.ini
|
Konfiguration
Alles wurde installiert. nun müssen wir unseren LAMP Server einrichten und starten. Die nötigen Configdateien befinden sich in /var/www/conf.
Apache Öffne die Datei /var/www/conf/httpd.conf mit einem Texteditor deiner Wahl. Diese Datei wird automatisch von make install generiert und sehr gut dokumentiert, deshabl werde ich auf lange Erklärungen zu den einzelnen Punkten verzichten.
Das erste was wir machen werden, ist nachzuschauen, ob folgende Zeile vorhanden ist:
httpd.conf: |
LoadModule php5_module modules/libphp5.so
|
Mit dieser Zeile ist Apache in der Lage, PHP aufzurufen, damit sie .php Dateien von PHP geparst werden. make install von PHP muss diese Zeile schon eingefügt haben, vergewissere dich trotzdem.
Nun wollen wir einige Einstellungen des Servers ändern, Name & Email vom Administrator, Regel in den Verzeichnissen, VirtualHosts usw. Behalte die Datei /var/www/conf/httpd.conf offen.
httpd.conf: |
ServerAdmin deine_adresse@server.de
|
Da muss du deine Email eintragen, wenn du willst.
Hier muss du dein Domain eintragen, von dem deine Seite erreichbar sein wird. Bir mir sieht das beispielsbeise so aus: ServerName supertux.homelinux.org:80
httpd.conf: |
DocumentRoot "/var/www/htdocs"
|
DocumentRoot stellt fest, welches Verzeichnis das Web-Root Verzeichnis ist, d.h. das Verzeichnis, wo deine HTML/PHP Dateien sich befinden. Du kannst natürlich dieses Verzeichnis ändern, du musst aber darauf achten, dass die HTML/PHP Dateien des neuen Verzeichnnis Leserechte für die Gruppe "others" haben muss; ebenfalls müssen die Verzeichnisse Ausführbarerechte für die Gruppe "others" haben, weil der Apache Daemon als nobody:nobody läuft.
httpd.conf: |
<Directory /> Options FollowSymLinks AllowOverride AuthConfig </Directory>
|
Achte auf die Änderung an der Zeile 3. Standardmäßig steht da AllowOverride none. Das teilt dem Apache mit, dass die Rechte auf die Web-Root Verzeichnis (und somit für die ganzen Verzeichnisse) in /var/www/conf/httpd.conf konfigurierbar sind. Mit AllowOverride AuthConfig kann der Benutzer seine eigene Rechte haben, d.h. die Geschichte mit den .htaccess Dateien klappt!
Wenn wir wollen, dass index.php angezeigt wird, wenn man ein Verzeichnis aufruft, dann
httpd.conf: |
DirectoryIndex index.php index.html index.html.var
|
Die Reihenfolge ist es hier wichtig. Wenn man beispielsbeise die Siete www.dummyserver.com/directory in dem Webbrowser eingibt, wird meistens schon die richtige Seite angeziegt. Was passiert ist folgendes: Wenn keinen Dateinamen angegeben wird, sucht der Apache auf index.php, wenn nicht vorhanden auf index.html, wenn nicht vorhanen auf index.html.var usw. Wenn keine solche Dateien in diesem Verzeichnis enthalten sind, dann zeigt der Apache je nach Konfiguration eine Fehlermeldung oder die ganzen Dateien im Verzeichnis an.
So, der Apache weiß aber noch nicht, welche Dateien er dem PHP geben muss, damit sie von PHP interpretiert werden. Das wollen wir jetzt tun:
httpd.conf: |
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
|
Du kannst natürlich andere Dateiänderungn nehmen. Davon rate ich aber ab, weil man sich dadurch böse Überraschungen erspart.
Wenn man Unterdomains haben will, angenommen man ist durch foo.com erreichbar und man will folgende Doamins erreichbar sein, www.foo.com, mail.foo.com, admin.foo.com, usw, braucht nicht jedes Mal einen neuen Apache Server zu starten. Man kann VirtualHosts haben, die dafür sorgen, die richtige Seite anzuzeigen, abhängig davon, ob der Benutzer www.foo.com oder mail.foo.com im Webbrowser eingegeben hat.
Folgendes muss auf keinen Fall fehlen:
httpd.conf: |
NameVirtualHost *:80
|
Ein Beispiel bei mir:
httpd.conf @ supertux.homelinux.org: |
NameVirtualHost *:80 <VirtualHost *:80> Servername supertux.homelinux.org DocumentRoot /var/www/public_docs ServerAdmin rex@supertux.homelinux.org ErrorLog /var/www/logs/error_log TransferLog /var/www/logs/access_log </VirtualHost> <VirtualHost *:80> Servername rex.supertux.homelinux.org DocumentRoot /home/rex/public_html </VirtualHost> <VirtualHost *:80> Servername dev.supertux.homelinux.org DocumentRoot /var/www/public_docs/dev </VirtualHost>
|
SSL Verbindungen durch https einrichten
Die Datei /var/www/conf/ssl.conf enthält die Konfiguration für die SSL Verbindungen durch https. Man kann auch VirtualHosts mit SSL einrichten, es ist im Prinzip genau dasselbe. Wir brauchen dann (wenn möglich) für jedes VirtualHost ein Zertifikat. Man kann mittels OpenSSL eigene Zertifikate erstellen. Man braucht auch Signierte Zertifikate. Die meisten großen Server lassen ihre Zertifikate von anderen Gesselschaften signieren, wie VeriSign. Das kostet aber viel Geld. Wir werden deshalb unsere Zertifikate und Public Key selber erzeugen und signieren.
bash: |
$ cd /var/www/conf $ mkdir certificates $ cd certificates
|
Wenn openssl installiert ist, dann muss dieses Verzeichnis geben /etc/ssl/misc/ mit folgendem Inhlat:
CA.pl CA.sh c_hash c_info c_issuer c_name der_chop
Wenn nicht, dann liegt es irgendwo anders. Wir werden mit
bash: |
$ find / -iname CA.sh
|
suchen, und dann mit dem richtigen Pfad ausführen.
bash: |
$ /etc/ssl/misc/CA.sh -newca CA certificate filename (or enter to create) [ENTER] Making CA certificate ... Generating a 1024 bit RSA private key ........................++++++ ..++++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: [PASSWORD] Verifying - Enter PEM pass phrase: [PASSWORD] ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Baden-Wuerttemberg Locality Name (eg, city) []:Freiburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:Supertux Organizational Unit Name (eg, section) []:supertux.homelinux.org Common Name (eg, YOUR name) []:supertux.homelinux.org Email Address []:rex@supertux.homelinux.org
|
Wir rufen als erstes /etc/ssl/misc/CA.sh -newca auf. Das wird unser Zertifikat erzeugen. Wenn nach dem CA certificate filename gefragt wird, drücken wir ENTER, damit ein neues Zertifikat/Public Key erstellt wird/werden. Im Enter PEM pass phrase muss man ein Passwort eingeben, dass man nicht vergessen soll, weil man es für die Signierung braucht. Die nächste Felder sind quasi Pflichfelder, sie enthalten Information über deinen Server und über den Administrator, das ist wichtig, weil wenn eine https Verbdinung aufgebaut werden, untersuchen die meisten Webbrowser diese Daten. In Country Name darf man nur 2 Buchstaben eingeben, DE für Deutschland, CH für die Schwiez, AU für Österreich, usw. Bei dem Bundsland darf mein keine Sonderzeichen wie ä,ö oder ü benutzen. Ganz wichtig Unter Common Name muss der Name eingeben werden, mit dem dein Server erreicht wird, in meinem Fall supertux.homelinux.org. Die Email Adresse kannst du leer lassen, indem du nur einen Punkt eingibst.
Ein Verzeichnis wurde erzeugt, demoCA, welches das unter demoCA/cacert.pem und demoCA/private/cakey.pem gespeicherte Zertifikat unserer CA und den privaten Schlüssel enthält. Im nächsten Schritt wird das Serverzertifikat generiert.
Jetzt wollen wir ein Zertifikat für die Signierung erstellen:
bash: |
$ openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem Generating a 1024 bit RSA private key ...++++++ .................++++++ writing new private key to 'newreq.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Baden-Wuerttemberg Locality Name (eg, city) []:Freiburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:Supertux Organizational Unit Name (eg, section) []:supertux.homelinux.org Common Name (eg, YOUR name) []:supertux.homelinux.org Email Address []:rex@supertux.homelinux.org
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:.
|
Im großen und ganzen wiederholen sich die Abfragen der CA-Erstellung. Die zusätzlichen Attribute können leer gelassen werden. Dieses geschieht durch die Angabe eines Punktes ".". Als Ergebnis existiert nun eine Datei newreq.pem im aktuellen Verzeichnis.
Nun muss der neuerzeugte Schlüssel noch von unserer CA signiert werden. Hierzu kommt das bereits von der CA-Erstellung bekannte Skript zum Einsatz:
bash: |
$ /etc/ssl/misc/CA.sh -sign Using configuration from /etc/ssl/openssl.cnf 8785:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_default name=unique_subject Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 31 19:17:39 2004 GMT Not After : Aug 31 19:17:39 2006 GMT Subject: countryName = DE stateOrProvinceName = Baden-Wuerttemberg localityName = Freiburg organizationName = Supertux organizationalUnitName = supertux.homelinux.org commonName = supertux.homelinux.org emailAddress = rex@supertux.homelinux.org X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 83:1B:1D:0E:82:B0:FF:5B:7F:9F:1C:CC:DF:F1:C6:E5:F5:05:A8:53 X509v3 Authority Key Identifier: keyid:E3:66:9E:E5:91:BD:4A:92:E2:7D:97:C5:0D:D9:DC:CC:5D:80:AF:67 DirName:/C=DE/ST=Baden-Wuerttemberg/L=Freiburg/O=Supertux/OU=supertux.homelinux.org/CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org serial:00
Certificate is to be certified until Aug 31 19:17:39 2006 GMT (730 days) Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Baden-Wuerttemberg, L=Freiburg, O=Supertux, OU=supertux.homelinux.org, CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org Validity Not Before: Aug 31 19:17:39 2004 GMT Not After : Aug 31 19:17:39 2006 GMT Subject: C=DE, ST=Baden-Wuerttemberg, L=Freiburg, O=Supertux, OU=supertux.homelinux.org, CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:f5:1b:49:cc:a0:45:88:18:a3:7b:83:ad:87:4f: e8:ea:ea:13:bf:8a:23:0f:d3:99:ae:f4:41:db:30: 2d:d0:64:f3:14:80:52:d4:d5:d8:55:a6:af:2c:24: 83:ad:76:22:2d:67:be:71:9f:69:40:70:6b:bd:08: 3c:2b:11:e9:ee:dc:7a:4a:1c:4d:5a:72:d9:e2:01: 08:a8:3c:fb:03:ec:a8:6b:7c:a2:26:8e:12:00:a3: d1:0c:4a:ef:7d:69:65:1d:ce:d6:ad:70:22:af:95: b3:ae:01:72:ba:2a:43:d4:45:ff:5b:21:b0:40:0d: 02:a4:b0:65:59:7a:68:66:77 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 83:1B:1D:0E:82:B0:FF:5B:7F:9F:1C:CC:DF:F1:C6:E5:F5:05:A8:53 X509v3 Authority Key Identifier: keyid:E3:66:9E:E5:91:BD:4A:92:E2:7D:97:C5:0D:D9:DC:CC:5D:80:AF:67 DirName:/C=DE/ST=Baden-Wuerttemberg/L=Freiburg/O=Supertux/OU=supertux.homelinux.org/CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org serial:00
Signature Algorithm: md5WithRSAEncryption 41:c5:04:0b:66:b5:d8:cc:a8:22:21:2f:dc:17:ad:d0:57:c0: f0:49:c6:5f:cc:26:8b:05:12:b7:79:6e:c9:38:0e:80:6b:43: 0c:4b:f8:6e:c8:c8:92:b3:33:cf:e2:67:4a:58:64:87:ab:0e: 09:30:fe:ef:45:cd:20:09:9b:b4:95:36:86:12:65:47:68:b8: f0:ed:4d:18:37:a4:47:72:43:00:53:24:c9:61:ce:d1:65:b7: eb:07:94:42:24:71:5a:4a:69:6d:16:c4:79:16:ae:08:35:58: ac:a1:32:5b:16:e5:cf:22:27:37:34:b7:23:1f:19:5e:da:a5: 76:bf -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- Signed certificate is in newcert.pem
|
Das erste Zertifikat ist demoCA/cacert.pem newcert.pem ist das signierte Zertifikat newreq.pem ist das Zertifikatschlüssel (key file)
demoCA kann man nun löschen, es wäre besser, die Datein entsprechen umzunenen, denn es ist empfehlenswert ein signierzes Zertifikat für jedes neues SSL-VirtualHost zu erstellen.
Mehr Infos dazu: http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html.en#keyscerts
Nun werden wir die SSL Virtual Domains konfigurieren. Öffnen die /var/www/conf/ssl.conf mit einem Texteditor deiner Wahl. Es gibt nur eine Kleinigkeit, die anders ist als normale HTTP Verbidnung.
Vor den ganzen <VirtualHost> (wie bei httpd.conf) müssen wir folgendes hinzufügen:
ssl.conf: |
NameVirtualHost *:443
|
Es gibt <VirtualHost _default_:443> und dort werden wir einige Sache ändern:
ssl.conf: |
DocumentRoot "/var/www/public_docs" ServerName supertux.homelinux.org:443 ServerAdmin rex@supertux.homelinux.org ErrorLog /var/www/logs/error_log TransferLog /var/www/logs/access_log SSLCertificateFile /var/www/conf/certificates/supertux.homelinux.org-cert.pem SSLCertificateKeyFile /var/www/conf/certificates/supertux.homelinux.org-key.pem
|
wobei ich newcert.pem in supertux.homelinux.org-cert.pem und newreq.pem in supertux.homelinux.org-key.pem unbenannt habe.
Wenn ein neuer SSL VirtualHost hinzugefügt werden soll, dann soll vor </IfDefine> gemacht werden, Beispiel:
ssl.conf @ supertux.homelinux.org: |
<VirtualHost *:443> DocumentRoot "/home/rex/public_html" ServerName rex.supertux.homelinux.org:443 ServerAdmin rex@supertux.homelinux.org ErrorLog /var/www/logs/error_log TransferLog /var/www/logs/access_log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /var/www/conf/certificates/supertux.homelinux.org-cert.pem SSLCertificateKeyFile /var/www/conf/certificates/supertux.homelinux.org-key.pem <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory>
SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0
CustomLog /var/www/logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
|
PHP
Jetzt werden wir PHP konfigurieren. PHP kann schon so laufen, aber es gäbe ein Paar Vorschläge von mir. Je härter PHP konfiguriert ist, desto sauberer werden die Skripts und vor allem hat man die Gewissheit, dass sie überall mit allen Konfigurationen laufen. Wenn du mit der aktuellen Konfiguration von PHP zufrieden bist, kannst du das überspringen.
Öffnen die Datei /var/www/conf/php.ini mit einer Texteditor deiner Wahl.
php.ini: |
error_reporting = E_ALL arg_separator.output = "&"
|
Mit error_reporting = E_ALL bekommt man immer alle Fehler, wenn Variablen keinen Wert haben, wenn Variablen nicht intialisiert werden, usw. Mit arg_separator.output = "&" wird & statt & geschrieben, wenn PHPSESSID an den URLs angehängt werden, somit XHTML konform.
Optional
php.ini: |
url_rewriter.tags = ""
|
Somit hängt PHP niemals die PHPSESSID an, der Programmierer kümmert sich vollständig darum. Das gefällt mir so, wenn du aber willst, dass PHP dir dabei helft, dann lass es so wie es war.
Glückwunsch, der LAMP Server sollte jetzt laufen. PHP hat zusätzlich Support für LDAP und PostrgeSQL und natülrich Support für MySQL. Nun werden wir testen, dafür müssen wir den Server starten.
bash: |
$ /var/www/bin/apachectl start
|
startet den Server nur am Port 80 (sofern du Listen 80 in httpd.conf hast, sonst das am angegebenen Port)
bash: |
$ /var/www/bin/apachectl startssl
|
startet den Server nur am Port 80 und den durch SSL versicherten Server am Port 443, somit sind https Verbindungen möglich.
bash: |
$ /var/www/bin/apachectl stop
|
stopt den Server.
Apache & MySQL beim Booten starten [2]
Da kann ich wirklich wenig helfen, denn der Initvorgang hängt von deiner Distribution ab. Das Skript /var/www/bin/apachectl ist bereits ein RC Skript, welches am Runlevel 5 gestartet werden kann/muss.
Beispiel bei SuSE (MySQL) (Im Source Verzeichnnis vom MySQL)
bash: |
$ cp support-files/mysql.server /etc/rc.d/init.d/ $ chmod 744 /etc/rc.d/init.d/mysql.server $ cd /etc/rc.d/init.d/rc2.d $ ln -s ../mysql.server S20mysql.server $ ln -s ../mysql.server K20mysql.server
|
Biespiel bei SuSE (Apache)
Code: |
$ ln -s /var/www/bin/apachectl /etc/rc.d/apachectl $ cd /etc/rc.d/rc2.d $ ln -s ../apachectl S20apachectl $ ln -s ../apachectl K20apachectl
|
Oder du kannst auch ein eigenes Skript erstellen, welches /var/www/bin/apachectl mit startssl aufruft.
Erreichbar, wenn du online bist
Eine der Probleme, die man hat, wenn man keine Standleitung hat, ist dass die IP sich ständig ändert. Und den ganzen Tag online sein, ist es auch nicht möglich, weil Internet Anbieter wie ·T··· Online nach 24 Stunden die Verbidung schließen. Deshlab ist es nicht möglich ein statische IP zu haben. Es gibt jedoch eine feine Lösung dafür.
DNS Server wie DynDNS bieten gratis statische und dynamische Domains. Man kann jeweils bis 5 gratis Domains haben und es gibt zahlreiche Tools, die nach IP Änderung die IP beim DNS Server vom Dyndns aktualisieren. Dyndns ist auch meiner Meinung nach das beste von allen, die Aktualisierungszeiten bei dynamische Domains beträgt etwa 3 bis 5 Sekunden und 3 bis 5 Minuten bei statische Domains. Zudem sind die Domainnames schön (vor allem für Linux fans) wie homelinux.org. Mein lieblingstool ist updateDD vom Philipp Benner.
Kurzer Einblink in die Arbeitsweise vom LAMP
Ich finde wichtig, dass du ein bisschen verstehst, wie ein LAMP Server funktioniert. Ich verzichte hiermit auf lange und komplizierte Erklärungen, ich werde das mit einfachen Worten erklären, zumindest werde ich versuchen.
Wenn man die Adresse http://supertux.homelinux.org/index.php aufruft, wird dein Webbrowser als erstes nach der IP Adresse fragen, die sich hinter supertux.homelinux.org verbirgt. Wenn der Webbrowser diese erfahren hat, dann baut er eine Verbidnung mit dem Server auf Port 80 auf und sagt dem Webserver, "gib mir den Inhalt der Datei /index.php". Der Webserver wird diese Datei suchen, wenn er sie findet, schaut er sich in der Konfiguration, ob er diese Datei liefern kann. Wenn der Benutzer Rechte dafür hat, wird der Webserver herausfinden, ob den Inhalt der Datei sofort leifern kann, oder ob er den Inhalt zuerst PHP schicken soll und dann das zurückliefern, was PHP zurückliefert.
Bei index.php lässt der Webserver PHP diese Datei parsen. Bevor der Inhalt der Ausgabe von PHP an den Webbrowser weitergeleitet werden kann, schickt der Webserver die Header Information. Das ist für den Webbrowser ganz wichtig, weil er somit erfährt, ob es sich um Text oder HTML Code oder ein Bild oder eine PDF Datei handelt, und je nach Dateityp muss er dementsprechend reagieren. Wenn die Header Information geschickt wird, dann leitet der Webserver den Inhalt der Ausgabe von PHP an den Webbrowser weiter. Der Webbrowser weiß dann, was er damit machen soll.
---------------------------------------------------------------------------------- [1] Active Server Pages, eine von Microsoft entwickelte eingebettete Skriptsprache , die mit dem MS-IIS läuft. [2] Da das init-skript von der Distribution abhängt, gibt es kein generisches Verfahren. Hier ein Beispiel für SuSE
bash: |
$ cp support-files/mysql.server /etc/rc.d/init.d/ $ chmod 744 /etc/rc.d/init.d/mysql.server $ cd /etc/rc.d/init.d/rc2.d $ ln -s ../mysql.server S20mysql.server $ ln -s ../mysql.server K20mysql.server
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 14.02.2005 um 19:57 Uhr von Pablo editiert. |