Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Apache
Die Apache-Variablen
Config variable ${APACHE_PID_FILE} is not defined
Die Variablen in den Konfigurationsdateien müssen in geschweiften Klammern gefasst werden, sonst startet der Apache 2.4.7 nicht:
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Fehlermeldungen:
# apache2 -V
[Wed May 30 11:49:49.233188 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Wed May 30 11:49:49.233272 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Wed May 30 11:49:49.233318 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Wed May 30 11:49:49.233322 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Wed May 30 11:49:49.244658 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
[Wed May 30 11:49:49.244917 2018] [core:warn] [pid 5572] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
Ursache hierfür → in der aktuellen SHELL sind diese Variablen tatsächlich nicht bekannt und bei dem Aufruf apache2 -V werden sie auch nicht geladen, deshalb muss man sie vor dem Aufruf manuell laden, z.B. so:
# (. /etc/apache2/envvars ; apache2 -V)
Server version: Apache/2.4.7 (Ubuntu)
Server built: Apr 18 2018 15:36:26
Server's Module Magic Number: 20120211:27
Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
Hier sind die Klammer wichtig, weil sonst wichtige Variablen aus unserer SHELL-Umgebung überschrieben werden, wie z.B. ${HOME}.
Ubuntu
Apache 2.2 (Ubuntu 12.04 LTS)
Authentifizierung per mod_auth_mysql
als erstes muss die DB+Tabelle angelegt werden:
> echo "CREATE DATABASE passwort_db" | mysql -h meine.datenbank.de > echo "CREATE TABLE login_tab (name char(30) NOT NULL DEFAULT '', passwort char(20) NOT NULL DEFAULT '', gruppe char(10) DEFAULT NULL, PRIMARY KEY (name)) ENGINE=InnoDB DEFAULT CHARSET=utf8;" | mysql -h meine.datenbank.de passwort_db
dann der User mit verschlüsseltem Passwort eingetragen werden:
> echo "INSERT INTO login_tab (name,passwort) VALUES ('fritz',ENCRYPT('geheim'));" | mysql -h meine.datenbank.de passwort_db
> echo "SELECT * FROM login_tab WHERE name = 'fritz';" | mysql -t -h meine.datenbank.de passwort_db
+-------+---------------+--------+
| name | passwort | gruppe |
+-------+---------------+--------+
| fritz | ges0Nvtjj0kZs | NULL |
+-------+---------------+--------+
im Apache muss zwingend das entsprechende Modul aktiviert werden:
> aptitude install apache2 apache2-utils libapache2-mod-auth-mysql > a2enmod auth_mysql > service apache2 restart
den Apache kann man per ".htaccess" konfigurieren:
> vi .htaccess
AuthName "password protected WebSite" AuthType Basic AuthBasicAuthoritative Off AuthUserFile /dev/null AuthMySQL On AuthMySQL_Authoritative On AuthMySQL_Host meine.datenbank.de AuthMySQL_Port 3306 AuthMySQL_DB passwort_db AuthMySQL_User fritz AuthMySQL_Password geheim AuthMySQL_Password_Table login_tab AuthMySQL_Username_Field name AuthMySQL_Password_Field passwort AuthMySQL_Group_Field user_group AuthMySQL_Encryption_Types Plaintext Crypt_DES require valid-user ### die Datei .htpasswd muss drin stehen, ### sonst kommt eine Fehlermeldung ins error_log ### wegen Datei nicht gefunden AuthUserFile /srv/.htpasswd
Apache 2.4 (Ubuntu 14.04 LTS)
-
ORDER, ALLOW, DENY und SATISFY brauchen das mod_access_compat → abgekündigt- → Übergangsweise können diese Direktiven mit dem Kompatibilitätsmodul weiter genutzt werden:
a2enmod access_compat - → neuer Weg:
a2enmod authz_hostRequire localRequire ip 192.168.1.104 192.168.1.205Require ip 10 172.20 192.168.2Require ip 10.1.0.0/8Require host .net example.edu
Authentifizierung per mod_mod_authn_dbd
an Stelle von mod_auth_mysql (libapache2-mod-auth-mysql) soll nun mod_authn_dbd (libaprutil1-dbd-mysql) verwendet werden
als erstes muss die DB+Tabelle angelegt werden:
> echo "CREATE DATABASE passwort_db" | mysql -h meine.datenbank.de > echo "CREATE TABLE login_tab (name char(30) NOT NULL DEFAULT '', passwort char(20) NOT NULL DEFAULT '', gruppe char(10) DEFAULT NULL, PRIMARY KEY (name)) ENGINE=InnoDB DEFAULT CHARSET=utf8;" | mysql -h meine.datenbank.de passwort_db
dann der User mit verschlüsseltem Passwort eingetragen werden:
> echo "INSERT INTO login_tab (name,passwort) VALUES ('fritz',ENCRYPT('geheim'));" | mysql -h meine.datenbank.de passwort_db
> echo "SELECT * FROM login_tab WHERE name = 'fritz';" | mysql -t -h meine.datenbank.de passwort_db
+-------+---------------+--------+
| name | passwort | gruppe |
+-------+---------------+--------+
| fritz | ges0Nvtjj0kZs | NULL |
+-------+---------------+--------+
im Apache muss zwingend das entsprechende Modul aktiviert werden:
> aptitude install apache2 apache2-utils libaprutil1-dbd-mysql > a2enmod dbd authn_dbd authn_core auth_basic authz_user > service apache2 restart
> vi /etc/apache2/sites-enabled/000-default.conf
DBDriver mysql
DBDParams "host=meine.datenbank.de port=3306 user=fritz pass=geheim dbname=passwort_db"
DBDMin 2
DBDKeep 6
DBDMax 18
DBDExptime 300
<VirtualHost *:80>
...
DocumentRoot /var/www/
<Location />
AuthName "password protected WebSite"
AuthType Basic
AuthBasicProvider dbd
Require valid-user
AuthDBDUserPWQuery "SELECT user_passwd FROM user_info WHERE user_name=%s"
</Location>
...
DB-Cache
Das Modul "mod_authnz_ldap" hat seinen eigenen Cache aber das Modul "mod_authn_dbd" kann evtl. durch einen Cache beschleunigt werden.
> a2enmod cache cache_socache authn_socache > vi /etc/apache2/sites-enabled/000-default.conf
...
<Location />
AuthName "password protected WebSite"
AuthType Basic
AuthBasicProvider socache dbd
AuthnCacheProvideFor dbd
AuthnCacheContext my-server
Require valid-user
AuthDBDUserPWQuery "SELECT user_passwd FROM user_info WHERE user_name=%s"
</Location>
...
> service apache2 restart
FreeBSD 10.1 + Apache 2.4 + SSL
> pkg install apache24
alter Standard-Schlüssel:
> openssl req -rand /dev/urandom -new -x509 -newkey rsa:4096 -sha512 -nodes -keyout /usr/local/etc/apache24/server.key -keyform PEM -out /usr/local/etc/apache24/server.crt -outform PEM -days 7000 -subj "/emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname"
Elliptischer Kurven - Schlüssel:
> openssl ecparam -out /usr/local/etc/apache24/server.key -name secp256k1 -genkey > openssl req -new -x509 -key /usr/local/etc/apache24/server.key -keyform PEM -out /usr/local/etc/apache24/server.crt -outform PEM -days 7000 -subj "/emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname"
SSL-Cipher auflisten (https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslciphersuite):
> openssl ciphers -V > openssl ciphers | tr -s ':' '\n' > openssl ciphers -V TLSv1.2
> vi /usr/local/etc/apache24/extra/httpd-ssl.conf
...
#SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
#SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
#SSLProxyCipherSuite TLSv1.2
SSLProxyCipherSuite EECDH+aRSA+AES256
#SSLCipherSuite TLSv1.2
SSLCipherSuite EECDH+aRSA+AES256
...
SSLHonorCipherOrder on
...
#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3
SSLProtocol -ALL +TLSv1.2
SSLProxyProtocol -ALL +TLSv1.2
...
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/www/apache24/data"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"
...
> vi /usr/local/etc/apache24/httpd.conf
...
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
...
LoadModule ssl_module libexec/apache24/mod_ssl.so
...
LoadModule cgi_module libexec/apache24/mod_cgi.so
...
AddHandler cgi-script .cgi
...
# Various default settings
Include etc/apache24/extra/httpd-default.conf
...
# Secure (SSL/TLS) connections
Include etc/apache24/extra/httpd-ssl.conf
...
> service apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 27530.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
> service apache24 status
apache24 is running as pid 26308.
FreeBSD 12.1 + Apache 2.4 + SSL 1.1.1d
alle TLSv1.3 aber nur einen TLSv1.2-Cipher erlauben, außer zum öffnen der Seiten im Unterverzeichnis /var/www/mit_alte_cipher, dort dürfen auch weitere TLSv1.2-Cipher genutzt werden:
> vi /usr/local/etc/apache24/extra/httpd-ssl.conf
...
SSLEngine on
...
SSLProxyCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384
SSLCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384
#SSLCipherSuite HIGH:!aNULL:!MD5
#SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
...
SSLHonorCipherOrder on
...
SSLProtocol -ALL +TLSv1.3 +TLSv1.2
SSLProxyProtocol -ALL +TLSv1.3 +TLSv1.2
...
<Location "/var/www/mit_alte_cipher">
SSLProxyCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-AES256-CCM-8:DHE-RSA-AES256-CCM:ECDHE-RSA-ARIA256-GCM-SHA384:DHE-RSA-ARIA256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM-8:DHE-RSA-AES128-CCM:ECDHE-RSA-ARIA128-GCM-SHA256:DHE-RSA-ARIA128-GCM-SHA256
SSLCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-AES256-CCM-8:DHE-RSA-AES256-CCM:ECDHE-RSA-ARIA256-GCM-SHA384:DHE-RSA-ARIA256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM-8:DHE-RSA-AES128-CCM:ECDHE-RSA-ARIA128-GCM-SHA256:DHE-RSA-ARIA128-GCM-SHA256
</Location>
Sicherheit im Apache
-
- SSL 2.0 → angreifbar
- SSL 3.0 → angreifbar
- Einstellung ab Firefox 24:
security.tls.version: 0
- TLS 1.0 (SSL 3.1) → angreifbar (1999)
- Einstellung ab Firefox 24:
security.tls.version: 1
- TLS 1.1 (SSL 3.2) → nicht angreifbar (2006)
- Einstellung ab Firefox 24:
security.tls.version: 2
- TLS 1.2 (SSL 3.3) → nicht angreifbar (2008)
- Einstellung ab Firefox 24:
security.tls.version: 3
-
- Einstellung ab Firefox 61:
security.tls.version.max: 4
openSSL
so kann man sich alle unterstützten SSL-Cipher anzeigen lassen:
> openssl ciphers -v 'ALL'
so die 40-Bit-Cipher:
> openssl ciphers -v 'EXPORT'
so nur die schwachen (meist 56 Bit) Cipher:
> openssl ciphers -v 'LOW'
so nur die mittelstarken (meist 128 Bit) Cipher:
> openssl ciphers -v 'MEDIUM'
so nur die starken (meist >128 Bit) Cipher:
> openssl ciphers -v 'HIGH'
In der Apache-CFG (/etc/apache2/httpd.conf) kann man definieren welche Cipher vom Apache verwendet werden sollen.
mit mod_ssl (TLSv1.3 und TLSv1.2 und vom schwächeren TLSv1.2 nur die "sicheren" Cipher erlauben):
... SSLEngine on SSLHonorCipherOrder On SSLProtocol -ALL +TLSv1.3 +TLSv1.2 SSLCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-AES256-CCM-8:DHE-RSA-AES256-CCM:ECDHE-RSA-ARIA256-GCM-SHA384:DHE-RSA-ARIA256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM-8:DHE-RSA-AES128-CCM:ECDHE-RSA-ARIA128-GCM-SHA256:DHE-RSA-ARIA128-GCM-SHA256 ...
… so kann man sich die Chiffrensammlung ansehen:
wird der Apache mit dem SSL-Modul eingesetzt, dann ist es sinnvoll nur "TLS1.2" zu verwenden, und davon nur die sichersten ciphers
> openssl ciphers -v 'EECDH+aRSA+AES256:ECDHE-RSA-AES128-GCM-SHA256:!SSLv3'
am Ende darf der Restart des Apache nicht vergessen werden:
> service apache2 restart
GnuTLS
Als die BIEST-Sicherheitslücke bekannt wurde, konnte openSSL noch kein TLS1.2, die Lösung mit mod_gnutls (http://www.zimbio.com/Linux/articles/oAs-ep5LjPs/How+Upgrade+SSL+GnuTLS+Apache+Ubuntu):
... GnuTLSCache dbm %%DBDIR%%/tls-cache GnuTLSCacheTimeout 500 GnuTLSEnable on GnuTLSKeyFile /etc/ssl/certs/private/example_com.key.pem GnuTLSCertificateFile /etc/ssl/certs/example_com.crt.pem GnuTLSClientCAFile /etc/ssl/certs/example_com.ca.pem #GnuTLSPriorities SECURE256:-VERS-SSL3.0:-VERS-TLS1.0:-ARCFOUR-128 GnuTLSPriorities SECURE256:-VERS-TLS-ALL:+VERS-TLS1.2:-CIPHER-ALL:+AES-256-CBC:+AES-128-CBC:+3DES-CBC:-MAC-ALL:+SHA512:+SHA384:+SHA256:+SHA1:-SIGN-RSA-RMD160:-SIGN-RSA-MD5:-SIGN-RSA-MD2:-NULL ...
die Zwischenlösung mit mod_gnutls (der Firefox 24 unterstützt "TLS 1.2", allerdings muss es erst per about:config (security.tls.version.max=3) aktiviert werden!):
... GnuTLSCache dbm %%DBDIR%%/tls-cache GnuTLSCacheTimeout 500 GnuTLSEnable on GnuTLSKeyFile /etc/ssl/certs/private/example_com.key.pem GnuTLSCertificateFile /etc/ssl/certs/example_com.crt.pem GnuTLSClientCAFile /etc/ssl/certs/example_com.ca.pem GnuTLSPriorities SECURE256:-CIPHER-ALL:+ARCFOUR-128:-MD5:-ANON-DH:-RSA-EXPORT:-NULL ...
… so kann man sich die Chiffrensammlung ansehen:
GnuTLS-Testaufruf
> gnutls-cli --priority "SECURE256:-CIPHER-ALL:+ARCFOUR-128:-MD5:-ANON-DH:-RSA-EXPORT:-NULL" domain.de
am Ende darf der Restart des Apache nicht vergessen werden:
> service apache2 restart
URL-Rewriting (mod_rewrite)
mit mod_rewrite kann man nur schwer lesbare URLs in angenehmere umwandeln und auch Suchmaschinen eine bessere Indizierung ermöglichen.
- mod_rewrite
- mod_rewrite Demystified: A Brief Guide With Resources
permanente Umzüge
Wenn man eine Domain oder eine Seite auf eine neue URL umziehen lässt, sollte man korrekt den HTTP-Status 301 (moved permanently) senden. Dann werden sich auch Suchmaschinen die neue URL merken und man bleibt im Suchindex.
Die folgendene Konfiguration kann man global in der Apache-Konfiguration einstellen oder in einer .htaccess-Datei im Stammverzeichnis hinterlegen.
RewriteEngine On RewriteRule ^(.*)$ http://www.NEUE-SEITE.de/$1 [R=301,L] RewriteRule .+ http://www.NEUE-SEITE.de/ [R=301,L]
Wenn rigeros alle (alten) URLs auf die neue Startseite gehen sollen:
RewriteEngine On RedirectMatch (.*) http://www.NEUE-SEITE.de [R=301,L]
Apache Log Rotation
Logs per Script rotieren
Hiermit hat man die Möglichkeit, das rotieren der Logdateien per CRON auf Mitternacht zu legen.
mv access_log access_log.old mv error_log error_log.old apachectl graceful sleep 600 gzip access_log.old error_log.old
Logs alle 24 Stunden rotieren
Hiermit wird die Logdatei immer die Logs für genau 24 Stunden enthalten. Gezählt wird ab Prozess-Start.
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
CGI
Möchte man per Knopfdruck ein Script ausführen, dann macht man das per CGI.
In der Konfiguration muss diese Zeile stehen,
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
damit die URL "www.server.de/cgi-bin/" über den Browser überhaupt erst ansprechbar ist.
Damit die darin liegenden Dateien beim Aufruf auch als Scripte abgearbeitet werden, muss noch die folgende Sektion in die Konfiguration aufgenommen werden:
<Directory "/srv/www/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
Das Verzeichnis /srv/www/cgi-bin/ muss ausführbar sein und dem selben Benutzer gehören, unter dem der Apache läuft.
z.B.:
> chmod -R 0750 /srv/www/cgi-bin/ > chown -R www:www /srv/www/cgi-bin/
Apache 2.4 + CGI + FreeBSD 10.1
minimale Installation:
> pkg install www/apache24 shells/bash security/sudo
minimale Konfiguration:
> vi /usr/local/etc/apache24/Includes/cgi.conf
#------------------------------------------------------------------------------#
#
# pkg install www/apache24 shells/bash security/sudo
#
#------------------------------------------------------------------------------#
LoadModule cgid_module libexec/apache24/mod_cgid.so
#------------------------------------------------------------------------------#
ServerAdmin name@mail.de
ServerName www.domain.de
<Directory "/usr/local/www/apache24/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
AddHandler cgi-script .cgi
#
### Apache 2.2
#Order allow,deny
#Allow from all
#
### Apache 2.4
Require all granted
</Directory>
#------------------------------------------------------------------------------#
<IfModule mime_module>
AddHandler cgi-script .cgi
# AddType text/html .html
# SetHandler cgi-script
</IfModule>
#------------------------------------------------------------------------------#
das CGI-Skript muss die richtigen Rechte haben:
> chown www:www /usr/local/www/apache24/cgi-bin/test-cgi > chmod 0700 /usr/local/www/apache24/cgi-bin/test-cgi
in der ersten Zeile des CGI-Skripts muß der Interpreter eingetragen werden!
> head -n1 /usr/local/www/apache24/cgi-bin/test-cgi
#!/usr/local/bin/bash ...
Passwortschutz auf die gesamte Seite legen
In diesem Beispiel ist /home/http/dokuwiki/ das DocumentRoot!
Damit die .htaccess-Datei vom Apache auch gelesen wird,
muss AllowOverride eingeschaltet werden, z.B.:
AllowOverride AuthConfig
htaccess
# vi /home/http/dokuwiki/.htaccess AuthType Basic AuthName "Dokuwiki" AuthUserFile "/home/etc/httpd/.htpasswd" AuthGroupFile /dev/null require valid-user
htpasswd
Trockenübung, so wird keine Datei geschrieben, sondern das Ergebnis lediglich angezeigt:
# htpasswd -n fritz # htpasswd -nb fritz geheim
Benutzer mit Passwort anlegen:
# htpasswd -c /home/etc/httpd/.htpasswd fritz New password: Re-type new password: Adding password for user fritz
Passwort eines Benutzers ändern / neuen Benutzer anlegen (mit bcrypt verschlüsselt):
# htpasswd -BC 13 /home/etc/httpd/.htpasswd fritz
neuen Benutzer mit Passwort hinzu fügen:
# htpasswd /home/etc/httpd/.htpasswd otto
Es ist auch möglich das Passwort direkt auf der Kommandozeile mit zu übergeben:
# htpasswd -b /home/etc/httpd/.htpasswd fritz geheim Updating password for user fritz
# htpasswd -b /home/etc/httpd/.htpasswd otto geheim Adding password for user otto
Benutzer löschen:
# htpasswd -D /home/etc/httpd/.htpasswd otto
suexec (mit Apache 2.0 auf FreeBSD)
Wie konfiguriere ich einen Webserver mit Apache 2 ?
Apache 2 installieren
# cd /usr/ports/www/apache2/ # make WITH_SUEXEC=yes WITH_THREADS=yes install && make clean
# suexec -V: -D AP_DOC_ROOT="/usr/local/www/data" -D AP_GID_MIN=1000 -D AP_HTTPD_USER="www" -D AP_LOG_EXEC="/var/log/httpd-suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=1000 -D AP_USERDIR_SUFFIX="public_html"
Wichtig sind für uns hier folgende Angaben:
- "AP_DOC_ROOT"; es werden von suEXEC nur unterhalb von diesem CGI-Dateien ausgeführt.
- "AP_HTTPD_USER"; suEXEC wird nur laufen, wenn der Apache als der hier eingetragene User läuft.
- "AP_GID_MIN"; suEXEC kann nur zu Usern wechseln, die mindestens eine GroupID von der hier angegebenen Höhe haben.
- "AP_UID_MIN"; suEXEC kann nur zu Usern wechseln, die mindestens eine UserID von der hier angegebenen Höhe haben.
Jetzt muss als erstes das Verzeichnis angelegt werden
Der Apache läuft in diesem Beispiel mit den folgenden Rechten (siehe /usr/local/etc/apache2/httpd.conf):
User www
Group www
Der User des Webacounts (suEXEC) hat die Rechte
User webuser
Group webgroup
Am sinnvollsten legt man das Web-Verzeichnis in "/var" an.
# make -p /var/www/webuser/cgi-bin # fuer die CGI-Scripte # make -p /var/www/webuser/htdocs # fuer die HTML-Dateien # make -p /var/www/webuser/log # fuer die LOG-Dateien
chown -R webuser /var/www/webuser chgrp -R www /var/www/webuser chmod -R 750 /var/www/webuser chmod -R 755 /var/www/webuser/cgi-bin chgrp -R webgroup /var/www/webuser/cgi-bin chmod -R 770 /var/www/webuser/htdocs chown -R 0 /var/www/webuser/logs chgrp -R users /var/www/webuser/logs chmod -R 650 /var/www/webuser/logs
symbolischen Link loeschen und neu anlegen
# rm -f /usr/local/www/data # ln -s /var/www /usr/local/www/data
Webuser anlegen
# vipw
webuser:*:2000:2000::0:0:Unprivileged user:/nonexistent:/sbin/nologin
# vigr
webgroup:*:2000
Namensaufloesung
Der zukünftige Webserver wird die IP "192.168.0.10" und den Namen "musterweb.de" erhalten. Jeder Rechner, der auf den Webserver zugreifen soll, braucht diesen Eintrag in der Datei "/etc/hosts":
192.168.0.10 musterweb.de
Oder man richtet sich einen eigenen DNS ein.
konfigurieren des Apache
# vi /usr/local/etc/apache2/httpd.conf
NameVirtualHost musterweb.de
SuexecUserGroup webuser webgroup
ServerAdmin webmaster@musterweb.de
DocumentRoot /usr/local/www/data/webuser/htdocs
ScriptAlias /cgi-bin/ "/usr/local/www/data/webuser/cgi-bin/"
ServerName musterweb.de
ErrorLog /usr/local/www/data/webuser/log/error_log
CustomLog /usr/local/www/data/webuser/log/access_log common
(einfach unten anhängen…)
AKTIVIEREN (ab Apache 2.0.50)
# vi /etc/rc.conf
apache2_enable="YES"
START:
# /usr/local/etc/rc.d/apache2.sh stop # /usr/local/etc/rc.d/apache2.sh start
