
Molte applicazioni web, distribuite sia con licenza libera (GNU GPL, BSD e simil) che commerciali, necessitano dell’Interprete PHP e di un Database Server MySQL (o MariaDB), come prerequisito base, oltre che di un webServer a nostra scelta, che si integri però con PHP, come ad esempio Apache HTTPd. Una tale infrastruttura prende il nome di AMP, che è, per l’appunto, l’acronimo di Apache, MySQL (o MariaDB) e PHP. Se poi, si vuol considerare l’intera pila software, includendo anche il Sistema Operativo utilizzato (e su cui gira tutto il resto), gli acronimi passano addirittura a 4. Si parlerà, quindi, di infrastruttura LAMP se il sistema operativo utilizzato è GNU/Linux, WAMP se si sta utilizzando una macchina Windows, OAMP per OpenBSD e così via. Di seguito la procedura che ho utilizzato per installare il mio AMP su una macchina con sistema operativo OpenBSD 7.6.
wordpress, ad esempio, è scritto in PHP, e necessita di un database server MariaDB/MySQL per poter memorizzare contenuti e configurazioni.
Questa pagina è generata da WordPress (quindi da script PHP), e vi è fornita da Apache HTTPd. È molto probabile che alcune informazioni contenute in essa, siano state estrapolate da MariaDB.
Scendiamo nel dettaglio di ogni singola componente software.
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 BSD/MIT). L’attuale suo rivale è nginx, che sembra batterlo in fatto di prestazioni e numero di installazioni (Statistiche di Netcraft aggiornate ad Dicembre 2024). Diciamo pure : “Evviva! finalmente un rivale serio, che con IIS è stato fin troppo facile…”. A quanto pare nginx non è l’unico aspirante, bisognerà dare un occhio anche a lighttpd. Per completezza è bene citare, il debuttante OpenBSD httpd, incluso nella distribuzione Base di OpenBSD 7.6 (base.tgz), di cui sentiremo, in futuro, sicuramente parlare.
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 è disponibile 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), e quindi è semplice reperire informazioni e consigli dalla rete, in caso di problemi, così come è semplice trovare librerie di terzi che estendono il linguaggio, e per rispondere a qualsiasi esigenza voi abbiate. PHP, In passato ha sofferto di qualche problema di sicurezza, risolti sempre in tempi rapidissimi. Occhio quindi al patching. PHP non ha un vero e proprio antagonista. È da tanti 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, sembra sempre più, rivolto al web… pur essendo utilizzabile in tutti gli altri ambiti. Pertanto, è facilmente integrabile sia con Apache HTTPd e sia con gli altri HTTP-Server, come nginx o OpenBSD httpd. L’integrazione con Apache HTTPd può avvenire principalmente in 2 modalità :
- Tramite il modulo Apache mod_php.
- 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 modalità vi consiglio di dare un occhio all’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 provare l’altra soluzione.
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 potete notare, in OpenBSD il php_fpm è impacchettato con PHP stesso. Probabilmente, il Team di OpenBSD, predispone l’ambiente per la propria soluzione già pre installata (OpenBSD httpd).
Nel mio caso, andrò ad utilizzare mop_php, e non fpm, pertanto andrò a disabilitare quest’ultimo, per esser sicuri che non parta in automatico al prossimo reboot della macchina.
alfree2$ doas rcctl disable php83_fpm
php83_fpm(ok)
Per installare il modulo di Apache HTTPd per PHP, andrò ad installare, 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, ho scritto uno script PHP di test (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 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. Apache-HTTPd è integrato 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.
Se l’esigenza è 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’implementazione del Database Server, in qualsiasi momento, senza adeguare il codice applicativo, 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, semplicemente 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.
Pur essendo molto simili le sintassi : 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è, sia in termini sia di potenza (sfrutta appieno le caratteristiche del Database Server utilizzato), che prestazionali (non implementa nessuna livello di astrazione) è sicuramente la migliore scelta.
Per ottenere il driver nativo mysqli per php, è necessario 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
Proseguo con le altre estensioni PHP da installare, per soddisfare gli specifici prerequisiti applicativi (wordPress).
Parliamo di curl, gd, zip ed intl. php-curl necessità della libcurl, ed estende il php di una serie di funzionalità da client per 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à effettuare compressione e decompressioni di file. Infine, php-intl estende l’interprete di funzionalità attinenti 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) necessita 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, semplicemente, una copia di questi file nella directory dove PHP si aspetta di trovarli.
Essenzialmente, ogni file di configurazione serve ad attivare l’estensione 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, ossia al Database Server.
MariaDB

MariaDB è un fork del più conosciuto MySQL. E’ uno dei fork (l’unico sopravvissuto ai giorni d’oggi) avvenuti, nel momento in cui, Oracle acquisì SUN Microsystem nel 2009, che a sua volta aveva acquisito nel 2008 tutti i diritti su MySQL, per un miliardo di dollari da MySQL AG, che ne coordinava la progettazione e lo sviluppo, e che ne deteneva fino a quel momento, 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 versione 2. Progettazione e sviluppi son coordinati da MariaDB Foundation. Nel limite del possibile, i progettisti di MariaDB han sempre cercato di seguire, le evoluzioni di MySQL, al fine di agevolare la migrazione a MariaDB. In OpenBSD per questioni di licenza, viene impacchettato esclusivamente MariaDB, e non MySQL.
Di seguito qualche annotazione 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
Abilito anche MariaDB come servizio, per avviarlo automaticamente 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 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.possibile anche avviarlo. Al primo start (appena dopo l’installazione), ho ricevuto un messaggio che considererei di warning “/etc/rc.d/mysqld: kill: 44311: No such process”, pur avendo poi avviato correttamente il servizio. Non ho ritenuto importante indagare oltre.
È possibile avviarlo. Al primo start (appena dopo l’installazione), ho ricevuto un messaggio che considererei di warning “/etc/rc.d/mysqld: kill: 44311: No such process”, pur avendo poi avviato correttamente il servizio. Non ho ritenuto importante indagare oltre.
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, ereditata da MySQL. Va eseguito (sempre come amministratore 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 vogliamo ricaricare le nuove configurazioni a caldo (senza fermare il server, operazione 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 MariaDB è attivo e minimamente configurato, andrò ad effettuare qualche test di accesso e d’uso, da client (mysql) :
* Connessione ed Autenticazione, come utente root.
* Elenco dei Database ospitati dal server
* Selezione del Database “mysql”. La selezione di un Database tramite la direttiva “use <database>”, evita di dover ogni volta anteporre il nome del database (ad esempio ‘mysql’) al nome dell’oggetto contenuto in esso (ad esempio la tabella ‘users’), che voglio referenziare. L’oggetto verrà ricercato esclusivamente nel database selezionato. Selezionando il database (di catalogo) mysql, si evita la forma mysql.users.
* Contenuto di una tabella (users), contenente tutti gli utenti registrati. Inizialmente, son presenti esclusivamente 3 utenti, bensì sia solo root utilizzabile. La password mostrata non è, chiaramente in chiaro ma è rappresentata nel formato hash, impossibile da riportare in chiaro.
Non vorrei dilungarmi troppo con MariaDB… e non è il posto giusto. Chiunque (come utente) abbia un po’ di esperienza con un qualunque Database Server di tipo relazionale, non avrà grossi problemi ad usare MariaDB o MySQL. MariaDB è divertente, oltretutto.
Notate, poi, le prestazioni : ogni comando o query eseguita ritorna oltre che l’esito e l’eventuale risultato, anche il tempo impiegato, e parliamo di millesimi di secondi per interrogazioni semplici. Spesso si evita anche di usare le cache con MariaDB e MySQL, per evitare un infrastruttura più complessa per benefici trascurabili, se non peggiori.
MySQL è molto popolare per la sua semplicità di utilizzo, e per le sue notevoli prestazioni.
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$
Riepilogando. L’unica utenza utilizzabile è root, che per questioni di sicurezza, può effettuare connessioni solo da locale e non da remoto.
Eseguo un test conclusivo dell’intero AMP.
Modifico lo script php (index.php) creato precedentemente, e posizionato nella document-root di Apache HTTPd /var/www/htdocs/, aggiungendo la connessione al database Server, e restituendo l’esito di tale operazione. Va chiaramente impostata la password di root.
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. Ricordatevi di cambiare la password all’utente di root.
alfree2$ curl http://127.0.0.1/index.php
hello world PHP!
Test connection MariaDB
Database connection successfully
Happy Hacking!
alfree2$