Benutzer-Werkzeuge

Webseiten-Werkzeuge


apache

====== Apache ====== [[http://www.pro-linux.de/news/1/23556/certbot-eff-stellt-neuen-client-f%C3%BCr-let39s-encrypt-vor.html|Certbot: EFF stellt neuen Client für »Let's Encrypt« vor]] ===== 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 <file> 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 </file> ==== Apache 2.4 (Ubuntu 14.04 LTS) ==== * [[https://httpd.apache.org/docs/2.4/de/|Dokumentation zum Apache HTTP Server Version 2.4]] * ''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_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'' * [[Ubuntu 14.04 mit Apache und SSL]] === 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 * [[https://httpd.apache.org/docs/2.4/howto/auth.html]] * [[https://httpd.apache.org/docs/current/mod/mod_dbd.html]] * [[https://httpd.apache.org/docs/trunk/mod/mod_authn_dbd.html]] 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 <file> 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> ... </file> == DB-Cache == * [[https://httpd.apache.org/docs/2.4/en/mod/mod_authn_socache.html]] * [[https://httpd.apache.org/docs/2.4/mod/mod_authn_dbd.html#example]] 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 <file> ... <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> ... </file> > 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 ===== * [[https://www.pro-linux.de/news/1/27221/mozilla-pr%C3%A4sentiert-ssl-konfigurationsgenerator.html|Mozilla präsentiert SSL-Konfigurationsgenerator]] * [[https://www.eff.org/https-everywhere]] * [[https://www.ssllabs.com/ssltest/]] * [[http://www.heise.de/security/meldung/Erste-Loesungen-fuer-SSL-TLS-Schwachstelle-1349687.html]] * [[http://www.guntiahoster.de/blog/2011/allgemein/beast-attack-ssl-jederzeit-angreifbar/]] - 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**'' - **[[http://www.pro-linux.de/news/1/20333/bsi-empfiehlt-tls-12-mit-perfect-forward-secrecy.html|TLS 1.2]] (SSL 3.3) -> nicht angreifbar (2008)** * Einstellung ab Firefox 24: ''security.tls.version: **3**'' - **[[https://www.pro-linux.de/news/1/26194/standardisierung-von-tls-13-abgeschlossen.html|TLS 1.3]] ([[https://www.rfc-editor.org/rfc/pdfrfc/rfc8446.txt.pdf|RFC8446]]) -> nicht angreifbar (2019)** * Einstellung ab Firefox 61: ''security.tls.version.max: **4**'' [[https://ssl-config.mozilla.org/#server=apache&server-version=2.4.41&config=modern&openssl-version=1.1.1d|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' ---- * [[https://netsense.ch/blog/apache-schwache-ssl-ciphers-deaktivieren/]] * [[http://w7x.de/2010/11/11/apache-sicherheit-sslv2-deaktivieren-und-starke-verschlusselung-einsetzen/]] 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): <file> ... 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 ... </file> ... 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]]): <file> ... 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 ... </file> 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!//): <file> ... 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 ... </file> ... 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) ===== * [[http://stefanux.de/wiki/doku.php/apache/apache#url-rewriting-mod_rewrite|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 ===== [[http://httpd.apache.org/docs/2.2/logs.html]] ==== 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 <file> #------------------------------------------------------------------------------# # # 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> #------------------------------------------------------------------------------# </file> 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 <file> #!/usr/local/bin/bash ... </file> ===== 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 **''[[http://de.selfhtml.org/servercgi/server/htaccess.htm#erlaubte_anweisungen|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: # htpasswd /home/etc/httpd/.htpasswd fritz Passwort eines Benutzers ändern (mit SHA-Verschlüsselt): # htpasswd -s /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

apache.txt · Zuletzt geändert: 2020/09/06 19:02 von manfred