Apache: Unterschied zwischen den Versionen

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 52: Zeile 52:
  
 
== Andere Konfigurationseinstellungen ==
 
== Andere Konfigurationseinstellungen ==
* Zugriff für Localhost ermöglichen
+
=== Zugriff für Localhost ===
 
     Allow from 127.0.0.0/255.0.0.0 ::1/128
 
     Allow from 127.0.0.0/255.0.0.0 ::1/128
* Modul mod_userdir einbinden
+
=== Modul mod_userdir ===
 
Dadurch ist Zugriff auf die Webseiten der Benutzer möglich. Diese müssen sich im Homeverzeichnis unter public_html befinden. Die URL lautet dann z.B. für den Benuter hs_user: http://hs-irgendwo.at/~hs_user
 
Dadurch ist Zugriff auf die Webseiten der Benutzer möglich. Diese müssen sich im Homeverzeichnis unter public_html befinden. Die URL lautet dann z.B. für den Benuter hs_user: http://hs-irgendwo.at/~hs_user
 
  Include /etc/apache2/mod_userdir.conf
 
  Include /etc/apache2/mod_userdir.conf
Zeile 71: Zeile 71:
 
  #Disable HTTP TRACE / TRACK Methods (Cross-Site Tracing)
 
  #Disable HTTP TRACE / TRACK Methods (Cross-Site Tracing)
 
  TraceEnable off
 
  TraceEnable off
* Verzeichnisindex  
+
=== Verzeichnisindex ===
 
Definition einer HEADER.html für Anzeige von Verzeichnissen durch Änderung in der Datei <code>/etc/apache2/mod_autoindex-defaults.conf</code>.
 
Definition einer HEADER.html für Anzeige von Verzeichnissen durch Änderung in der Datei <code>/etc/apache2/mod_autoindex-defaults.conf</code>.
 
  HeaderName /HEADER.html
 
  HeaderName /HEADER.html
 
In der Datei <code>/srv/www/htdocs/HEADER.html</code> wird die Kodierung der Anzeige mit UTF-8 vorgegeben:
 
In der Datei <code>/srv/www/htdocs/HEADER.html</code> wird die Kodierung der Anzeige mit UTF-8 vorgegeben:
 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
+
=== Softlinks folgen ===
* Apache soll Softlinks folgen
 
 
In der Datei
 
In der Datei
 
  /etc/apache2/default-server.conf
 
  /etc/apache2/default-server.conf
 
DocumentRoot konfigurieren:
 
DocumentRoot konfigurieren:
 
  Options FollowSymlinks
 
  Options FollowSymlinks
 +
=== Standard Dateiberechtigungen ===
 +
# /etc/sysconfig/apache2
 +
umask 0002
 +
Siehe https://stackoverflow.com/questions/428416/setting-the-umask-of-the-apache-user
  
 
== Apache Modul hinzufügen ==
 
== Apache Modul hinzufügen ==
Zeile 254: Zeile 257:
 
  AddDefaultCharset utf-8
 
  AddDefaultCharset utf-8
  
== Server konfigurieren für SSL ==
+
== SSL ==
 +
=== Konfiguration ===
 
Falls notwendig, das Modul mod_ssl aktivieren
 
Falls notwendig, das Modul mod_ssl aktivieren
 
  a2enmod ssl
 
  a2enmod ssl
Zeile 262: Zeile 266:
 
... damit genug Zeit bleibt für Eingabe der Passphrase beim Starten des Apache, falls Server Key durch Passphrase geschützt ist.
 
... damit genug Zeit bleibt für Eingabe der Passphrase beim Starten des Apache, falls Server Key durch Passphrase geschützt ist.
  
  # /etc/apache2/httpd.conf.local
+
  # /etc/apache2/listen.conf
 +
Listen 80
 +
Listen 443
 +
 
 +
# /etc/apache2/default_server.conf
 
  NameVirtualHost *:80
 
  NameVirtualHost *:80
 
  NameVirtualHost *:443
 
  NameVirtualHost *:443
  
== SSL Zertifikat erstellen ==
+
=== SSL Zertifikat erstellen ===
 
Die folgenden Anweisungen sind der Seite http://wiki.ubuntuusers.de/Apache/SSL entnommen. Ich habe die Pfade an die Suse Konfiguration angepasst.
 
Die folgenden Anweisungen sind der Seite http://wiki.ubuntuusers.de/Apache/SSL entnommen. Ich habe die Pfade an die Suse Konfiguration angepasst.
 
=== Privaten Schlüssel erzeugen ===
 
=== Privaten Schlüssel erzeugen ===
Zeile 280: Zeile 288:
 
Siehe: [http://wiki.fernuni-hagen.de/helpdesk/index.php/Zertifikat_importieren http://wiki.fernuni-hagen.de/helpdesk/index.php/Zertifikat_importieren]
 
Siehe: [http://wiki.fernuni-hagen.de/helpdesk/index.php/Zertifikat_importieren http://wiki.fernuni-hagen.de/helpdesk/index.php/Zertifikat_importieren]
  
== SSL Zertifikate über Letsencrypt ==
+
=== SSL Zertifikate über Letsencrypt ===
 
Siehe [[Letsencrypt]]
 
Siehe [[Letsencrypt]]
 
== Zertifikat importieren mit Internet Explorer ==
 
* Warnung beim Aufruf einer verschlüsselten Seite
 
Webseiten, deren Adresse mit "https://" beginnt, werden verschlüsselt übertragen. So ist gewährleistet, dass das beim Login einzugebende Passwort nicht abgefangen werden kann.
 
 
Beim Aufruf einer durch SSL verschlüsselten Seite (z.B.: https://t2792.greatnet.de) erscheint im Internet Explorer eine Warnung:
 
 
[[Datei:IE_Zertifikat_1.png]]
 
 
Die Warnung erscheint deswegen, weil das Zertifikat nicht von einer beglaubigten Organisation ausgestellt wurde, was sehr teuer ist.
 
 
Wenn man auf '''Laden dieser Seite fortsetzen''' klickt, kann man die Seite aber trotzdem öffnen.
 
* Warnung deaktivieren
 
Im IE das Dialogfenster '''Extras / Internetoptionen''' öffnen. Dann auf der Registerkarte '''Inhalte''' auf '''Zertifikate''' klicken.
 
 
[[Datei:IE_Zertifikat_2.png]]
 
 
Jetzt kann man eine Zertifikatsdatei '''importieren'''. Es startet ein Assistent. Dieser führt Schritt für Schritt durch den Importvorgang.
 
 
'''Wichtig:''' Am Schluss noch die Option '''Zertifikatspeicher automatisch auswählen''' anklicken, sonst funktioniert es nicht.
 
 
[[Datei:IE_Zertifikat_3.png]]
 
 
Alle anderen Fragen mit "Ja" beantworten bzw. die voreingestellten Werte übernehmen.
 
 
Nach dem erfolgreichen Import der Zertifikatsdatei sollte der Zugang auf die verschlüsselte Seite ohne Sicherheitswarnung möglich sein.
 
  
 
== DocumentRoot einbinden ==
 
== DocumentRoot einbinden ==

Aktuelle Version vom 19. März 2024, 18:00 Uhr

Installation und Hinweise

  • Installation

YAST: Filter / Paketkategorien / Einfacher Webserver mit Apache2

Damit werden alle benötigten Module automatisch installiert und konfiguriert.

  • Konfiguration

Nicht mit YAST und nicht mit Webmin konfigurieren. Es entsteht ein Durcheinander, besonders was die Konfiguration der virtuellen Server betrifft.

Die zentrale Konfigurationsdatei ist zwar /etc/apache2/httpd.conf, man soll aber eigene Anpassungen in der Datei /etc/apache2/httpd.conf.local durchführen. Dann bleiben die Änderungen auch nach Updates erhalten.

Achtung:

Damit /etc/apache2/httpd.conf.local eingebunden wird, muss in /etc/sysconfig/apache2 folgende Zeile eingetragen werden:
APACHE_CONF_INCLUDE_FILES="/etc/apache2/httpd.conf.local"

Authentifizierung über LDAP

  • Apache Module mod_ldap und mod_authnz_ldap laden

Die Module brauchen nicht installiert werden, sie sind schon vorhanden.

In der Datei /etc/sysconfig/apache2 muss der Aufruf dieser Module eingetragen werden.

# /etc/sysconfig/apache2
APACHE_MODULES=" ... ldap authnz_ldap ... "
  • Überprüfung

Nach Neustart des Apache2 Servers stehen die geladenen Module in der Datei /etc/apache2/sysconfig.d/loadmodule.conf

  • Zugriffschutz definieren für ein Verzeichnis

Beispiele:

Zugriff für User aus der Gruppe hs_lehrer:

<Directory /srv/www/htdocs/divers>
   AuthType Basic
   AuthBasicProvider ldap
   AuthzLDAPAuthoritative on
   AuthName "Zugriff nur fuer Lehrerinnen und Lehrer"
   AuthLDAPURL "ldap://localhost:389/ou=Users,dc=network?uid"
   Require ldap-group cn=hs_lehrer,ou=Groups,dc=network
   Require ldap-attribute gidNumber=601
   Require valid-user
</Directory>

Zugriff für bestimmte User:

<Directory /srv/www/htdocs/dokuwiki>
   AuthType Basic
   AuthBasicProvider ldap
   AuthzLDAPAuthoritative on
   AuthName "IT Dokumentation HS Irgendwo"
   Require ldap-user grfe nedo kibe eifr 
   AuthLDAPURL "ldap://localhost:389/ou=Users,dc=network?uid"

</Directory>

  • Howto

Apache authentication and authorization using LDAP

Andere Konfigurationseinstellungen

Zugriff für Localhost

   Allow from 127.0.0.0/255.0.0.0 ::1/128

Modul mod_userdir

Dadurch ist Zugriff auf die Webseiten der Benutzer möglich. Diese müssen sich im Homeverzeichnis unter public_html befinden. Die URL lautet dann z.B. für den Benuter hs_user: http://hs-irgendwo.at/~hs_user

Include /etc/apache2/mod_userdir.conf

Achtung: Falls virtuelle Server konfiguriert werden, so erfolgt die Einbindung von Userdir in der entsprechenden Konfigurationsdatei des betreffenden Virtuellen Servers:

# /etc/apache2/vhosts.d/hs-irgendwo.at.conf
# ...

<IfModule mod_userdir.c>
  UserDir public_html
  Include /etc/apache2/mod_userdir.conf
</IfModule>
  • Andere Einstellungen
RedirectMatch Permanent ^(.+)/favicon\.ico$ http://server.de/favicon.ico
#Disable HTTP TRACE / TRACK Methods (Cross-Site Tracing)
TraceEnable off

Verzeichnisindex

Definition einer HEADER.html für Anzeige von Verzeichnissen durch Änderung in der Datei /etc/apache2/mod_autoindex-defaults.conf.

HeaderName /HEADER.html

In der Datei /srv/www/htdocs/HEADER.html wird die Kodierung der Anzeige mit UTF-8 vorgegeben:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Softlinks folgen

In der Datei

/etc/apache2/default-server.conf

DocumentRoot konfigurieren:

Options FollowSymlinks

Standard Dateiberechtigungen

# /etc/sysconfig/apache2
umask 0002

Siehe https://stackoverflow.com/questions/428416/setting-the-umask-of-the-apache-user

Apache Modul hinzufügen

  • Eintrag in Konfiguration

Beispiel: Laden des Moduls php7 anstatt php5

pico /etc/sysconfig/apache2
APACHE_MODULES="authz_host actions alias auth_basic ssl php7 perl authn_core ..."

Weitere Informationen: http://enarion.net/web/apache/htaccess/mod_rewrite-on-suse/ am Beispiel mod_rewrite

Zugriffschutz

Zugriffschutz zentral konfigurieren

Änderungen an der Konfiguration werden in /etc/apache2/default-server.conf geschrieben.

<Directory /srv/www/htdocs/dokuwiki>
    AuthType Basic
    AuthName "IT Dokumentation HS Irgendwo"
    AuthUserFile /srv/www/.authpass
    Require user root grfe nedo kibe eifr
</Directory>

<Directory /srv/www/htdocs/Lehrer>
    AuthType Basic
    AuthName "Lehrerbereich HS Irgendwo"
    AuthUserFile /srv/www/.authpass
    Require valid-user
</Directory>
 
<Directory /srv/www/htdocs/phpMyAdmin/libraries>
    AuthType Basic
    AuthName "phpMyAdmin"
    AuthUserFile /srv/www/.authpass
    Require user root grfe
</Directory>

<Directory /srv/www/htdocs/divers>
    AuthType Basic
    AuthName "Zugriffschutz Test"
    AuthUserFile /srv/www/htdocs/divers/.htpasswd
    Require valid-user
</Directory>

Passwortdatei generieren

Passwortdatei: /srv/www/.authpass

Folgendes Shellscript kopiert die Lehrerpasswörter in obige Datei

# /usr/local/bin/htpasswd.sh

for UserName in `grep 601 /etc/passwd | cut -d ":" -f 1` ; do
    grep $UserName: /etc/shadow | cut -d ":" -f 1,2 >> /srv/www/.authpass
done

Passwortdatei über Kommandozeile

  • Neue Passwortdatei erzeugen
htpasswd -c .htpasswd username
# oder
htpasswd2 -c .htpasswd username 
  • Weitere Benutzer hinzufügen
htpasswd .htpasswd username
# oder
htpasswd2 .htpasswd username

Anmerkung: Es waren zwei Konfigurationsänderungen nötig, um dies zu ermöglichen:

  1. Erstellung eines Softlinks /usr/sbin/htpasswd, der auf /usr/sbin/htpasswd2 verweist.
  2. Erstellung eines weiteren Softlinks /usr/bin/htpasswd, der auch auf /usr/sbin/htpasswd2 verweist.
  3. Setzen des SETUID Bits für die Datei /usr/sbin/htpasswd2
chmod u+s /usr/sbin/htpasswd2

Tool zum Erzeugen einer Passwortdatei für User

Mit dem Tool /vorlagen/HTML/phpaccess.php bzw. V:\HTML\phpaccess.php kann jeder User am Server seine persönliche Passwortdatei erzeugen.

Einfach diese Datei in das zu schützende Verzeichnis unterhalb von ~/public_html kopieren. Dieses Programm erzeugt sowohl die Datei .htaccess als auch die Passwortdatei .htpasswd.

Benutzername: admin
Passwort: admin

Benutzername und Passwort für den Administrator der zu schützenden Website sind in der Datei phpaccess.php gespeichert und sollten natürlich geändert werden.

PHP Konfiguration

Siehe Artikel: PHP

Virtuelle Server

Server für virtuelle Hosts konfigurieren

Folgende Zeilen in /etc/apache2/httpd.conf oder in /etc/apache2/httpd.conf einfügen:

NameVirtualHost *
Include /etc/apache2/vhosts.d/*.conf

Damit wird der Webserver für namensbasierte virtuelle Hosts konfiguriert.

Virtuelle Hosts konfigurieren

Im Verzeichnis /etc/apache2/vhosts.d braucht man für jeden virtuellen Server eine Konfigurationsdatei.

# Beispiel für eine Konfigurationsdatei eines virtuellen Hosts:
# Dateiname: project.conf
<VirtualHost *:80>                                                                                                                                                                                     
   ServerName project.gruber
   DocumentRoot /srv/www/htdocs/project                                                                                                                                                   

   # RewriteEngine On
   # RewriteCond %{HTTPS} !=on
   # RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

  <Directory "/srv/www/htdocs/project">
       Options FollowSymLinks  
       AllowOverride All
       Require all granted
  </Directory>
  <Location />
       Options FollowSymLinks
       AllowOverride None
  </Location>
</VirtualHost>  

<VirtualHost *:443>                                                                                                                                                                            
   ServerName project.gruber    
   DocumentRoot /srv/www/htdocs/project

   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl.crt/server.crt
   SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

   <Directory "/srv/www/htdocs/project">
       Options FollowSymLinks
       AllowOverride All
       Require all granted
   </Directory>
   <Location />
       Options FollowSymLinks
       AllowOverride None
   </Location>
</VirtualHost>

Namensauflösung

Für die Namensauflösung von Internet Domains sind diverse DNS Server zuständig. Betreibt man virtuelle Hosts aber auf einem Server im LAN bzw. auf einem Testrechner, muss man selber dafür sorgen, dass der jeweilige Hostname einer IP Adresse zugeordnet wird.

Man kann die Zuordnungen in die Datei /etc/hosts eintragen:
# Beispiel für virtuelle Hosts auf dem lokalen Rechner
127.0.0.1   contao.localdomain contao
127.0.0.1   project.localdomain project
...

Für mich hat diese Lösung auf meinem Testrechner jedenfalls funktioniert.

Virtuelle Hosts für Systembenutzer bereitstellen

Die UserDir Konfiguration erfolgt innerhalb eines virtuellen Hosts.

Auch der Standardserver muss als virtueller Host konfiguriert werden, in unserem Fall ist das die Datei hs-irgendwo.at.conf
# hs-irgendwo.at.conf
<VirtualHost *>
DocumentRoot /srv/www/htdocs

<Directory "/srv/www/htdocs">
   allow from all
   Options +Indexes
</Directory>

ServerName hs-irgendwo.at
DirectoryIndex index.html index.php
HeaderName /HEADER.html
</VirtualHost>

<IfModule mod_userdir.c>
   UserDir public_html
   Include /etc/apache2/mod_userdir.conf
</IfModule>
  • Standardzeichensatz setzen
AddDefaultCharset utf-8

SSL

Konfiguration

Falls notwendig, das Modul mod_ssl aktivieren

a2enmod ssl

Dieser Befehl ergänzt die Variable $APACHE_MODULES in der Datei /etc/sysconfig/apache2 um den Eintrag "ssl"

# /etc/sysconfig/apache2
APACHE_TIMEOUT="30"

... damit genug Zeit bleibt für Eingabe der Passphrase beim Starten des Apache, falls Server Key durch Passphrase geschützt ist.

# /etc/apache2/listen.conf
Listen 80
Listen 443
# /etc/apache2/default_server.conf
NameVirtualHost *:80
NameVirtualHost *:443

SSL Zertifikat erstellen

Die folgenden Anweisungen sind der Seite http://wiki.ubuntuusers.de/Apache/SSL entnommen. Ich habe die Pfade an die Suse Konfiguration angepasst.

Privaten Schlüssel erzeugen

openssl genrsa -out /etc/ssl/private/myserver.key 2048

Zertifikat erstellen

Dieser Befehl erstellt ein selbst signiertes Zertifikat.

openssl req -new -x509 -key /etc/ssl/private/apache.key -days 365 -sha256 -out /etc/ssl/certs/apache.crt 
  • Zertifikat verteilen an Benutzer

Da das Zertifikat nicht von einer beglaubigten Stelle verifiziert ist, soll folgende Datei an die Benutzer ausgehändigt werden:

/etc/apache2/ssl.crt/ca.crt
  • Import des Zertifikats in den Webbrowser

Damit beim Herstellen einer verschlüsselten Verbindung nicht die Warnung vor einem ungültigen Zertifikat erscheint, sollte diese Datei in den Webbrowser importiert werden. Siehe: http://wiki.fernuni-hagen.de/helpdesk/index.php/Zertifikat_importieren

SSL Zertifikate über Letsencrypt

Siehe Letsencrypt

DocumentRoot einbinden

Probleme mit Zugriff auf die DocumentRoot /srv/www/htdocs lösen durch Einbinden einer neuen DocumentRoot über Bind Mounts in der /etc/fstab

/suse_old/srv   /srv   none    bind    0  0

Troubles

Verzeichnis für icons

In der DocumentRoot soll sich kein Ordner mit dem Namen icons befinden.

Es existiert im Apache ein Alias icons, der auf einen Ordner zeigt, welcher die Icons für die Indexdarstellung des Apache Servers enthält. Erstellt man einen eigenen Ordner mit dem Namen icons in der DocumentRoot, so wird dessen Inhalt im Browser nicht angezeigt sondern man bekommt den Inhalt des erwähnten Alias zu sehen.

Lösung: Ich habe meine eigenen Icons, die ich in verschiedenen PHP Projekten brauche, in include/icons abgelegt. Auf diesen Ordner verweist ein Symlink:

cd /srv/www/htdocs/virtualhost
ln -s include/icons myicons

Dieser Symlink muss in der DocumentRoot jedes virtuellen Hosts angelegt werden.

Cannot define multiple Listeners on the same IP:port

Listen 80
Listen 443

Diese Directiven dürfen nur einmal definiert sein.

In /etc/apache2/listen.conf oder in /etc/apache2/default_server.conf

Ich habe diese Einträge aus /etc/apache2/default_server.conf entfernt. Siehe mein Posting https://serversupportforum.de/forum/webserver/61206-cannot-define-multiple-listeners-same-ip-port.html