1

Client LDAP CentoOS/RHEL 8

Da tempo orami CentOS, ovvero “Community ENTerprise Operating System”, è alla versione 8 in upstream mode, dunque anche RHEL “Red Hat Entrprise Linux” è alla medesima versione.

Vediamo nell’articolo come integrare un server CentOS 8 o RHEL 8 con OpenLDAP per abilitarlo ad accedervi con autenticazione centralizzata. Tra le prime cose che notiamo “sparisce” nscd in favore di SSSD.

SSSDè l’acronimo di  System Security Services Daemon  (link: https://sssd.io/), ovvero il demone dei servizi di sicurezza del sistema, un software originariamente sviluppato per il sistema operativo Linux che fornisce un set di demoni per gestire l’accesso ai servizi di directory services e ai meccanismi di autenticazione. Gli inizi di SSSD risiedono nel progetto software open-source FreeIPA (Identity, Policy and Audit).

Aggiornare il sistema tramite dnf o yum

Per prima cosa bisogna aggiornare il sistema operativo, per farlo, usare i seguenti comandi:

dnf update -y
oppure
yum update -y

Installazione SSSD su CentOS/RHEL 8

Dopo che l’aggiornamento è andato a buon fine installare SSSD e gli SSSD tools.

dnf install sssd sssd-tools -y
oppure
yum install sssd sssd-tools -y

Configurazione SSSD per autenticazione OpenLDAP su CentOS/RHEL 8

Prossimo passo è configurare SSSD per abilitare l’autenticazione OpenLDAP sul sistema locale.

SSSD non usa una sua configurazione di default, il file quindi non esisterà, crearne uno manualmente:

vim /etc/sssd/sssd.conf

Copiare il contenuto seguente nel file sssd.conf. Assicuriamoci di aver sostituito i parametri con i valori corretti del nostro ambiente.

[sssd]
services = nss, pam, sudo
config_file_version = 2
domains = default

[sudo]

[nss]

[pam]
offline_credentials_expiration = 60

[domain/default]
ldap_id_use_start_tls = True
cache_credentials = True
ldap_search_base = dc=ldap,dc=acme,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
sudo_provider = ldap
ldap_uri = ldap://ad.acme.com
ldap_default_bind_dn = cn=readonly,ou=system,dc=ldap,dc=acme,dc=com
ldap_default_authtok = hjsd4Rtsd
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/openldap/cacerts/ca.cert.pem
ldap_tls_cacertdir = /etc/openldap/cacerts/
ldap_search_timeout = 50
ldap_network_timeout = 60
ldap_sudo_search_base = ou=SUDOers,dc=ldap,dc=acme,dc=com
ldap_access_order = filter
ldap_access_filter = (objectClass=posixAccount)

Salvare ed uscire dal file. Nota che abbiamo anche configurato il nostro server OpenLDAP per fornire i diritti sudo come mostrato dalle configurazioni;

services = nss, pam, sudo
...

[sudo]
...

ldap_sudo_search_base = ou=SUDOers,dc=acme,dc=com

Se non usi OpenLDAP per le regole di sudo, puoi rimuovere queste configurazioni.

ldap_tls_cacert nel file sssd.conf sopra.

Ora scarica il certificato CA del server OpenLDAP e salvalo nel file specificato dalla direttiva  ldap_tls_cacert del file sssd.conf.

openssl s_client -connect ldap.acme.com:636 -showcerts < /dev/null | openssl x509 -text

copia il certificato ed incollalo nel file /etc/openldap/cacerts/ca.cert.pem.

vim /etc/openldap/cacerts/ca.cert.pem
-----BEGIN CERTIFICATE-----
MIIFxzCCA6+gAwIBAgIUV+l4aOvMCLlNQRKOpt9YfxcxA8MwDQYJKoZIhvcNAQEL
BQAwczELMAkGA1UEBhMCS0UxEDAOBgNVBAgMB05haXJvYmkxDDAKBgNVBAcMA05h
...
...
5deiMlJkrYv7wZ0prq0QO5lduGBuD9UJvRa8LBV0GEAiHZL5PJOnREHObbAH907E
eixIJpkcC4wguMaXDNqIv6WGdQtRUyIP8tdByXYJGrbRW0K/K9qEaIZhJiAES1Qy
8U96RdYBpLvDctRch1kIfvnAVffTxmObAGI9n64O89p48kocJwNI/XQNRg==
-----END CERTIFICATE-----

Ora apriamo il file /etc/openldap/ldap.conf e configuriamo le linee seguenti:

vim /etc/openldap/ldap.conf

Fondamentalmente, devi definire la posizione del certificato CA, la base di ricerca OpenLDAP, l’URI e se stai fornendo le direttive SUDO tramite OpenLDAP anche la base SUDOers.

BASE    dc=ldap,dc=acme,dc=com
URI     ldaps://ldap.acme.com:636
SUDOERS_BASE    ou=SUDOers,dc=ldap,dc=acme,dc=com
...
...
TLS_CACERT      /etc/openldap/cacerts/ca.cert.pem
...

Salva ed esci dal file di configurazione.

Configurare il Name Service Switch e PAM su CentOS/RHEL 8

Successivamente, è necessario aggiornare NSS e PAM per utilizzare SSSD per gestire le risorse di autenticazione

Nelle precedenti versioni di  CentOS potevamo usare il tool authconfig ma è stato sostituito da authselect.

Authselect è un’utilità che semplifica la configurazione dell’autenticazione dell’utente, soprattutto durante l’utilizzo dell’SSSD.

Configurare il profilo SSSD.

Il comando Authselect quando viene utilizzato per creare un profilo SSSD modificherà i seguenti file:

  • /etc/pam.d/system-auth
  • /etc/pam.d/password-auth
  • /etc/pam.d/fingerprint-auth
  • /etc/pam.d/smartcard-auth
  • /etc/pam.d/postlogin
  • /etc/nsswitch.conf

Pertanto, esegui un backup di questi file nel caso in cui le cose non funzionino. Dopo aver salvato il backup di questi file rimuovili in modo che il comando successivo li possa ricostruire.

Crea un profilo SSSD. Questo comando avrà esito positivo solo se hai rimosso i file sopra.

authselect select sssd

In caso contrario, puoi sovrascrivere i file aggiungendo l’opzione  --force.

authselect select sssd --force
Backup stored at /var/lib/authselect/backups/2022-03-23-11-52-12.yMO4TA
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

Quindi, affinché il sistema possa recuperare i diritti sudo da SSSD/OpenLDAP modifica il file /etc/nsswitch.conf inserendo la riga seguente:

echo "sudoers:    files sss" >> /etc/nsswitch.conf

Configurae la creazione automatica della Home Directory

 

Per abilitare la creazione automatica della home directory al primo accesso dobbiamo installare oddjob-mkhomedir il quale fornisce il modulo pam_oddjob_mkhomedir.

dnf install oddjob-mkhomedir -y
o
yum install oddjob-mkhomedir -y

Avviare oddjobd ed inserirlo per essere avviato allo start del sistema

systemctl enable --now oddjobd

Carica il modulo pam_oddjob_mkhomedir nel file di autenticazione PAM /etc/pam.d/system-auth  per abilitare la creazione automatica della home directory.

echo "session optional pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022" >> /etc/pam.d/system-auth

Restart oddjobd.

systemctl restart oddjobd

Running SSSD

Before you can start SSSD, you need to check configuration for any typos or permissions;

Prima di avviare SSSD verifica che la confiugrazione non abbia errori nei file o permessi sbagliati:

sssctl config-check
File ownership and permissions check failed. Expected root:root and 0600.

Come suggerisce l’output diamo l’accesso in read/write (600) al file  /etc/sssd/ al solo proprietario del file (root).

chown -R root: /etc/sssd
chmod 600 -R /etc/sssd

La configurazione è ora corretta, possiamo impostare SSSD per essere avviato al boot.

systemctl enable --now sssd

Controliamo lo stato

systemctl status sssd
● sssd.service - System Security Services Daemon
   Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-12-08 16:57:07 EAT; 42min ago
 Main PID: 779 (sssd)
    Tasks: 3 (limit: 5073)
   Memory: 60.6M
   CGroup: /system.slice/sssd.service
           ├─779 /usr/sbin/sssd -i --logger=files
           ├─800 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
           └─801 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files

Test autenticazione OpenLDAP via SSSD

Supponendo che tu abbia già creato i tuoi utenti e gruppi OpenLDAP, verifichiamo di poter accedere, prima di tutto, vediamo se  il tuo nome utente LDAP sul sistema venga riconosciuto con il comando id.

id domenico.tricarico

Dovresti ottenere una voce simile a;

uid=1002(domenico.tricarico) gid=1002(domenico.tricarico) groups=1002(sysadmin)

Se non riesci a trovare l’utente assicurati di controllare i log syslog e i log sssd. Altrimenti, puoi riavviare sssd

systemctl restart sssd

Controlla di nuovo l’utente con il comando  id.

Se tutto va bene, esegui un accesso ssh locale per testare l’autenticazione LDAP

ssh -l domenico.tricarico 127.0.0.1
oppure
ssh domenico.tricarico@127.0.0.1
The authenticity of host '127.0.0.1(::1)' can't be established.
ECDSA key fingerprint is SHA256:iMRNJQa8gU0t6fHx6nzmAU+ZygA/3J2BC6zzwzqfY4o.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
domenico.tricarico@localhost's password: 
[domenico.tricarico@ldapserver ~]$ pwd
/home/domenico.tricarico

Verifica diritti sudo.

Innanzitutto, se hai assegnato all’utente i diritti sudo, puoi verificare eseguendo il comando seguente sul tuo server OpenLDAP:

export SUDOERS_BASE=ou=SUDOers,dc=ldap,dc=acme,dc=com
ldapsearch -b "$SUDOERS_BASE" -D cn=admin,dc=ldap,dc=acme,dc=com -W -x
...
# sudo, SUDOers, ldap.acme.com
dn: cn=sudo,ou=SUDOers,dc=ldap,dc=acme,dc=com
objectClass: top
objectClass: sudoRole
cn: sudo
sudoUser: domenico.tricarico
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
...

Ora proviamo il sudo:

[domenico.tricarico@ldapserver ~]$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for domenico.tricarico: Last login: Wed Mar 23 13:49:47 EAT 2022 from 172.16.0.15 on pts/0 [root@ldapserver ~]#



Schwa: l’inclusività passa anche attraverso l’HTML

Oggi, tra le tante richieste mi arriva un ticket per la pubblicazione di un articolo. Nel leggere il contenuto trovo il carattere Ə, ovvero lo “schwa”.

Bene. La procedura è sempre la stessa: preparazione titolo, paragrafo, HTML e… Già al titolo il primo problema: come si fa il simbolo “Ə” sulla tastiera? Non oso immaginare in HTML! Certo prima dell”HTML bisogna partire dalla tastiera, quindi dall’UNICODE.

Prima di procedere vale la pena approfondire.

Cosa è lo Schwa Ə?

Schwa: Origine e significato

La lingua italiana è il risultato di una continua trasformazione che dura da secoli, ma da qualche tempo un semplice simbolo grafico ha scatenato l’opinione pubblica, la stampa, ha acceso il dibattito tra linguisti e richiesto l’intervento dell’Accademia della Crusca.

Sto parlando dello “schwa” o scevà (italianizzato), la desinenza finale neutra che sostituisce plurali maschili per una comunicazione più inclusiva a partire dalle parole. Perché lo sappiamo, le parole sono importanti.
Per quanto riguarda la sua origine ci sono diverse teorie. I linguisti concordano che le prime tracce del suo utilizzo risalgano all’ebraico medievale. Secondo quanto riporta la Treccani, lo “schwa” è il nome di un simbolo grafico ebraico che indica l’assenza di vocale seguente o la presenza di una vocale senza qualità e quantità. Lo scevà appare anche in diversi dialetti del Centro e del Sud d’Italia, ad esempio in quelli di Napoli e Bari, e nella lingua piemontese.

Soluzioni, proposte, critiche
La lingua italiana prevede che, in caso di moltitudine mista, anche in presenza di un solo maschio, si utilizzi il maschile sovraesteso. Lo “schwa” diventa dunque un tentativo, un obiettivo, una possibilità che mira a creare un linguaggio che rappresenti anche le persone appartenenti alla comunità Lgbtq+ e che sia adeguato a descrivere una realtà socioculturale mutata nel tempo.

Alma Sabatini nelle sue “Raccomandazioni per un uso non sessista della lingua italiana”, già nel 1987 proponeva come criterio quello del genere prevalente, per poi scegliere se usare il maschile o il femminile sovraesteso.
Più recente invece l’utilizzo dell’asterisco o della chiocciola, inseriti nelle parole per definire una pluralità di persone con diversa identità sessuale. Questo uso, però, ha un limite: non ha una pronuncia nella lingua parlata. La sociolinguista Vera Gheno, specializzata in comunicazione digitale che ha collaborato per venti anni con l’Accademia della Crusca, ritiene lo schwa preferibile all’asterisco. Un esperimento, lo definisce, che ha raccolto consensi ma anche critiche: il direttore di MicroMega, Paolo Flores D’Arcais, ha definito un’“ennesima idiozia spacciata per progressista” la scelta annunciata sui social del comune di Castelfranco Emilia sull’utilizzo dello schwa (ə) al posto del maschile sovraesteso nei post istituzionali.

Ancora, la linguista Anna M. Thornton sottolinea come l’introduzione dello schwa non risolva affatto il problema dell’inclusione.
L’Accademia della Crusca ai quesiti pervenuti sui temi legati all’utilizzo dell’asterisco e dello schwa ha risposto che il genere grammaticale è una questione del tutto diversa dal genere naturale.
Ha espresso contrarietà all’uso di asterischi o di altri segni estranei all’ortografia italiana, poiché la forma non ha nulla a che vedere con la sostanza. Esplicitando: anche chi non gradisce “schwa” e asterischi si manifesta contrario al sessismo linguistico e rispettoso nei confronti delle persone che si definiscono non binarie.
L’unica certezza è che educazione linguistica e educazione emotiva devono andare di pari passo.

Come si fa lo Ə “Schwa” sulla tastiera?

Chi non ha mai lavorato con la fonetica o è la prima volta che si trova a scrivere simboli fonetici si porrà la domanda: “Come si fa lo schwa sulla tastiera?”.

E sulla tastiera dello smartphone? Si fa allo stesso modo su Microsoft Windows, su Linux, Apple, Andorid e iOS?“.

C’è uno standard internazionale? La risposta è sì, l’UNICODE.

ASCII e UNICODE

Partiamo dicendo che l’UNICODE, o Unicode Consortium, è il consorzio internazionale di aziende interessate alla interoperabilità nel trattamento informatico dei testi in lingue diverse, i custodi delle nostre lettere, dei nostri caratteri. Al 14 settembre 2021 Unicode 14.0 aggiungeva 838 caratteri, per un totale di 144.697. Queste aggiunte includono 5 nuove scritture, per un totale di 159, oltre a 37 nuovi caratteri emoji.

Prima di arrivare all’UNICODE, ovvero il sistema che “integra le lingue” che potremmo chiamare quindi l’inclusivo dell’informatica, dobbiamo dare uno sguardo all’ASCII. Tutto parte dall’ASCII (American Standard Code for Information Interchange) che fu pubblicato dall’American National Standards Institute (ANSI) nel 1968. I caratteri a disposizione dell’ASCII sono solamente 256, tutti quelli rappresentabili con solo 8 bit, ovvero 1 byte, il primo carattere è 0000 0000 e l’ultimo 1111 1111. Perché tutto quello che facciamo si traduce in BIT.

ASCII BINARY TABLE

 

 

Guardando la tabella ci rendiamo subito conto che mancano molti caratteri che ogni giorno vediamo sui nostri dispositivi, dai simboli di lingue non latine alle emoji, per questo motivo era necessario un set di caratteri comprensivo che includesse tutte le lingue. Così è arrivato Unicode nel 1991, per poter codificare più caratteri in modo standard e permettere di utilizzare più set di caratteri estesi.

Siamo quasi arrivati alla tastiera, ora bisogna “codificare” ciò che digitiamo, le due codifiche più note sono UTF-8 (Unicode Transformation Format, 8 bit) e UTF-16 (Unicode Transformation Format, 16 bit).

UTF-8 usa da 1 a 4 byte per rappresentare un carattere Unicode quindi con 1 byte, ovvero 8 bit, abbiamo a disposizione 256 combinazioni, sufficienti per rappresentare i primi 128 (cioè da 0 a 127) caratteri dell’ASCII. Nella tabella qui sopra sono indicati quelli dal binario 00000000 al binario 01111111. Quattro byte possono sembrare veramente troppi per un solo carattere, tuttavia questo è richiesto solo per i caratteri che stanno fuori dal Basic Multilingual Plane.

  • UTF-8:
    • 1 byte: ASCII standard
    • 2 byte: arabo, ebraico, la maggior parte degli script europei
    • 3 byte: BMP (Basic Multilingual Plane)
    • 4 byte: tutti i caratteri Unicode
  • UTF-16:
    • 2 byte: BMP
    • (Basic Multilingual Plane)
    • 4 byte: tutti i caratteri Unicode

Bene, ora siamo pronti per impostare le nostre tastiere in modo da scrivere anche noi lo ə. Lo schwa minuscolo ha codice U+0259 mentre il maiuscolo ha codice U+018F.

Carattere Schwa Unicode

Carattere Schwa Unicode

UNICODE TABLE

Come facciamo lo schwa con la tastiera (Microsoft,  Apple e Linux)

Lo ə su Microsoft Windows

Come creare una scorciatoia da tastiera per scrivere ə su Windows

  1. Scarica e installa il programma gratuito AutoHotkey;
  2. Durante l’installazione,  scegliere UNICODE;
  3. Conclusa l’installazione, vai sul Desktop;
  4. Clicca con il tasto destro del mouse sullo sfondo e clicca su Nuovo e, infine, seleziona AutoHotkey Script;
  5. Chiamalo come preferisci, schiaccia Invio e dopodiché clicca con il tasto destro del mouse sul nuovo file, infine dal menù a tendina clicca su Edit script;
  6. Si aprirà una finestra con alcune stringhe di testo. Non toccarle e aggiungi sotto la seguente stringa:
+!a::
Send, ə
return

Attraverso questa stringa verrà impostata una scorciatoia da tastiera per cui, premendo Shift Alt + il tasto a, apparirà lo ə.

SCHWA SU APPLE

L’utente “restuccia” di GitHub ci viene in soccorso con un pacchetto pronto, ho testato la procedura su un MacBook Air 2021 aggiornato al sistema MacOS Monterey.

Al termine della procedure potremo digitare lo schwa ə con il nuovo layout tastiera premendo i tasti option (⌥) + a, per lo schwa maiuscolo Ə, la combinazione di tasti sarà option (⌥) + shift (maiuscolo) + a.

Di seguito i passaggi, oppure puoi seguire la guida su GitHub:

  1. Scarica il layout cliccando qui;
  2. Apri il file italiano+schwa.dmg;
  3. Nella finestra che apparirà, apri “Keyboard Installer”;
  4. Trascina il file “italiano+schwa.bundle” sulla finestra di Keyboard Installer;
  5. Clicca su “Install for current user”;
  6. Riavvia il computer;
  7. Clicca sul menu Apple () > Preferenze di Sistema, poi su Tastiera, quindi sulla scheda “Sorgenti di input”;
  8. Clicca sul bottone “+”, seleziona “Italiano” nel menu a sinistra;
  9. Seleziona il layout “Italiano+schwa” e clicca su aggiungi;
  10. Una icona con la bandiera italiana apparirà nella barra dei menu, in alto a destra nello schermo. Clicca sulla bandiera per scegliere il nuovo layout.
  11. Per digitare lo schwa ə con il nuovo layout tastiera, basta premere i tasti option (⌥) + aPer lo schwa maiuscolo Ə, la combinazione di tasti è option (⌥) + shift (maiuscolo) + a.

Linux il più inlcusivo

Per scrivere lo shwa su Linux è sufficiente usare una combinazione di tasti:

ctrl shift u + 0259

questo metodo indica alla tastire di usare il carattere idenitficato con il codice UNICODE U+01DD 

oppure usare il tasto “compose”, solitamente è il tasto ALT GR + SHIFT ma potrebbe cambiare da Desktop a Dektop.
compose + e +e

Quindi nessuna installazione particolare, Linux sa,!

Come lo facciamo su Word

Se il nostro sistema operativo non ha il simobolo shwa  possiaomo andare su “inserisci” e poi il tasto “simboli” e poi su “altri simboli”

Si apre l’elenco dei simboli gestiti dal nostro software, ora non ci resta che andarlo a cercare e selezionarlo.

Una volta individuato possiamo usare gli “shortcut key” , ovvero i tasti di selezione rapida, in questo caso mentre scriviam il nostro documento possiamo scrivere 0259 e poi premere ALT+X:

0259, ALT+X

Come lo facciamo su Open Office Writer

Simile alla procedura per Microsoft Word, andiamo sul menù inserisci e clicchiamo su “carattere speciale”

Ora nella finestra di dialogo selezioniamo “Estenzioni fonetiche”, qui la ricerca sarà più veloce avendo già “scremato” per i caratteri di nostro interesse.

come lo facciamo in HTML

Schwa HTML

TOPTAL DESIGNERS HTML

Abbiamo visto come possiamo farlo con sistemi operativi e software di scrittura, non resta che comprendere come farlo con il linguaggio di markup sviluppato da Tim Berners-Lee nel 1990: l’HTML, Hypertext Markup Language, lo standard usato per strutturare i documenti del World Wide Web.

Dall’immagine qui sopra vediamo che il codice html è “ə“, un esempio di html è il seguente:

<span>ə</span>

Se invece abbiaomo la necessità di  CSS (Cascading Style Sheets,ovvero fogli di stile a cascata), usato per definire la formattazione di documenti HTML, possiamo usare il codice “\0259”, di seguito un esempio:

<!DOCTYPE html>
<html>
<style>
h2:after {
content: ' \0259';
}
</style>
<body>
<h2>Vi presenoto lo </h2>
</body>
</html>

 

Sugli smartphone

Andorid

Sui dispositivi Andorid, il metodo più veloce è quello di scaricare la tastiera Gboard, quella di Google. Una volta installata ed impostata come predefinita, seleziona come lingua “Alfabeto fonetico internazionale (IPA)” e come layout “QWERTY” in questo modo ci sarà una fila di tasti in più per i simboli fonetici fra cui lo schwa.

Non ho trovato, purtroppo, una soluzione per la famosa tastiera SwiftKey di Microsoft per Android.

Apple iOS

Su iPhone la faccenda è più complicata, partiamo copiando lo schwa, andiamo su “Impostazioni > Tastiera > Sostituzione testo > +”, a questo punto incolliamo il simbolo schwa nel campo Frase. Nel campo Abbreviazione invece inseriamo una combinazione di caratteri comoda o un tasto che non viene suato mai.

Per gli utenti iOS 15 nessuna manovra da fare, il carattere è già inserito di default.

Articolo di Domenico Tricarico e Leila Delle Case.




vmdk not found – Ripristino del descriptor file vmdk

Recreating a missing VMDK (VMware virtual machine disk descriptor file)

Cosa accade se accidentalmente viene cancellato il descrittore dei dischi virtuali di VMware? Semplicemente si rende il disco illegibile compromettendo la partenza della virtual machine.

Diamo il caso che una delle nostre VM non parta più e che riceviamo l’errore “vmdk not found “. Prima di allarmarci verifichiamo che sia presente il “disco”.
Per comodità entriamo nella directory della VM

cd /vmfs/volumes/CT500MX/VM_LBIT_TEST

Cerchiamo il tipo di controllo SCSI della virtual machine nel file .vmx

grep scsi VM_LBIT_TEST.vmx

Ora dobbiamo vedere l’esatta dimensione del file -flat:

ls -l VM_LBIT_TEST-flat.vmdk
-rw------- 1 root root 171798691840 Oct 11 12:30 VM_LBIT_TEST-flat.vmdk

Andiamo a creare un file temporaneo usando il tool vmkfstools:

vmkfstools -c 171798691840 -d thin temp.vmdk

Eliminiamo il file -flat.vmdk che ci ha creato

rm -i temp-flat.vmdk

Ed ora andiamo a rinominare il nostro Mware virtual machine disk descriptor file temp.vmdk in VM_LBIT_TEST.vmdk:

mv -i temp.vmdk VM_LBIT_TEST-flat.vmdk

Ora apriam il nostro VMDK e andiamo a sostituire i paramentri temp con il nome del nostro file -flat, nel nostro caso è VM_LBIT_TEST-flat.vmdk
Ecco come si presenta il file generato dal comando vmkfstools:

# Disk DescriptorFile
version=3
encoding="UTF-8"
CID=3bc86a12
parentCID=ffffffff
createType="vmfs"
#
# Extent description
RW 335544320 VMFS "temp.vmdk"
#
# Change Tracking File
changeTrackPath="temp-ctk.vmdk"
#
# The Disk Data Base
#DDB
#
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "20886"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "df24793fbf5a3e5ba49813303bc86a12"
ddb.thinProvisioned = "1"
ddb.toolsInstallType = "2"
ddb.toolsVersion = "10346"
ddb.uuid = "60 00 C2 90 3f 7b d4 cb-98 bb 90 11 81 8c 3d 91"
ddb.virtualHWVersion = "14"

E questo modificato con il nome del nostro disco virtuale
# Disk DescriptorFile
version=3
encoding="UTF-8"
CID=3bc86a12
parentCID=ffffffff
createType="vmfs"
#
# Extent description
RW 335544320 VMFS "VM_LBIT_TEST.vmdk"
#
# Change Tracking File
changeTrackPath="VM_LBIT_TEST-ctk.vmdk"
#
# The Disk Data Base
#DDB
#
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "20886"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "df24793fbf5a3e5ba49813303bc86a12"
ddb.thinProvisioned = "1"
ddb.toolsInstallType = "2"
ddb.toolsVersion = "10346"
ddb.uuid = "60 00 C2 90 3f 7b d4 cb-98 bb 90 11 81 8c 3d 91"
ddb.virtualHWVersion = "14"

Possiamo verificare che il file sia “consistente” con il seguente comando:

vmkfstools -e VM_LBIT_TEST.vmdk

Non ci reste che avviare la VM ed abbiamo finito.
Buon lavoro.




“Who Objects” bulk import in ProxMox Mail Gateway

Importare in modalità massiva una lista di indirizzi mail nella “WHO rule” di PROXMOX Mail Gateway

Credo che sia l’incubo di tutti gli amministratori di sistema trovarsi una richiesta con centinaia di indirizzi di posta da inserire in una “allow list” o “deny list” già esistente, ed è qui che la command line interface viene in nostro soccorso.

Per prima cosa dobbiamo identificare la l’identificativo numerico della rule nella quale vogliamo importare la lista di email.

pmgsh get /config/ruledb/who

pmgsh get per visualizzare le rule

pmgsh get per visualizzare le rule

Creiamo il nostro file contenente tutte le caselle di posta

vim lista.list

A questo punto è sufficiente creare un ciclo in modo da passare al comando “pmgsh create /config/ruledb/who/<rule number>/email –email <nome@dominio.tld>” la lista appena creata

cat lista.list |while read line; do pmgsh create /config/ruledb/who/33/email --email $line; done

Ciclo while per inserire i dati nella WHO RULE PROXMOX

Ciclo while per inserire i dati nella WHO RULE PROXMOX

Ora non ci resta che attendere con pazienza la fine del ciclo, al termine di quest’ultimo possiamo andare a controllare da interfaccia grafica il nostro lavoro ed essere felici per aver evitato un “data entry” allucinante!




Installare MySQL su Debian 10 e non MariaDB

MySQL e non Maria DB

Installare MySQL e non MariaDB su Debian 10.

Nel 2008 la SUN Microsystem ha acquistato MySQL AB, la società finlandese proprietaria del codice sorgente di MySQL che veniva però distribuito con la licenza GNU GPL oltre che con una licenza commerciale.  Michael “Monty” Widenius è il programmatore finlandese che ha iniziato e guidato per molti anni MySQL. Quando, all’inizio del 2008, la Sun Microsystems ha acquistato MySQL AB, Widenius si è trovato a disagio nella nuova situazione lavorativa, criticando la gestione dello sviluppo della versione 5.1 di MySQL e da vita a MariaDB, ovvero un fork della comunità del progetto MySQL.  Sebbene MariaDB funzioni bene nella maggior parte dei casi, se hai bisogno di funzionalità trovate solo in Oracle MySQL, puoi installare e utilizzare i pacchetti da un repository gestito dagli sviluppatori di MySQL.

Installando il pacchetto mysql attraverso i repository debian verrà proposto in modalità predefinita MariaDB, per questo per utilizzare Oracle MySQL è necessaria una installazione a parte.

LAMP/LEMP e la M di MySQL

MySQL è la M nello stack LAMP, un insieme di software open source comunemente usato che include anche Linux, il server Web Apache e il linguaggio di programmazione PHP.

A differenza di Apache nel LAMP nello stack LEMP troviamo il Web Server NginX.

Installazione Oracle MySQL

Per installare l’ultima versione di MySQL, aggiungeremo questo repository, installeremo il software MySQL stesso, proteggeremo l’installazione e infine verificheremo che MySQL sia in esecuzione e risponda ai comandi.

Iniziamo installando gnupg:

apt-get install gnupg

spostiamoci nella directory temporanea, scarichiamo l’ultimo pacchetto .deb di MySQL e installiamo i repositry

cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.19-1_all.deb
dpkg -i mysql-apt-config_0.8.19-1_all.deb

a questo punto avremo il seguente contenuto nel file /etc/apt/sources.list.d/mysql.list

### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out entries below, but any other modifications may be lost.
# Use command 'dpkg-reconfigure mysql-apt-config' as root for modifications.
deb http://repo.mysql.com/apt/debian/ buster mysql-apt-config
deb http://repo.mysql.com/apt/debian/ buster mysql-8.0
deb http://repo.mysql.com/apt/debian/ buster mysql-tools
#deb http://repo.mysql.com/apt/debian/ buster mysql-tools-preview
deb-src http://repo.mysql.com/apt/debian/ buster mysql-8.0

 

durante l’installazione verrà proposta una finestra di dialogo con la possibilità di personalizzare l’installazione

procediamo ora con l’aggiornamento del package manager e l’installazione del pacchetto mysql-server:

apt-get update && apt-get install mysql-server -y

Potremmo ricevere l’errore di “importazione della chiave PGP”, in questo caso non ci resta che scaricarla:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29

e ora ripetere il comando per aggiornare la lista dei pacchetti tramite APT e poi l’installazione del nostro RDBMS

ultimo passo per completare l’installazione  è l’inserimento della password dell’utente root del RDBMS Oracle MySQL. Prestiamo attenzione a questa password in quanto ci servirà per la gestione amministrativa del nostro database.

 

 

Verifichiamo che il demone sia attivo:

systemctl status mysql

e ora lanciamo il comando per mettere in sicurezza la nostra installazione di MySQL

mysql_secure_installation

Si conclude l’installazione di MySQL, da questo momento in poi è possibile gestire il nostro database da command line con il seguente comando:

mysql -u root -p

Abilitiamo il demone all’avvio del sistema

systemctl enable mysql

Tutto pronto, possiamo ora inziare a creare i nostri database e i relativi utenti.




CentOS 7 YUM DB_RUNRECOVERY: Fatal error, run database recovery

Misteriosamente il comando yum smette di funzionare e riceviamo il seguente errore:

[root@00 ~]# yum upgrade
errore: rpmdb: BDB0113 Thread/process 12664/139742821894208 failed: BDB1507 Thread died in Berkeley DB library
errore: db5 errore(-30973) da dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
errore: impossibile aprire l'indice Packages utilizando db5 - (-30973)
errore: impossibile aprire il database dei pacchetti in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

Per risolvere è sufficiente rimuovere  database RPM , eseguire il rebuild e scaricare tutta la lista dei mirrors.

Creiamo una directory temporanea dove appoggiare i file del DB, così in caso di insuccesso potremo ripristinare il database:

[root@00 ~]# mv /var/lib/rpm/__db* /tmp/

Ora lanciamo la ricostruzione:

[root@00 ~]# rpm --rebuilddb

E per finire facciamo pulizia:

[root@00 ~]# yum clean all

A questo punto possiamo provare lo yum update o upgrade per vedere se tutto è tornato nella norma.




Upgrade Zabbix 5.2 to Zabbix 5.4 Debian 10

Questa guida descrive i passaggi per eseguire l’aggiornamento di Zabbix dalla versione 5.2 alla 5.4.

Il primo step è fermare Zabbix.

# systemctl stop zabbix-server

Creiamo un backup del database e dei file della release 5.2

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql
# mkdir /opt/zabbix-backup/
# cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
# cp /etc/nginx/conf.d/zabbix.conf /opt/zabbix-backup
# cp -R /usr/share/zabbix/ /opt/zabbix-backup/
# cp -R /usr/share/doc/zabbix-* /opt/zabbix-backup/

Installiamo il repostory per la versione 5.0:

# rm -Rf /etc/apt/sources.list.d/zabbix.list
# wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian10_all.deb
# dpkg -i zabbix-release_5.2-1+debian10_all.deb
# apt-get update

Passiamo all’upgrade dei pacchetti:

# apt-get install --only-upgrade zabbix-server-mysql zabbix-frontend-php zabbix-agent -y

Per finire la configurazione di Apache, anche se potrebbe non essere necessaria:

# apt-get install zabbix-apache-conf

Abbiamo terminato, avviamo Zabbix 5.4

# systemctl start zabbix-server
# systemctl start zabbix-agent

A questo punto parte l’upgrde del DB, possiamo seguire lo stato di aggiornamento direttamente dal file di log:

tail -f /var/log/zabbix/zabbix_server.log

Nota importante, dovremo aggiornare tutti i proxy, la procedura è identica solo che il comando di upgrade è il seguente:

# apt-get install --only-upgrade zabbix-proxy-mysql zabbix-agent -y

Aggiornamento completato, nuova release in funzione!




Glusterfs Read only file system (read only)

il problema che si è presentato oggi è trovare il file system distribuito con “gluster” sul nodo 1 aveva un funzionamento anomalo: scriveva correttamente sugli altri nodi ma non riceveva le scritte dagli altri nodi, una sorta di file system read only.

Inutile riavviare glusterd ed eseguire il umount/moun del device.

Per ripristinare la scrittura il primo passo è “uccidere” i processi di brick, individuiamo eventuali processi con il comando “ps -ef” e passiamo i “PID” al “kill”:

ps -ef|grep brick
kill -9 PID

Il secondo passaggio è resettare il “quorum-type” del device:

gluster volume reset <device> quorum-type

A questo punto glusterd è tornato “attivo” e la distribuzione dei dati è nuovamente “on line”. Accertiamoci che tutti i brick siano connessi:

gluster peer status
gluster volume info all

Procedura completata!




Upgrade Zabbix 5.0 to Zabbix 5.2 Debian 10

Questa guida descrive i passaggi per eseguire l’aggiornamento di Zabbix dalla versione 5.0 alla 5.2.

Il primo step è fermare Zabbix.

# systemctl stop zabbix-server

Creiamo un backup del database e dei file della release 5.0

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql
# mkdir /opt/zabbix-backup/
# cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
# cp /etc/nginx/conf.d/zabbix.conf /opt/zabbix-backup
# cp -R /usr/share/zabbix/ /opt/zabbix-backup/
# cp -R /usr/share/doc/zabbix-* /opt/zabbix-backup/

Installiamo il repostory per la versione 5.0:

# rm -Rf /etc/apt/sources.list.d/zabbix.list
# wget https://repo.zabbix.com/zabbix/5.2/debian/pool/main/z/zabbix-release/zabbix-release_5.2-1+debian10_all.deb
# dpkg -i zabbix-release_5.2-1+debian10_all.deb
# apt-get update

Passiamo all’upgrade dei pacchetti:

# apt-get install --only-upgrade zabbix-server-mysql zabbix-frontend-php zabbix-agent -y

Per finire la configurazione di Apache, anche se potrebbe non essere necessaria:

# apt-get install zabbix-apache-conf

Abbiamo terminato, avviamo Zabbix 5.2

# systemctl start zabbix-server
# systemctl start zabbix-agent

A questo punto parte l’upgrde del DB, possiamo seguire lo stato di aggiornamento direttamente dal file di log:

tail -f /var/log/zabbix/zabbix_server.log

Nota importante, dovremo aggiornare tutti i proxy, la procedura è identica solo che il comando di upgrade è il seguente:

# apt-get install --only-upgrade zabbix-proxy-mysql zabbix-agent -y

Aggiornamento completato, nuova release in funzione!




Migrare Zabbix 5.0 da CentOS 7 LAMP a Debian 10 LEMP

Migrazione Zabbix 5.0 da un server CentOS 7 a Debian 10 Buster con Nginx e MySQL.

 

Iniziamo con una premessa: seguire questa procedura in produzione senza creare disservizio è possibile solo nel caso in cui si abbia un database esterno al server che ospita Zabbix. In caso contrario, il disservizio si presenterà nel momento in cui verrà spostato il database.

Per ambienti non troppo grandi in cui il server Zabbix è anche server SQL, è bene calcolare i tempi per eseguire il DUMP completo del DB e il relativo import nel nuovo server. In tal modo sarà possibile indicare nella dichiarazione di disservizio il tempo corretto.

Iniziamo subito con la preparazione del server Debian 10 come server stand alone. Durante l’installazione di Debian viene richiesta la scelta dell’ambiente, a quel punto dobbiamo togliere la spunta su “Ambiente Grafico” e metterla su “server ssh” per poter prendere accesso da remoto (se necessario). Dobbiamo selezionare solo “Sistema base” senza altri pacchetti, prestando attenzione a non selezionare “Server web” poiché di default viene installato Apache2.

Primo passo, quindi, installare WGET e il repository ZABBIX 5.0:

# apt update && apt install -y wget vim
# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb
# dpkg -i zabbix-release_5.0-1+buster_all.deb

Passiamo subito all’installazione di Zabbix 5.0:

# apt-get update && apt install zabbix-server-mysql zabbix-nginx-conf

Ora che abbiamo installato Zabbix 5.0, passiamo a NGINX, PHP 7.3 e MySQL (quest’ultimo se non abbiamo già un server dedicato per i database):

# apt install nginx php-fpm php-mysql

Ora creiamo il classico file info.php:

# vim /var/www/html/info.php

Inseriamo il codice seguente:

<?php phpinfo(); ?>

Ora apriamo il file /etc/nginx/sites-available/default e aggiungiamo le direttive per poter interpretare le pagine scritte in php:

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}

Inoltre, cambiamo la porta di ascolto di NGINX così quando metteremo il virtualhost per Zabbix non andrà in conflitto con il default.

Sostituiamo queste direttive:

listen 80 default_server;
listen [::]:80 default_server;

con le seguenti:

listen 82 default_server;
listen [::]:82 default_server;

ed ora riavviamo NGINX:

# systemctl restart nginx

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php

Passiamo all’installzione del RDBMS MySQL:

# apt-get install gnupg
# wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb
# dpkg -i mysql-apt-config_0.8.16-1_all.deb
# apt-get update
# apt-get install mysql-community-server
# systemctl status mysql.service

Procediamo con la sicurezza di base del db server con il seguente comando:

# mysql_secure_installation

Ora creiamo database ed utente per Zabbix:

# mysql -u root -p -e "CREATE DATABASE zabbix character set utf8 collate utf8_bin;"
# mysql -u root -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';"
# mysql -u root -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';"

Non ci resta che verificare la connessione al DB tramite il PHP, apriamo il nostro file info.php

# vim /var/www/html/info.php

ed inseriamo queste righe di php prestando attenzione nella valorizzazione delle fariabile alle prime righe:

<?php
$user = "zabbix";
$password = "password";
$database = "zabbix";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

Qualora ci fossero problemi di connessione apriamo il fie mysqld.cnf:

# vim /etc/mysql/mysql.conf.d/mysqld.cnf

aggiungiamo la entry “default_authentication_plugin= mysql_native_password”  subito sotto “[mysqld]“:

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
default_authentication_plugin= mysql_native_password

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php, a questo punto dovremmo vedere il messaggio “CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO“.

A questo punto abbiamo davanti due possibilità: provare Zabbix 5.0 prima di importare il DB dal server CentOS oppure iniziare la migrazione dei dati. In questo secondo caso, passare direttamente alla connessione al DB (punto successivo).

Scegliendo la prima opzione, invece, importiamo i dati di default di Zabbix:

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

Connessione al DB

A questo punto abbiamo NGINX e PHP correttamente funzionanti, non resta che verificare l’installazione di ZABBIX 5.0: il primo passaggio è quello di configurare il file /etc/zabbix/zabbix.conf con gli stessi parametri che avevamo sul server CentOS.

Arrivati al momento dalla configurazione delle credenziali di connessione al DB possiamo scegliere tra le seguenti opzioni:

  • inserire i parametri del DB locale,
  • inserire i dati del DB del server CentOS,
  • inserire i parametri del DB centralizzato.

Dobbiamo inserire i dati di connessione qui:

vim /etc/zabbix/zabbix_server.conf

e sostituire le seguenti entry:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password

Nel caso in cui avessimo scelto la prima opzione, cioè qualora avessimo inserito i parametri del DB locale, potremmo provare la nostra installazione di Zabbix accedendo con nome utente e password di default alla seguente url http://<P_SERVER>. Il nome utente è “Admin” e la password è “zabbix”.

Qualora avessimo scelto la seconda o la terza opzione, cioè nel caso in cui avessimo inserito i dati del DB del server CentOS o del DB centralizzato, vedremmo la GUI lavorare con i dati di esercizio pertanto l’accesso alla url http://<P_SERVER> avvverrebbe con le utenze di produzione. Prestare attenzione: si tratta di dati di esercizio.

SCENARIO RDBMS ESTERNO

La procedura è praticamente terminata, non ci resta che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7, in questo modo non dovremo modificare nessun proxy o agent.

SCENARIO MYSQL INTERNO

Andiamo sul server CentOS e fermiamo Zabbix in modo da interrompere la scrittura dei dati sul DB:

# systemctl stop zabbix-server

Lanciamo il comando mysqldump per esportare tutto il DB su di un file:

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql

Portiamo il file zabbix_server.sql sul nostro server Debianb 10:

# scp zabbix_server.sql utente@IP_Debian:/tmp

Torniamo su Debian 10,  fermiamo Zabbix ed importiamo il DB:

# systemctl stop zabbix-server
# mysql -u user_zabbix -ppassword_zabbix db_zabbix < zabbix_server.sql

Attendiamo il tempo di import del DB, una volta terminato avremo spostato ZABBIX 5.0 da CentOS a Debian 10. Non ci resta ora che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7 ed eseguire lo start di zabbix-server:

# systemctl start zabbix-server

Finito!

 

Articolo correlato: Upgrade Zabbix 4.4 to Zabbix 5.0 Cenots 7.X