Home

 

Server::Apache

Index 
1.  Webserver Opstarten
    Webserver componenten
    ClearOS Webserver Activeren
    Edit Website Settings
    Activeren PHP
    Upgrade naar PHP 7+ met App PHP-Engines
    PHP extension Imagick
    Upgrade PHP 5.4 naar 7.4 met Remi repo
    Upgrade naar PHP 8+ met App PHP-Engines
    Activeren MySQL en phpMyAdmin
    Upgrade MySQL MariaDB 5.5 naar rh-MariaDB 10.3
         Installeer rh-MariaDB 10.3
         MariaDB 10.3 beveiligen
         Maak gebruikers aan voor import Piwigo en Wordpress
         Verhuis MariaDB 10.3 data naar bindmount /store/live
    Upgrade MySQL MariaDB 10.3 naar MariaDB 10.5
         Backup MariaDB 10.3
         Installeer rh-MariaDB 10.5
         Migreer de data van 10.3 naar 10.5
         Waarschuwing Max-Open-Files
         MariaDB103 verwijderen
    Permissies Website Root
    Reset Permissies en Owners van Websites
2.  Apache Configureren
    Apache Httpd.Conf
    .htaccess
    Custom Httpd Configuratie
         De onderdelen van custom_httpd.conf uitgelicht
         AWStats access log directives binnen VirtualHosts
         Options voor Website
         ServerAdmin e-mail adres
         DirectoryIndex
         Directory-listing ../html/exploringlinux/download
         Mapping naar bestanden buiten de httpd root
         Forceer domein www.makkink.eu naar HTTPS
    Custom_httpd.conf compileren met script
         Custom_httpd.inc
         Webserver Update integreren in custom-httpd.conf
         Mails ter notificatie
    Errordocs.Conf
    Piwigo.Conf
         Toegangscontrole /var/www/html/archief met Cookie
         Piwigo Cookie zetten
         Login en toegangscontrole../archief/ via Piwigo
         SameSite extra cookie security
    Wordpress.Conf
         Dynamische integratie van .htaccess
3.  Error Messaging
    Layout ErrorDocuments
    HTTP_UNAUTHORIZED.html.var
    Personalisatie Layout
    Tekst Correcties
4.  Awstats en Access-logs
    Installatie
    Configuratie
    Data updaten en opslaan
    Statistieken bekijken in de browser
    AWStats data verhuizen naar nieuwe server
5.  HTTPS en Certificatie
    SSL encryptie flowchart
    Gebruiker aanvaard risico Selfsigned Certificaat
    Certificaat Manager
    Let's Encrypt Free SSL Certificates
    Het Let's Encrypt Certificaat
    Vervang het self-signed certificaat van Webconfig
    Certificaat toewijzen aan een website
    Certificaat van server verwijderen
6.  Crawlers en Robots.txt

Naar index

Webserver Opstarten

Webserver componenten

De distributie van ClearOS Community is op 28/10/2020 7.8.1 (Final) en bevat voor de Webserver:

1.  Apache 2.4.6 (CentOS) (op 28/10/2020 voor ClearOS 7.8.1 de laatst beschikbare versie).
2.  MySQL 5.5.56-MariaDB (op 28/10/2020 voor ClearOS 7.8.1 de laatst beschikbare versie).
3.  PHP 5.4.16 (op 28/10/2020 voor ClearOS 7.8.1 de laatst beschikbare versie).

Naar index

ClearOS Webserver Activeren

Selecteer: Webconfig > Server > Web > Web server > Settings
Dit opent de ClearOS Webserver App (app-web-server) waarmee we de Apache HyperText Transfer Protocol Daemon (webserver) activeren. De Webserver App is een front-end van ClearOS voor de Apache webserver. Met deze App activeren we de webserver en kunnen we één of meer (virtuele) servers toevoegen en deze voorzien van de basis configuratie.
De in deze App gemaakte instellingen worden opgeslagen in /etc/httpd/conf.d/flex-80.conf en /etc/httpd/conf.d/flex-443.conf twee van de includes in het HTTPD (webserver) hoofdconfiguratie bestand /etc/httpd/httpd.conf

Activatie en configuratie
- Selecteer Webserver 'Start'
- Vul servernaam in: mainserver.makkink.eu

- Selecteer <Configure Default Website>

Naar index

Edit Web Site Settings

Naar index

Webconfig Settings

We accepteren de ClearOS defaults behalve:

  1. File Server Upload: Disabled
    Enabling resulteert in het creëren van een flexshare. Hier werken we op deze server niet mee en voor upload gebruiken we Samba.
  2. Show Index: Disabled
    Voorkom directory-listing als er geen index.html voor komt
  3. Follow Symbolic Links: Enabled
    Nodig voor o.a. URL-rewrite
  4. Allow [.htaccess] Override: Disabled
    Voor security, voorkomt misbruik van .htaccess
  5. Zet PHP Engine naar laatst beschikbare PHP versie

Flex-{80,443}.conf's
Als aan het einde 'Update' geselecteerd wordt, worden de instellingen weggeschreven naar de httpd configuratiebestanden flex-80.conf en flex-443.conf met respectievelijk <VirtualHost *:80> en <VirtualHost *:443>

Er wordt gecontroleerd of er al een flexshare bestaat en anders wordt deze aangemaakt zijnde: /var/flexshare/shares/[ServerName] of te wel: /var/flexshare/shares/makkink.eu

Tevens wordt in /etc/fstab de volgende regel toegevoegd:

/var/www/html /var/flexshare/shares/makkink.eu   none  defaults,bind 0 0

Dit resulteert er in dat er een extra mount /var/flexshare/shares/makkink.eu aangemaakt wordt.
Deze bevat dus niet de data maar slechts de verwijzing ernaar.
Voorlopig heeft deze mount, als we niet met Flexshares werken geen nut, maar laten we het nu voor wat het is.

flex-80.conf
Na het maken van instellingen ziet het configuratie bestand /etc/httpd/conf.d/flex-80.conf er zo uit:

#----------------------------------------------------------------
# WARNING: This file is automatically created by webconfig.
#----------------------------------------------------------------

# Authentication mechanism
DefineExternalAuth pwauth pipe /usr/bin/pwauth
DefineExternalGroup pwauth pipe /usr/bin/unixgroup

# -----------------------------------------------#
# Web Site
# -----------------------------------------------#
<VirtualHost *:80>
        ServerName makkink.eu
        ServerAlias *.makkink.eu
        DocumentRoot /var/www/html
        ErrorLog /var/log/httpd/error_log
        CustomLog /var/log/httpd/access_log combined
</VirtualHost>

<Directory /var/www/html>
        Options -Indexes +FollowSymLinks -IncludesNOExec
        Require all granted
</Directory>

flex-443.conf
Na het maken van instellingen ziet het configuratie bestand /etc/httpd/conf.d/flex-443.conf er zo uit:

#----------------------------------------------------------------
# WARNING: This file is automatically created by webconfig.
#----------------------------------------------------------------


# Authentication mechanism
DefineExternalAuth pwauth pipe /usr/bin/pwauth
DefineExternalGroup pwauth pipe /usr/bin/unixgroup

# -----------------------------------------------#
# Web Site
# -----------------------------------------------#

<VirtualHost *:443>
        ServerName makkink.eu
        ServerAlias *.makkink.eu
        DocumentRoot /var/www/html
        ErrorLog /var/log/httpd/error_log
        CustomLog /var/log/httpd/access_log combined
        SSLEngine on
        SSLCertificateFile /etc/pki/CA/sys-0-cert.pem
        SSLCertificateKeyFile /etc/pki/CA/private/sys-0-key.pem
        SSLCACertificateFile /etc/pki/CA/ca-cert.pem
        # No weak export crypto allowed
        SSLHonorCipherOrder on
        SSLProtocol all -SSLv2 -SSLv3 -TLSv1
        SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:
        ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:
        RSA+3DES:!3DES:!aNULL:!MD5
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
        downgrade-1.0 force-response-1.0
</VirtualHost>  

Waarschuwing:
Maak geen eigen configuratiewijzigingen door de bestanden flex-80.conf en flex-443.conf handmatig te wijzigen. Zodra we met de Webconfig Webserver App wijzigingen/updates aanbrengen zullen deze eigen directives overschreven worden.

Eigen HTTPD configuratie
Creëer voor eigen custom configuratieinstellingen het bestand custom_httpd.conf in de map /etc/httpd/conf.d/ met daarin de eigen directives.
Zie de uitwerking hiervan in de sectie Custom Httpd Configuratie

Naar index

Activeren PHP

Met het starten van de HTTPDeamon (Apache) is vanzelf ook PHP actief.

php.ini
Het bestand php.ini bevat de instellingen van PHP
Onderstaande gewijzigde instellingen zijn nodig voor het werken met grotere bestanden zoals het uploaden van foto's in wordpress.
Open hiertoe het PHP settings bestand '/etc/php.ini' in een teksteditor en verifiëer de volgende argumenten (in de volgorde zoals ze voorkomen):

  1. post_max_size = 100M
  2. upload_max_filesize = 100M

phpinfo()
Op een server waar PHP actief is kan op eenvoudige wijze achterhaald worden welke versies en modules er op de server actief zijn en wat hun argumenten, variabelen of instellingen zijn.
Dit is mogelijk door de phpinfo functie te gebruiken door de volgende code in een .php bestand (bijvoorbeeld phpinfo.php) te plaatsen en deze via de browser aan te roepen:

<?php
   phpinfo();
?>

Naar index

Dit zal dan een pagina tonen die er als volgt uitziet:

Met daarin ook een sectie betreffende PHP instellingen:

Naar index

Upgrade naar PHP 7+ met App PHP-Engines

Met de ClearOS 7.8.1 distributie van 2020 werd voor de Apache webserver de toen al verouderde PHP versie 5.4 meegeleverd. Tot op heden ( 28-10-2020) heeft ClearOS hiervoor geen update uitgebracht. Dit terwijl RedHat en CentOS al lang de versies 5.6 en 7.x uitgebracht hebben.

Eind 2017 heeft de ClearOS Community de PHP-Engines App geïntroduceerd waarmee deze RedHat PHP distributies in ClearOS 7.0 geïntegreerd kunnen worden. Deze app kan geïnstalleerd worden vanuit de ClearOS Marketplace of aan de command line met commando # yum install app-php-engines. Zorg er hierbij voor dat de ClearOS-Contribs repositorie beschikbaar is.

Onderstaand wordt de installatie beschreven op 25-03-2019 van de PHP-Engines App met de versies 5.6, 7.0 en 7.1 van RedHat. De oude versie 5.4 is een vast onderdeel van ClearOS 7.x en kan/mag niet verwijderd worden.

In juli 2020 is er een PHP-Engines update uitgebracht en de beschikbare versies zijn nu 5.4, 7.0, 7.1, 7.2 en 7.3
Het contribs team adviseert PHP 5.6 niet te gebruiken en bij recente updates is deze ook niet meer beschikbaar.

Na de installatie van de PHP-Engines App kunnen we de gewenste PHP versie selecteren in de Webserver App.

Handmatige PHP Upgrade naar versie 7.3
Lang voordat de PHP-Engines App met PHP version 7.3 uitkwam was deze PHP versie al beschikbaar in de repo centos-sclo-rh-testing-unverified
Deze versie had ik al op mijn server geïnstalleerd door de procedure te volgen in een post op Github
Zie voor de eigen gebruikte procedure Projectmap Exploring Linux

Naar index

Website Settings
Webconfig > Server > Web > Web server > Website > Edit
Nu opent de Website Settings pagina, met aan de bodem nu toegevoegd de PHP options:

We selecteren nu de door ons gewenste PHP versie. In dit voorbeeld kiezen we PHP 7.3. In de dropdown is versie 5.6 nog beschikbaar maar selectie resulteerd in een fout.
Na het selecteren van 'Update' is PHP 7.3 actief op de Apache webserver.
We openen phpinfo.php in de webroot en confirmeren dat PHP 7.3 actief is.

Let op, telkens als we een Website Update toepassen (voor bijvoorbeeld kiezen van een andere/nieuwere PHP versie) worden de bestaande Flex-{80,443}.conf bestanden overschreven!!
Maak voor eigen custom directives daarom geen gebruik van deze Flex-{80,443}.conf bestanden. Zie hiervoor de sectie Custom Httpd Configuratie

Naar index

php.ini voor PHP 7.3
Het bestand php.ini bevat de instellingen van PHP, maar elke PHP Engine heeft zijn eigen php.ini bestand. Om deze te vinden voeren we het commando # locate php.ini uit en dat geeft het volgende resultaat:

[root@mainserver ~]# locate php.ini
/etc/php.ini
/etc/opt/rh/rh-php70/php.ini
/etc/opt/rh/rh-php71/php.ini
/etc/opt/rh/rh-php72/php.ini
/etc/opt/rh/rh-php73/php.ini

Onderstaande gewijzigde instellingen zijn nodig voor het werken met grotere bestanden zoals het uploaden van foto's in wordpress.
Open hiertoe het PHP settings bestand '/etc/opt/rh/rh-php7x/php.ini' in een teksteditor en verifiëer/corrigeer de volgende argumenten (in de volgorde zoals ze voorkomen):

  1. memory_limit = 256M (voor Wordpress)
  2. post_max_size = 100M
  3. upload_max_filesize = 100M

Er moet een herstart van 'httpd' gedaan worden of beter de server reboten om deze wijziging te laden en check met phpinfo()

Naar index

PHP Picker

Met het selecteren van een PHP versie in Webconfig > Server > Web > Web server > Websites > Settings zijn er voor het PHP twee belangrijke dingen gebeurt:

  1. In de webroot /var/www/html is een bestand .phpenv geplaatst met daarin de tekst 73. De bedoeling hiervan is dat door dit bestand bijvoorbeeld in een subdir van de website te plaatsen en de inhoud te wijzigen naar 54, dat deze subdir gebruik maakt van PHP 5.4 Zie WikiSuite/app-php-engines
  2. Er zijn nieuwe flex-{80,443}.conf bestanden aangemaakt in /etc/httpd/conf.d/ met daarin nieuwe directives voor de app-php-engines. Deze directive bepaald welke PHP versie gebruikt moet worden.

De PHP-Engines directive in flex-80.conf:

<Directory /var/www/html>
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9073"
        </FilesMatch>
</Directory>

Hand picker ;)
Door in de directive het getal 71 aan het eind bijvoorbeeld te wijzigen naar 56 zal het er in resulteren dat in /var/www/html nu PHP 5.6 gebruikt zal worden. Dus we kunnen ook selectief in een subdir een andere PHP versie gebruiken door voor deze subdir (bijvoorbeeld piwigo) een extra directive te plaatsen zoals hieronder

<Directory /var/www/html/piwigo>
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9054"
        </FilesMatch>
</Directory>

Let op, telkens als we een Website Update toepassen worden de bestaande Flex-{80,443}.conf bestanden overschreven!!
Maak voor eigen custom directives daarom geen gebruik van deze Flex-{80,443}.conf bestanden. Zie hiervoor de sectie Custom Httpd Configuratie

Naar index

PHP extension Imagick

Imagick is de PHP ImageMagick extension voor het creëren en bewerken van foto's gebruik makend van de ImageMagick Application Programming Interface (API).
Piwigo en Wordpress maken middels Imagick gebruik van de ImageMagick App en elke PHP versie heeft zijn eigen Imagick extension.

  1. Verifiëer dat ImageMagick geïnstalleerd is.
    # convert --version
    Version: ImageMagick 6.9.10-68 Q16 x86_64 2020-04-01
       https://imagemagick.org
    Copyright: © 1999-2019 ImageMagick Studio LLC
  2. Installeer php-imagick voor PHP versie die in gebruik is
    # yum install sclo-php73-php-pecl-imagick.x86_64 --enablerepo=
    centos-sclo-sclo-unverified
  3. Reboot server (niet alleen httpd) en verify met phpinfo()

Naar index

Upgrade PHP 5.4 naar 7.4 met Remi repo

In de ClearOS repositories is de laatste beschikbare PHP versie: 7.3 en in verband met het door IBM stoppen van CentOS worden er ook geen verdere updates verwacht. Zie ook Server::Configureren > PHP update 5.4 naar 7.4
Ook in de CentOS en/of RHEL repositories zijn geen latere versies beschikbaar.

Remi's RPM Repository

Remi onderhoud diverse PHP RPM's for Fedora and EPEL.
Zie https://rpms.remirepo.net/ voor een wizard die helpt met de keuze van de gewenste RPM en vervolgens uitgebreide instructies voor het installeren verstrekt

Selecteer voor Operating System: EL7 voor CentOS

Selecteer voor PHP versie: 7.4.33


Note: Latere versies resulteren in een fatal error in Wordpress i.v.m. het door mij gebruikte thema dat al geruime tijd niet meer onderhouden wordt.

Selecteer voor Type of installation: Single
Dit resulteert erin dat de upgrade de huidige versie 5.4 vervangt door de versie 7.4.33

Selecteer voor Architexture x86-64

Naar index

Installatie Instructies

De wizard verstrekt nu de stap voor stap instructies om de upgrade uit te voeren.
Hieronder de stappen die ik mede aan de hand van de wizard uitgevoerd heb.

Er is gekozen voor een 'Single' installatie, dat houdt in dat de bestaande versie (php 5.4) opgewaardeerd gaat worden naar de nieuwe versie door het vervangen van de basis pakketten die dezelfde naam hebben of te wel php-*.
Sommige benodigde dependencies zijn beschikbaar in de Remi-safe repository, die standaard ingeschakeld (enabled) is.
PHP version 7.4 packages voor CentOS 7 zijn beschikbaar in de remi-php74 repository

php.ini voor PHP 7.4
Het bestand php.ini bevat de instellingen van PHP, maar elke PHP Engine heeft zijn eigen php.ini bestand.
Na de upgrade is de basis PHP module PHP 5.4 vervangen door PHP 7.4
Van PHP 5.4 was /etc/php.ini het bestand met de instellingen. Na de upgrade zijn de instellingen voor PHP 7.4 voorlopig opgeslagen als /etc/php.ini.rpmnew

De huidige 5.4 /etc/php.ini moet nu vervangen worden door de 7.4 php.ini, maar op deze laatste moeten we dan eerst nog een edit doen.

Voor Piwigo moeten de volgende instellingen opgenomen worden:
memory_limit = 256M (voor Wordpress)
post_max_size = 100M
upload_max_filesize = 100M

Vervang nu de huidige php.ini: # mv /etc/php.ini.rpmnew /etc/php.ini en REBOOT

Naar index

Edit en Activeer de PHP-Engines App

We gaan nu de upgrade naar PHP 7.4 integreren in PHP Engines. Zie voorbeeld in Exporing Linux > Projecten > Handmatige PHP Upgrade naar versie 7.3

Verwijder PHP 5.4 uit PHP Egines en vervang door PHP 7.4

# cd /usr/clearos/apps/php_engines/libraries
# cp -a PHP_Engines.php PHP_Engines.php.org
# vi PHP_Engines.php

Vind regel 'protected $supported = array( 'httpd' => 'PHP 5.4',

    protected $supported = array(
'httpd' => 'PHP 5.4'
,
'rh-php70-php-fpm' => 'PHP 7.0',
'rh-php71-php-fpm' => 'PHP 7.1',
'rh-php72-php-fpm' => 'PHP 7.2',
'rh-php73-php-fpm' => 'PHP 7.3'
);


En wijzig dit naar protected $supported = array( 'httpd' => 'PHP 7.4',

Naar index

Upgrade naar PHP 8+ met App PHP-Engines

Met de ClearOS 7.8.1 distributie van 2020 werd voor de Apache webserver de toen al verouderde PHP versie 5.4 meegeleverd. Tot op heden ( 28-10-2020) heeft ClearOS hiervoor geen update uitgebracht. Dit terwijl RedHat en CentOS al lang de versies 5.6 en 7.x uitgebracht hebben.

Eind 2017 heeft de ClearOS Community de PHP-Engines App geïntroduceerd waarmee deze RedHat PHP distributies in ClearOS 7.0 geïntegreerd kunnen worden.
In juli 2020 is er een PHP-Engines update uitgebracht en de beschikbare versies in ClearOS 7.x waren nu 5.4, 7.0, 7.1, 7.2 en 7.3
De oude versie 5.4 was een vast onderdeel van ClearOS 7.x en kan/mag niet verwijderd worden.

In de voorgaande sectie is beschreven hoe een update naar PHP 7.4 uitgevoerd wordt en daarmee PHP 5.4 vervangt en het vaste PHP onderdeel is geworden van ClearOS 7x.

In de ClearOS repositories is de laatste beschikbare PHP versie: 7.3 en in verband met het door IBM stoppen van CentOS worden er ook geen verdere updates verwacht. Zie ook Server::Configureren > PHP update 5.4 naar 7.4
Ook in de CentOS en/of RHEL repositories zijn geen latere versies beschikbaar.
Deze zijn wel beschikbaar in de Remi RPM Repository o.a EL 7 voor Centos.

Installatie PHP 8.0.30 uit de Remi's RPM Repository
Als voorbeeld wordt hierna de installatie van PHP 8.0 beschreven. Dezelfde procedure kan gevolgd worden voor de installatie van de PHP versies 8.1, 8.2 en 8.3

Remi onderhoud diverse PHP RPM's for Fedora and EPEL.
Zie https://rpms.remirepo.net/ voor een wizard die helpt met de keuze van de gewenste RPM en vervolgens uitgebreide instructies voor het installeren verstrekt.

Selecteer voor Operating System: EL7 voor CentOS

Selecteer voor PHP versie: 8.0.30

Selecteer voor Type of installation: Multiple versions simultaneously
Dit resulteert erin dat de installatie paralel aan de basisversie 7.4 geplaatst wordt in /etc/opt/remi

Selecteer voor Architexture x86-64

Naar index

Installatie Instructies

De wizard verstrekt nu de stap voor stap instructies om de upgrade uit te voeren.
Hieronder de stappen die ik mede aan de hand van de wizard uitgevoerd heb.

Er is gekozen voor een 'Multiple versions simultaneously' installatie, dat houdt in de install naast de bestaande versie (php 7.4) geïnstalleerd gaat worden.
Alle benodigde PHP 8.0.30 packages en dependencies zijn beschikbaar beschikbaar in de Remi-safe repository, die standaard al ingeschakeld (enabled) is.

php.ini voor PHP 8.0.30
Het bestand php.ini bevat de instellingen van PHP, maar elke PHP Engine heeft zijn eigen php.ini bestand.

In de zojuist geïnstalleerde PHP 8.0.30 /etc/opt/remi/php80/php.ini moet voor Piwigo de volgende instellingen opgenomen worden:
memory_limit = 256M (voor Wordpress)
post_max_size = 100M
upload_max_filesize = 100M

En REBOOT

Naar index

PHP-Engines Integratie van PHP 8.0

We gaan nu de installatie van PHP 8.0 toevoegen in PHP Engines.
Zie ook zoals uitgevoerd in Exporing Linux > Projecten > Handmatige PHP Upgrade naar versie 7.3
Bij het toevoegen aan PHP-Engines heb ik de procedure gevolgd zoals omschreven op Github Added PHP 7.1 engine

A. Edit PHP_Engines.php

 protected $services = array();

    protected $supported = array(
        'httpd' => 'PHP 7.4',
        'rh-php73-php-fpm' => 'PHP 7.3',
        'php80-php-fpm' => 'PHP 8.0'      
    );

    protected $ports = array(
        'httpd' => 0,
        'rh-php73-php-fpm' => 9073,
        'php80-php-fpm' => 9080
    );

    protected $version_codes = array(
        'rh-php73-php-fpm' => 73,
        'php80-php-fpm' => 80
    );

    protected $configs = array(
        'rh-php73-php-fpm' => '/etc/opt/rh/rh-php73/php.ini',
        'php80-php-fpm' => '/etc/opt/remi/php80/php.ini'
    );

Naar index

B. Edit info.php
Maak kopie van /usr/clearos/apps/php_engines/deploy/info.php en geef extentie: .org
Edit info.php:

  1. Verwijder in $app[requires'] = array(
    Alle regels met *php70*, *php71* en *php72*
    Voeg toe in $app[requires'] = array(
    Alle geinstalleerde php80-php-* modules (# yum list installed php80-php-*)
     
  2. Verwijder in $app['core_file_manifest'] = array(
    Alle regels met *php70*, *php71* en *php72*
    Voeg toe in $app['core_file_manifest'] = array(
    Nieuwe regel:
    'php80-php-fpm.php' => array('target' => '/var/clearos/base/daemon/php80-php-fpm.php'),
     
  3. Verwijder in blok 'www_path.conf' => array(
    Alle regels met *php70*, *php71* en *php72*
    Voeg toe in 'www_path.conf' => array(
    Nieuwe regel:
    '/etc/opt/remi/php80/php-fpm.d/www_path.conf',

C. Creëer rh-php80-php-fpm.php

  1. Ga naar /var/clearos/base/daemon/ en verwijder bestanden:
    rh-php70-php-fpm.php, rh-php71-php-fpm.php en rh-php72-php-fpm.php
     
  2. Maak kopie van /var/clearos/base/daemon/ rh-php73-php-fpm.php en noem php80-php-fpm.php
     
  3. Edit php80-php-fpm.php:
    Wijzig alle voorkomens van 7.3 & 73 naar respectievelijk 8.0 & 80

D. Edit upgrade

  1. Maak kopie van /usr/clearos/apps/php_engines/deploy/upgrade en geef extentie: .org
     
  2. Edit bestand upgrade.
    Verwijder 'CHECK' secties met:
      /etc/opt/rh/rh-php56/php-fpm.d/www.conf
      /etc/opt/rh/rh-php70/php-fpm.d/www.conf
      /etc/opt/rh/rh-php71/php-fpm.d/www.conf
      /etc/opt/rh/rh-php72/php-fpm.d/www.conf
     
  3. Voeg toe 'CHECK' sectie voor PHP 8.0
CHECK=`grep "^listen[[:space:]]*=[[:space:]]*.*:9000$" 
                     /etc/opt/remi/php80/php-fpm.d/www.conf 2> /dev/null`
if [ -n "$CHECK" ]; then
logger -p local6.notice -t installer "app-php-engines-core - updating listen port for PHP 8.0"
sed -i -e 's/^listen[[:space:]]*=.*/listen = 127.0.0.1:9080/' /etc/opt/remi/php80/php-fpm.d/www.conf
fi

E. Execute 'upgrade'

  1. # /usr/clearos/apps/php_engines/deploy/upgrade

  2. Herstart HTTPD
    # systemctl restart httpd

F. Enable PHP 8.0 in PHP-Engines

  1. Webconfig > Server > PHP Engines: Enable PHP 8.0

G. Selecteer PHP 8.0 in Webserver

  1. Open Webconfig > Server > Web > Webserver > Websites > Bewerk en select in de dialoogbox PHP 8.0
     
  2. Save en Apache gebruikt nu PHP 8.0
    Vergeet niet de opnieuw gecreëerde Flex bestanden te integreren in custom-httpd.conf met commando # flex-integrate. Zie hiervoor de sectie Custom Httpd Configuratie

Naar index

Activeren MySQL en phpMyAdmin

Selecteer: Webconfig > Server > Database > MariaDB Database Server
Opent de ClearOS App voor de MariaDB Database Server

Naar index

Upgrade MySQL MariaDB 5.5 naar rh-MariaDB 10.3

In augustus 2020 is de met ClearOS release 7.8.1 (Final) meegeleverde database nog steeds de in 2012 uitgebrachte MariaDB 5.5, waarvan de End Of Life staat op april 2020.
Inmiddels is de laatste in november 2018 door MaraDB uitgebrachte stabiele versie 10.4 , maar op 1 augustus 2020 is er nog steeds geen ClearOS upgrade beschikbaar.

In de ClearOS Sofware Collections repository clearos-centos-sclo-rh is al wel rh-MariaDB 10.3 beschikbaar voor installatie.

Let op! Zelf data migreren

[root@testserver ~]# yum remove app-mariadb-core

Procedure

Exporteer eigen databases in MariaDB 5.5 (met datadir in /var/lib/mysql/) naar bijvoorbeeld /home/dbase_dump:
Note: De MariaDB 5.5 Database Server zal niet meer gebruikt worden en de eigen Databases kunnen er beter uit verwijderd worden.

# mysqldump -uroot -p'root-mysqlpassword' --opt
            --databases piwigo > /home/dbase_dump/piwigo-dump.sql";
# mysqladmin -uroot -p'root-mysqlpassword' drop piwigo;

# mysqldump -uroot -p'root-mysqlpassword' --opt
      --databases wordpress > /home/dbase_dump/wordpress-dump.sql";
#mysqladmin -uroot -p'root-mysqlpassword' drop wordpress;

Naar index

Installeer rh-MariaDB 10.3

# yum install rh-mariadb103 --enablerepo=clearos-centos-sclo-rh
# scl enable rh-mariadb103 bash

Stop en de-activeer MariaDB 5.5

# systemctl stop mariadb
# systemctl disable mariadb

Activeer en start MariaDB 10.3

# systemctl enable rh-mariadb103-mariadb
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/rh-mariadb103-mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/rh-mariadb103-mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/rh-mariadb103-mariadb.service to /usr/lib/systemd/system/rh-mariadb103-mariadb.service.

# systemctl start rh-mariadb103-mariadb

Confirmeer dat Database Server operationeel is

# mysql -V
mysql  Ver 15.1 Distrib 10.3.13-MariaDB, for Linux (x86_64) using  EditLine wrapper

# systemctl is-enabled mariadb rh-mariadb103-mariadb
disabled
enabled

# systemctl status rh-mariadb103-mariadb
rh-mariadb103-mariadb.service - MariaDB 10.3 database server
Loaded: loaded (/usr/lib/systemd/system/rh-mariadb103-mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-07-29 17:08:35 CEST; 6min ago
Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
Process: 9360 ExecStartPost=/usr/bin/scl enable $RH_MARIADB103_SCLS_ENABLED -- /opt/rh/rh-mariadb103/root/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
Process: 9282 ExecStartPre=/usr/bin/scl enable $RH_MARIADB103_SCLS_ENABLED -- /opt/rh/rh-mariadb103/root/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS)
Process: 9247 ExecStartPre=/usr/bin/scl enable $RH_MARIADB103_SCLS_ENABLED -- /opt/rh/rh-mariadb103/root/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
Process: 9240 ExecStartPre=/usr/bin/scl enable $RH_MARIADB103_SCLS_ENABLED -- /usr/bin/scl_enabled rh-mariadb103 (code=exited, status=0/SUCCESS)
ain PID: 9325 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/rh-mariadb103-mariadb.service
           └─9325 /opt/rh/rh-mariadb103/root/usr/libexec/mysqld --basedir=/opt/rh/rh-mariadb103/root/usr

Jul 29 17:08:34 testserver scl[9282]: Database MariaDB is probably initialized in /var/opt/rh/rh-mariadb103/lib/mysql already, nothing is done.
Jul 29 17:08:34 testserver scl[9282]: If this is not the case, make sure the /var/opt/rh/rh-mariadb103/lib/mysql is empty before running mysql-prepare-db-dir.
Jul 29 17:08:35 testserver mysqld-scl-helper[9325]: 2020-07-29 17:08:35 0 [Note] /opt/rh/rh-mariadb103/root/usr/libexec/mysqld (mysqld 10.3.13-MariaDB) starting as process 9325 ...
Jul 29 17:08:35 testserver mysqld-scl-helper[9325]: 2020-07-29 17:08:35 0 [Warning] Could not increase number of max_open_files to more than 1024 (request: 4185)
Jul 29 17:08:35 testserver mysqld-scl-helper[9325]: 2020-07-29 17:08:35 0 [Warning] Changed limits: max_open_files: 1024  max_connections: 151 (was 151)  table_cache: 421 (was 2000)

Waarschuwing max_open_files
Alles in het status rapport blijkt in orde, behalve de waarschuwing in de laatste 2 regels. Er is een request van 4185 voor max_open_files.
Het is geprobeerd de huidige limiet van 1024 te verhogen maar dat is niet gelukt. Hoewel het slechts een waarschuwing is proberen we dit toch te herstellen.
Zie voor uitleg en instructies van deze 'hack' het bestand /usr/lib/systemd/system/rh-mariadb103-mariadb.service
Des te meer open files, des te zwaarder het systeemgeheugen belast wordt.

  1. Maak in dir /etc/systemd/system/ de directorie rh-mariadb103-mariadb.service.d
  2. Maak daarin het bestand limits.conf met daarin de code:
    [Service]
    LimitNOFILE=infinity
  3. Herlaadt de systemdaemon na deze wijzigingen:
    # systemctl daemon-reload
    # systemctl restart rh-mariadb103-mariadb

Naar index

MariaDB 10.3 beveiligen

MariaDB 10.3 is nu geïnstalleerd, maar zonder beveiliging d.w.z. dat de Database Server zonder inloggen te openen is.

Om MariaDB te beveiligen met een wachtwoord voeren we het volgende commando in:
# mysql_secure_installation

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Vervolgens worden nog enkele opties geboden die we accepteren:
- Verwijderen van anonieme gebruikers
- Blokkeren van toegang buiten 'localhost', d.d.z. geen remote access
- Verwijder database 'test'

Naar index

Maak gebruikers aan voor import eigen databases Piwigo en Wordpress

Alleen in het geval dat deze databases geexporteerd zijn van een andere server.
Zie voor de creatie van nieuwe databases Piwigo::Installeren en Wordpress::Installeren

Voordat we de eigen databases kunnen importeren moeten we de gebruikers aanmaken en authoriseren. Dit kan alleen door tijdelijk de databases Piwigo en Wordpress aan te maken.
Nadat de nieuwe gebruikers geauthoriseerd zijn moeten we de lege databases weer verwijderen.

# mysqladmin -uroot -p'root-mysqlpassword' CREATE piwigo;
# mysql piwigo -uroot -p'root-mysqlpassword' -e
   "GRANT ALL PRIVILEGES ON piwigo.*
   TO piwigo@localhost IDENTIFIED BY 'piwigo-mysqlpassword'";
# mysqladmin -uroot -p'root-mysqlpassword' drop piwigo;

# mysqladmin -uroot -p'root-mysqlpassword' CREATE wordpress;
# mysql wordpress -uroot -p'root-mysqlpassword' -e
   "GRANT ALL PRIVILEGES ON wordpress.*
   TO wordpress@localhost IDENTIFIED BY 'wordpress-mysqlpassword'";
# mysqladmin -uroot -p'root-mysqlpassword' drop wordpress;

Importeer eigen Database Piwigo en Wordpress voorheen opgeslagen in /home/dbase_dump/

# mysql -uroot -p'root-mysqlpassword' < /home/dbase_dump/piwigo-dump.sql
# mysql -uroot -p'root-mysqlpassword' < /home/dbase_dump/wordpress-dump.sql

De server draait nu op Database Server MariaDB 10.3

Data en mysql.sock locations

De nieuwe MariaDB 10.3 gebruikt dezelfde mysql.sock locatie als MariaDB5.5, waardoor bijvoorbeeld phpMyAdmin, Piwigo en Wordpress automatisch naar de nieuwe database worden geleid.
MariaDB 10.3 heeft zijn eigen data directory, zijnde de reden dat we onze eigen databases zelf moeten verhuizen.

MariaDB 5.5           datadir= /var/lib/mysql
                              socket=/var/lib/mysql/mysql.sock
rh-MariaDB 10.3     datadir=/var/opt/rh/rh-mariadb103/lib/mysql
                              socket=/var/lib/mysql/mysql.sock

Naar index

Verhuis MariaDB 10.3 MySQL data naar bindmount /store/live

Voor de rh-MariaDB 10.3 data-dir maken we ook een bindmount naar de dataopslag zoals ook al uitgevoerd is voor MariaDB 5.5 in de sectie Server::Gebruikerdata Opslag

Voor het verhuizen van MySQL data naar de centrale opslag hebben we te doen met één locatie /var/opt/rh/rh-mariadb103/lib/mysql
We gebruiken hiervoor hiervoor de bindmount directory /store/live/mariadb103/mysql

# mkdir /store/live/mariadb103
# mkdir /store/live/mariadb103/mysql

Verzamel informatie van de bron directory en voer commando's uit om de permissies van de bron naar het doel te synchroniseren.

# ls -la /var/opt/rh/rh-mariadb103/lib/mysql |head -n2
total 122936
drwxr-xr-x 4 mysql mysql      248 Oct 28 12:14 .

# chown --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb103
# chown --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb103/mysql
# chmod --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb103
# chmod --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb103/mysql

Valideer resultaat

# ls -al /store/live/mariadb103 |head -n2
total 0
drwxr-xr-x 3 mysql mysql 19 Oct 28 17:28 .
# ls -al /store/live/mariadb103/mysql |head -n2
total 0
drwxr-xr-x 2 mysql mysql  6 Oct 28 17:28 .

Naar index

Stop nu elke service die momenteel de bron directory mogelijk gebruikt.

# systemctl stop rh-mariadb103-mariadb

Verhuis de data naar de nieuwe locatie:

# rsync -av --delete /var/opt/rh/rh-mariadb103/lib/mysql/* /store/live/mariadb103/mysql/.

Verifieer dat de informatie op de nieuwe locatie is:

# ls -l /store/live/mariadb103/mysql/
total 122944
-rw-rw---- 1 mysql mysql    16384 Oct 28 11:08 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Oct 28 11:08 aria_log_control
-rw-rw---- 1 mysql mysql      976 Oct 28 11:08 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 Oct 28 11:08 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Oct 28 11:08 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Oct 28 10:47 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 Oct 28 11:08 ibtmp1
-rw-rw---- 1 mysql mysql        0 Oct 28 10:47 multi-master.info
drwx------ 2 mysql mysql     8192 Oct 28 10:47 mysql
-rw-rw---- 1 mysql mysql       16 Oct 28 10:47 mysql_upgrade_info
drwx------ 2 mysql mysql       28 Oct 28 10:47 performance_schema
-rw-rw---- 1 mysql mysql    24576 Oct 28 11:08 tc.log

Naar index

Verwijder de data uit de oude locatie:

# rm -rf /var/opt/rh/rh-mariadb103/lib/mysql/*
# ls -l /var/opt/rh/rh-mariadb103/lib/mysql/
total 0

Maak de bindmount aan in /etc/fstab door nieuwe lijn toe te voegen:

/store/live/mariadb103/mysql  /var/opt/rh/rh-mariadb103/lib/mysql    none bind,rw 0 0

Mount de toegevoegde devices en verifiëer de bindmounts :

# mount -a

# ls -l /var/opt/rh/rh-mariadb103/lib/mysql
total 122944
-rw-rw---- 1 mysql mysql    16384 Oct 28 11:08 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Oct 28 11:08 aria_log_control
-rw-rw---- 1 mysql mysql      976 Oct 28 11:08 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 Oct 28 11:08 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Oct 28 11:08 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Oct 28 10:47 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 Oct 28 11:08 ibtmp1
-rw-rw---- 1 mysql mysql        0 Oct 28 10:47 multi-master.info
drwx------ 2 mysql mysql     8192 Oct 28 10:47 mysql
-rw-rw---- 1 mysql mysql       16 Oct 28 10:47 mysql_upgrade_info
drwx------ 2 mysql mysql       28 Oct 28 10:47 performance_schema
-rw-rw---- 1 mysql mysql    24576 Oct 28 11:08 tc.log

Start de services die gestopt waren:

# systemctl start rh-mariadb103-mariadb

Naar index

Upgrade MySQL MariaDB 10.3 naar MariaDB 10.5

In augustus 2020 is de met ClearOS release 7.8.1 (Final) meegeleverde database nog steeds de in 2012 uitgebrachte MariaDB 5.5, waarvan de End Of Life staat op april 2020.
Inmiddels is de laatste in februari 2024 door MaraDB uitgebrachte stabiele versie 11.3 , maar op 4 april 2024 is er nog steeds geen ClearOS upgrade beschikbaar.

In de ClearOS Sofware Collections repository clearos-centos-sclo-rh is al wel rh-MariaDB 10.5 beschikbaar voor installatie.

# yum remove app-mariadb-core

Naar index

Backup MariaDB 10.3

Maak backups van de eigen databases Piwigo en Wordpress

# mysqldump -uroot -p'root-mysqlpassword' --opt
            --databases piwigo > /home/dbase_dump/piwigo-dump.sql";
# mysqladmin -uroot -p'root-mysqlpassword' drop piwigo;

# mysqldump -uroot -p'root-mysqlpassword' --opt
      --databases wordpress > /home/dbase_dump/wordpress-dump.sql";
#mysqladmin -uroot -p'root-mysqlpassword' drop wordpress;

Backup MariaDB data
Alle data van rh-mariadb103 worden per default opgeslagen in /var/opt/rh/rh-mariadb103/lib/mysql/, die middels een bindmount geplaatst zijn in /store/live/mariadb103/mysql/
Zie Verhuis MariaDB 10.3 MySQL data naar bindmount /store/live

De MariaDB103 data die opgeslagen zijn in /store/live/mariadb103/mysql/ hebben we later in het migratieproces nodig om deze te copieëren naar MariaDB105.
Als backuplocatie gebruiken we daarom de toekomstige MariaDB105 opslag in /store/live/mariadb105/mysql/

Creëer /store/live/mariadb105/mysql/

# mkdir /store/live/mariadb105
# mkdir /store/live/mariadb105/mysql

Verzamel informatie van de bron directory en voer commando's uit om de permissies van de bron naar het doel te synchroniseren.

# ls -la /var/opt/rh/rh-mariadb103/lib/mysql |head -n2
total 122936
drwxr-xr-x 4 mysql mysql      248 Oct 28 12:14 .

# chown --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb105
# chown --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb105/mysql
# chmod --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb105
# chmod --reference /var/opt/rh/rh-mariadb103/lib/mysql /store/live/mariadb105/mysql

Maak backup en kopieer /store/live/mariadb103/mysql/ naar /store/live/mariadb105/mysql

# cp -a /store/live/mariadb103/mysql/* /store/live/mariadb105/mysql/

Check backup

# ls -l /store/live/mariadb105/mysql
total 188544
-rw-rw---- 1 mysql mysql     81920 Apr  3 16:52 aria_log.00000001
-rw-rw---- 1 mysql mysql        52 Apr  3 16:52 aria_log_control
-rw-rw---- 1 mysql mysql      4136 Apr  3 16:52 ib_buffer_pool
-rw-rw---- 1 mysql mysql  79691776 Apr  3 16:52 ibdata1
-rw-rw---- 1 mysql mysql 100663296 Apr  4 15:37 ib_logfile0
-rw-rw---- 1 mysql mysql  12582912 Apr  3 16:53 ibtmp1
-rw-rw---- 1 mysql mysql         0 Dec  3  2020 multi-master.info
drwx------ 2 mysql mysql      4096 Apr  3 10:57 mysql
-rw-rw---- 1 mysql mysql        15 Apr  3 10:57 mysql_upgrade_info
drwx------ 2 mysql mysql        20 Apr  3 10:57 performance_schema
drwx------ 2 mysql mysql      8192 Apr  3 11:00 piwigo
drwx------ 2 mysql mysql      8192 Mar  7 13:34 wordpress

Naar index

Installeer rh-MariaDB 10.5

Zet slow shutdown

# mysql -uroot -p'root-mysqlpassword' -e "SET GLOBAL innodb_fast_shutdown =  0"

Stop rh-mariadb103 server

# systemctl stop rh-mariadb103-mariadb.service

Check status

# systemctl status -l rh-mariadb103-mariadb
   ●  rh-mariadb103-mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/rh-mariadb103-mariadb.service; enabled;  vendor preset: disabled)
   Drop-In:  /etc/systemd/system/rh-mariadb103-mariadb.service.d
   └─limits.conf
   Active: inactive (dead) 
   …
   Status: "MariaDB server is  down"

Disable rh-mariadb103 server

# systemctl disable rh-mariadb103-mariadb.service
   Removed  symlink  /etc/systemd/system/multi-user.target.wants/rh-mariadb103-mariadb.service.
   Removed  symlink /etc/systemd/system/mysql.service.
   Removed  symlink /etc/systemd/system/mysqld.service.

Check status opnieuw

# systemctl status -l rh-mariadb103-mariadb
   ●  rh-mariadb103-mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/rh-mariadb103-mariadb.service; disabled;  vendor preset: disabled)
   Drop-In:  /etc/systemd/system/rh-mariadb103-mariadb.service.d
   └─limits.conf
   Active: inactive (dead)

Installeer de RH-MARIADB105 collectie

Zorg dat in webconfig de repository clearos-centos-sclo-rh enabled is
Of voeg toe in commando : --enablerepo=clearos-centos-sclo-rh

# yum install rh-mariadb105-mariadb-server  rh-mariadb105-mariadb-server-utils

Installing:
   rh-mariadb105-mariadb-server  x86_64 3:10.5.9-2.el7
   rh-mariadb105-mariadb-server-utils x86_64  3:10.5.9-2.el7

Installing  for dependencies:
   rh-mariadb105-mariadb        x86_64 3:10.5.9-2.el7
   rh-mariadb105-mariadb-common x86_64  3:10.5.9-2.el7
   rh-mariadb105-mariadb-config x86_64  3:10.5.9-2.el7
   rh-mariadb105-mariadb-errmsg x86_64  3:10.5.9-2.el7
   rh-mariadb105-mariadb-libs   x86_64 3:10.5.9-2.el7
   rh-mariadb105-runtime        x86_64 3.7-1.el7

Verifieer dat MariaDB 10.5 default datadir /var/opt/rh/rh-mariadb105/lib/mysql/ bestaat en dat deze nog leeg is.

# ls -l /var/opt/rh/rh-mariadb105/lib/mysql/
   total 0 

Vergelijk configuratie bestanden en maak 10.5 zonodig gelijk aan 10.3

# less /etc/opt/rh/rh-mariadb105/my.cnf
   [mysqld]
   symbolic-links=0
   !includedir  /etc/opt/rh/rh-mariadb105/my.cnf.d

# less /etc/opt/rh/rh-mariadb103/my.cnf
   [mysqld]
   symbolic-links=0
   !includedir  /etc/opt/rh/rh-mariadb103/my.cnf.d

# less /etc/opt/rh/rh-mariadb105/my.cnf.d/mariadb-server.cnf
   [mysqld]
   datadir=/var/opt/rh/rh-mariadb105/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   log-error=/var/opt/rh/rh-mariadb105/log/mariadb/mariadb.log
   pid-file=/run/rh-mariadb105-mariadb/mariadb.pid #

# less  /etc/opt/rh/rh-mariadb103/my.cnf.d/mariadb-server.cnf
   [mysqld]
   datadir=/var/opt/rh/rh-mariadb103/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   log-error=/var/opt/rh/rh-mariadb103/log/mariadb/mariadb.log
   pid-file=/run/rh-mariadb103-mariadb/mariadb.pid

Naar index

Migreer de data van 10.3 naar 10.5

Alle data van rh-mariadb103 zijn opgeslagen in /var/opt/rh/rh-mariadb103/lib/mysql/ (d.m.v. bindmount fysiek in /store/live/mariadb103/mysql/).
Voor de migratie naar 105 moeten deze data gecopiëerd worden naar /var/opt/rh/rh-mariadb105/lib/mysql/
Deze data hebben wij voor de backup al gecopiëerd naar /store/live/mariadb105/mysql (Zie Maak backup)

Hier volstaat nu dus het plaatsen van een bindmount in /etc/fstab

Maak bindmount

  # vi /etc/fstab
   …
   /store/live/mysql                  /var/lib/mysql                            none bind,rw 0 0
   /store/live/system-mysql           /var/lib/system-mysql                     none bind,rw 0 0
   /store/live/mariadb103/mysql       /var/opt/rh/rh-mariadb103/lib/mysql       none bind,rw 0 0
   /store/live/mariadb105/mysql       /var/opt/rh/rh-mariadb105/lib/mysql       none bind,rw 0 0

Activeer bindmount

# mount -a

Verifieer /var/opt/rh/rh-mariadb105/lib/mysql/ bevat nu de data

# ls -l /var/opt/rh/rh-mariadb105/lib/mysql/
   total  188544
   -rw-rw----  1 mysql mysql     81920 Apr  3 10:57 aria_log.00000001
   -rw-rw----  1 mysql mysql        52 Apr  3 10:54 aria_log_control
   -rw-rw----  1 mysql mysql      4197 Apr  3 10:54 ib_buffer_pool
   -rw-rw----  1 mysql mysql  79691776 Apr  3 10:54 ibdata1
   -rw-rw----  1 mysql mysql 100663296 Apr  3 11:23 ib_logfile0
   -rw-rw----  1 mysql mysql  12582912 Apr  3 10:55 ibtmp1
   -rw-rw----  1 mysql mysql         0 Dec  3  2020 multi-master.info
   drwx------  2 mysql mysql      4096 Apr  3 10:57 mysql
   -rw-rw----  1 mysql mysql        15 Apr  3 10:57 mysql_upgrade_info
   drwx------  2 mysql mysql        20 Apr  3 10:57 performance_schema
   drwx------  2 mysql mysql      8192 Apr  3 11:00 piwigo
   drwx------  2 mysql mysql      8192 Mar  7 13:34 wordpress

Enable mariadb105

# systemctl enable rh-mariadb105-mariadb.service

   Created symlink from /etc/systemd/system/mysql.service  to /usr/lib/systemd/system/rh-mariadb105-mariadb.service.
   Created symlink from  /etc/systemd/system/mysqld.service to  /usr/lib/systemd/system/rh-mariadb105-mariadb.service.
   Created symlink from  /etc/systemd/system/multi-user.target.wants/rh-mariadb105-mariadb.service to  /usr/lib/systemd/system/rh-mariadb105-mariadb.service.

Start mariadb105

# systemctl start rh-mariadb105-mariadb.service

Check status mariadb105

# systemctl status rh-mariadb105-mariadb

● rh-mariadb105-mariadb.service - MariaDB 10.5 database server
 Loaded: loaded (/usr/lib/systemd/system/rh-mariadb105-mariadb.service; enabled; vendor preset: disabled)
 Drop-In: /etc/systemd/system/rh-mariadb105-mariadb.service.d
 └─limits.conf
 Active: active (running)
 ...
 Status: "Taking your SQL requests now..."
 ...

UPGRADE

# scl enable rh-mariadb105 -- mysql_upgrade  -p'kn1kk@M!48'

   Phase  1/7: Checking and upgrading mysql database
   Processing  databases
   mysql
   mysql.column_stats                                OK
   mysql... etc
   Phase 2/7: Installing used storage engines... Skipped
   Phase 3/7: Fixing views
   Phase 4/7: Running 'mysql_fix_privilege_tables'
   Phase 5/7: Fixing table and database names
   Phase 6/7: Checking and upgrading tables
   Processing databases
   information_schema
   performance_schema
   piwigo
   piwigo.pi_activity                                 OK
   piwigo... etc
   wordpress
   wordpress.wp_actionscheduler_actions               OK
   wordpress... etc
   Phase 7/7: Running 'FLUSH PRIVILEGES'
   OK

REBOOT

Naar index

Waarschuwing Max-Open-Files

In het status rapport is er een waarschuwing in de laatste 2 regels. Er is een request van 4185 voor max_open_files.
Het is geprobeerd de huidige limiet van 1024 te verhogen maar dat is niet gelukt. Hoewel het slechts een waarschuwing is proberen we dit toch te herstellen.
Zie ook Waarschuwing Max-Open-Files

Maak in dir /etc/systemd/system/ de directorie rh-mariadb105-mariadb.service.d

Maak daarin het bestand limits.conf met daarin de code:

 [Service]
   LimitNOFILE=infinity

Herlaadt de systemdaemon na deze wijzigingen:

  # systemctl daemon-reload
  # systemctl restart rh-mariadb105-mariadb

Naar index

MariaDB103 verwijderen

Na de installatie en activatie van MariaDB 10.5 kan MariaDB 10.3 verwijderd worden.

De data van rh-mariadb103 zijn virtueel opgeslagen in /var/opt/rh/rh-mariadb103/lib/mysql/ maar fysiek via een bindmount in /store/live/mariadb103/mysql/

Edit /etc/fstab en verwijder de bindmount

  # vi /etc/fstab
   …
   /store/live/mysql                  /var/lib/mysql                            none bind,rw 0 0
   /store/live/system-mysql           /var/lib/system-mysql                     none bind,rw 0 0
   # /store/live/mariadb103/mysql       /var/opt/rh/rh-mariadb103/lib/mysql       none bind,rw 0 0
   /store/live/mariadb105/mysql       /var/opt/rh/rh-mariadb105/lib/mysql       none bind,rw 0 0
   …

Mount en reboot

  # mount -a
  # reboot

Delete /store/live/mariadb103

  # rm -rf /store/live/mariadb103

  # ls -l /store/live/
  total 4
  drwxr-xr-x 13 root         root          208 Sep  4  2022 home
  drwxr-xr-x  3 mysql        mysql          27 Apr  4 14:31 mariadb105
  drwxr-xr-x  4 mysql        mysql         201 Apr  6 13:28 mysql
  drwxr-xr-x  5 system-mysql system-mysql  250 Apr  6 13:28 system-mysql
  drwxrwx--- 11 apache       lanshare     4096 Mar 30 14:07 webroot

Verwijder rh-mariadb103

# yum remove rh-mariadb103*
Loaded plugins: clearcenter-marketplace, fastestmirror

======================================================================================================================================
 Package                                  Arch               Version                        Repository                           Size
======================================================================================================================================
Removing:
 rh-mariadb103                            x86_64             3.3-5.el7                      @clearos-centos-sclo-rh             0.0
 rh-mariadb103-mariadb                    x86_64             3:10.3.32-2.el7                @clearos-centos-sclo-rh              38 M
 rh-mariadb103-mariadb-common             x86_64             3:10.3.32-2.el7                @clearos-centos-sclo-rh             179 k
 rh-mariadb103-mariadb-config             x86_64             3:10.3.32-2.el7                @clearos-centos-sclo-rh             366
 rh-mariadb103-mariadb-errmsg             x86_64             3:10.3.32-2.el7                @clearos-centos-sclo-rh             2.3 M
 rh-mariadb103-mariadb-server             x86_64             3:10.3.32-2.el7                @clearos-centos-sclo-rh              85 M
 rh-mariadb103-runtime                    x86_64             3.3-5.el7                      @clearos-centos-sclo-rh              29 k

Transaction Summary
======================================================================================================================================
Remove  7 Packages

Vind en verwijder elders data van mariadb103

# updatedb

# locate mariadb103*

Verwijder alle nog aanwezige voorkomens mariadb103

Bijvoorbeeld
Verwijder /var/opt/rh/rh-mariadb103
# rm -rf /var/opt/rh/rh-mariadb103/lib/

Naar index

Permissies Website Root

In het HTTPD configuratiebestand '/etc/httpd/conf/httpd.conf' wordt de root van de website vastgelegd op '/var/www/html'.
Door middel van Samba wordt de website voorzien van bestanden met als eigenaar 'website' en groep 'lan'.
De permissies voor directories zijn 755 en bestanden 644. Hiermee heeft Apache in groep 'apache' voldoende rechten.
Zie ook sectie Samba: Samba Acces naar Webserver

Naar index

Reset Permissies en Owners van Websites

Bij updates van websites van bijv. Wordpress en Piwigo worden soms onbedoeld permissies en/of ownerships gewijzigd.
Van alle submappen van /var/www/html moeten de permissies (terug)gezet worden naar 755 voor mappen en 644 voor bestanden.

Hiervoor heb ik het script reset-perm-users-websites gemaakt:

##########################################################################################
# Script voor het recursief re-setten van permissies en owners van map /var/www/html,    #
# (alle websites). Alles apache:lanshare, mappen 755 en files 644                        #
# Ben Makkink 27 maart2024                                                               #
##########################################################################################
#!/bin/sh
chown -R apache:lanshare /var/www/;
chmod -R 755 /var/www/;
find /var/www/html -type f -name '*' -exec chmod 644 '{}' \;

Naar index

Apache Configureren

Werkwijze
Met de installatie van de Apache Webserver wordt voor de module 'HTTPD' het default configuratiebestand 'httpd.conf' geplaatst in de directory /etc/httpd/conf/
Alleen als het echt niet anders kan, maken we wijzigingen in httpd.conf zelf.
Zeer uitgebreide informatie is te vinden in Apache HTTP Server Version 2.4 Documentation
Met het activeren van de Webserver app en het editen van de settings in de app worden twee bestanden aangemaakt in /etc/httpd/conf.d/ zijnde flex-80.conf en flex-443.conf

Waarschuwing:
Maak geen configuratiewijzigingen door de bestanden flex-80.conf en flex-443.conf handmatig te wijzigen.
Zodra we met de Webconfig Webserver App wijzigingen/updates aanbrengen zullen eigen directives overschreven worden.
Creëer voor eigen configuratieinstellingen een nieuw bestand in de map /etc/httpd/conf.d/ met daarin de eigen directives.

Includes
Het nader configureren van de webserver wordt uitgevoerd door het in /etc/httpd/conf.d plaatsen van include 'bestanden' *.conf
Deze bestanden worden geladen (in alphabetische volgorde) door de directive 'IncludeOptional conf.d/*.conf' geheel aan het eind van httpd.conf
In de /etc/httpd/conf.d map worden door Apps gegenereerde *.conf bestanden geplaatst met directives specifiek voor deze Apps zoals:

Om aanvullend eigen 'custom' instellingen voor deze Apps te maken moeten we niet in deze 'app.confs' gaan editen. De App-frontends, zoals de BackupPC App, zullen deze weer overschrijven.

Custom Includes
Voor aanvullende 'custom' instellingen moeten wij onze eigen *.conf bestand maken zoals gesuggereerd in Custom Apache Web Server Configuration

Op het moment van het samenstellen van deze site zijn dat:

We gebruiken voor onze eigen custom configuratie niet de door ClearOS gesuggereerde bestandsnaam clearos.default.conf, in plaats daarvan noemen we deze custom_httpd.conf

Zie voor een overzicht van de *.conf directives op deze server: httpd-include-confs.pdf

Naar index

Apache Httpd.Conf

In het bestand /etc/httpd/conf/httpd.conf bevinden zich de Apache default directives zoals ClearOS deze instelt als de Apache Webserver geactiveerd wordt.
Bekijk hier het oorspronkelijke ClearOS httpd.conf bestand.

Enkele directives met betrekking tot security bekijken we nader:

<Directory />
AllowOverride None
Require all Denied
</Directory>

Hiermee is het voor de gehele server niet toegestaan overrides op httpd directives te maken mbv .htaccess bestanden.
Tevens wordt voor de gehele server de toegang aan de webgebruiker ontzegd
<Directory "/var/www">
AllowOverride None
Require all Granted
</Directory>
Voor de directory (en subdiretories van) "/var/www" zijn overrides nog steed niet toegestaan maar de webgebruikers hebben wel toegang tot de mappen en bestanden in /var/www
<Files ".ht*">
Require all Denied
</Files>
Verberg '.ht*' bestanden zoals '.htaccess' door webtoegang te ontzeggen

Naar index

.htaccess

Het .htaccess bestand is een high-level website configuratiebestand.
Op Apache websites maakt het .htaccess bestand het mogelijk wijzigingen aan te brengen in de websiteconfiguratie zonder dat daarvoor de HTTPD configuratiebestanden bewerkt moeten worden.

Een .htaccessbestand wordt geplaatst in de root van websiteapps zoals Piwigo en Wordpress. Dit in tegenstelling tot httpd.conf en de 'includes' *.conf die buiten de webroot geplaatst zijn en dus onbereikbaar voor de webgebruiker.

Voorbeeld van een .htaccess bestand
Om in Piwigo een directe url naar originele fotos in ../piwigo/upload te blokkeren wordt een .htaccessbestand geplaatst in de /var/www/html/piwigo/upload met daarin één regel:

Require all denied

In de voorgaande sectie Apache Httpd.Conf zien we dat in de webroot AllowOverride None als default is gezet.
Een .htaccess bestand wordt echter pas uitgevoerd als ergens in de httpd configuratie AllowOverride All wordt gezet.
(AllowOverride kent naast 'None' en 'All' de directive types 'FileInfo', 'Options', 'AuthConfig' en 'Limit').
Dit kunnen we bewerkstelligen door in Webconfig > Server > Web > Web server > Websites > Edit > Settings > Allow [.htaccess] Override de optie 'Enabled' te kiezen. In dat geval wordt in het flex-80.conf bestand het volgende toegevoegd:

<Directory /var/www/html>
 AllowOverride All
</Directory>

Kwetsbaarheid
In ons .htaccess voorbeeld plaatsen we feitelijk een directive binnen de webroot en met wat hackwerk bereikbaar voor webgebruikers.
In theorie is het nu mogelijk middels Piwigo, in plaats van een foto, een .htaccess bestand met eigen directives naar /var/www/html/piwigo/upload te uploaden die daarmee het aanwezige .htaccess bestand vervangt.

Oplossing
Waar mogelijk worden .htaccess bestanden door mij niet toegepast.
Door in Webconfig Allow [.htaccess] Override de default optie 'Disabled' te laten worden eventuele .htaccess bestanden niet uitgevoerd.
De directives in de .htaccess bestanden zijn echter nodig voor het correct functioneren van o.a Piwigo en Wordpress.
Dit lossen we op door als root configuratiebestanden aan te maken in /etc/httpd/conf.d zoals piwigo.conf en wordpress.conf waarin we de directives uit de .htaccess bestanden plaatsen.

Let hierbij op dat het pad van de directive gelijk is aan het pad waar het .htaccess bestand gevonden wordt.
In het voorbeeld van het Piwigo .htaccess bestand met de directe url blokkering vervangen we het .htaccess bestand door onderstaande directive in piwigo.conf

<Directory /var/www/html/piwigo/upload>
 Require all denied
</Directory>

Naar index

Custom Httpd Configuratie

Het nader configureren van de webserver doen we door het in /etc/httpd/conf.d plaatsen van include bestanden *.conf
Deze bestanden worden geladen in alphabetische volgorde.
Let op: Voorkom dat directives in later geladen *.conf's eerder geladen directives overschrijven.

Virtual hosts kunnen slechts éénmaal gezet worden
We moeten ons realiseren dat de virtualhosts gedefinieerd in de flex-{80,443}.conf bestanden slechts éénmaal geladen kunnen worden.

Als we eigen custom directives toe willen voegen binnen de virtual hosts zit er niet anders op dan, zoals gesuggereerd in Custom Apache Web Server Configuration, de inhoud van de flex-{80,443}.conf bestanden over te hevelen naar een bestand te noemen clearos.default.conf en vervolgens hier de eigen VHost directives toe te voegen. De nu lege flex bestanden moeten daarna verwijderd worden.

Conflict
Als nu in Webconfig een wijziging in de Webserver configuratie gemaakt wordt, het zij manueel of middels een automatische ClearOS update, dan worden er nieuwe flex-{80,443}.conf bestanden aangemaakt met daarin de nieuwe directives en ook de potentieel ge-update VHost directives.
Bij het opnieuw opstarten van HTTPD wordt onze custom clearos.default.conf als eerste geladen en vóór de beide flex-{80,443}.conf bestanden. Als er wijzigingen in de VHost directives zijn gemaakt dan worden deze nu niet geladen.
Dit word door ClearOS radicaal opgelost door bij een update van de Webserver App het clearos.default.conf bestand compleet te verwijderen. Hierdoor worden nu de VHost directives in de nieuwe flex-{80,443}.conf bestanden wél geladen.
Maar nu zijn echter onze eigen custom directives verdwenen, zonder dat we hiervan bij bijv. een automatische update een notificatie krijgen.
Om deze automatische delete te voorkomen noemen we daarom ons custom Webserver configuratiebestand: custom_httpd.conf
Nu is het wel aan ons de beide flex-{80,443}.conf bestanden te integreren.

Automatische integratie van de nieuwe flex-{80,443}.conf bestanden
In de hierboven geschetste situatie worden de potentieel nieuwe VHost directives in de flex-{80,443}.conf bestanden nu weliswaar niet geladen maar onze website reageert tenminste nog zoals we het gewend waren met de oude custom_httpd.conf
Middels het script flex-integrate dat bijvoorbeeld elke dag draait wordt ervoor gezorgd dat de nieuwe flex-{80,443}.conf bestanden gedetecteerd worden, geintegreerd worden in custom_httpd.conf en Admin hiervan een notificatie krijgt.

Voor nadere 'custom' configuratie van onze Apache Webserver maken we een nieuw bestand aan in /etc/httpd/conf.d en noemen het 'custom_httpd.conf'.
In het custom_httpd.conf bestand integreert het script de inhoud van:

  1. flex-80.conf Met de via de Webser App gemaakte directives voor de VirtualHost met poort 80 (HTTP)
  2. flex-443.conf Met de via de Webser App gemaakte directives voor de VirtualHost met poort 443 (HTTPS)
  3. custom_httpd.inc Met de aanvullende eigen custom webserver directives

Het laatstgenoemde bestand custom_httpd.inc plaatsen we ook in /etc/httpd/conf.d/ en hierin zetten we al onze eigen custom directives. Zie sectie Custom_httpd.inc

Bekijk of download het custom_httpd.conf eindresultaat.

Naar index

De onderdelen van custom_httpd.conf uitgelicht

Hieronder de onderdelen waaruit custom_httpd.conf samengebouwd wordt.

AWStats access log directives binnen VirtualHosts
De highlight secties betreffen de directives binnen de VirtualHosts voor de AWstats access logs:

# ==================================================================== 
# Flex-80.conf inclusief eigen directives binnen VirtualHost 
# uit /etc/httpd/conf.d/custom_httpd.inc 
# ==================================================================== 
<VirtualHost *:80>
	ServerName makkink.eu
	ServerAlias *.makkink.eu
	DocumentRoot /var/www/html
	ErrorLog /var/log/httpd/error_log
	CustomLog /var/log/httpd/access_log combined
        # START eigen directives access_logs binnen vHosts
        # ----------------------------------------------------------------
        CustomLog /var/log/httpd/wandelen_access_log combined env=wandelen
        CustomLog /var/log/httpd/nbp_access_log combined env=nbp
        CustomLog /var/log/httpd/blog_access_log combined env=blog
        # ----------------------------------------------------------------
        # EINDE eigen directives binnen vHosts
</VirtualHost>

<Directory /var/www/html>
	Options -Indexes +FollowSymLinks -IncludesNOExec
	<FilesMatch \.php$>
		SetHandler "proxy:fcgi://127.0.0.1:9073"
	</FilesMatch>
	Require all granted
</Directory>

# ==================================================================== 
# Flex-443.conf inclusief eigen directives binnen VirtualHost 
# uit /etc/httpd/conf.d/custom_httpd.inc 
# ==================================================================== 
<VirtualHost *:443>
	ServerName makkink.eu
	ServerAlias *.makkink.eu
	DocumentRoot /var/www/html
	ErrorLog /var/log/httpd/error_log
	CustomLog /var/log/httpd/access_log combined
        # START eigen directives access_logs binnen vHosts
        # ----------------------------------------------------------------
        CustomLog /var/log/httpd/wandelen_access_log combined env=wandelen
        CustomLog /var/log/httpd/nbp_access_log combined env=nbp
        CustomLog /var/log/httpd/blog_access_log combined env=blog
        # ----------------------------------------------------------------
        # EINDE eigen directives binnen vHosts
	SSLEngine on
	SSLCertificateFile /etc/letsencrypt/live/www.makkink.eu/cert.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/www.makkink.eu/privkey.pem
	SSLCertificateChainFile /etc/letsencrypt/live/www.makkink.eu/chain.pem
	# No weak export crypto allowed
	SSLHonorCipherOrder on
	SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
	SSLCipherSuite ECDHE:...bla: bla: bla:...:!3DES:!aNULL:!MD5
	SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
     downgrade-1.0 force-response-1.0
</VirtualHost>

# ==================================================================== 
# Eigen HTTPD Directives buiten de VirtualHosts
# ====================================================================

# Access_Logs: Zet 'env' voor paden 'wandelen', 'nbp' en 'blog' vanuit
# de webroot en geef deze env's een alias (wandelen, nbp en blog)
# --------------------------------------------------------------------
SetEnvIf Request_URI "^/wandelen/" wandelen
CustomLog logs/wandelen_access_log combined env=wandelen
SetEnvIf Request_URI "^/nbp/" nbp
CustomLog logs/nbp_access_log combined env=nbp
SetEnvIf Request_URI "^/blog/" blog
CustomLog logs/blog_access_log combined env=blog

Access_log van specifieke subdirectory
Per default wordt er door Apache access logging uitgevoerd over de complete httpd root website.
De drie hierboven toegevoegde 'CustomLog' directives voor 'wandelen', 'nbp' en 'blog' binnen de beide VirtualHosts definieren de customlog files.

Vervolgens worden buiten de vHost secties de paden vanuit de webroot (/var/www/html) gezet met 'SetEnvIf' voor 'wandelen', 'nbp' en 'blog' aangevuld met een alias (wandelen, nbp en blog).
Na deze toevoegingen in 'custom_httpd.conf' en een herstart van de httpd service zijn nieuwe de access_log bestanden wandelen_access_log, nbp_access_log en blog_access_log te vinden in '/var/log/httpd/'.
Deze access-logs worden gebruikt door Awstats voor het tonen van statistieken.
Zie hiervoor sectie Awstats en Access-logs

Naar index

Vervolg Eigen HTTPD Directives buiten de VirtualHosts

Options voor Website
Blokkeer tonen van directory-index, sta volgen van symbolic links toe, maar blokkeer uitvoerbare bestanden
Voeg onderstaande regels toe aan 'custom-httpd.conf':

<Directory /var/www/html>
        Options -Indexes +FollowSymLinks -IncludesNOExec
        Require all granted
</Directory>

Naar index

ServerAdmin e-mail adres
Het adres waar problemen met de server naar toe gemaild moeten worden. Dit adres verschijnt op sommige server gegenereerde pagina's, zoals errror documenten.
Voeg onderstaande regels toe aan 'custom-httpd.conf':

ServerAdmin ben@makkink.eu

Naar index

DirectoryIndex
In HTTPD.CONF wordt de DirectoryIndex gezet, waarmee wordt bepaald welk bestand Apache opent als er een Directory wordt gevraagd.
Deze setting is alleen index.html. Bij sommige oude webpagina's wordt nog index.htm gebruikt. Deze optie voegen we toe.
DirectoryIndex voor index.php wordt verzorgd in php.conf
Voeg onderstaande regels toe aan 'custom-httpd.conf':

<IfModule dir_module>
    DirectoryIndex index.html index.htm
</IfModule>

Naar index

Directory-listing /var/www/html/exploringlinux/download
Voor de hele website (httpd root: var/www/html) geldt de default dat geen directory listings getoond worden. Zie directive in oorspronkelijke 'clearos.default.conf' hierboven voor /var/www/html: Options -Indexes +FollowSymLinks -IncludesNOExec

In de directory 'download' moet juist de bestandslisting getoond wordt, zodat hier bestanden aangeboden kunnen worden voor download.
Voeg onderstaande regels toe aan 'custom-httpd.conf':

<Directory "/var/www/html/exploringlinux/download">
    Options +Indexes
</Directory>

Naar index

Mapping naar bestanden buiten de httpd root
Met de alias wordt een korte url bewerkstelligd dus een soort van symbolic link. Met de directive worden nadere instellingen gemaakt, o.a. het beperken wie toegang heeft.
Voeg onderstaande regels toe aan 'custom-httpd.conf':

Alias /manuals "/usr/share/doc"
<Directory "/usr/share/doc">
        Options Indexes
        AllowOverride None
        Require ip 192.168.178.0/24
      # Require all granted
</Directory>

Naar index

Forceer domein www.makkink.eu naar HTTPS

Webserverconfiguratie die er voor zorgt dat gebruikers altijd doorverwezen worden naar https://www.makkink.eu
Voeg onderstaande regels toe aan 'custom-httpd.conf':

# Forceer domein www.makkink.eu naar HTTPS

        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.makkink.eu/$1 [R,L]


# Voorbeeld HTTPS met uitzondering voor www/makkink.eu/blog
# 
#        RewriteEngine On
#        RewriteCond %{SERVER_PORT} 443
#        RewriteRule ^blog/?(.*) http://www.makkink.eu/blog/$1 [R,L]

#        RewriteCond %{SERVER_PORT} 80
#        RewriteCond %{REQUEST_URI} !^/blog
#        RewriteRule ^(.*)$ https://www.makkink.eu/$1 [R,L]

Naar index

Custom_httpd.conf compileren met script

Als de Webserver admin een notificatie zou krijgen dat er een update gedaan is in de Webserverconfiguratie is het vrij eenvoudig voor hem de nieuwe flex-{80,443}.conf bestanden opnieuw te mergen in custom_httpd.conf.
Hiervoor heb ik een script opgezet dat dagelijks draait en nieuwe flex-{80,443}.conf bestanden detecteerd.
Maar in plaats van alleen een notificatie naar de admin te sturen met de instructie de integratie handmatig uit te voeren, gaat het script verder met het compileren van een nieuwe custom_httpd.conf.

Flex-integrate script
Het script /usr/local/bin/flex-integrate laten we middels een cron dagelijks uitvoeren en het doorloopt de volgende stappen:

  1. Check of bestanden flex-80.conf en/of flex-443.conf bestaan, zo ja dan is er een webserver-update geweest. Maak deze detectie once-only en hernoem bestanden naar flex80.new en flex443.new
  2. Compileer een bestand custom_httpd.tmp met selecties uit de bestanden flex80.new, flex443.new en het bestand custom_httpd.inc. Dit laatste bestand is het bestand waarin we de eigen custom httpd directives peprepaeerd hebben.
  3. Zodra gereed, hernoem de compilatie naar custom_httpd.conf. De op dat moment actieve httpdconfiguratie wordt hiermee overschreven.
  4. Reboot de webserver waardoor het nieuwe configuratiebestand geladen wordt.
  5. Stuur een e-mail naar de Admin ter notoficatie dat er een webserver-update is geweest en dat deze geïntegreerd is in het custom-httpd.conf configuratiebestand.

Naar index

Custom_httpd.inc

Voor het integreren van de nieuwe flex-{80,443}.conf bestanden prepareren we het bestand custom_httpd.inc met daarin onze eigen custom directives.

Het is belanrijk dat alle custom directives die binnen de VHosts geplaats moeten worden, in dit bestand opgenomen zijn tussen de START en EINDE regels.
Alle verdere custom directives die we toe willen voegen moeten we opnemen ná de regel: Eigen HTTPD Directives buiten de VirtualHosts

# ************************************************************************
# * custom_httpd.inc          Ben Makkink 25-09-2020                     *
# * Eigen HTTPD directives toe te voegen aan flex80 en flex443 in het    *
# * nieuwe HTTPD configuratiebestand 'custom_httpd.conf'                 *
# ************************************************************************

# Directives in te voegen binnen de vHosts 80 en 443
# ==================================================

        # START eigen directives access_logs binnen vHosts
        # ----------------------------------------------------------------
        CustomLog /var/log/httpd/wandelen_access_log combined env=wandelen
        CustomLog /var/log/httpd/nbp_access_log combined env=nbp
        CustomLog /var/log/httpd/blog_access_log combined env=blog
        # ----------------------------------------------------------------
        # EINDE eigen directives binnen vHosts

# Eigen HTTPD Directives buiten de VirtualHosts
# ====================================================================

# Access_Logs: Zet 'env' voor paden 'wandelen', 'nbp' en 'blog' vanuit
# de webroot en geef deze env's een alias (wandelen, nbp en blog)
# --------------------------------------------------------------------
SetEnvIf Request_URI "^/wandelen/" wandelen
CustomLog logs/wandelen_access_log combined env=wandelen
SetEnvIf Request_URI "^/nbp/" nbp
CustomLog logs/nbp_access_log combined env=nbp
SetEnvIf Request_URI "^/blog/" blog
CustomLog logs/blog_access_log combined env=blog

# Het e-mail adres waar problemen met de server naar toe gemaild worden
ServerAdmin ben@makkink.eu

# DirectoryIndex: zet het bestand dat Apache opent als een directory
# wordt gevraagd (is in httpd.conf alleen index.html)
<IfModule dir_module>
    DirectoryIndex index.html index.htm
</IfModule>

# Indexering (listing) van bestanden toestaan in download directory
<Directory "/var/www/html/exploringlinux/download">
    Options +Indexes
</Directory>

# Mapping naar bestanden buiten de webroot met een alias en opties
# Geef toegang voor alleen de hosts op het LAN
Alias /manuals "/usr/share/doc"
<Directory "/usr/share/doc">
        Options Indexes
        AllowOverride None
        Require ip 192.168.178.0/24
      # Require all granted
</Directory>

# Forceer domein www.makkink.eu naar HTTPS
# NIET OP TESTSERVER, certificaat is voor www.makkink.eu(homeserver)
 <Directory /var/www/html>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} 80
       RewriteRule ^(.*)$ https://www.makkink.eu/$1 [R,L]
 </Directory>
 
# Voorbeeld voor een uitzondering van www/makkink.eu/blog
# <Directory /var/www/html>
#        RewriteEngine On
#        RewriteCond %{SERVER_PORT} 443
#        RewriteRule ^blog/?(.*) http://www.makkink.eu/blog/$1 [R,L]

#        RewriteCond %{SERVER_PORT} 80
#        RewriteCond %{REQUEST_URI} !^/blog
#        RewriteRule ^(.*)$ https://www.makkink.eu/$1 [R,L]
#</Directory>

Naar index

Webserver Update integreren in custom-httpd.conf

Bestand /usr/local/bin/flex-integrate (Klik hier voor download van script)

Het commando # sed wordt gebruikt om gespecificeerde secties code/text uit de bestanden flex80.new, flex443.new en custom_httpd.inc te kopieren en te concateneren in custom_httpd.conf
Zie ook sed command-with-examples
In het script zelf worden de stappen nader toegelicht.

#!/bin/bash
# ************************************************************************
# * Flex-integrate detectie en notificatie  Ben Makkink 24 juli 2020     *
# * Script detecteert nwe flex-80.conf en flex-443.conf bestanden als    *
# * gevolg van een Webconfig update van de HTTPDconfiguratie.            *
# * De nwe bestanden worden hernoemd naar flex80.new en flex443.new      *
# * en vervolgens worden deze samen met de eigen directives in           *
# * /etc/httpd/conf.d/custom_httpd.inc geintegreerd in het webserver     *
# * configuratiebestand /etc/httpd/conf.d/custom_httpd.conf              *
# * Er wordt ook een notificatie naar de webadmin gestuurd.              *
# * Dit script 'flex-integrate' maakt gebruik van de volgende bestanden: *
# *   - /etc/httpd/conf.d/custom_httpd.inc                               *
# *   - /etc/httpd/conf.d/flex80.new                                     *
# *   - /etc/httpd/conf.d/flex443.new                                    *
# *   - /usr/local/bin/flex-mail.txt                                     *
# ************************************************************************

# Verifieer dat de voor script benodigde bestanden aanwezig zijn.
if [[ ! -f /etc/httpd/conf.d/custom_httpd.inc  || 
                                     ! -f /usr/local/bin/flex-mail.txt ]]
   then
   /usr/sbin/sendmail ben@makkink.eu 
                                </usr/local/bin/flex-integrate-error.txt;
   exit;
fi

# Check voor webserver update resulterend in nieuwe flex-{80,443}.conf's
if [ -f /etc/httpd/conf.d/flex-80.conf ]
 then
    # hernoem flex-{80,443}.conf's naar flex{80,443}.new zodat deze niet
    # opnieuw geladen worden maar beschikbaar blijven voor integratie in
    # custom-httpd.conf
    mv /etc/httpd/conf.d/flex-80.conf /etc/httpd/conf.d/flex80.new;
    if [ -f /etc/httpd/conf.d/flex-443.conf ]
     then
       mv /etc/httpd/conf.d/flex-443.conf /etc/httpd/conf.d/flex443.new;
    fi

# *************************************************************************
# * Integreer bestanden flex80.new en flex443.new met custom_httpd.inc    *
# * naar het webserver configuratiebestand 'custom_httpd.conf'            *
# *************************************************************************
# Maak header van custom_httpd.conf
str1="# -------------------------------------------------------------------"
str2="# Dit bestand is een samenvoeging van /etc/httpd/conf.d/flex-80.conf,"
str3="# ../flex-443.conf en ../custom_httpd.inc"
str4="# Breng wijzigingen in directives alleen aan in ../custom_httpd.inc"
str5="# Run script /usr/local/bin/make-conf om wijzigigngen door te voeren."
str6="# -------------------------------------------------------------------"
# Aanvullende infostrings
str7="# Flex-80.conf inclusief eigen directives binnen VirtualHost"
str8="# uit /etc/httpd/conf.d/custom_httpd.inc"
str9="# ==================================================================="
str10="# Flex-443.conf inclusief eigen directives binnen VirtualHost"

# Print script header in bestand /etc/httpd/conf.d/custom_httpd.tmp
printf "$str1 \n$str2 \n$str3 \n$str4 \n$str5 \n$str6 \n \n$str9 \n$str7
                \n$str8 \n$str9 \n" >> /etc/httpd/conf.d/custom_httpd.tmp;

# Print inhoud flex80.new tot de regel met '</VirtualHost>'
sed -n '/<\/VirtualHost>/q;p' /etc/httpd/conf.d/flex80.new 
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate de inhoud van custom_httpd.inc regels 'START' t/m 'EINDE'
sed -n '/START/,/EINDE/p' /etc/httpd/conf.d/custom_httpd.inc
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate van flex80.new van lijn met </VirtualHost> tot einde bestand.
sed -n '/<\/VirtualHost>/,$p' /etc/httpd/conf.d/flex80.new
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;
# Concatenate infostring
printf "\n$str9 \n$str10 \n$str8 \n$str9 \n"
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate inhoud flex443.new tot de regel met 'SSLEngine'
sed -n '/SSLEngine/q;p' /etc/httpd/conf.d/flex443.new
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate de inhoud van custom_httpd.inc regels 'START' t/m 'EINDE'
sed -n '/START/,/EINDE/p' /etc/httpd/conf.d/custom_httpd.inc
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate inhoud flex443.new de regel met 'SSLEngine' tot einde bestand
sed -n '/SSLEngine/,$p' /etc/httpd/conf.d/flex443.new
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate infostring
printf "\n$str9 \n" >> /etc/httpd/conf.d/custom_httpd.tmp;

# Concatenate inhoud custom_httpd.inc regels 'Eigen HTTPD Directives'
                                                         tot einde bestand
sed -n '/Eigen HTTPD Directives/,$p' /etc/httpd/conf.d/custom_httpd.inc 
                                    >> /etc/httpd/conf.d/custom_httpd.tmp;

# Hernoem custom_httpd.tmp naar custom_httpd.conf 
                     en herstart de webserver met de nwe custom_httpd.conf
# ------------------------------------------------------------------------
mv /etc/httpd/conf.d/custom_httpd.tmp /etc/httpd/conf.d/custom_httpd.conf
service httpd restart

# stuur notificatie naar de admin met de inhoud van flex-mail.txt
# --------------------------------------------------------------
/usr/sbin/sendmail ben@makkink.eu </usr/local/bin/flex-mail.txt

fi

Taak Schedulen
Voeg eencron toe met commando #crontab -e

30 0 * * * /usr/local/bin/flex-integrate &> /dev/null

Het script wordt elke dag 30 minuten na 0 uur uitgevoerd.

Naar index

Mails ter notificatie

Benodigde bestanden missen
In bovenstaand script flex-integrate wordt als eerste gecontoleerd of de door het script benodigde bestanden beschikbaar zijn. Als dit niet het geval blijkt te zijn dan wordt de uitvoering van het script gestopt na het sturen van een notificatie e-mail naar de Admin met de inhoud van het bestand /usr/local/bin/flex-integrate-error.txt

To: ServerAdmin
Subject: Webserver update missende bestanden
Er heeft een update aan de Webserver configuratie plaatsgevonden.
Als resultaat zijn in /etc/httpd/conf.d/ twee bestanden gecreëerd zijnde:
- flex-80.conf
- flex-443.conf

De inhoud van deze twee bestanden moet geïntegreerd worden in 
/etc/httpd/conf.d/custom-httpd.conf
Dit wordt automatisch uitgevoerd met script 'flex-integrate'.
De hierbij benodigde bestanden custom_httpd.inc en/of flex-mail.txt kunnen
echter niet gevonden worden.
De integratie is niet uitgevoerd!

Herstel de benodigde bestanden of voer de integratie op de hand uit.

Zie ook 
https://www.makkink.eu/exploringlinux/server7/html/apache.html#custom-httpd

Integratie succesvol uitgevoerd
Als het script flex-integrate succesvol afgerond is wordt als laatste ter notificatie een e-mail de Admin gestuurd:
/usr/sbin/sendmail ben@makkink.eu < /usr/local/bin/flex-mail.txt
Met de inhoud van het bestand /usr/local/bin/flex-mail.txt

To: ServerAdmin
Subject: Webserver update is uitgevoerd
Er is een update/wijziging van de Webserverconfiguratie uitgevoerd.
Als resultaat zijn in /etc/httpd/conf.d/ twee nieuwe bestanden gecreëerd,
zijnde:
- flex-80.conf
- flex-443.conf

Met het script 'flex-integrate' is de inhoud van deze twee bestanden
geïntegreerd in /etc/httpd/conf.d/custom-httpd.conf en de bestanden zijn
hernoemd naar respectievelijk flex80.new en flex443.new

De webserver is opnieuw gestart om het nieuwe configuratiebestand
'custom-httpd.conf' te laden.

Zie ook 
https://www.makkink.eu/exploringlinux/server7/html/apache.html#custom-httpd

Opruimen
De beide flex{80,443}.new bestanden kunnen we laten voor wat ze zijn, ze worden bij een volgende Webserver-Update gewoon overschreven.

Naar index

Errordocs.Conf

Als de Apache default instellingen voor 'error messages' gebruikt worden, dan wordt alleen het errornummer geretourneerd zonder verdere uitleg.
Tot en met ClearOS 6.6 was er een sectie in httpd.conf waarin instellingen gemaakt kunnen worden om voor bepaalde (of alle) errors uitgebreide Error Documenten weergegeven kunnen worden. Tevens zijn enkele errordocumenten door mij nog verder naar eigen wens aangepast. Zie hiervoor Server::Apache Error Messaging

Deze ErrorDocuments in de 'error' directory bevatten HTTP error messages in meerdere talen. Als de voorkeur taal van een client beschikbaar is dan wordt deze automatisch geselecteerd.

Verdwenen uit ClearOS 7
In ClearOS 7 is de sectie met ErrorDocument directives echter uit httpd.conf verdwenen, de meertalige Error Documents daarentegen zijn echter nog steeds aanwezig en zelfs op twee locaties:

  1. /usr/share/httpd/error/
  2. /usr/clearos/sandbox/usr/share/httpd/error/

Omdat ik toch van de wat duidelijker informatie inclusief hints en links gebruik wens te maken, heb ik in de map /etc/httpd/conf.d hiervoor een configuratiebestand errordocs.conf aangemaakt.
In dit configuratiebestand /etc/httpd/conf.d/errordocs.conf zijn de relevante directives opgenomen zoals deze in het ClearOS 6.6 httpd.conf bestand voorkwamen:

# errordocs.conf Ben Makkink 05-12-2015
# ErrorDocuments directives om multilinguale HTTP foutmeldingen weer te
# geven # Gebruik Alias /error/ om de locatie aan te geven van de ErrorDocumenten
Alias /error/ "/usr/share/httpd/error/" # Geef de benodigde permissies en instellingen voor het correct weergeven <IfModule mod_negotiation.c> <IfModule mod_include.c> <Directory "/usr/share/httpd/error"> AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Require all granted LanguagePriority nl en es de fr ForceLanguagePriority Prefer Fallback </Directory> # Verwijder de '#' voor het ErrorDocument waarvoor de uitgebreide optie # gewenst is # ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var # ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var # ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var # ErrorDocument 410 /error/HTTP_GONE.html.var # ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var # ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var # ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var # ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var # ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var # ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var # ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var # ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var # ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var # ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var </IfModule> </IfModule>

Zie de Apache HTTP Server Version 2.4 documentatie voor AddOutputFilter Includes html, AddHandler type-map var, LanguagePriority en ForceLanguagePriority Prefer Fallback en Apache Module mod_negotiation voor nadere info betreffende het gebruik van de *.var documenten, de zogenaamde 'Multiviews'.

Herstart Apache voor het laden van deze nieuwe directives.

Naar index

Piwigo.Conf

Piwigo is een fotogalerijprogramma voor websites. Het programma heeft een GPL-licentie, en is geschreven in PHP en gebruikt een MySQL-database.
Piwigo stond eerder bekend als "PhpWebGallery" maar de oorspronkelijke auteur van de software, Pierrick Le Gall, wijzigde in september 2008 de naam naar de huidige.
Zie de Piwigo pagina's voor installatie en configuratie.

De Piwigo App wordt geinstalleerd in de webroot /var/www/html en heeft geen aanvullende http directives nodig.
Voor bijvoorbeeld security worden extra directives aanbevolen middels het gebruik van .htaccess bestanden.
Zoals beschreven in de sectie .htaccess proberen we .htaccess bestanden te vermijden en wordt op deze server in /etc/httpd/conf.d de 'include' piwigo.conf gebruikt waarin we ook andere http 'customisations' onderbrengen. Zie voor de laatste ook Piwigo::Beveiliging > Apache Directives voor Piwigo

#*********************************************************************
#* /etc/httpd/conf.d/piwigo.conf                                     *
#* Custom httpd configuratie Ben Makkink 27-maart-2016               *
#*********************************************************************
# In httpd.conf is AllowOverride naar None gezet
# Indien Piwigo beveiliging mbv .htaccess toch gewenst is dit hier
# toestaan door Override toe te staan
<Directory /var/www/html/piwigo>
#    AllowOverride FileInfo Options AuthConfig Limit
</Directory>

# Voor toegangscontrole voor de  familiewebsite /var/www/html/archief
# en toegang middels Piwigo Cookie

<Directory "/var/www/html/archief">
 Require all denied
   SetEnvIf COOKIE ^GALLERYSID user_logged_in
   Require env user_logged_in
</Directory>

# Blokkeer directe url naar originele fotos in ../piwigo/galleries
# In plaats van .htaccess in /var/www/html/piwigo/galleries
# Voeg tevens toe in ../piwigo/local/config/config.inc.php
# $conf['original_url_protection'] = 'images';

<Directory /var/www/html/piwigo/galleries>
  Require all denied
</Directory>

# Blokkeer directe url naar originele fotos in ../piwigo/upload
# In plaats van .htaccess in /var/www/html/piwigo/upload

<Directory /var/www/html/piwigo/upload>
  Require all denied
</Directory>

# Blokkeer directe url naar derivaten in ../piwigo/_data/i
# Voeg tevens toe in ../piwigo/local/config/config.inc.php
# $conf['derivative_url_style'] = 2;

<Directory /var/www/html/piwigo/_data/i>
  Require all denied
</Directory>
#************************************************************************
# Zet SameSite support voor Cookies                                     *
# Ben Makkink 26-juni-2020                                              *
#************************************************************************
# Zie https://developer.mozilla.org/nl/docs/Web/HTTP/Headers/Set-Cookie/SameSite
# en https://www.makkink.eu/exploringlinux/server7/html/apache.html#piwigoconf

<ifmodule mod_headers.c>
 # Header always edit Set-Cookie (.*) "$1; SameSite=strict"
 Header always edit Set-Cookie (.*) "$1; SameSite=lax"
</ifmodule>

Naar index

Toegangscontrole /var/www/html/archief via Piwigo Cookie
Voor de directorie /var/www/html/archief/ voegen we in bovenstaand bestand een directive toe met als eerste de 'Require all denied' statement. Hiermee wordt toegang tot '/archief/' volledig geblokkeerd.
Daarna word middels 'SetEnvIf' gecontroleerd of in de clientbrowser een Piwigo Cookie is gezet. Deze Cookie wordt gezet als een client via Piwigo ingelogd en geauthentiseerd is als een geregistreerde gebruiker. Zie hiervoor ook Piwigo::Albums Inrichten > Beveiliging 'Archief' en toegang via Piwigo registratie
Als het Cookie gevonden wordt, wordt de variabele 'env' gezet naar 'user_logged_in' en krijgt de clientbrowser toegang tot '/archief/'.

Onderstaande regels worden hiervoor aan piwigo.conf toegevoegd:

# toegangscontrole via Piwigo Cookie
<Directory "/var/www/html/archief">
Require all denied
   SetEnvIf COOKIE ^GALLERYSID user_logged_in
   Require env user_logged_in
</Directory>

Naar index

Piwigo Cookie zetten
Zie ook Piwigo::Wijzigingen > Hacks > Extra Cookie wanneer gebruiker ingelogd is
Bovenstaande toegangscontrole test of er in de webroot een Cookie met de naam 'GALLERYSID' gezet is door Piwigo.
Piwigo zet weliswaar een Cookie maar dat is slechts een Session Cookie en deze wordt gezet in /piwigo/met de naam 'pwg_id'. Deze Cookie wordt echter ook gezet als er niet op Piwigo ingelogd is en de gebruiker dus 'guest' is. De 'value' van de Piwigo Session Cookie bevat de code waarmee de gebruiker van Piwigo in de MySQL database te herleiden is.
Als de Piwigo Session Cookie al in de webroot zou staan en de bovenstaande 'SetEnvIf' http methode mogelijk ook de inhoud (value) van de Cookie zou kunnen testen, dan kan daar nog steeds verder niets mee gedaan worden zonder toegang tot de Piwigo database.

Het enige alternatief is dat Piwigo een additionele Cookie in de Webroot zet met een unieke naam en dat alleen als er op Piwigo ingelogd is door een geregistreerde gebruiker. Er is een toevoeging nodig in het Piwigo 'index.php' bestand.
Hieronder volgt de benodigde toevoeging direct in het begin na de include calls in het script /var/www/html/piwigo/index.php:

define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
include(PHPWG_ROOT_PATH.'include/section_init.inc.php');

//Ben Makkink 26/03/2016
//Toevoeging voor het zetten van extra cookie als gebruiker ingelogd is
//Control Cookie voor toegang tot afgeschermde data

if ($user['status']!=="guest")
{
  setcookie('GALLERYSID',time(),0, '/');
}
else
{
  setcookie('GALLERYSID', ' ', time()-7000000, '/');
}

// Check Access and exit when user status is not ok
check_status(ACCESS_GUEST);

// access authorization check
if (isset($page['category']))

In index.php wordt als eerste de include 'common.inc.php' uitgevoerd. In deze include wordt o.a. het global PHP commando 'session_start()' uitgevoerd. Dit commando start een nieuwe- of vervolgt een bestaande Piwigo Sessie en opent vervolgens de Piwigo Home pagina. Als er niet ingelogd is dan is de userstatus 'guest' en wordt de optie geboden in te loggen.
Door nu de status van $user te testen kunnen we vaststellen wanneer de gebruiker ingelogd is (is niet guest) en in dat geval wordt er een Cookie met de naam 'GALLERSID' gezet. De 'value' is niet belanrijk, maar het veld mag niet leeg zijn, we zetten hier bijvoorbeeld de huidige tijd. De expirydate zetten we naar 'onbepaald' door 0 in te voeren. Voor path van de Cookie zetten we '/', zijnde de webroot.
Als de gebruiker uitlogt dan wordt $user['status'] weer naar 'guest' gezet en verwijderen we de Cookie 'GALLERYSID' door zijn waarde naar 'leeg' te zetten en de expirydate naar een punt in het verre verleden

Naar index

Login en toegangscontrole../archief/ via Piwigo
In de voorgaande sectie is beschreven hoe de site 'archief' afgeschermd is. Alleen als een client ingelogd is als geregistreerde gebruiker op Piwigo zal deze toegang krijgen tot de vertrouwelijke site.
In Piwigo wordt de link met URL naar het archief alleen getoond als een gebruiker ingelogd is. En omdat er dan ingelogd is krijgt de URL toegang tot het archief.
Zie Piwigo::Albums Inrichten > Albums Beheren > Galerij minatuur met link naar externe site 'Archief'

Naar index

SameSite extra cookie security
Medio juni 2020 werd de volgende waarschuwing afgegeven in mijn Firefox Browser Console:

Cookie “pwg_id” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute. To know more about the “sameSite“ attribute, read https://developer.mozilla.org/docs/Web/ … e/SameSite

Mede met de informatie in de blog SameSite cookies in practice heb ik, zonder succes, diverse PHP oplossingen geprobeerd. Dit in een poging Piwigo te laten voldoen aan de nieuwe eisen.

Wat uiteindelijk lukte is met een toevoeging in het Apache Webserver configuratiebestand. Omdat het in mijn situatie is alleen voor Piwigo noodzakelijk is, is de code in Piwigo.conf geplaatst.
Middels deze code worden alle cookies die op de server gezet worden bewerkt waardoor ze de vereiste SameSite settings bevatten. Ik heb gekozen voor de 'lax' setting, maar Piwigo werkt ook prima met 'strict'.

#************************************************************************
# Zet SameSite support voor Cookies                                     *
# Ben Makkink 26-juni-2020                                              *
#************************************************************************
# Zie https://developer.mozilla.org/nl/docs/Web/HTTP/Headers/Set-Cookie/SameSite
# en https://www.makkink.eu/exploringlinux/server7/html/apache.html#piwigoconf

<ifmodule mod_headers.c>
 # Header always edit Set-Cookie (.*) "$1; SameSite=strict"
 Header always edit Set-Cookie (.*) "$1; SameSite=lax"
</ifmodule>

Naar index

Wordpress.Conf

Wordpress:

De Wordpress Blog App wordt geinstalleerd in de webroot /var/www/html en heeft enkele aanvullende http directives nodig en deze worden bij de installatie geplaatst in een .htaccess bestand in de wordpress blog root /var/www/html/blog.
De directives in dit .htaccess bestand worden dynamisch gegenereerd door Wordpress en zouden alleen aangepast mogen worden via WordPress filters. Alle wijzigingen aan de richtlijnen worden mogelijk bij een update/upgrade overschreven.

AllowOverride None
Zoals beschreven in de sectie .htaccess proberen we .htaccess bestanden te vermijden en wordt op deze server in /etc/httpd/conf.d de 'include' wordpress.conf gebruikt.

Kopieer hiervoor de inhoud van het /var/www/html/blog/.htaccess bestand.

# BEGIN WordPress
# De richtlijnen (regels) tussen "BEGIN WordPress" en "END WordPress"
# worden dynamisch gegenereerd en zouden alleen aangepast mogen worden
# via WordPress filters. Alle wijzigingen aan de richtlijnen tussen
# deze markeringen worden overschreven.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

en plaats dat in /etc/httpd/conf.d/wordpress.conf
Zorg er hierbij voor dat het een directive wordt voor de Directory waarin het .htaccess bestand staat, dwz /var/www/html/blog

<Directory /var/www/html/blog>
# BEGIN WordPress
# De richtlijnen (regels) tussen "BEGIN WordPress" en "END WordPress"
# worden dynamisch gegenereerd en zouden alleen aangepast mogen worden
# via WordPress filters. Alle wijzigingen aan de richtlijnen tussen
# deze markeringen worden overschreven.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
</Directory>

Naar index

Dynamische integratie van .htaccess

Het Wordpress .htaccess bestand wordt dynamisch gegenereerd bij de installatie en/of update door Wordpress.
De hierboven voorgestelde integratie van .htaccess in wordpress.conf is echter statisch waarvoor manuele interventie van de admin vereist is.

WP-HTACCESS
Dit process wordt op mijn server min of meer automatisch gemaakt door een dagelijkse crontab die het script wp-htaccess start met een check of er een wijziging in .htaccess geweest is en of deze al dan niet onderdeel is geweest van een Wordpress update:

Meldingen
Als er wel een Wordpress update plaatsvond maar geen .htaccess codewijziging dan ontvangt Admin onderstaande melding in een mail:

To: ServerAdmin
Subject: Wordpress update is uitgevoerd
Er is een update/upgrade van de Wordpress uitgevoerd.

Hierbij heeft er zich geen wijziging voorgedaan in het dynamisch
                    gegenereerde .htaccess bestand in /var/www/html/blog/.
Er is geen verdere actie nodig.

Zie ook https://www.makkink.eu/exploringlinux/wordpress/html/
                                                 installeren.html#htaccess

Als er een .htaccess codewijziging plaatsvond tijdens een Wordpress update dan ontvangt Admin onderstaande melding in een mail:

To: ServerAdmin
Subject: Wordpress .htaccess integratie is uitgevoerd.
Er is een update van het Wordpress .htaccess bestand geïntegreerd
   met het webserver configuratiebestand /etc/httpd/conf.d/wordpress.conf.

Het nieuwe .htaccess bestand was onderdeel van een Wordpress update of
                                        goedgekeurd na manuele interventie.

Zie ook https://www.makkink.eu/exploringlinux/wordpress/html/
                                                  installeren.html#htaccess

Als er echter een .htaccess codewijziging plaatsvond zonder een Wordpress update dan kan het een hack zijn en ontvangt Admin onderstaande melding in een mail:

To: ServerAdmin
Subject: Wordpress .htaccess gehackt?
Er is een wijziging aangebracht in het .htaccess bestand van Wordpress
zonder dat hiervoor een Wordpress update plaatsvond.
Dit is een verdachte situatie en is mogelijk het resultaat van een hack.

De webserver is dusdanig geconfigureerd dat een Override door .htaccess
niet is toegestaan of te wel de code van .htaccess wordt niet uitgevoerd.
Na een legitieme Wordpress version update wordt de dynamische inhoud van
.htaccess gekopieerd naar de webserverconfiguratie
                                        /etc/httpd/conf.d/wordpress.conf.

POTENTIELE HACK GEBLOKKEERD.
Omdat zojuist de Wordpress ".htaccess" is gewijzigd terwijl er geen version
update plaatsvond is deze als verdacht aangemerkt en geblokkeerd door een
kopie van .htaccess op te slaan als "/var/www/html/blog/hta_fout".

EVALUEREN
Het bestand "/var/www/html/blog/hta_fout" moet eerst geevalueerd worden.

OUDE .HTACCESS TERUGZETTEN
- Als hierbij blijkt dat iets met de code in "hta_fout" inderdaad niet
klopt dan moet de voorlaatste .htaccess teruggezet worden.
Activeer dit door bet bestand "hta_fout" te hernoemen naar "hta_terug".
Door het script "wp-htaccess" uit te voeren wordt de laatste correcte
situatie hersteld (Dit gebeurd ook automatisch als de dagelijkse cron
"wp-htaccess" draait).

INTEGREREN
- Als echter blijkt dat er niets aan de hand is met de code in "hta_fout"
hernoem deze dan naar "hta_ok".
Door het script "wp-htaccess" uit te voeren wordt de nieuwe .htaccess
alsnog gekopieerd en geïntegrrerd in de webserverconfiguratie
/etc/httpd/conf.d/wordpress.conf (Dit gebeurd ook automatisch als de
dagelijkse cron "wp-htaccess" draait).
De webserver wordt opnieuw gestart om het gewijzigde configuratiebestand
"../conf.d/wordpress.conf" te laden.

Zie ook https://www.makkink.eu/exploringlinux/wordpress/html/
                                                 installeren.html#htaccess

De resulterende wordpress.conf zie eruit als volgend voorbeeld:

#************************************************************************
#* /etc/httpd/conf.d/wordpress.conf                                     *
#* Custom httpd configuratie voor Wordpress. Ben Makkink 7-maart-2021   *
#************************************************************************
#* Per default is in httpd.conf AllowOverride naar None gezet.          *
#* Mede om remote toegang via hacks van .htaccess te voorkomen is het   *
#* wenselijk deze ClearOS default instelling te handhaven.              *
#*                                                                      *
#* Wordpress genereerd voor o.a. permalinks en beveiliging wel dynamisch*
#* een .htaccess bestand in de Wordpress root.                          *
#* Deze directives hevelen we over naar dit bestand 'wordpress.conf'    *
#* zodat ze toch uitgevoerd worden.                                     *
#* Elke keer dat er dynamisch een wijziging gemaakt wordt in '.htaccess'*
#* wordt dit bestand 'wordpress.conf' ververst d.m.v. het script        *
#* 'wp-htaccess' welke regelmatig start d.m.v. een cron                 *
#************************************************************************

# Dit bestand vervangt .htaccess, dus reconfirmeer 'AllowOverride None'
<Directory /var/www/html/blog>
  AllowOverride None
</Directory>

# Later toe te voegen custom directives boven deze regel invoegen
#========================================================================
<Directory /var/www/html/blog>
# BEGIN WordPress
# De richtlijnen (regels) tussen "BEGIN WordPress" en "END WordPress"
# worden dynamisch gegenereerd en zouden alleen aangepast mogen worden
# via WordPress filters. Alle wijzigingen aan de richtlijnen tussen deze
# markeringen worden overschreven.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
</Directory> 

Naar index

Error Messaging

Tot en met ClearOS 6.6 was er een sectie in httpd.conf waarin instellingen gemaakt kunnen worden om voor bepaalde (of alle) errors, uitgebreide Error Documenten weergegeven kunnen worden.
In ClearOS 7 is deze sectie met ErrorDocument directives uit httpd.conf verdwenen en is alleen onderstaande informatie gebleven.

# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

Het is mij niet duidelijk waarom dit gedaan is en ook na veel zoeken heb ik ook niets kunnen vinden waarmee ClearOS deze functionaliteit alsnog geïntegreerd heeft.
Om de functionaliteit te behouden heb ik een configuratiebestand aangemaakt met daarin de relevante directives zoals deze in het ClearOS 6.6 httpd.conf bestand voorkwamen.
Zie hiervoor Server::Apache sectie Errordocs.Conf

Naar index

Layout ErrorDocuments

Als de Apache default instellingen gebruikt worden dan wordt alleen het error-nummer geretourneerd zonder verdere uitleg.
Voor de 3 meest voorkomende errors worden op deze server de meer uitgebreide boodschappen weergegeven zoals in voorgaande sectie behandeld.
De Error pagina's die nu getoond worden zijn met de module meegeleverd en nog steeds wat basic en bevatten taalfouten.
Maar deze pagina's zijn naar wens verder te personaliseren.
De ErrorDocuments zijn opgeslagen in directory '/usr/share/httpd/error' en we nemen als voorbeeld 'ErrorDocument 401 /error/ HTTP_UNAUTHORIZED.html.var

Naar index

HTTP_UNAUTHORIZED.html.var

Bekijk hier de inhoud van HTTP_UNAUTHORIZED.html.var en er is een sectie voor elke taal. De taal ingesteld op de clientbrowser bepaald welke taal getoond wordt.

Voor de structuur bekijken we nu de sectie 'Content-language: nl'.

Content-language: nl
Content-type: text/html; charset=UTF-8
Body:----------nl--
<!--#set var="CONTENT_LANGUAGE" value="nl"-->
<!--#set var="TITLE" value="Authenticatie nodig!"-->
<!--#include virtual="include/top.html" -->

    De server kon niet controleren of u gemachtigd bent om toegang te krijgen
    tot de URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
    U hebt zich onvoldoende geauthenticeerd ( vb : verkeerd paswoord ), of
    uw browser is niet in staat de nodige authentificatiegegevens door te geven.

<!--#include virtual="include/spacer.html" -->

    Indien u toch gemachtigd bent toegang te krijgen tot het document,
    controleer uw gebruikersnaam en paswoord en probeer opnieuw.

<!--#include virtual="include/bottom.html" -->
----------nl--

We zien dat het begint met een paar standaard html instellingen waarna de rest volgt en deze wordt opgebouwd met de volgende componenten:

  1. De 'include/top.html' waarin de pagina opgebouwd wordt met o.a de styles met backgroundcolor, background image etc.
  2. Nu wordt de Nederlandse tekst toegevoegd.
  3. Het eerste tekstblok wordt gevolgd door 'include/spacer.html' die exact doet wat het zegt, voegt een lege paragraaf toe. Dit kan naar behoefte groter of kleiner gemaakt worden of worden voorzien van een lijn of afbeelding.
  4. Dit wordt opnieuw gevolgd door een stuk Nederlandse tekst.
  5. De pagina wordt afgesloten met 'include/bottom.html' en deze heeft als eerste ook weer een 'include ../contact.html.var' met de contact gegevens in de taal van de browser (in ons geval NL). Daarna sluit 'include/bottom.html' de error pagina met de Error Code en Apache versie
Alle Error Messages maken in alle talen gebruik van de bestanden 'top.html', 'spacer.html' en 'bottom.html'. Door in deze bestanden de layout te specificeren zullen alle Error Messages dezelfde layout krijgen.

Naar index

Personalisatie Layout

TOP.HTML
Zie hier de code van gewijzigde '/usr/share/httpd/error/include/top.html'

Modificeer top.html
Voeg toe/wijzig style:
body { color: #000000;
      background-color: #D4C1A3;
      background-repeat: no-repeat;
      background-image: url(/../error/errormsg_backgr.jpg);
      }


Note: De Apache root is de website root '/var/www/html', dus de url hierboven begint in '/var/www/html' en gaat dan 1 stap terug naar '/var/www' en gaat van daaruit naar alias '/error/' en haalt daar '/usr/share/httpd/error/errormsg_backgr.jpg'.

BOTTOM.HTML
Zie hier code van gewijzigde '/usr/share/httpd/error/include/bottom.html'

Voeg toe na de regel <a href="/"><  blahblah  var="SERVER_NAME" --></a><br />:
<a href="/"><img src="/../error/logo.png" /></a><br />

Naar index

Tekst Correcties

CONTACT.HTML.VAR
De Nederlandse vertaling in contact.html.var ziet er wat vreemd uit:
Indien u van oordeel bent dat deze server in fout is, gelieve de <a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a> te contacteren.
Dit gewijzigd naar:
Indien u van oordeel bent dat het een serverfout is, neem dan a.u.b. contact op met de <a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>

HTTP_UNAUTHORIZED.HTML.VAR
De tekst in HTTP_UNAUTHORIZED.html.var is niet echt zinvol en daarom is:
Indien u toch gemachtigd bent toegang te krijgen tot het document, controleer uw gebruikersnaam en paswoord en probeer opnieuw.
Gewijzigd naar:
Als u toegang wenst tot deze pagina's neem dan contact op met de <a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a> voor een gebruikersnaam en paswoord.

In HTTP_FORBIDDEN.html.var en HTTP_NOT_FOUND.html.var zijn geen wijzigingen aangebracht.

Naar index

Awstats en Access-logs

AWStats is een krachtig tool met veel opties voor grafische webserver rapportage. Het rapportageprogramma voor de webserver analyseert uw webserver logbestanden. Deze genereert daarna voor elke (virtuele) website uitgebreide statistieken over bezoek daarvan.

Installatie

AWStats wordt in de ClearOS 7 distributie niet als Web log file analyzer App in Marketplace meegeleverd.
Het tool is echter wel beschikbaar in de clearos-epel repository.
Installeer met yum:
# yum install awstats
Het tool AWSTATS 7.8-1.el7 wordt geïnstalleerd samen met 19 dependencies.

Naar index

Configuratie Wizard

Awstats is verder te configureren met een wizard te starten met het commando # perl /usr/share/awstats/tools/awstats_configure.pl
Als de wizard start wordt als eerste gesuggereerd dat het misschien beter is de configuratie op de hand te doen en hierbij de stappen te volgen die in de AWSTATS Reference Manual beschreven staan. We verlaten daarom de wizard en gaan zoals hieronder beschreven verder.

Logbestanden
De AWSTATS statistieken zijn per default gebaseerd op de Apache access_logs van de gehele webroot 'var/www/html/'. Om statistieken van specieke websites, welke zich als subdirectories in de webroot bevinden, te kunnen produceren zal er eerst gezorgd moeten worden voor access_logs met alleen data voor deze specifieke sites. Zie hiervoor de sectie Access_log van een specifieke subdirectory eerder in dit hoofdstuk.

Naar index

Configuratiebestanden

  1. /etc/httpd/conf.d/awstats.conf
    Bij de installatie met yum uit de ClearOS distributie wordt stap 1B zoals beschreven in de AWSTATS Reference Manual reeds uitgevoerd en het resulterende configuratiebestand 'awstats.conf' wordt geplaatst in de Apache-Apps configuratie directory '/etc/httpd/conf.d'.
    Hieronder '/etc/httpd/conf.d/awstats.conf' ontdaan van de onnodige informatie en geef alle LAN gebruikers (192.168.1.0/24) toegang:
    # Directives to add to your Apache conf file to allow
             use of AWStats as a CGI.
    # Note that path "/usr/share/awstats/" must reflect
             your AWStats install path.
    #
    Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"
    Alias /awstatscss "/usr/share/awstats/wwwroot/css/"
    Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"
    ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"
    
    
    #
    # This is to permit URL access to scripts/files in AWStats directory.
    #
    <Directory "/usr/share/awstats/wwwroot">
        Options None
        AllowOverride None
        <IfModule mod_authz_core.c>
            # Apache 2.4
            Require ip 192.168.178.0/24
        </IfModule>
        <IfModule !mod_authz_core.c>
            # Apache 2.2
            Order allow,deny
            # Allow from 127.0.0.1
            # Allow from ::1
            Allow from 192.168.178.0/24
        </IfModule>
    </Directory>
    # Additional Perl modules
    <IfModule mod_env.c>
        SetEnv PERL5LIB /usr/share/awstats/lib:/usr/share/awstats/plugins
    </IfModule>

    Naar index

  2. awstats.makkink.eu.conf
    Voor elke site op de webserver maken we nu een configuratie aan, om te beginnen de gehele webserver.
    Voer volgende commando's uit:
    # cd /etc/awstats
    # cp -a awstats.model.conf awstats.makkink.eu.conf


    Edit awstats.makkink.eu.conf en maak de volgende instellingen:
    LogFile="/var/log/httpd/access_log"
    Sitedomain="makkink.eu"
    HostAliases="makkink.eu www.makkink.eu localhost 127.0.0.1"

    Laat de rest zoals het is en voer uit: # systemctl restart httpd[.service]

  3. awstats.nbp.conf
    Statistieken van de webpagina's van 'NBP'
    Voer volgende commando's uit:
    # cd /etc/awstats
    # cp -a awstats.model.conf awstats.nbp.conf


    Edit awstats.makkink.eu.conf en maak de volgende instellingen:
    LogFile="/var/log/httpd/nbp_access_log"
    Sitedomain="nbp"
    HostAliases="makkink.eu www.makkink.eu localhost 127.0.0.1"

    Laat de rest zoals het is en voer uit: # systemctl restart httpd[.service]

    Naar index

  4. awstats.wandelen.conf
    Statistieken van de webpagina's van 'Wandelen'
    Voer volgende commando's uit:
    # cd /etc/awstats
    # cp -a awstats.model.conf awstats.wandelen.conf


    Edit awstats.makkink.eu.conf en maak de volgende instellingen:
    LogFile="/var/log/httpd/wandelen_access_log"
    Sitedomain="wandelen"
    HostAliases="makkink.eu www.makkink.eu localhost 127.0.0.1"

    Laat de rest zoals het is en voer uit: # systemctl restart httpd[.service]

  5. awstats.blog.conf
    Statistieken van de webpagina's van 'blog' (Dopheide)
    Voer volgende commando's uit:
    # cd /etc/awstats
    # cp -a awstats.model.conf awstats.blog.conf


    Edit awstats.makkink.eu.conf en maak de volgende instellingen:
    LogFile="/var/log/httpd/blog_access_log"
    Sitedomain="blog"
    HostAliases="makkink.eu www.makkink.eu localhost 127.0.0.1"

    Laat de rest zoals het is en voer uit: # systemctl restart httpd[.service]

NOTE
De installatie van Awstats resulteerd ook in twee (identieke) configuratiebestanden awstats.localhost.localdomain.conf en awstats.mainserver.makkink.eu.conf.
De taak van deze twee configuratiebestanden wordt overgenomen door awstats.makkink.eu.conf.
De eerstgenoemde twee bestanden kunnen we verwijderen.

Naar index

Data updaten en opslaan

Bij de installatie met YUM plaatst AWSTATS ook een cron in /etc/cron.hourly/awstats:

#!/bin/bash
exec /usr/share/awstats/tools/awstats_updateall.pl now-configdir="/etc/awstats"-awstatsprog="/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" >/dev/null
exit 0

Met deze cron maakt Awstats elk uur een updata voor de statistieken
De data die met de update gecreëerd worden worden in /var/lib/awstats/ toegevoegd aan de bestanden met een naam in het formaat: awstats122015.makkink.eu.txt
Elke maand wordt door de cron van elke site een nieuw bestand aangemaakt. Door het deleten van deze txt bestanden worden de statistieken gereset. Door ze vanuit een backup terug te zetten kunnen historische data getoond worden.

Behalve met de cron, kan een update ook gestart worden aan de prompt door één van onderstaande commando's:

BUG
Bovenstaand commando # /usr/share/awstats/tools/awstats_updateall.pl now werkte niet.
Er bleek een bug te zitten in het bestand awstats_updateall.pl
De programma's zijn door AWSTATS opgezet te werken in /usr/local/awstats, maar ClearOS heeft er voor gekozen ze te verplaatsen naar /usr/share/awstats. Hierbij is vergeten een correctie aan te brengen in awstats_updateall.pl. Wijzig in onderstaande regels 'local' naar 'share' en alles werkt naar behoren.'

 # Check if AWSTATS prog is found
        my $AwstatsFound=0;
        if (-s "$Awstats") { $AwstatsFound=1; }
        elsif (-s "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl") {
                $Awstats="/usr/local/awstats/wwwroot/cgi-bin/awstats.pl";
                $AwstatsFound=1;

In recentere versies van Awstats is dit probleem verholpen

Naar index

Statistieken bekijken in de browser

Om de statistieken in de browser te bekijken voeren we één van onderstaande URL's in:

AWStats Webrapport Favicon
Om met een Webpagina een Favicon mee te geven moet er in de <head> sectie een regel als volgt opgenomen zijn: <link rel="shortcut icon" href="/path/favicon.ico" />

De AWStats webpagina wordt opgebouwd met het CGI script /usr/share/awstats/wwwroot/cgi-bin/awstats.pl waarbij de webroot van de pagina '/usr/share/awstats/wwwroot' is. Dat wil zeggen dat de adressering in de pagina relatief is t.o.v. ../wwwroot.
In het awstats.pl script wordt het framewerk opgezet te beginnen met de header waarin we de extra instructie op willen nemen.

Favicon
De Awstats icon die we gaan gebruiken is te vinden in de awstats installatie.
Kopiëer /usr/share/doc/awstats-7.8/images/awstats.ico en plak het in /usr/share/awstats/wwwroot/icon/other

Edit /usr/share/awstats/wwwroot/cgi-bin/awstats.pl
Scrol naar beneden tot aan de sectie:
'Function:  Write on output header of HTML page'
Ga in deze sectie verder naar beneden naar "<meta http-equiv=\"keywords\" en voeg instructie toe na de regel: . "</title>\n"; @L895

Script toevoeging voor favicon:

"<meta http-equiv=\"keywords\" content=\"$SiteDomain, free, advanced, realtime, web, server,
     logfile, log, analyzer, analysis, statistics, stats, perl,
     analyse, performance, hits, visits\"$endtag\n";
                }
                print "<title>$Message[7] $SiteDomain$periodtitle"
                  . ( $k[0] ? " - " . $k[0] : "" )
                  . "</title>\n";

#********************************************************************************************
#* Toevoeging Favicon Ben Makkink 30-10-2020                                                *
#********************************************************************************************
#* Copieer /usr/share/awstats-7.3/images/awstats.ico en plak deze op /usr/share/awstats/    *
#* wwwroot/icon/other/awstats.ico                                                           *
#* Er is in awstats.conf een alias /awstatsicons gezet naar /usr/share/awstats/wwwroot/icon/*
#* Het adres in de webpagina wordt daarom /awstatsicons/other/awstats.ico                   *
#* Met onderstaande regel wordt de favicon aan de webpagina toegevoegd                      *
#********************************************************************************************

print "<link rel=\"shortcut icon\" href=\"/awstatsicons/other/awstats.ico\" />\n";

#********************************************************************************************
#* Einde toevoeging Ben Makkink 30-10-2020                                                  *
#********************************************************************************************

                if ( $FrameName ne 'index' ) {

Naar index

AWStats data verhuizen naar nieuwe server

Als we AWStats installeren op een nieuwe server willen we graag de historische AWStats-data van de oude server overzetten naar de nieuwe installatie.

  1. Bij de nieuwe AWStats installatie zijn in /var/lib/awstats/ al data bestanden aangemaakt. Verwijder alle awstatsMMYYYY.<sitedomain>.txt bestanden (tijdelijk elders bewaren).
    Gebruik rsync om alle awstatsMMYYYY.<sitedomain>.txt data bestanden te kopieren van de oude naar de nieuwe server
  2. De httpd accesslogbestanden worden opgeslagen in /var/log/httpd. Verwijder op de nieuwe server alle bestanden uit deze map (tijdelijk elders bewaren).
    Gebruik rsync om alles *access_log* bestanden te kopieren van de oude naar de nieuwe server.
  3. Run op de nieuwe server: # /usr/share/awstats/tools/awstats_updateall.pl now

Naar index

HTTPS en Certificatie

Als er met HTTPS gewerkt wordt wordt gebruik gemaakt van SSL verbinding.
Een SSL/TLS-verbinding is een gecodeerde verbinding tussen de server en bezoeker.
Naast het slotje bovenin je browser voor de URL kun je een SSL-verbinding ook herkennen aan de https aan het begin van de URL.
Https staat voor Hyper Text Transfer Protocol Secure. De extra S aan het einde van http staat dus voor veilig. Klik je op het slotje, dan kun je de gegevens van het certificaat en de uitgever daarvan controleren.
TLS staat voor Transport Layer Security. Eigenlijk is dit niets anders dan een veiligere versie van SSL. Tegenwoordig wordt er eigenlijk altijd gebruik gemaakt van de TLS-technologie. Toch gebruiken we de term SSL nog altijd omdat dit de meest gebruikte term is.

De gegevensstroom tussen de server en bezoeker is heel makkelijk uit te lezen met zogenaamde netwerk sniffers. Wachtwoorden zijn op deze manier bijvoorbeeld heel makkelijk te achterhalen. Om dat enorme (!) beveiligingsrisico op te vangen, kan men het beste een SSL-verbinding gebruiken. Dan worden deze gegevens namelijk versleuteld verzonden.

Webserver SSL activeren
In sectie Webserver Activeren Apache wordt aangegeven hoe we voor de Webserver SSL ondersteuning kunnen activeren.

SSL Certificaat
SSL beveiligt de verbinding tussen twee computers. Om zo’n beveiligde verbinding plaats te laten vinden heb je een certificaat nodig, een SSL-certificaat. Een certificaat bevat gegevens over de certificaathouder, het domein, de naam van de instantie die het certificaat heeft uitgegeven, het land waarin het certificaat is uitgegeven en de geldigheidsduur. Een SSL-certificaat bestaat altijd uit een public- en een private key die nodig zijn om het bericht versleuteld te versturen en uiteindelijk weer in een leesbare tekst om te zetten.
Deze SSL-certificaten worden door verschillende bedrijven uitgegeven. Via een zoekmachine zijn resellers van deze certificaten eenvoudig te vinden. De prijzen lopen daarbij echter wel uiteen van 15 tot meer dan 1500 euro.

Naar index

SSL Encryptie flowchart

  1. Browser verbind met een webserver (website) beveiligd met SSL (https). Browser verzoekt de server zich te identificeren.
  2. Server zendt een kopie van zijn SSL Certificaat, samen met de public-key van de server
  3. Browser checkt de Certificaat bron (CA) en vergelijkt deze met een lijst van vertrouwde CA's, dat het certificaat niet verlopen is, niet ongeldig verklaard is en dat het geldig is voor de website waarmee het zich verbindt. Als de browser het certificaat vertrouwd, creëert het een symmetrische session-key, versleuteld deze met de ontvangen public-key van de server en zend het naar de server.
  4. Server ontsleutelt de session-key gebruikmakend van zijn private-key en stuurt een bevestiging versleuteld met de nu gedeelde session-key voor het starten van de versleutelde sessie.
  5. Server en Browser versleutelen nu alle verstuurde data met de gezamenlijke session-key

Naar index

Gebruiker aanvaard risico Selfsigned Certificaat

Vanwege de kostprijs heeft ClearOS een eigen self-signed SSL-certificaat met de distributie meegegeven. Dit is een optie waarvan geen enkele webbrowser het certificaat zal (h)erkennen. Zie ook Server::Installeren Certificaat Manager
In ons geval nemen we hiermee genoegen en moeten we de https cliënten verzoeken het certificaat van ons domein te vertrouwen en de waarschuwingen van de browser te laten voor wat ze zijn. Voor kleinschalig gebruik biedt dit voldoende veilige versleuteling.

Hier een voorbeeld van het aanvaarden van het risco en doorgaan in Firefox.

Naar index

Certificaat Manager

Open in Webconfig > Systeem > Settings > Certificaat manager

 

Hier is te zien dat er al een CA (Certificaat Autoriteit) en een Systeem Certificaat aangemaakt is.
Dit is gebeurd direct na de installatie van de ClearOS server met het invullen van de Organisatie onder Webconfig > Map > Setup > Organisatie. Dit is beschreven in sectie Installeren: Installatie afronden met WEBCONFIG: Organisatie.

Als er nieuwe gebruikers aan de server toegevoegd worden krijgen deze automatisch een eindgebruikers certificaat o.a. nodig voor OpenVPN. Op deze Certificate Manager pagina kunnen certificaten gecreëerd worden, danwel via een Certificatie Request naar een Certifying Authority of middels Zelf-signeren.

Zie voor uitgebreide instructies de ClearOS gebruikershandleiding

Naar index

Let's Encrypt Free SSL Certificates

Let's Encrypt is een open certificaat authoriteit (OpenCA) die voorziet in gratis SSL Certificaten. De ClearOS Let's Encrypt App integreert de certificaat-levenscyclus en het beheer in Webconfig voor het gebruik door andere aps: Webconfig, Website Hosting, Mail, etc.

Installatie Let's Encrypt
Installeer Let's Encrypt uit de Marketplace in Webconfig en volg de instructies in de ClearOs documentatie

Certificaat aanmaken
System > Security > Let's Encrypt > Add

Klik op 'View' om het nieuwe certificaat 'www.makkink.eu' te bekijken.

Naar index

Het Let's Encrypt Certificaat

Naar index

Vervang het self-signed certificaat van Webconfig

Bij het installeren van ClearOs wordt de 'Headless' Browser Administratie App 'Webconfig' geïnstalleerd. Zie hiervoor Server::Installeren sectie Headless Webconfig Administratietool. In die sectie wordt het gebruik van een self-signed certificaat door Webconfig uiteen gezet.
Nu we beschikken over een officiëel erkend Certificaat van Let's Encrypt kunnen we deze ook toewjzen aan Webconfig.

Open Webconfig > System > Settings > General Settings

Selecteer 'Edit' en kies het nieuwe Let's Encrypt certificaat.

Naar index

Certificaat toewijzen aan een website

Voor de webserver is in de sectie 'Webserver Opstarten' beschreven welke Website Settings we kunnen bewerken. In het blok Options hebben we onder 'Digital Certificate' gekozen voor de op dat moment enig beschikbare optie: Self-Signed-Default Certificate.
We kunnen dus eenvoudig terug gaan naar deze Website Settings en hier kiezen voor het nu beschikbare Let's Encrypt Certificaat net zoals we voor Webconfig gedaan hebben.
Pas op! Als we gebruik maken van de geeikte ClearOS methode met het 'clearos.default.conf' configuratiebestand moeten we hier eerst een kopie van maken, want bij elke Website Update wordt 'clearos.default.conf verwijderd.

Bovenstaande edit bewerkstelligt o.a. dat een nieuwe flex-443.conf gemaakt wordt met daarin onder meer de locaties van de Let's Encrypt certificaten en keys.
We moeten nu de certificaten toewijzen aan de website door een edit van <VirtualHost *:443> in het bestand /etc/httpd/conf.d/clearos.default.conf of ../custom-httpd.conf

<VirtualHost *:443>
   ServerName makkink.eu
   ServerAlias *.makkink.eu
   DocumentRoot /var/www/html
   ErrorLog /var/log/httpd/error_log
   CustomLog /var/log/httpd/access_log combined
   CustomLog /var/log/httpd/wandelen_access_log combined env=wandelen
   CustomLog /var/log/httpd/nbp_access_log combined env=nbp
   CustomLog /var/log/httpd/blog_access_log combined env=blog
   SSLEngine on
 # SSL LetsEncrypt certificaat-bestandslocaties
   SSLCertificateFile /etc/letsencrypt/live/www.makkink.eu/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/www.makkink.eu/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/www.makkink.eu/chain.pem
   # No weak export crypto allowed
   SSLHonorCipherOrder on
   SSLProtocol all -SSLv2 -SSLv3 -TLSv1
   SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128
:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!3DES:!aNULL:!MD5 SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0 </VirtualHost>

Klik om het complete aangepaste bestand clearos.default.conf of custom_httpd.conf te bekijken of te downloaden.

Naar index

Certificaat van server verwijderen

Als we een server off-line halen om plaats te maken voor een nieuwe server dan heeft het Lets Encrypt certificaat geen nut meer omdat deze voor het domein www.makkink.eu is.

De nu off-line server krijgt een andere (lokale) hostname, bijv. 'testserver'. We moeten het certificaat voor de host www.makkink.eu van deze testserver verwijderen.
Om een certificaat te kunnen deleten moeten we eerst de apps die het certificaat gebruiken, omzetten naar het self-signed ClearOS certificaat.

Naar index

Webconfig Let's Encrypt SSL certificaat

Webconfig certificaat naar ClearOS self-signed

Naar index

Webserver Let's Encrypt SSL certificaat

Webserver certificaat naar ClearOS self-signed

Let op:
Na een wijziging in de settings van de Website app worden er nieuwe flex-80 en flex-443 conf's gecreëerd.
Zie ook Apache Configureren

Run vóór je verder gaat het script flex-integrate om een nieuwe custom-httpd.conf aan te maken.

Naar index

Nu kan het certificaat verwijderd worden

Confirmatie van verwijderen

Als op de on-line server al dan niet een Let's Encrypt certificaat voor www.makkink.eu in gebruik is levert geen problemen op.
Je kunt meerdere certificaten op hetzelfde domein geregistreerd hebben.

Naar index

Crawlers en Robots.txt

Het Robots Exclusion Protocol of robots.txt protocol is een conventie om (delen) van een normaal toegankelijke website af te schermen voor bepaalde webspiders en zoekrobots. Dit wordt met name gebruikt om te voorkomen dat (delen van) een website ongevraagd automatisch wordt gekopieerd en bijvoorbeeld daarmee wordt opgenomen in zoekresultaten van zoekmachines.

Het protocol maakt gebruik van het 'robots.txt' bestand, dat in de rootdirectory van een website wordt gezet. Als alternatief voor dit speciale bestand kan in bestaande HTML-bestanden middels HTML-tag Meta het attribuut "robots" worden opgenomen.

Het protocol dient echter alleen ter advies en gaat uit van medewerking van de bezoekende webrobot. Het kan dus niet daadwerkelijk de toegang tot bestanden en mappen ontzeggen en is daarmee ongeschikt om (delen van) een website af te schermen. Het protocol is dan ook voornamelijk bedoeld om gegevens die irrelevant zijn voor bezoekers niet weer te geven in de zoekresultaten van zoekmachines.

Zie ook:
http://nl.wikipedia.org/wiki/Robots_Exclusion_Protocol
http://codex.gallery2.org/Gallery2:How_to_keep_robots_off_CPU_intensive_pages
http://gallery.menalto.com/node/66159#comment-240796

Procedure voor mijn testserver:

Naar index