Vor kurzem hatte ich das zweifelhafte Vergnügen, einen virtualisierten LAMP-Server von Opensuse 13.1 auf Opensuse Leap 42.1 zu hieven. Das ging zu meiner Überraschung weitgehend problemfrei über die Bühne. Eine kleine Besonderheit gab es aber schon.
Problem mit Apache 2.4 und der Konfiguration des Nagios-Moduls
Das Problem, dass bei der Umstellung auftauchte, war der Übergang des Apache-Servers zu einer neuen Version (2.2 => 2.4). Auf dem alten Server lief auch das Nagios-Modul für Apache mit. Nach dem Upgrade auf Opensuse Leap 42.1 verweigerte Apache den Start.
lamp:~ # systemctl start apache2.service Job for apache2.service failed. See "systemctl status apache2.service" and "journalctl -xn" for details. xlamp:~ # systemctl start apache2.service Job for apache2.service failed. See "systemctl status apache2.service" and "journalctl -xn" for details.
und
lmp:~ # systemctl status apache2.service apache2.service - The Apache Webserver Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled) Active: failed (Result: exit-code) since Wed 2016-10-19 17:47:09 CEST; 37s ago Process: 2279 ExecStop=/usr/sbin/start_apache2 -DSYSTEMD -DFOREGROUND -k graceful-stop (code=exited, status=1/FAILURE) Process: 2272 ExecStart=/usr/sbin/start_apache2 -DSYSTEMD -DFOREGROUND -k start (code=exited, status=1/FAILURE) Main PID: 2272 (code=exited, status=1/FAILURE) Oct 19 17:47:09 lmp start_apache2[2272]: AH00526: Syntax error on line 15 of /etc/apache2/conf.d/nagios.conf: Oct 19 17:47:09 lmp start_apache2[2272]: Invalid command 'Order', perhaps misspelled or defined by a module ...ation Oct 19 17:47:09 lmp systemd[1]: apache2.service: main process exited, code=exited, status=1/FAILURE Oct 19 17:47:09 lmp start_apache2[2279]: AH00526: Syntax error on line 15 of /etc/apache2/conf.d/nagios.conf: Oct 19 17:47:09 lmp start_apache2[2279]: Invalid command 'Order', perhaps misspelled or defined by a module ...ation Oct 19 17:47:09 lmp systemd[1]: apache2.service: control process exited, code=exited status=1 Oct 19 17:47:09 lmp systemd[1]: Failed to start The Apache Webserver. Oct 19 17:47:09 lmp systemd[1]: Unit apache2.service entered failed state. Hint: Some lines were ellipsized, use -l to show in full.
Problemlösung 1 – Korrektur des Files nagios.conf
Die Ursache dieses Problems liegt in der Anweisungssyntax der Konfigurationsdatei zum Nagios-Modul und nicht im Nagios-Modul selbst. Die Anweisung zu den Zugangsrechten für Webserver-Verzeichnisse sind zwar noch für Apache-Versionen < 2.4 gültig; nicht aber für die Version 2.4.
Nehmen wir als Beispiel die Direktiven zu einem Verzeichnis aus der Datei “/etc/apache2/conf.d/nagios.conf”:
<Directory "/usr/lib/nagios/cgi"> # SSLRequireSSL Options ExecCGI AllowOverride None Order allow,deny Allow from all # Order deny,allow # Deny from all # Allow from 127.0.0.1 AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users Require valid-user </Directory>
Hier werden die Zugangsrechte in klassischer Manier durch die Statements
Order allow,deny Allow from all
geregelt. Diese Statements sind unter Apache 2.4 aber nicht mehr zu verwenden!
Nähere Informationen zur neuen Syntax liefert die Dokumentation unter:
https://httpd.apache.org/docs/2.4/upgrading.html
Die obige Sequenz ist – falls man die Zugriffsberechtigung tatsächlich so handhaben will –
durch das Statement
Require all granted
zu ersetzen. Also
<Directory "/usr/lib/nagios/cgi"> # SSLRequireSSL Options ExecCGI AllowOverride None # Require all granted # Order allow,deny # Allow from all # # Order deny,allow # Deny from all # Allow from 127.0.0.1 AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users Require valid-user </Directory>
Die auskommentierte Sequenz
# Order deny,allow # Deny from all # Allow from 127.0.0.1
wäre übrigens zu ersetzen durch
Require host 127.0.0.1
Führt man die vorgeschlagenen Änderungen für alle Directories in der “nagios.conf” durch, so läuft der Neustart u.U. erfolgreich. In meinem Fall war das nicht so, da ich natürlich auch in anderen Konfigurationsfiles (u.a. zu Webdomainen) weitere Access Right Statements mit alter Syntax eingefügt hatte. Hat man auch die dortigen Fehler korrigiert, läuft Apache2 wieder.
Problemlösung 2 – Nutzung eines Kompatibilitätsmoduls
Die Seite https://httpd.apache.org/docs/2.4/upgrading.html empfiehlt, wenn möglich, alle Änderungen auf einen Schlag durchzuführen. Das kann je nach Apache-Host und selbst eingeführten Zugangsrechten für die implementierten Web-Domainen aber aufwändig werden.
Ist einem diese Arbeit erstmal zu viel und will man nach dem Upgrade zunächst nur den Start des Apache-Servers trotz der neuen Syntax sicherstellen, so kann man das Modul “mod_access_compat” zu den Modulen hinzufügen, die der Apache-Server laden soll.
Hierzu benutzt man z.B. das Kommando “a2enmod” (s. etwa http://www.sysadminslife.com/linux/aktivierte-apache-module-anzeigen-deaktivieren-aktivieren/.
Unter Opensuse kann man die Module aber auch in einer entsprechenden Zeile der Datei “/etc/sysconfig/apache2” hinterlegen; also z.B.:
APACHE_MODULES=”actions alias auth_basic authn_file authz_host authz_groupfile authz_user autoindex cgi dir env expires include log_config mime mod_access_compat mod_rewrite negotiation setenvif ssl userdir php5 reqtimeout authn_core authz_core version”
Viel Spaß weiter beim Betrieb von Apache!