Benutzer-Werkzeuge

Webseiten-Werkzeuge


apache

Dies ist eine alte Version des Dokuments!


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_compatabgekündigt
      • Übergangsweise können diese Direktiven mit dem Kompatibilitätsmodul weiter genutzt werden: a2enmod access_compat
      • neuer Weg: a2enmod authz_host
        • Require local
        • Require ip 192.168.1.104 192.168.1.205
        • Require ip 10 172.20 192.168.2
        • Require ip 10.1.0.0/8
        • Require 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

moz://a SSL Configuration Generator

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:

  1. "AP_DOC_ROOT"; es werden von suEXEC nur unterhalb von diesem CGI-Dateien ausgeführt.
  2. "AP_HTTPD_USER"; suEXEC wird nur laufen, wenn der Apache als der hier eingetragene User läuft.
  3. "AP_GID_MIN"; suEXEC kann nur zu Usern wechseln, die mindestens eine GroupID von der hier angegebenen Höhe haben.
  4. "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
# 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
/home/http/wiki/data/attic/apache.1628083190.txt · Zuletzt geändert: von david