Installare AMP su OpenBSD 7.6 (bozza)

di | Gennaio 13, 2025

Molte applicazioni WEB distribuite con licenza libera (GNU GPL, BSD e simil) o commerciali, necessitano dell’interprete PHP e di un Database Server MySQL (o MariaDB). come prerequisito base. A completare lo stack è necessario il Server HTTPd (o anche detto webserver). AMP è appunto l’acronimo di Apache, MySQL (o MariaDB) e PHP. Se poi, si considera anche il Sistema Operativo utilizzato, gli acronimi che descrivono l’infrastruttura passano addirittura a 4. Si parlerà quindi di una LAMP se il sistema operativo utilizzato è GNU/Linux, WAMP (Windows), OAMP (OpenBSD) e così via. In questo appunto, vedremo come installare AMP su una macchina con il sistema operativo OpenBSD 7.6.

Nello specifico, necessitavo di avere AMP sul server per wordpress, utilizzato per condividere appunti e generare pagine come questa.

Apache HTTPd

Apache HTTPd è un po il webserver per eccellenza da tantissimi anni, e dal mio punto di vista il migliore in assoluto, per la sua incredibile stabilità, configurabilità ed estendibilità. Distribuito da Apache Software Foundation sotto licenza APL (simil licenza BSD/MIT). L’attuale rivale di Apache HTTPd è nginx, che al momento sembra batterlo in fatto di prestazioni e numero di installazioni (Statistiche di Netcraft aggiornate ad Dicembre 2024). E diciamo pure “finalmente un rivale serio, con IIS è stato fin troppo facile essere il migliore“, e a quanto pare nginx non è l’unico concorrente alla corona, a quanto pare. Per completezza è bene citare anche httpd incluso nella distribuzione Base di OpenBSD 7.6 (base.tgz), che molti entusiasti di questo splendito sistema operativo già utilizzano, con piena soddisfazione, da quel che leggo.

Per installare Apache HTTPd su OpenBSD è semplice come su una qualsiasi distribuzione GNU/Linux (debian, slackware, etc).

alfree2$ doas pkg_add -i apache-httpd
quirks-7.50:updatedb-0p0: ok
quirks-7.50 signed on 2024-12-29T14:34:30Z
quirks-7.50: ok
apache-httpd-2.4.62:nghttp3-1.5.0: ok
apache-httpd-2.4.62:ngtcp2-1.7.0: ok
apache-httpd-2.4.62:nghttp2-1.63.0: ok
apache-httpd-2.4.62:curl-8.11.1: ok
apache-httpd-2.4.62:libiconv-1.17: ok
apache-httpd-2.4.62:xz-5.6.2: ok
apache-httpd-2.4.62:libxml-2.13.3p0: ok
apache-httpd-2.4.62:brotli-1.0.9p0: ok
apache-httpd-2.4.62:apr-1.7.5: ok
apache-httpd-2.4.62:db-4.6.21p7v0: ok
apache-httpd-2.4.62:apr-util-1.6.3: ok
apache-httpd-2.4.62:jansson-2.14: ok
apache-httpd-2.4.62:bzip2-1.0.8p0: ok
apache-httpd-2.4.62:pcre2-10.37p2: ok
apache-httpd-2.4.62: ok
Running tags: ok
The following new rcscripts were installed: /etc/rc.d/apache2
See rcctl(8) for details.

Per abilitare Apache HTTPd come servizio è necessario eseguire il comando rcctl col parametro enable, quasto farà si che venga automaticamente avviato (start) ad ogni reboot della macchina.

alfree2$ doas rcctl enable apache2
alfree2$

Per avviare o fermare il servizio manualmente sarà necessario eseguire il medesimo comando con la direttiva start, stop, restart (stop e start) ma anche check per verificarne lo stato.

alfree2$ doas rcctl start apache2
apache2(ok)

alfree2$ doas rcctl check apache2
apache2(ok) 

Per accertarci di avere Apache HTTPd attivo e raggiungibili, possiamo anche usare curl (o altro http-client), utilizzabile sia da locale che da remoto.

alfree2$ curl http://127.0.0.1
<html><body><h1>It works!</h1></body></html>

PHP

PHP è un linguaggio di scripting, molto utilizzato per scrivere applicazioni web server-side. Anch’esso è coperto da una licenza libera, simil BSD. Il suo sviluppo è coordinato dalla PHP Foundation e va avanti da moltissimi anni, non rimanendo mai indietro ad ogni nuovo protocollo o formato. Vi è una folta comunità di programmatori che utilizza PHP (come peraltro anche per Apache HTTPd), ed quindi è semplice reperire informazioni e consigli dalla rete, in caso di problemi, così come è semplice trovare librerie di terzi che estendono tale interprete, per qualsiasi esigenza voi abbiate. PHP, In passato ha sofferto di qualche problema di sicurezza, risolti sempre in tempi rapidissimi. Attenti, quindi a recepire costantemente gli agglioramenti e patch pubblicate. PHP non ha un vero antagonista, ed è da tati anni il linguaggio e l’interprete de facto per le web application. Si stima che circa l’80% delle pagine dinamiche prodotte su internet siano generate da PHP. Le alternative server-side, mensionabili, non sono tantissime, e son principalmente rappresentate da : JSP (Java Servlet Page) ed ASP e forse Python.

La progettazione e lo sviluppo di PHP, di questi ultimi anni, sembra sempre più legato indissolubilmente all’HTTPd Server e allo sviluppo di Applicazioni Web, anche se può essere utilizzato in altri ambiti. PHP è integrabile facilmente sia con Apache HTTPd e sia con gli altri HTTP-Server, come nginx ed httpd. L’integrazione con Apache HTTPd può avvenire principalmente in 2 modalità :

  1. Tramite il modulo Apache mod_php.
  2. Tramite il gestore di processi di PHP (php_fpm).

Con tutti quanti gli altri HTTP-Server l’integrazione può avvenire esclusivamente nella seconda modalità.
Se siete curiosi di sapere qual’è la differenza tra le due configurazioni vi consiglio l’articolo di Zend mod_php vs php_pfm.

Nel mio caso specifico, ho deciso di utilizzare mod_php, fondamentalmente perchè ho sempre fatto così e non ho ragioni per cambiare. In futuro potrei applicare l’altra soluzione con Apache-HTTPd per provare, o per l’utilizzo di altri HTTP-Server.

Di seguito il comando per installare PHP.

alfree2$ doas pkg_add php
quirks-7.50 signed on 2024-12-29T14:34:30Z
Ambiguous: choose package for php
        0: <None>
        1: php-8.1.31
        2: php-8.2.27
        3: php-8.3.15
Your choice: 3
php-8.3.15:femail-1.0p1: ok
php-8.3.15:femail-chroot-1.0p3: ok
php-8.3.15:argon2-20190702p0: ok
php-8.3.15:gettext-runtime-0.22.5: ok
php-8.3.15:libsodium-1.0.20: ok
php-8.3.15:oniguruma-6.9.9: ok
php-8.3.15:capstone-5.0: ok
php-8.3.15: ok
The following new rcscripts were installed: /etc/rc.d/php83_fpm
See rcctl(8) for details.
New and changed readme(s):
        /usr/local/share/doc/pkg-readmes/femail-chroot
        /usr/local/share/doc/pkg-readmes/php-8.3

Come è possibile notare dai precedenti messaggi, il php_fpm è pacchettizato nell’interprete PHP, e non si può scegliere di non installarlo, come se l’uso di questo fosse la scelta default, insomma la più scontata. Mi son chiesto tra me e me del perchè. Probabilmente, il Team di OpenBSD, visto che implementa un suo HTTP-Server (httpd) che si integra con l’interprete PHP esclusivamente in quella modalità, include nel package di default anche fpm.

Visto, che nel nostro caso, andremo ad utilizzare come metodo di integrazione mop_php, e non fpm, andremo a disabilitare quest’ultimo, per esser sicuri che non parte in automatico nemmeno al prossimo reboot della macchina.

alfree2$ doas rcctl disable php83_fpm
php83_fpm(ok)

Per installare il modulo di Apache HTTPd per PHP, andremo ad installare, invece, il pacchetto php-apache, come mostrato di seguito.

alfree2$ doas pkg_add php-apache
quirks-7.50 signed on 2025-01-11T21:13:46Z
Ambiguous: choose package for php-apache
        0: <None>
        1: php-apache-8.1.31
        2: php-apache-8.2.27
        3: php-apache-8.3.15
Your choice: 3
php-apache-8.3.15: ok

Notate come, I soli file inclusi nel pacchetto php-apache-8.3.15 sono : il modulo Apache HTTPd per parlare con PHP (/usr/local/lib/apache2/libphp.so) ed un file di configurazione (/var/www/conf/modules.samples/php-8.3.conf) che Apache HTTPd includerà automaticamente se copiato in /var/www/conf/modules/.

alfree2$ doas cp /var/www/conf/modules.sample/php-8.3.conf /var/www/conf/modules/                                                                                                              

alfree2$ doas cat /var/www/conf/modules/php-8.3.conf                                                                                                                                           
LoadModule php_module /usr/local/lib/apache2/php-8.3/libphp.so

<IfModule mod_php.c>
        AddType application/x-httpd-php .php .phtml .php3
        AddType application/x-httpd-php-source .phps
# Most php configs require this
        DirectoryIndex index.php
</IfModule>

Per far si che Apache HTTPd acquisisca la nuova configurazione, è necessario effettuare il restart del servizio

alfree2$ doas restart apache2
doas: restart: command not found
alfree2$ doas rcctl restart apache2
apache2(ok)
apache2(ok)
alfree2$ 
 

Per verificare che tutto funzioni correttamente, scriviamo uno script PHP di test (che chiameremo ad esempio index.php) sotto la htdocs di Apache HTTPd (che di default su OpenBSD 7.6 è /var/www/htdocs/).
Il codice PHP è delimitato da <?php e ?>, tutto ciò che è presente nel mezzo viene inviato da Apache-HTTPd all’interprete PHP, e l’output ricevuto da quest’ultimo rimandato all’http-client, che nel caso di una web-applicarion è web-browser dell’utente.
Nello specifico, l’istruzione print ritorna ad Apache-HTTPd, e quindi all’utente, la stringa “hello word PHP!”

alfree2$ cat /var/www/htdocs/index.php
<?php 
     print ("hello world PHP");
?>
alfree2$ curl http://127.0.0.1/index.php
hello world PHP!

…ed è proprio quello che fa, quindi il test si conclude positivamente. Possiamo affermare che Apache-HTTPd è integrato correttamente all’interprete PHP.

Ma non è finita qui. PHP è un linguaggio -come detto- facilmente estendibile, tramite moduli installabili separatamente, in questo modo possiamo ottenere precisamente ciò di cui abbiamo bisogno per soddisfare le nostre esigenze applicative. Visto che vogliamo installare un AMP, necessitiamo anche di una libreria (o anche detto driver) per accedere al database server MariaDB (o MySQL), il PHP nella distribuzione base non ha un tale strumento, ma viene appunto fornito come estensione. In tal senso abbiamo 2 opzioni: mysqli (pacchettizzato come php-mysqli) e PDO (pacchettizzato come php-pdo-mysql). Qual’è la differenza tra i due? mysqli è un driver dedicato ai database server mysql e mariadb, quindi tramite questo driver è possibile sfruttare tutte le funzionalità di questo specifico database server, così come per Oracle esiste il driver nativo liboci, lo dico a chi ha esperienze differenti. PDO invece è un’astrazione, nel senso che è un’interfaccia che mette a fattor comune le funzionalità e caratteristiche di più database server (relazionali, direi), permettendo di fruire di tutte quelle funzionalità implementate da tutti i database server supportati. Il vantaggio di questa seconda soluzione è di poter cambiare l’implementaione del Database Server continuando ad utilizzare il medesimo codice applicativo senza modificar nulla, se non il driver PDO specifico del Database Server che si intende utilizzare. In altri termini e per essere più chiaro, potrei decidere di non utilizzare più MariaDB, per la mia applicazione, ma Postgres, semplimente installando il driver pdo_postgres e disinstallando il pdo_mysql. Il PDO in altri termini è come l’ODBC, sempre che la nostra applicazioni utilizzi per l’integrazione al Database-Server la sintassi PDO, perchè pur essendo molto simili le sintassi tra mysqli e PDO, non sono del tutto identiche. Vale a dire che, se un’applicazione è scritta per mysqli (quindi per il driver nativo) non puoi usare il driver PDO, e viceversa, se non adeguando il codice applicativo.

Nel mio caso specifico ho scelto di installare esclusivamente il driver nativo mysqli. Il motivo è essenzialmente che l’applicazione (web application) che andrò ad installare (wordpress) è scritta per mysqli, e non essendo una mia applicazione escludo 😛 che io possa forkarla solo per cambiar driver. In ogni caso, anche la scelta di utilizzare il driver nativo ha un suo perchè, in termini sia di potenza (sfrutta appieno le caratteristiche del Database Server utilizzato, ed è prestazionalmente migliore, visto che non implementa livelli di astrazione).

Per ottenere il driver nativo mysqli per php, è necesario installare il modulo php-mysqli.

alfree2$ doas pkg_add php-mysqli php-pdo_mysql
quirks-7.50 signed on 2024-12-29T14:34:30Z
Ambiguous: choose package for php-mysqli
        0: <None>
        1: php-mysqli-8.1.31
        2: php-mysqli-8.2.27
        3: php-mysqli-8.3.15
Your choice: 3
php-mysqli-8.3.15: ok
 

Verificheremo successivamente, quando avremo il Database Server MariaDB attivo sulla macchina. E proseguiamo con le altre estensioni PHP da installare, per soddisfare gli specifici prerequisiti applicativi..

Parliamo di curl, gd, zip ed intl. php-curl necessità della libcurl, ed estende il php di una serie di funzionalità da client di innumerevoli protocolli, tra cui http. php-gd necessità della lib-gd e di altre librerie per la manipolazione di immagini (jpeg, png, gif, etc.), estende l’interprete php in tal senso. Il php-zip necessità della libzip, e con questo l’interprete potrà acquisire nuove funzionalità per effettuare compressione e decompressioni di file. Infine, php-intl estende l’interprete di funzionalità attinente alle date e all’ora, credo.

alfree2$ doas pkg_add php-curl php-gd php-zip php-intl 
quirks-7.50 signed on 2025-01-11T21:13:46Z
Ambiguous: choose package for php-curl
        0: <None>
        1: php-curl-8.1.31
        2: php-curl-8.2.27
        3: php-curl-8.3.15
Your choice: 3
php-curl-8.3.15: ok
---
Ambiguous: choose package for php-gd
        0: <None>
        1: php-gd-8.1.31
        2: php-gd-8.2.27
        3: php-gd-8.3.15
Your choice: 3
php-gd-8.3.15:jpeg-3.0.3v0: ok
php-gd-8.3.15:lz4-1.10.0: ok
php-gd-8.3.15:zstd-1.5.6: ok
php-gd-8.3.15:tiff-4.6.0p0: ok
php-gd-8.3.15:png-1.6.43: ok
php-gd-8.3.15:giflib-5.2.2: ok
php-gd-8.3.15:libwebp-1.4.0: ok
php-gd-8.3.15:gd-2.3.3: ok
php-gd-8.3.15: ok
---
Ambiguous: choose package for php-zip
        0: <None>
        1: php-zip-8.1.31
        2: php-zip-8.2.27
        3: php-zip-8.3.15
Your choice: 3
php-zip-8.3.15:libzip-1.8.0p0: ok
php-zip-8.3.15: ok
---
https://cdn.openbsd.org/pub/OpenBSD/7.6/packages-stable/amd64/php-intl-8.3.15.tgz: Retrying https://cdn.openbsd.org/pub/OpenBSD/7.6/packages-stable/amd64/php-intl-8.3.15.tgz
Ambiguous: choose package for php-intl
        0: <None>
        1: php-intl-8.1.31
        2: php-intl-8.2.27
        3: php-intl-8.3.15
Your choice: 3
php-intl-8.3.15:icu4c-wwwdata-75.1v0: ok
php-intl-8.3.15:icu4c-75.1p0v0: ok
php-intl-8.3.15: ok
 

Ogni estensione installata (mysqli, curl, gd, zip ed intl) neessita di un file di configurazione da posizionare in /etc/php-8.3. Un modello di ognuno di essi è presente in /etc/php-8.3.sample. E’ necessario quindi effettuare una copia di questi file nella directory dove PHP si aspetta di trovarli.

Essenzialmente, ogni file di configurazione serve ad attivare l’estenzione e riporta il link al corrispondente file di libreria (.so). Se non presente, l’estensione (php) semplicemente non funzionerà.

alfree2$ ls -la /etc/php-8.3.sample/
total 32
drwxr-xr-x   2 root  wheel   512 Jan 12 01:42 .
drwxr-xr-x  28 root  wheel  2048 Jan  6 21:10 ..
-rw-r--r--   1 root  wheel    18 Jan 12 01:05 curl.ini
-rw-r--r--   1 root  wheel    16 Jan  6 18:56 gd.ini
-rw-r--r--   1 root  wheel    18 Jan  6 18:59 intl.ini
-rw-r--r--   1 root  wheel    20 Jan  6 18:54 mysqli.ini
-rw-r--r--   1 root  wheel    26 Jan  6 18:51 opcache.ini
-rw-r--r--   1 root  wheel    17 Jan 12 01:05 zip.ini

alfree2$ doas cp /etc/php-8.3.sample/* /etc/php-8.3

alfree2$ cat /etc/php-8.3/*
extension=curl.so
extension=gd.so
extension=intl.so
extension=mysqli.so
zend_extension=opcache.so
extension=zip.so                                                                                                                               

L’ideale sarebbe quello di scrivere un piccolo script php, per verificare tutte le estensioni… ma per stavolta ci fidiamo 😀

Siamo giunti all’ultima componente del nostro beneamato AMP, ossia al Database Server, che vedremo di seguito.

MariaDB

MariaDB è un fork (non fork, ma mi spiegherò meglio successivamente) del più conosciuto Database Server MySQL. E’ nno dei tanti fork (ma l’unico sopravvissuto ai giorni d’oggi) avvenuti nel momento in cui la multinazionale Oracle acquisì la storica e anche amata SUN Microsystem nel 2009, che a sua volta aveva recentemente acquisito tutti i diritti su MySQL, nel 2008 per un miliardo di dollari da MySQL AG, che ne coordinava la progettazione e lo sviluppo, e che ne deteneva i tutti i diritti. A quel punto, alcuni sviluppatori indipendenti di MySQL del nucleo originario, forkarono l’ultima versione disponibile alla data di acquisizione da parte di Oracle (5.1.38), decretando la nascita di MariaDB. La licenza con cui viene distribuito MariaDB è la GNU GPL vesione 2. Progettazione e sviluppi son coordinati da MariaDB Foundation. Nel limite del possibile, i progettisti di MariaDB han sempre cercato di seguire, nel limite del possibile, le nuove funzionalità introdotte in MySQL e nel continuare ad utilizzare i medesimi comandi e procedura per la sua gestione, al fine di agevolare sviluppatori e sistemisti, che avessero deciso di migrare, senza traumi e senza particolari sforzi, da mysql a mariadb. In OpenBSD per questioni di licenza, viene pacchettizzato esclusivamente MariaDB, e non MySQL.

Di seguito qualche annozione sul come installare MariaDB su OpenBSD 7.6.

alfree2$ doas pkg_add mariadb-server
quirks-7.50 signed on 2024-12-29T14:34:30Z
mariadb-server-10.9.8p1v1:p5-Net-Daemon-0.49: ok
mariadb-server-10.9.8p1v1:p5-PlRPC-0.2020p0: ok
mariadb-server-10.9.8p1v1:p5-FreezeThaw-0.5001p0: ok
mariadb-server-10.9.8p1v1:p5-MLDBM-2.05p0: ok
mariadb-server-10.9.8p1v1:p5-Clone-0.46: ok
mariadb-server-10.9.8p1v1:p5-Math-Base-Convert-0.11p0: ok
mariadb-server-10.9.8p1v1:p5-Module-Runtime-0.016p0: ok
mariadb-server-10.9.8p1v1:p5-Params-Util-1.102: ok
mariadb-server-10.9.8p1v1:p5-SQL-Statement-1.414: ok
mariadb-server-10.9.8p1v1:p5-DBI-1.644: ok
mariadb-server-10.9.8p1v1:mariadb-client-10.9.8v1: ok
mariadb-server-10.9.8p1v1:p5-DBD-MariaDB-1.23: ok
mariadb-server-10.9.8p1v1:snappy-1.1.10p1: ok
mariadb-server-10.9.8p1v1:lzo2-2.10p2: ok
mariadb-server-10.9.8p1v1: ok
The following new rcscripts were installed: /etc/rc.d/mysqld
See rcctl(8) for details.
New and changed readme(s):
        /usr/local/share/doc/pkg-readmes/mariadb-server

Come già fatto in precedenza per Apache HTTPd, è necessario abilitare anche MySQL come servizio, in maniera tale che venga avviato automaticamente dal sistema operativo dopo ogni reboot.

alfree2$ doas rcctl enable mysqld

Prima di avviarlo la prima volta, è però necessario eseguire, come amministratore della macchina, il comando mysql_installa_db, che si occuperà di creare il suo primo database, quello di catalogo, necessario per poter far funzionare correttamente, il server MySQL/MariaDB.

alfree2$ doas mysql_install_db
WARNING: The host 'alfree2.openbsd.amsterdam' could not be looked up with /usr/local/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MariaDB version. The MariaDB daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MariaDB privileges !
Installing MariaDB/MySQL system tables in '/var/mysql' ...
OK

Two all-privilege accounts were created.
One is root@localhost, it has no password, but you need to
be system 'root' user to connect. Use, for example, sudo mysql
The second is _mysql@localhost, it has no password either, but
you need to be the system '_mysql' user to connect.
After connecting you can set the password, if you would need to be
able to connect as any of these users with a password and without sudo

See the MariaDB Knowledgebase at https://mariadb.com/kb

You can start the MariaDB daemon with:
/etc/rc.d/mysqld start

Please report any problems at https://mariadb.org/jira

The latest information about MariaDB is available at https://mariadb.org/.

Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/
 

Da notare il Warning! Su cui vale la pena approfondire, appena possibile.

Dopodichè… è possibile anche avviarlo, come abbiamo già visto. Al primo start (appena dopo l’installazione), ho ricevuto un messaggio che considererei di warning “/etcrc.d/mysqld: kill: 44311: No such process”, per poi avviare il server correttamente. Non ho ritenuto importante indagare troppo, visto che ho ricevuto il messaggio solo al primo avvio.

alfree2$ doas rcctl start mysqld
mysqld/etc/rc.d/mysqld: kill: 44311: No such process
(ok)

alfree2$ doas rcctl stop mysqld
mysqld(ok)

alfree2$ doas rcctl start mysqld
mysqld(ok)

alfree2$ rcctl check mysqld
mysqld(ok)

E’ necessario eseguire una prima procedura di hardening e di inizializzazione, suggerita dai progettisti di MariaDB, procedura ereditata da MySQL. Va eseguito quindi, sempre come amministratori della macchina, lo script mysql_secure_installation. La procedura prevede una serie di passi :

  • L’impostazione della password dell’utente root di amministrazione di mariadb
  • L’utilizzo dei socket unix per l’autenticazione
  • La rimozione dell’utente anonimo (anonymous), vale a dire che non prevede password di accesso in sola lettura.
  • La disabilitazione degli accessi remoti con l’utenza MariaDB root.
  • La rimozione del database test e dei relativi privilegi

Non c’è alcuna ragione per non eseguire tutte le azioni previste, quindi conviene rispondere sempre di si (Y). Al termine, e come ultima domanda, ci chiederà se vogliato ricaricare a caldo (ossia senza fermare il server) immediatamente le nuove configurazioni con un operazione comunemente detta di flush. Rispondiamo ancora “Si”.

alfree2$ doas 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
haven't set the root password yet, you should just press enter here.

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

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

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] 
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

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


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
alfree2$ 
 

Ora che anche il Database Server Maria DB è attivo e configurato, possiamo effettuare un test di accesso, da client (mysql). Mi connetterò come utente root, chiederò di mostrarmi i Database ospitati dal server, chiederà di selezionare il database di cataloco mysql e di mostrami le tabelle contenute in esso, infine di mostrarmi il contenuto della tabella di catalogo users, contenente tutti gli utenti abilitati al server, come notate son presenti 3 utenti, in questo momento, ma esclusivamente l’utente root è utilizzabile. La password mostrata non è chiaramente in chiaro ma è un hash, ed è quindi impossibile risalire all’origine.

Non vorrei dilungarmi troppo con MariaDB, chiunque (come utente) ha esperienza di un qualche Database Server di tipo relazionale, non avrà grossi problemi ad usare MariaDB o MySQL MariaDB è divertente, oltretutto. Notate le prestazioni, ogni comando o query eseguita ritarna oltre che l’esito e l’eventuale risultato, anche il tempo impiegato, e parliamo di millesimi di secondi per interrogazioni semplici.

alfree2$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.9.8-MariaDB OpenBSD port: mariadb-server-10.9.8p1v1

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.002 sec)

MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| global_priv               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| transaction_registry      |
| user                      |
+---------------------------+
31 rows in set (0.001 sec)

MariaDB [mysql]> select * from user;
+-----------+-------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+
| Host      | User        | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string                     | password_expired | is_role | default_role | max_statement_time |
+-----------+-------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+
| localhost | mariadb.sys |                                           | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      | N                   |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password |                                           | Y                | N       |              |           0.000000 |
| localhost | root        | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      | Y                   |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | N                | N       |              |           0.000000 |
| localhost | _mysql      | invalid                                   | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      | Y                   |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password | invalid                                   | N                | N       |              |           0.000000 |
+-----------+-------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+
3 rows in set (0.008 sec)

MariaDB [mysql]> quit
Bye
alfree2$
 

Prima di uscire dalla shell di MariaDB, è necessario creare un utenza ed un database, per effettuare un test di connettività completo, che parte dall’utente, e che coinvolga l’intero AMP.

Visto che l’unica utenza MariaDB attualmente esistente ed utilizzabile è root, e come abbiamo visto dall’hardening apportato in precedenza, tale utenza non è autorizzata a connessioni da remoto, dovrò limitarmi (ma nemmeno tanto) ad effettuare il test da locale, non cambia poi di tanto visto che vogliamo effettuare un test completo, indipendentemente se l’utente sia attestato in locale o remoto.

Ciò che bisogna fare, è modificare lo script php creato precedentemente, posizionato nella documento-root di Apache HTTPd /var/www/htdocs/index.php, aggiungendo il codice php, ad esempio per la connessione, con l’utenza root, al Database Server.

alfree2$ doas cat /var/www/htdocs/index.php 
<?php

  print ("hello world PHP!\n");

  print ("Test connection MariaDB\n");

  // --- parameter for connection 
  $servername = "127.0.0.1" ;
  $user       = "root" ;
  $password   = "<PASSWORD>" ;
  $database   = "mysql" ;
  $port       = "3306" ;   /* Porta di default, potrebbe essere omessa  */

  // --- connection
  $conn = new mysqli($servername, $user, $password, $database, $port); 

  // --- verify connection
  if ($conn->connect_errno) {
     print ("Database Connection failed: " . $conn->connect_errno . "\n\n" );   
     exit();
  }

  print ("Database connection successfully\n\n");
  print ("Happy Hacking!\n\n");
  exit();

?>
alfree2$ 
 

Esecuzione del test, impostando una password

alfree2$ curl http://127.0.0.1/index.php    
hello world PHP!
Test connection MariaDB
Database connection successfully

Happy Hacking!

alfree2$ 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *