From 625e2c76a150471ce6d1c41b2ebe8a6e3b78fb11 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Sun, 12 Jan 2025 14:02:22 -0500 Subject: [PATCH] New Crowdin updates (#2574) * New translations 09-backups.md (Italian) * New translations 01-files-servers.md (Italian) * New translations 022-web-servers-nginx.md (Italian) * New translations 08-snapshots.md (Italian) * New translations 10-automating.md (Italian) * New translations htop.md (Italian) * New translations cron_jobs_howto.md (Italian) * New translations 03-application-servers.md (Italian) * New translations flatpak.md (French) * New translations proton.md (French) * New translations apache-sites-enabled.md (Ukrainian) * New translations rockydocs_formatting.md (Ukrainian) * New translations generating_ssl_keys_lets_encrypt.md (Ukrainian) * New translations summer-of-docs-2024.md (Ukrainian) * New translations freeradius_radius_server.md (Ukrainian) * New translations index.md (Ukrainian) * New translations glances_network_monitoring.md (Ukrainian) * New translations iso_creation.md (Ukrainian) * New translations cron_jobs_howto.md (Ukrainian) * New translations secure_ftp_server_vsftpd.md (Ukrainian) * New translations index.md (Ukrainian) * New translations 4_awk_command.md (Ukrainian) * New translations ssl_keys_https.md (Ukrainian) * New translations wireguard_vpn.md (Ukrainian) * New translations libvirt-rocky.md (Ukrainian) * New translations bash_stub.md (Italian) * New translations sftp.md (Italian) * New translations nfsserver.md (Italian) * New translations 07-high-availability.md (Italian) * New translations 04-database-servers.md (Italian) * New translations index.md (Italian) * New translations 041-database-servers-mariadb.md (Italian) --- docs/books/admin_guide/09-backups.it.md | 40 +- docs/books/incus_server/08-snapshots.it.md | 10 +- docs/books/incus_server/10-automating.it.md | 4 +- docs/books/sed_awk_grep/4_awk_command.uk.md | 2 +- .../books/web_services/01-files-servers.it.md | 114 +++ .../web_services/022-web-servers-nginx.it.md | 281 ++++++ .../web_services/03-application-servers.it.md | 647 +++++++++++++ .../web_services/04-database-servers.it.md | 11 + .../041-database-servers-mariadb.it.md | 894 ++++++++++++++++++ .../web_services/07-high-availability.it.md | 886 +++++++++++++++++ docs/desktop/gaming/proton.fr.md | 4 +- docs/desktop/gnome/flatpak.fr.md | 2 +- docs/gemstones/htop.it.md | 17 +- docs/gemstones/scripts/bash_stub.it.md | 54 +- docs/guides/automation/cron_jobs_howto.it.md | 2 +- docs/guides/automation/cron_jobs_howto.uk.md | 2 +- .../contribute/rockydocs_formatting.uk.md | 23 +- docs/guides/file_sharing/nfsserver.it.md | 62 +- .../secure_ftp_server_vsftpd.uk.md | 4 +- docs/guides/file_sharing/sftp.it.md | 191 ++-- docs/guides/isos/iso_creation.uk.md | 121 +++ .../network/glances_network_monitoring.uk.md | 220 +++++ .../rsod/2024/summer-of-docs-2024.uk.md | 6 +- docs/guides/rsod/index.uk.md | 11 + .../security/freeradius_radius_server.uk.md | 106 +++ .../generating_ssl_keys_lets_encrypt.uk.md | 46 +- docs/guides/security/ssl_keys_https.uk.md | 58 +- docs/guides/security/wireguard_vpn.uk.md | 77 +- .../guides/virtualization/libvirt-rocky.uk.md | 173 ++++ docs/guides/web/apache-sites-enabled.uk.md | 8 +- .../web/apache_hardened_webserver/index.it.md | 5 +- .../web/apache_hardened_webserver/index.uk.md | 3 +- 32 files changed, 3812 insertions(+), 272 deletions(-) create mode 100644 docs/books/web_services/01-files-servers.it.md create mode 100644 docs/books/web_services/022-web-servers-nginx.it.md create mode 100644 docs/books/web_services/03-application-servers.it.md create mode 100644 docs/books/web_services/04-database-servers.it.md create mode 100644 docs/books/web_services/041-database-servers-mariadb.it.md create mode 100644 docs/books/web_services/07-high-availability.it.md create mode 100644 docs/guides/isos/iso_creation.uk.md create mode 100644 docs/guides/network/glances_network_monitoring.uk.md create mode 100644 docs/guides/rsod/index.uk.md create mode 100644 docs/guides/security/freeradius_radius_server.uk.md create mode 100644 docs/guides/virtualization/libvirt-rocky.uk.md diff --git a/docs/books/admin_guide/09-backups.it.md b/docs/books/admin_guide/09-backups.it.md index 7352fba5bb..b9523837fc 100644 --- a/docs/books/admin_guide/09-backups.it.md +++ b/docs/books/admin_guide/09-backups.it.md @@ -4,7 +4,7 @@ title: Backup e Ripristino # Backup e ripristino -In questo capitolo imparerai come eseguire il backup e ripristinare i tuoi dati con Linux. +In questo capitolo si apprenderà come eseguire il backup e il ripristino dei dati utilizzando Linux. **** @@ -35,7 +35,7 @@ Il backup consente di proteggersi dai seguenti problemi: * **Cancellazione**: volontaria o involontaria. Umana o tecnica. Virus, ... * **Integrità** : i dati diventano inutilizzabili. -Nessun sistema è infallibile e nessun essere umano è infallibile, quindi per evitare di perdere i dati è necessario eseguirne il backup in modo da poterli ripristinare dopo un problema. +Nessun sistema è infallibile e nessun essere umano è infallibile, quindi per evitare di perdere i dati è necessario eseguire un backup per ripristinarli dopo un problema. Il supporto di backup dovrebbe essere tenuto in un'altra stanza (o edificio) rispetto al server in modo che un disastro non distrugga il server e i backup. @@ -48,7 +48,7 @@ Esistono due principi: il backup e l'Backup completo: Si riferisce a una copia una tantum di tutti i file, le cartelle o i dati presenti nel disco rigido o nel database. +* Backup completo: Si riferisce a una copia unica di tutti i file, le cartelle o i dati presenti nel disco rigido o nel database. * Backup incrementale: Si riferisce al backup dei dati aggiornati dopo l'ultimo backup completo o incrementale. * Backup differenziale: Si riferisce al backup dei file modificati dopo il backup completo. * Backup selettivo (backup parziale): Si riferisce al backup di una parte del sistema. -* Backup a freddo: Si riferisce al backup quando il sistema è in stato di arresto o di manutenzione. I dati di backup sono esattamente gli stessi dei dati nel sistema durante questo periodo. -* Backup a caldo: Si riferisce al backup quando il sistema è in funzionamento normale. Poiché i dati nel sistema vengono aggiornati in qualsiasi momento, i dati di backup hanno un certo ritardo rispetto ai dati reali del sistema. +* Backup a freddo: Si riferisce al backup quando il sistema è in stato di arresto o di manutenzione. Durante questa fase i dati di backup e i dati presenti nel sistema sono esattamente gli stessi. +* Backup a caldo: Si riferisce al backup quando il sistema è in funzionamento normale. Poiché i dati del sistema vengono aggiornati in qualsiasi momento, i dati di backup hanno un certo ritardo rispetto ai dati reali del sistema. * Backup remoto: Si riferisce al backup dei dati in un'altra località geografica per evitare la perdita di dati e l'interruzione del servizio causati da incendi, disastri naturali, furti, ecc. ### Frequenza dei backup -* Periodico: Eseguire il backup in un periodo di tempo specifico prima di un aggiornamento importante del sistema (di solito durante le ore non di punta) +* Periodico: Eseguire il backup in un periodo specifico prima di un aggiornamento importante del sistema (di solito durante le ore non di punta) * ciclico: backup in unità di giorni, settimane, mesi, ecc !!! Tip "Suggerimento" @@ -90,7 +90,7 @@ Oltre a questi aspetti, gli amministratori di sistema devono considerare anche f A seconda delle utilità disponibili, sarà possibile eseguire diversi tipi di ripristino. -In alcuni sistemi di gestione di database relazionali, le operazioni corrispondenti di “recupero” (a volte nella documentazione si usa “recovery”) e “ripristino” sono diverse, per cui è necessario consultare la documentazione ufficiale per ulteriori informazioni. Questo documento di base non entrerà troppo nel dettaglio di questa parte degli RDBMS. +In alcuni sistemi di gestione di database relazionali, le operazioni corrispondenti di “recupero” (a volte nella documentazione si usa “recovery”) e “ripristino” sono diverse, per cui è necessario consultare la documentazione ufficiale per ulteriori informazioni. Per ulteriori informazioni consultare la documentazione ufficiale. Questo documento di base non entrerà troppo nel dettaglio di questa parte degli RDBMS. * Ripristino completo: Ripristino dei dati basato sul backup completo o sul “backup completo + backup incrementale” o sul “backup completo + backup differenziale”. * Ripristino selettivo: Ripristino dei dati basato su un backup selettivo (backup parziale). @@ -127,7 +127,7 @@ I comandi che utilizzeremo qui sono `tar` e `cpio`. Per informazioni sullo strum Questi comandi salvano in un formato proprietario e standardizzato. -**Replication**: Una tecnologia di backup che copia un insieme di dati da un'origine dati a un'altra o a più origini dati, principalmente suddivisa in **Replica Sincrona** e **Replica Asincrona**. Per gli amministratori di sistema alle prime armi, questa è una parte avanzata del backup, quindi questo documento di base non approfondirà questi contenuti. +**Replication**: Una tecnologia di backup che copia un insieme di dati da un'origine dati a un'altra o a più origini dati, principalmente suddivisa in **Replica Sincrona** e **Replica Asincrona**. Si tratta di una parte di backup avanzato per gli amministratori di sistema meno esperti, pertanto questo documento di base non approfondirà questi contenuti. ### Convenzione di denominazione @@ -542,7 +542,7 @@ Il comando `cpio` consente di salvare su più supporti successivi senza specific È possibile estrarre tutto o parte di un backup. -Non c'è alcuna opzione, a differenza del comando `tar`, per eseguire il backup e comprimere allo stesso tempo. Quindi è fatto in due passaggi: backup e compressione. +A differenza del comando `tar`, non esiste un'opzione per eseguire il backup e la compressione contemporaneamente. Quindi è fatto in due passaggi: backup e compressione. Per eseguire un backup con `cpio`, è necessario specificare un elenco di file di cui eseguire il backup. @@ -660,11 +660,11 @@ $ ls /backups/etc.A.cpio* find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz ``` -Non c'è alcuna opzione, a differenza del comando `tar`, per salvare e comprimere allo stesso tempo. Quindi è fatto in due passaggi: salvataggio e compressione. +A differenza del comando `tar`, non esiste un'opzione per salvare e comprimere contemporaneamente. Quindi, si procede in due fasi: salvataggio e compressione. -La sintassi del primo metodo è più facile da capire e ricordare, perché viene eseguita in due passaggi. +La sintassi del primo metodo è più facile da capire e ricordare perché si svolge in due fasi. -Per il primo metodo, il file di backup viene automaticamente rinominato dall'utilità `gzip` che aggiunge `.gz` alla fine del nome del file. Allo stesso modo l'utilità `bzip2` aggiunge automaticamente `.bz2`. +Con il primo metodo, il file di backup viene rinominato automaticamente dall'utilità `gzip`, che aggiunge `.gz` alla fine del nome del file. Allo stesso modo l'utilità `bzip2` aggiunge automaticamente `.bz2`. ### Leggere il contenuto di un backup @@ -685,7 +685,7 @@ cpio -tv tmp @@ -770,7 +770,7 @@ L'utilizzo della compressione al momento di un backup può avere una serie di in !!! Note "Nota" - È quindi meglio fare un backup e comprimerlo piuttosto che comprimerlo durante il backup. + Pertanto, è meglio eseguire un backup e comprimerlo piuttosto che comprimerlo durante il backup. ### Compressione con `gzip` @@ -814,7 +814,7 @@ usr.cpio.bz2 Al nome del file viene assegnata l'estensione `.bz2`. -La compressione con `bzip2` è migliore della compressione con `gzip` ma ci vuole più tempo per eseguirla. +La compressione con `bzip2` è migliore di quella con `gzip`, ma l'esecuzione richiede più tempo. ### Decompressione con `gunzip` diff --git a/docs/books/incus_server/08-snapshots.it.md b/docs/books/incus_server/08-snapshots.it.md index 4b84ee6a03..9b4a725aea 100644 --- a/docs/books/incus_server/08-snapshots.it.md +++ b/docs/books/incus_server/08-snapshots.it.md @@ -1,5 +1,5 @@ --- -title: 8 Istantanee del contenitore +title: 8 Container Snapshots author: Spencer Steven contributors: Ezequiel Bruni, Ganna Zhyrnova tested_with: 9.4 @@ -11,7 +11,7 @@ tags: In questo capitolo, i comandi devono essere eseguiti come utente non privilegiato (“incusadmin” se li avete seguiti dall'inizio di questo libro). -I container snapshot e un server snapshot (di cui si parlerà più avanti) sono gli aspetti più critici della gestione di un server Incus in produzione. Le istantanee garantiscono un ripristino rapido. È buona prassi usarli come misura salvavita quando si aggiorna il software principale che gira su un particolare container. Se durante l'aggiornamento accade qualcosa che interrompe l'applicazione, è sufficiente ripristinare lo snapshot per tornare operativi con pochi secondi di inattività. +I container snapshot e un server snapshot (di cui si parlerà più avanti) sono gli aspetti più critici della gestione di un server Incus in produzione. Le snapshot garantiscono un ripristino rapido. È buona prassi usarli come misura salvavita quando si aggiorna il software principale che gira su un particolare container. Se durante l'aggiornamento accade qualcosa che interrompe l'applicazione, è sufficiente ripristinare lo snapshot per tornare operativi con pochi secondi di inattività. L'autore ha utilizzato i container Incus per i server PowerDNS rivolti al pubblico e l'aggiornamento di queste applicazioni è diventato meno problematico, grazie alla creazione di snapshots prima di ogni aggiornamento. @@ -22,7 +22,7 @@ L'autore ha utilizzato i container Incus per i server PowerDNS rivolti al pubbli Iniziate ottenendo un'istantanea del container ubuntu-test con questo comando: ```bash -incus snapshot ubuntu-test ubuntu-test-1 +incus snapshot create ubuntu-test ubuntu-test-1 ``` Qui si nomina lo snapshot “ubuntu-test-1”, ma si può nominarlo in qualsiasi modo. Per assicurarsi di avere uno snapshot, eseguire un `incus info` del container: @@ -63,7 +63,7 @@ incus stop ubuntu-test Ripristino: ```bash -incus restore ubuntu-test ubuntu-test-1 +incus snapshot restore ubuntu-test ubuntu-test-1 ``` Avviare nuovamente il container: @@ -77,7 +77,7 @@ Se si ritorna al container e si controlla di nuovo, il “this_file.txt” creat Quando non si ha più bisogno di uno snapshot, è possibile cancellarlo: ```bash -incus delete ubuntu-test/ubuntu-test-1 +incus snapshot delete ubuntu-test ubuntu-test-1 ``` !!! warning "Attenzione" diff --git a/docs/books/incus_server/10-automating.it.md b/docs/books/incus_server/10-automating.it.md index 44a7544503..f2087d2512 100644 --- a/docs/books/incus_server/10-automating.it.md +++ b/docs/books/incus_server/10-automating.it.md @@ -1,5 +1,5 @@ --- -title: 10 Automatizzare +title: 10 Automazione delle Snapshot author: Spencer Steven contributors: Ezequiel Bruni, Ganna Zhyrnova tested_with: 9.4 @@ -13,7 +13,7 @@ Nel corso di questo capitolo, è necessario essere l'utente root o essere in gra L'automazione del processo di snapshot rende le cose molto più facili. -## Automatizzazione del Processo di Copia di Istantanee +## Automazione del Processo di Copia delle Snapshot Eseguire questa procedura su incus-primary. La prima cosa da fare è creare uno script che verrà eseguito da cron in /usr/local/sbin chiamato "refresh-containers" : diff --git a/docs/books/sed_awk_grep/4_awk_command.uk.md b/docs/books/sed_awk_grep/4_awk_command.uk.md index c2d2e781b9..93f0e13d08 100644 --- a/docs/books/sed_awk_grep/4_awk_command.uk.md +++ b/docs/books/sed_awk_grep/4_awk_command.uk.md @@ -1816,7 +1816,7 @@ False | command \\| getline [var] | Призначає результат "$0" або змінній "var" | | next | Зупиняє поточний вхідний запис і виконує наступні дії | | print | Друкує результат | -| printf | Дивись [тут](#printf) | +| printf | Перегляньте розділ для цієї команди в цьому документі | | system(cmd-line) | Виконує команду та повертає код стану. 0 означає, що команда була виконана успішно; не-0 означає, що виконання не вдалося | | print ... >> file | Перенаправлення виводу | | print ... \\| command | Друкує вихідні дані та використовує їх як вхідні дані для команди | diff --git a/docs/books/web_services/01-files-servers.it.md b/docs/books/web_services/01-files-servers.it.md new file mode 100644 index 0000000000..3a8d1f83b5 --- /dev/null +++ b/docs/books/web_services/01-files-servers.it.md @@ -0,0 +1,114 @@ +--- +author: null +contributors: null +title: Capitolo 1. Files Servers +tags: + - ftp + - sftp +--- + +!!! info "Informazione" + +``` +Il contenuto di questa pagina deve ancora essere scritto. +``` + + diff --git a/docs/books/web_services/022-web-servers-nginx.it.md b/docs/books/web_services/022-web-servers-nginx.it.md new file mode 100644 index 0000000000..81d489f4d7 --- /dev/null +++ b/docs/books/web_services/022-web-servers-nginx.it.md @@ -0,0 +1,281 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Part 2.2 Server Web Nginx +--- + +## Server web Nginx + +In questo capitolo, imparerete a conoscere il server web Nginx. + +**** + +**Obiettivi**: Imparerete a: + +:heavy_check_mark: installare e configurare Nginx + +:checkered_flag: **nginx**, **http** + +**Competenze**: :star: :star:\ +**Complessità**: :star: :star: + +**Tempo di lettura**: 15 minuti + +**** + +### Generalità + +**Nginx** è un **server web HTTP gratuito con licenza BSD**. È stato sviluppato per la prima volta in Russia nel 2002 da Igor Sysoev. Oltre alle funzioni standard di un server web, Nginx fornisce un **reverse proxy** per il protocollo **HTTP** e un proxy per i protocolli di messaggistica **POP** e **IMAP**. + +Lo sviluppo del server Nginx è una risposta al problema **C10K**, che supporta diecimila connessioni contemporanee (standard nel moderno web). Questa è una vera sfida per i server web. + +Il supporto commerciale è fornito da Nginx Inc. + +L'architettura interna del server consente **prestazioni molto elevate** con **basso consumo di memoria** rispetto al server web Apache. + +I moduli che completano le funzioni essenziali del kernel Nginx sono vincolati in fase di compilazione. Ciò significa che l'attivazione o la disattivazione non possono avvenire in modo dinamico. + +Un processo master controlla i processi del server, rendendo possibile **modificare la configurazione o aggiornare il software senza arrestare il servizio**. + +Nginx ha una quota di mercato significativa del 28% sui siti più trafficati, subito dopo Apache (41%). + +#### Caratteristiche + +Nginx offre le seguenti funzioni di base: + +- Hosting per pagine web statiche +- Index page generation automatico +- Reverse proxy accelerato con cache +- Bilanciamento del carico +- Tolleranza agli errori +- Supporto cache per FastCGI, uWSGI, SCGI e server cache Memcached +- Vari filtri per gzip, xslt, ssi, trasformazione delle immagini e altro ancora +- Supporto per SSL/TLS e SNI +- Supporto per HPPT/2 + +Altre funzionalità: + +- Hosting per nome o indirizzo IP +- Supporto del Keepalive delle connessioni client +- Gestione dei log: syslog, rotazione, buffer +- Riscrittura degli URI +- Controllo di accesso: via IP, password, ed altro +- Streaming FLV e MP4 + +### Installazione + +Nginx è disponibile direttamente dal repository di app stream e le versioni più recenti sono disponibili come modulo dnf. + +```bash +sudo dnf install nginx +sudo systemctl enable nginx --now +``` + +### Configurazione + +Il path del file di configurazione di Nginx è `/etc/nginx/nginx.conf`. + +Questo file di configurazione è un file di configurazione generale del server. Ossia le impostazioni hanno effetto sull'intero server. + +!!! NOTE "Nota" + +``` +La funzionalità del file .htaccess nota agli amministratori di Apache non esiste in Nginx! +``` + +Qui viene fornito il file \`nginx.conf', privato di tutti i commenti: + +```bash +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log; +pid /run/nginx.pid; +include /usr/share/nginx/modules/*.conf; +events { + worker_connections 1024; +} +http { + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 4096; + include /etc/nginx/mime.types; + default_type application/octet-stream; + include /etc/nginx/conf.d/*.conf; + server { + listen 80; + listen [::]:80; + server_name _; + root /usr/share/nginx/html; + include /etc/nginx/default.d/*.conf; + error_page 404 /404.html; + location = /404.html { + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + } + } +} +``` + +Linee guida per la configurazione di default: + +| Direttiva | Descrizione | +| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `user` | Definisce il proprietario del processo `user` e `group`. Se il gruppo non è specificato, viene utilizzato il gruppo con lo stesso nome dell'utente. | +| `worker_processes` | Definisce il numero di processi. Il valore ottimale dipende da molti fattori, come il numero di core della CPU e le specifiche del disco rigido. In caso di dubbio, la documentazione di Nginx suggerisce un valore iniziale equivalente al numero di core disponibili della CPU (il auto value cercherà di determinarlo). | +| `pid` | Definisce un file per memorizzare il valore PID. | +| `worker_connections` | Imposta il numero massimo di connessioni simultanee che un processo worker può aprire (verso il client e i server mandatari). | +| `tcp_nopush` | `tcp_nopush` è inseparabile dall'opzione sendfile. Viene utilizzato per ottimizzare la quantità di informazioni inviate simultaneamente. I pacchetti vengono inviati solo quando hanno raggiunto la loro dimensione massima. | +| `tcp_nodelay` | L'attivazione di `tcp_nodelay` forza l'invio immediato dei dati nel socket, indipendentemente dalla dimensione del pacchetto, che è l'opposto di ciò che fa `tcp_nopush`. | +| `sendfile` | Ottimizza l'invio di file statici (questa opzione non è necessaria per una configurazione proxy-inverse). Se sendfile è abilitato, Nginx si assicura che tutti i pacchetti siano riempiti prima di essere inviati al client (grazie a `tcp_nopush`). Quando arriva l'ultimo pacchetto, Nginx disabilita `tcp_nopush` e forza l'invio dei dati usando `tcp_nodelay`. | +| `keepalive_timeout` | Il tempo massimo prima di chiudere una connessione inattiva. | +| `types_hash_max_size` | Nginx mantiene tabelle hash contenenti informazioni statiche. Imposta la dimensione massima della tabella hash. | +| `include` | Include uno o più file che corrispondono al modello fornito nella configurazione. | +| `default_type` | MIME e' il type predefinito di una richiesta. | +| `ssl_protocols` | Versioni del protocollo TLS accettate. | +| `ssl_prefer_server_ciphers` | Preferisce la suite di cifratura del server alla suite di cifratura del client. | +| `access_log` | Configura i log di accesso (vedere il paragrafo “Gestione dei log”). | +| `error_log` | Configura i log degli errori (vedere il paragrafo “Gestione dei log”). | +| `gzip` | Il modulo ngx_http_gzip_module è un filtro che comprime i dati trasmessi in formato gzip. | +| `gzip_disable` | Disabilita gzip in base a una regular expression. | + +La struttura della configurazione di Nginx è: + +```text +# global directives + +events { + # worker configuration +} + +http { + # http service configuration + + # Configure the first server listening on port 80 + server { + listen 80 default_server; + listen [::]:80 default_server; + root /var/www/html; + index index.html index.htm; + server_name _; + location / { + try_files $uri $uri/ =404; + } + } +} + +mail { + # mail service configuration + +# global mail service directives + server { + # A first server listening on the pop protocol + listen localhost:110; + protocol pop3; + proxy on; + } + + + server { + # A second server listening on the imap protocol + listen localhost:143; + protocol imap; + proxy on; + } +} +``` + +### Configurazione HTTPS + +Per configurare un servizio HTTPS, è necessario aggiungere un server block o modificarne uno esistente. Un server block può essere in ascolto sia sulla porta 443 che sulla porta 80. + +Si può aggiungere questo blocco, ad esempio, al nuovo file `/etc/nginx/conf.d/default_https.conf`: + +```bash +server { + listen 443 ssl default_server; + ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 + ssl_certificate /path/to/cert.pem; + ssl_certificate_key /path/to/key.key; + root /var/www/html; + index index.html index.htm; + server_name _; + location / { + try_files $uri $uri/ =404; + } +} +``` + +oppure si può modificare il server predefinito per supportare HTTPS: + +```bash +server { + listen 80; + listen 443 ssl; + server_name _; + ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 + ssl_certificate /path/to/cert.pem; + ssl_certificate_key /path/to/key.key; + ... +} +``` + +### Gestione del log + +È possibile configurare la direttiva `error_log` per i log degli errori. + +La sintassi della direttiva `error_log` è: + +```bash +error_log file [level]; +``` + +Il primo parametro definisce un file per ricevere i log degli errori. + +Il secondo parametro determina il livello di log: debug, info, notice, warn, error, crit, alert o emerg (vedere il capitolo syslog della nostra guida all'amministrazione). + +La funzione di invio dei log a syslog avviene con il prefisso “syslog:”. + +```bash +access_log syslog:server=192.168.1.100:5514,tag=nginx debug; +``` + +### Nginx come server proxy + +La funzionalità di reverse proxy è compreso nel modulo `ngx_http_upstream_module`. Permette di definire gruppi di server che vengono poi chiamati dalle direttive `proxy_pass` o `fastcgi_pass`, `memcached_pass` e altro. + +Esempio di configurazione di base, che distribuisce il carico per 2/3 al primo server e per 1/3 al secondo application server: + +```bash + upstream frontservers { + server front1.rockylinux.lan:8080 weight=2; + server front2.rockylinux.lan:8080 weight=1; + } + + server { + location / { + proxy_pass http://docs.rockylinux.lan; + } + } +``` + +È possibile dichiarare i server come backup: + +```bash + upstream frontservers { + ... + server front3.rockylinux.lan:8080 backup; + server front4.rockylinux.lan:8080 backup; + } +``` + +La direttiva server accetta molti argomenti: + +- `max_fails=numberofattempts`: imposta il numero di tentativi di connessione che devono fallire durante il periodo di tempo definito dal parametro `fail_timeout` affinché il server sia considerato non disponibile. Il valore predefinito è 1; 0 disattiva la funzionalità. +- `fail_timeout=time`: imposta il tempo durante il quale un numero definito di connessioni causerà l'indisponibilità del server e imposta il periodo di tempo durante il quale il server sarà considerato non disponibile. Il valore predefinito è 10 secondi. diff --git a/docs/books/web_services/03-application-servers.it.md b/docs/books/web_services/03-application-servers.it.md new file mode 100644 index 0000000000..9b71931d45 --- /dev/null +++ b/docs/books/web_services/03-application-servers.it.md @@ -0,0 +1,647 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Capitolo 3. Server applicativi +tags: + - web + - php + - php-fpm + - application server + - dynamic language +--- + +## PHP e PHP-FPM + +In questo capitolo, si potranno apprendere le caratteristiche di PHP e PHP-FPM. + +**PHP** (**P**HP **H**ypertext **P**reprocessor) è un linguaggio di source scripting appositamente progettato per lo sviluppo di applicazioni web. Nel 2024, PHP rappresentava poco meno dell'80% delle pagine web generate nel mondo. PHP è open-source ed è il cuore dei più famosi CMS (WordPress, Drupal, Joomla!, Magento e altri). + +**PHP-FPM** (**F**astCGI **P**rocess **M**anager) è integrato in PHP dalla versione 5.3.3. La versione FastCGI di PHP offre ulteriori funzionalità. + +**** + +**Obiettivi**: si imparerà come: + +:heavy_check_mark: installare un application server PHP\ +:heavy_check_mark: configurare il pool PHP-FPM\ +:heavy_check_mark: ottimizzare un server di applicazioni PHP-FPM + +:checkered_flag: **PHP**, **PHP-FPM**, **Server applicativo** + +**Conoscenza**: :star: :star: :star:\ +**Complessità**: :star: :star: :star: + +**Tempo di lettura**: 30 minuti + +**** + +### Generalità + +**CGI** (**C**ommon **G**ateway **I**nterface) e **FastCGI** permettono la comunicazione tra il server web (Apache o Nginx) e un linguaggio di sviluppo (PHP, Python, Java): + +- Nel caso di **CGI**, ogni richiesta crea un **nuovo processo**, il che è meno efficiente in termini di prestazioni. +- **FastCGI** si affida a un **certo numero di processi** per trattare le richieste dei clienti. + +PHP-FPM, **oltre a prestazioni migliori**, porta: + +- La possibilità di un migliore **partizionamento delle applicazioni**: lancio di processi con uid/gid diversi, con file `php.ini` personalizzati, +- La gestione delle statistiche, +- Gestione del registro, +- Gestione dinamica dei processi e riavvio senza interruzione del servizio ('graceful'). + +!!! Note "Nota" + +``` +Poiché Apache ha un modulo PHP, php-fpm è più comunemente usato su un server Nginx. +``` + +### Scegliere una versione PHP + +Rocky Linux, come il suo upstream, offre molte versioni del linguaggio. Alcuni di essi hanno raggiunto la fine del loro ciclo di vita, ma vengono mantenuti per continuare a ospitare applicazioni storiche che non sono ancora compatibili con le nuove versioni di PHP. Fare riferimento alla pagina [versioni supportate](https://www.php.net/supported-versions.php) del sito php.net per scegliere una versione supportata. + +Per ottenere un elenco delle versioni disponibili, basta inserire il seguente comando: + +\=== "Elenco dei moduli PHP 9.3" + +```bash +$ sudo dnf module list php + +Rocky Linux 9 - AppStream +Name Stream Profiles Summary +php 8.1 [d] common [d], devel, minimal + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Il repository Remi offre versioni più recenti di PHP rispetto al repository Appstream, tra cui le versioni 8.2 e 8.3. + +Per installare il repository Remi, eseguire il seguente comando: + +```bash +sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm +``` + +Abilitare la repository Remi eseguendo il seguente comando: + +```bash +sudo dnf config-manager --set-enabled remi +``` + +È ora possibile attivare un modulo più recente (PHP 8.3) immettendo il seguente comando: + +```bash +sudo dnf module enable php:remi-8.3 +``` + +\=== "Elenco dei moduli PHP 8.9" + +```bash +$ sudo dnf module list php + +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +php 7.2 [d] common [d], devel, minimal PHP scripting language +php 7.3 common [d], devel, minimal PHP scripting language +php 7.4 common [d], devel, minimal PHP scripting language +php 8.0 common [d], devel, minimal PHP scripting language + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Rocky fornisce diversi moduli PHP dal suo repository AppStream. + +Noterete che la versione predefinita di Rocky 8.9 è la 7.2, che ha già raggiunto il suo limite di vita al momento in cui scriviamo. + +È possibile attivare un modulo più recente immettendo il seguente comando: + +```bash +sudo dnf module enable php:8.0 +============================================================================================== +Package Architecture Version Repository Size +============================================================================================== +Enabling module streams: +httpd 2.4 +nginx 1.14 +php 8.0 + +Transaction Summary +============================================================================================== + +Is this ok [y/N]: + +Transaction Summary +============================================================================================== + +Is this ok [y/N]: y +Complete! +``` + +Ora si può procedere all'installazione del motore PHP. + +### Installazione della PHP CGI mode + +Innanzitutto, installate e utilizzate PHP in CGI mode. Può funzionare solo con il server web Apache e il suo modulo `mod_php`. La sezione FastCGI di questo documento (php-fpm) spiega come integrare PHP in Nginx (ma anche in Apache). + +L'installazione di PHP è relativamente banale. Consiste nell'installare il pacchetto principale e i pochi moduli necessari. + +L'esempio seguente installa PHP con i moduli normalmente installati con esso. + +\=== "9.3 installare PHP" + +```bash +sudo dnf install php php-cli php-gd php-curl php-zip php-mbstring +``` + +Durante l'installazione, verrà richiesto di importare le chiavi GPG per i repository epel9 (Extra Packages for Enterprise Linux 9) e Remi. Immettere y per importare le chiavi: + +```bash +Extra Packages for Enterprise Linux 9 - x86_64 +Importing GPG key 0x3228467C: +Userid : "Fedora (epel9) " +Fingerprint: FF8A D134 4597 106E CE81 3B91 8A38 72BF 3228 467C +From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9 +Is this ok [y/N]: y +Key imported successfully +Remi's RPM repository for Enterprise Linux 9 - x86_64 +Importing GPG key 0x478F8947: +Userid : "Remi's RPM repository (https://rpms.remirepo.net/) " +Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947 +From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9 +Is this ok [y/N]: y +Key imported successfully +Running transaction check +Transaction check succeeded. +Running transaction test +Transaction test succeeded. + +Complete! +``` + +\=== "8.9 installare PHP" + +```bash +sudo dnf install php php-cli php-gd php-curl php-zip php-mbstring +``` + +È possibile verificare che la versione installata corrisponda a quella prevista: + +\=== "9.3 controllare la versione di PHP" + +```bash +$ php -v +PHP 8.3.2 (cli) (built: Jan 16 2024 13:46:41) (NTS gcc x86_64) +Copyright (c) The PHP Group +Zend Engine v4.3.2, Copyright (c) Zend Technologies +with Zend OPcache v8.3.2, Copyright (c), by Zend Technologies +``` + +\=== "8.9 controllare la versione di PHP" + +```bash +$ php -v +PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS ) +Copyright (c) The PHP Group +Zend Engine v3.4.0, Copyright (c) Zend Technologies +with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies +``` + +### Apache Integration + +Per servire pagine PHP in modalità CGI, è necessario installare il server Apache, configurarlo, attivarlo e avviarlo. + +- Installazione: + +```bash +sudo dnf install httpd +``` + +``` +attivazione: +``` + +```bash +sudo systemctl enable --now httpd +sudo systemctl status httpd +``` + +- Non dimenticate di configurare il firewall: + +```bash +sudo firewall-cmd --add-service=http --permanent +sudo firewall-cmd --reload +``` + +Il vhost predefinito dovrebbe funzionare subito. PHP fornisce una funzione `phpinfo()` che genera una tabella riassuntiva della sua configurazione. È utile per verificare se il PHP funziona bene. Tuttavia, fate attenzione a non lasciare tali file di prova sui vostri server. Rappresentano un enorme rischio per la sicurezza della vostra infrastruttura. + +Creare il file `/var/www/html/info.php` (`/var/www/html` è la cartella vhost della configurazione predefinita di Apache): + +```bash +< ?php +phpinfo(); +?> +``` + +Verificare con un browser web il corretto funzionamento del server accedendo alla pagina [http://your-server-ip/info.php](http://your-server-ip/info.php). + +!!! Warning "Attenzione" + +``` +Non lasciare il file `info.php` sul server! +``` + +### Installazione della CGI mode di PHP (PHP-FPM) + +Come già detto, ci sono molti vantaggi nel passare l'hosting web alla modalità PHP-FPM. + +L'installazione comporta solo il pacchetto php-fpm: + +```bash +sudo dnf install php-fpm +``` + +Poiché php-fpm è un servizio dal punto di vista del sistema, è necessario attivarlo e avviarlo: + +```bash +sudo systemctl enable --now php-fpm +sudo systemctl status php-fpm +``` + +#### Configurazione del CGI mode di PHP + +Il file di configurazione principale è `/etc/php-fpm.conf`. + +```bash +include=/etc/php-fpm.d/*.conf +[global] +pid = /run/php-fpm/php-fpm.pid +error_log = /var/log/php-fpm/error.log +daemonize = yes +``` + +!!! Note "Nota" + +``` +I file di configurazione di php-fpm sono ampiamente commentati. Andate a dare un'occhiata! +``` + +Come si può vedere, i file della cartella `/etc/php-fpm.d/` con estensione `.conf` sono sempre inclusi. + +Per impostazione predefinita, la dichiarazione di un pool di processi PHP chiamato `www` è presente in `/etc/php-fpm.d/www.conf`. + +```bash +[www] +user = apache +group = apache + +listen = /run/php-fpm/www.sock +listen.acl_users = apache,nginx +listen.allowed_clients = 127.0.0.1 + +pm = dynamic +pm.max_children = 50 +pm.start_servers = 5 +pm.min_spare_servers = 5 +pm.max_spare_servers = 35 + +slowlog = /var/log/php-fpm/www-slow.log + +php_admin_value[error_log] = /var/log/php-fpm/www-error.log +php_admin_flag[log_errors] = on +php_value[session.save_handler] = files +php_value[session.save_path] = /var/lib/php/session +php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache +``` + +| Istruzioni | Descrizione | +| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `[pool]` | Nome del pool di processi. Il file di configurazione può comprendere diversi pool di processi (il nome del pool tra parentesi inizia una nuova sezione). | +| `listen` | Definisce l'interfaccia di ascolto o il socket Unix utilizzato. | + +#### Configurazione del modo di accedere ai processi di php-fpm + +Esistono due modi per collegarsi. + +Con una `inet-interface` come: + +`listen = 127.0.0.1:9000`. + +O con un socket UNIX: + +`listen = /run/php-fpm/www.sock`. + +!!! Note "Nota" + +``` +L'uso di un socket quando il server web e il server PHP si trovano sulla stessa macchina elimina il livello TCP/IP e ottimizza le prestazioni. +``` + +Quando si lavora con un'interfaccia, è necessario configurare `listen.owner`, `listen.group`, `listen.mode` per specificare il proprietario, il gruppo di proprietari e i diritti del socket UNIX. **Attenzione:** Entrambi i server (web e PHP) devono avere i diritti di accesso al socket. + +Quando si lavora con un socket, è necessario configurare `listen.allowed_clients` per limitare l'accesso al server PHP a determinati indirizzi IP. + +Esempio: `listen.allowed_clients = 127.0.0.1` + +#### Configurazione statica o dinamica + +È possibile gestire i processi PHP-FPM in modo statico o dinamico. + +In modalità statica, `pm.max_children` imposta un limite al numero di processi child: + +```bash +pm = static +pm.max_children = 10 +``` + +Questa configurazione si avvia con 10 processi. + +In modalità dinamica, PHP-FPM avvia al massimo il numero di processi specificato dal valore` pm.max_children`. Avvia prima alcuni processi corrispondenti a `pm.start_servers`, mantenendo almeno il valore di `pm.min_spare_servers` dei processi inattivi e, al massimo, `pm.max_spare_servers` dei processi inattivi. + +Esempio: + +```bash +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 +``` + +PHP-FPM creerà un nuovo processo per sostituire quello che ha elaborato più richieste equivalenti a `pm.max_requests`. + +Per impostazione predefinita, il valore di `pm.max_requests` è 0, il che significa che i processi non vengono mai riciclati. L'opzione `pm.max_requests` può essere interessante per le applicazioni con leaks di memoria. + +Una terza modalità di funzionamento è la modalità `ondemand`. Questa modalità avvia un processo solo quando riceve una richiesta. Non è una modalità ottimale per i siti con forti influenze ed è riservata a esigenze specifiche (siti con richieste deboli, backend gestionale, ecc.). + +!!! Note "Nota" + +``` +La configurazione della modalità operativa di PHP-FPM è essenziale per garantire il funzionamento ottimale del server web. +``` + +#### Stato del processo + +Come Apache e il suo modulo `mod_status`, PHP-FPM offre una pagina che indica lo stato del processo. + +Per attivare la pagina, impostare il suo path nella directive `pm.status_path`: + +```bash +pm.status_path = /status +``` + +```bash +$ curl http://localhost/status_php +pool: www +process manager: dynamic +start time: 03/Dec/2021:14:00:00 +0100 +start since: 600 +accepted conn: 548 +listen queue: 0 +max listen queue: 15 +listen queue len: 128 +idle processes: 3 +active processes: 3 +total processes: 5 +max active processes: 5 +max children reached: 0 +slow requests: 0 +``` + +#### Registrazione di richieste lunghe + +La direttiva `slowlog` specifica il file che riceve le richieste di registrazione troppo lunghe (per esempio, il cui tempo supera il valore della direttiva `request_slowlog_timeout`). + +La posizione predefinita del file generato è `/var/log/php-fpm/www-slow.log`. + +```bash +request_slowlog_timeout = 5 +slowlog = /var/log/php-fpm/www-slow.log +``` + +Un valore di 0 per `request_slowlog_timeout` disabilita la registrazione. + +### Integrazione con NGinx + +L'impostazione predefinita di nginx include già la configurazione necessaria per far funzionare PHP con PHP-FPM. + +Il file di configurazione `fastcgi.conf` (o `fastcgi_params`) si trova sotto `/etc/nginx/`: + +```bash +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; +``` + +Per far sì che nginx elabori i file `.php`, aggiungere le seguenti directive al file di configurazione del sito: + +Se PHP-FPM è in ascolto sulla porta 9000: + +```bash +location ~ \.php$ { + include /etc/nginx/fastcgi_params; + fastcgi_pass 127.0.0.1:9000; +} +``` + +Se php-fpm è in ascolto su un socket UNIX: + +```bash +location ~ \.php$ { + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/run/php-fpm/www.sock; +} +``` + +### Integrazione con Apache + +La configurazione di apache per utilizzare un pool PHP è abbastanza semplice. È necessario utilizzare i moduli proxy con una directive `ProxyPassMatch`, per esempio: + +```bash + + ServerName web.rockylinux.org + DocumentRoot "/var/www/html/current/public" + + + AllowOverride All + Options -Indexes +FollowSymLinks + Require all granted + + ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000/var/www/html/current/public" + + + +``` + +### Configurazione consistente dei pool PHP + +L'ottimizzazione del numero di richieste servite e l'analisi della memoria utilizzata dagli script PHP sono necessarie per massimizzare il numero di thread lanciati. + +Prima di tutto, è necessario conoscere la quantità media di memoria utilizzata da un processo PHP con il comando: + +```bash +while true; do ps --no-headers -o "rss,cmd" -C php-fpm | grep "pool www" | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }' >> avg_php_proc; sleep 60; done +``` + +Questo vi darà un'idea abbastanza precisa dell'ingombro medio della memoria di un processo PHP su questo server. + +Il resto di questo documento comporta un ingombro di memoria di 120 MB per processo a pieno carico. + +Su un server con 8 Gb di RAM, mantenendo 1 Gb per il sistema e 1 Gb per la OPCache (si veda il resto di questo documento), rimangono 6 Gb per elaborare le richieste PHP dei client. + +Si può concludere che questo server può accettare al massimo **50 thread** `((6*1024) / 120)`. + +Una configurazione modello di `php-fpm` specifica per questo caso d'uso è: + +```bash +pm = dynamic +pm.max_children = 50 +pm.start_servers = 12 +pm.min_spare_servers = 12 +pm.max_spare_servers = 36 +pm.max_requests = 500 +``` + +con: + +- `pm.start_servers` = 25% di `max_children` +- `pm.min_spare_servers` = 25% di `max_children` +- `pm.max_spare_servers` = 75% di `max_children` + +### Configurazione di Opcache + +La `opcache` (Optimizer Plus Cache) è il primo livello di cache su cui si può intervenire. + +Mantiene gli script PHP compilati in memoria, il che ha un forte impatto sull'esecuzione delle pagine web (elimina la lettura su disco degli script + il tempo di compilazione). + +Per configurarlo, è necessario lavorare su: + +- La dimensione della memoria dedicata alla opcache in base all'hit ratio, configurandola correttamente +- Il numero di script PHP da memorizzare nella cache (numero di chiavi + numero massimo di script) +- Il numero di stringhe da mettere in cache + +Per installarla: + +```bash +sudo dnf install php-opcache +``` + +Per configurarla, modificare il file di configurazione `/etc/php.d/10-opcache.ini`: + +```bash +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=4000 +``` + +Dove: + +- `opcache.memory_consumption` corrisponde alla quantità di memoria necessaria per l'opcache (aumentarla fino a ottenere un rapporto di hit corretto). +- `opcache.interned_strings_buffer` è la quantità di stringhe da mettere in cache. +- `opcache.max_accelerated_files` è vicino al risultato del comando `find ./ -iname “*.php”|wc -l`. + +Per configurare l'opcache, fare riferimento a una pagina `info.php` (compresa la `phpinfo();`) (si vedano, per esempio, i valori di `Cached scripts` e `Cached strings`). + +!!! Note "Nota" + +``` +A ogni nuova distribuzione di nuovo codice, sarà necessario svuotare la opcache (ad esempio riavviando il processo php-fpm). +``` + +!!! Note "Nota" + +``` +Non sottovalutate l'aumento di velocità che si può ottenere impostando e configurando correttamente l'opcache. +``` + + diff --git a/docs/books/web_services/04-database-servers.it.md b/docs/books/web_services/04-database-servers.it.md new file mode 100644 index 0000000000..40eb2f6d87 --- /dev/null +++ b/docs/books/web_services/04-database-servers.it.md @@ -0,0 +1,11 @@ +--- +author: null +contributors: null +title: Capitolo 4. Server Database +--- + +!!! info "Informazione" + +``` +È necessario scrivere un'introduzione sui server di database relazionali. +``` diff --git a/docs/books/web_services/041-database-servers-mariadb.it.md b/docs/books/web_services/041-database-servers-mariadb.it.md new file mode 100644 index 0000000000..0e830479b8 --- /dev/null +++ b/docs/books/web_services/041-database-servers-mariadb.it.md @@ -0,0 +1,894 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Part 4.1 MariaDB Database server +tags: + - mariadb + - mysql + - database + - rdbms +--- + +MySQL, MariaDB e PostgreSQL sono RDBMS (Relational DataBase Management System) open-source. + +## MariaDB e MySQL + +In questo capitolo, imparerete a conoscere gli RDBMS MariaDB e MySQL. + +**** + +**Obiettivi**: si imparerà a: + +:heavy_check_mark: installare, configurare e proteggere il server MariaDB e il server MySQL;\ +:heavy_check_mark: eseguire alcune azioni amministrative su database e utenti. + +:checkered_flag: **RDBMS**, **database**, **MariaDB**, **MySQL** + +**Conoscenza**: :star: :star: :star:\ +**Complessità**: :star: :star: :star: + +**Tempo di lettura**: 30 minuti + +**** + +### Generalità + +MySQL è stato sviluppato da Michael “Monty” Widenius (un informatico finlandese), che ha fondato MySQL AB nel 1995. MySQL AB è stata acquisita da SUN nel 2008, che a sua volta è stata acquisita da Oracle nel 2009. Oracle è ancora proprietaria del software MySQL e lo distribuisce con una doppia licenza GPL e proprietaria. + +Nel 2009, Michael Widenius ha lasciato SUN, ha fondato Monty Program AB e ha avviato lo sviluppo del suo fork comunitario di MySQL: MariaDB sotto licenza GPL. La MariaDB Foundation governa il progetto e garantisce che rimanga libero. + +Non passò molto tempo prima che la maggior parte delle distribuzioni Linux offrisse pacchetti MariaDB al posto di quelli MySQL, e anche account importanti come Wikipedia e Google adottarono il fork della comunità. + +MySQL e MariaDB sono tra i RDBMS più utilizzati al mondo (a livello professionale e dal grande pubblico), in particolare per le applicazioni web (**LAMP**: Linux + Apache + Mysql-MariaDB + Php). + +I principali concorrenti di Mysql-MariaDB sono: + +- PostgreSQL, +- OracleDB, +- Microsoft SQL Server. + +I servizi di database sono multi-thread e multi-utente, funzionano sulla maggior parte dei sistemi operativi (Linux, Unix, BSD, Mac OSx, Windows) e sono accessibili da molti linguaggi di programmazione (PHP, Java, Python, C, C++, Perl e altri). + +Viene offerto il supporto per diversi engines, consentendo l'assegnazione di engines diversi a tabelle diverse all'interno dello stesso database, a seconda delle esigenze: + +MyISAM : il più semplice, ma non supporta le transazioni o le chiavi esterne. È un engine sequenziale indicizzato. MyISAM è ora abbandonato. + +InnoDB : gestisce l'integrità della tabella (chiavi esterne e transazioni), ma occupa più spazio su disco. Questo è il motore predefinito dalla versione 5.6 di MySQL. È un motore transazionale. + +Memory +: le tabelle sono salvate in memoria. + +Archive +: La compressione dei dati all'inserimento fa risparmiare spazio su disco, ma rallenta le query di ricerca (cold data). + +Si tratta di adottare un motore in base alle esigenze: Archive per la memorizzazione dei log, Memory per i dati temporanei e così via. + +MariaDB/MySQL utilizza la porta 3306/TCP per la comunicazione di rete. + +Questo capitolo tratterà questa versione, poiché la versione predefinita fornita con Rocky è la versione comunitaria di MariaDB del database. Vengono trattate in modo specifico solo le differenze tra MySQL e MariaDB. + +### Installazione + +Usare il comando `dnf` per installare il pacchetto `mariadb-server`: + +```bash +sudo dnf install -y mariadb-server +``` + +Per impostazione predefinita, la versione installata su un Rocky 9 è la 10.5. + +Attivare il servizio all'avvio e avviarlo: + +```bash +sudo systemctl enable mariadb --now +``` + +È possibile verificare lo stato del servizio `mariadb`: + +```bash +sudo systemctl status mariadb +``` + +Per installare una versione più recente, è necessario utilizzare i moduli `dnf`: + +```bash +$ sudo dnf module list mariadb +Last metadata expiration check: 0:00:09 ago on Thu Jun 20 11:39:10 2024. +Rocky Linux 9 - AppStream +Name Stream Profiles Summary +mariadb 10.11 client, galera, server [d] MariaDB Module + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Se non si è ancora installato il server mariadb, sarà sufficiente attivare la versione del modulo desiderata: + +```bash +$ sudo dnf module enable mariadb:10.11 +Last metadata expiration check: 0:02:23 ago on Thu Jun 20 11:39:10 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Enabling module streams: + mariadb 10.11 + +Transaction Summary +============================================================================================================================================= +Is this ok [y/N]: y +Complete! +``` + +Ora è possibile installare il pacchetto. La versione desiderata verrà installata automaticamente: + +```bash +sudo dnf install -y mariadb-server +``` + +#### Informazioni sugli utenti predefiniti + +Si prega di notare i log forniti da mariadb al primo avvio (`/var/log/messages`): + +```text +mariadb-prepare-db-dir[6560]: Initializing MariaDB database +mariadb-prepare-db-dir[6599]: Two all-privilege accounts were created. +mariadb-prepare-db-dir[6599]: One is root@localhost, it has no password, but you need to +mariadb-prepare-db-dir[6599]: be system 'root' user to connect. Use, for example, sudo mysql +mariadb-prepare-db-dir[6599]: The second is mysql@localhost, it has no password either, but +mariadb-prepare-db-dir[6599]: you need to be the system 'mysql' user to connect. +mariadb-prepare-db-dir[6599]: After connecting you can set the password, if you would need to be +mariadb-prepare-db-dir[6599]: able to connect as any of these users with a password and without sudo +``` + +### Configurazione + +I file di configurazione sono `/etc/my.cnf` e `/etc/my.cnf.d/`. + +Alcune importanti opzioni predefinite sono state impostate in `/etc/my.cnf.d/mariadb-server.cnf`: + +```text +[server] + +[mysqld] +datadir=/var/lib/mysql +socket=/var/lib/mysql/mysql.sock +log-error=/var/log/mariadb/mariadb.log +pid-file=/run/mariadb/mariadb.pid +... +``` + +Come si può vedere, i dati si trovano in `/var/lib/mysql` per impostazione predefinita. Questa cartella può richiedere molto spazio di archiviazione e aumenti di volume ricorrenti. È quindi consigliabile montare questa cartella su una partizione dedicata. + +### Sicurezza + +MariaDB e Mysql includono uno script che aiuta a proteggere il server. Rimuove ad esempio i login di root remoti e gli utenti campione, le opzioni predefinite meno sicure. + +Utilizzare `mariadb-secure-installation` e proteggere il server: + +```bash +sudo mariadb-secure-installation +``` + +Lo script chiederà di fornire una password per l'utente root. + +!!! NOTE "Nota" + +```` +The `mysql_secure_installation` command is now a symlink to the `mariadb-secure-installation` command: + +```bash +$ ll /usr/bin/mysql_secure_installation +lrwxrwxrwx. 1 root root 27 Oct 12 2023 /usr/bin/mysql_secure_installation -> mariadb-secure-installation +``` +```` + +Se fornire una password ogni volta che si devono usare i comandi di mariadb è un problema, si può impostare un file `~/.my.cnf` con le proprie credenziali, che sarà usato di default da mariadb per connettersi al server. + +```bash +[client] +user="root" +password="#######" +``` + +Assicurarsi che le autorizzazioni siano abbastanza restrittive da consentire l'accesso solo all'utente corrente: + +```bash +chmod 600 ~/.my.cnf +``` + +!!! WARNING "Attenzione" + +``` +Questo non è il modo migliore. Esiste un'altra soluzione più sicura della memorizzazione di una password in testo normale. A partire da MySQL 5.6.6, è ora possibile memorizzare le credenziali di accesso in un `.mylogin.cnf` criptato, grazie al comando `mysql_config_editor`. +``` + +Se il server è dotato di un firewall (il che è una buona cosa), potreste prendere in considerazione la possibilità di aprirlo, ma solo se avete bisogno che il vostro servizio sia accessibile dall'esterno. + +```bash +sudo firewall-cmd --zone=public --add-service=mysql +sudo firewall-cmd --reload +``` + +!!! NOTE "Nota" + +``` +La migliore sicurezza consiste nel non aprire il server del database al mondo esterno (se il server delle applicazioni è ospitato sullo stesso server) o nel limitare l'accesso solo agli IP autorizzati. +``` + +### Amministrazione + +#### Il comando `mariadb` + +Il comando `mariadb` è una semplice shell SQL che supporta l'uso interattivo e non interattivo. + +```bash +mysql -u user -p [base] +``` + +| Opzione | Informazione | +| --------- | ------------------------------------------------------------ | +| `-u user` | Fornisce un nome utente con cui connettersi. | +| `-p` | Richiede la password. | +| `base` | Il nome del database al quale collegarsi. | + +!!! NOTE "Nota" + +```` +The `mysql` command is now a symlink to the `mariadb` command: + +```bash +$ ll /usr/bin/mysql +lrwxrwxrwx. 1 root root 7 Oct 12 2023 /usr/bin/mysql -> mariadb +``` +```` + +Esempio: + +```bash +$ sudo mariadb -u root +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 15 +Server version: 10.5.22-MariaDB MariaDB Server + +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 | ++--------------------+ +3 rows in set (0.003 sec) +``` + +#### Il comando `mariadb-admin` + +Il comando `mariadb-admin` è un client per amministrare un server MariaDB. + +```bash +mariadb-admin -u user -p command +``` + +| Opzione | Informazione | +| --------- | ------------------------------------------------------------ | +| `-u user` | Fornisce un nome utente con cui connettersi. | +| `-p` | Richiede la password. | +| `command` | Un comando da eseguire. | + +`mariadb-admin` fornisce diversi comandi come `version`, `variables`, `stop-slave` o `start-slave`, `create databasename` e così via. + +Esempio: + +```bash +mariadb-admin -u root -p version +``` + +!!! NOTE "Nota" + +```` +The `mysqladmin` command is now a symlink to the `mariadb-admin` command: + +```bash +$ ll /usr/bin/mysqladmin +lrwxrwxrwx. 1 root root 13 Oct 12 2023 /usr/bin/mysqladmin -> mariadb-admin +``` +```` + +### Informazioni sui logs + +MariaDB fornisce diversi logs: + +- **Log di errore**: Contiene i messaggi generati all'avvio e all'arresto del servizio e gli eventi importanti (avvisi ed errori). +- **Log binary**: Questo registro (in formato binario) registra tutte le azioni che modificano la struttura o i dati del database. Se è necessario ripristinare un database, è necessario ripristinare il backup E riprodurre il registro binario per ripristinare lo stato del database prima dell'arresto anomalo. +- **Log delle query**: Tutte le richieste dei client sono registrate qui. +- **Registro delle query slow**: Le query slow, cioè quelle che richiedono più tempo per essere eseguite, vengono registrate separatamente in questo registro. Esaminando questo file, è possibile adottare misure per ridurre il tempo di esecuzione (ad esempio, impostando indici o modificando l'applicazione client). + +Ad eccezione del log binary, questi log sono in formato testo e possono essere utilizzati direttamente! + +Per abilitare la registrazione delle long query, modificare il file di configurazione `my.cnf` aggiungendo le seguenti righe: + +```bash +slow_query_log = 1 +slow_query_log_file = /var/log/mysql/mysql-slow.log +long_query_time = 2 +``` + +Il valore minimo della variabile `long_query_time` è 0 e il valore predefinito è `10` secondi. + +Riavviare il servizio per rendere effettive le modifiche. + +Una volta che il file di log è pieno, è possibile analizzarlo con il comando `mariadb-dumpslow`. + +```bash +mariadb-dumpslow [options] [log_file ...] +``` + +| Opzione | Informazione | +| -------------- | ------------------------------------------------- | +| `-t n` | Visualizza solo le prime n query. | +| `-s sort_type` | Ordina per numero di query. | +| `-r` | Inverte la lista dei risultati. | + +I tipi di ordinamento possono essere : + +| Opzione | Informazione | +| ---------- | --------------------------------------------------------------------------------------------------------------- | +| `c` | in base al numero di richieste. | +| `t` o `at` | in base al tempo di esecuzione o al tempo medio di esecuzione (a per media). | +| `l` o `al` | in base al tempo di blocco o alla sua media. | +| `r` o `aR` | in funzione del numero di righe restituite o della sua media. | + +### Indicazioni sul backup + +Come per qualsiasi RDBMS, il backup di un database viene eseguito mentre la modifica dei dati è offline. È possibile farlo nel modo seguente: + +- interrompere il servizio, noto come backup offline; +- mentre il servizio funziona, bloccando temporaneamente gli aggiornamenti (sospendendo tutte le modifiche). Questo è un backup online. +- utilizzando un'istantanea del file system LVM, consentendo il backup dei dati con un file system "a freddo". + +Il formato del backup può essere un file ASCII (testo), che rappresenta lo stato del database e i suoi dati sotto forma di comandi SQL, oppure un file binario corrispondente ai file di archiviazione MySQL. + +Mentre è possibile eseguire il backup di un file binario utilizzando utility comuni come tar o cpio, un file ASCII richiede un'utility come `mariadb-dump`. + +Il comando `mariadb-dump` può eseguire un dump del database. + +Durante il processo, l'accesso ai dati è bloccato. + +```bash +mariadb-dump -u root -p DATABASE_NAME > backup.sql +``` + +!!! NOTE "Nota" + +``` +Non dimenticare che dopo il ripristino di un backup completo, il ripristino dei file binari (binlog) completa la ricostituzione dei dati. +``` + +Il file risultante è utilizzabile per ripristinare i dati del database. Il database deve ancora esistere, oppure deve essere stato ricreato in precedenza!: + +```bash +mariadb -u root -p DATABASE_NAME < backup.sql +``` + +### Strumenti Grafici + +Esistono strumenti grafici per facilitare l'amministrazione e la gestione dei dati del database. Ecco qui alcuni esempi: + +- [DBeaver](https://dbeaver.io/) + +### Workshop + +In questo workshop, si installerà, configurerà e metterà in protezione il vostro server MariaDB. + +#### Task 1: Installazione + +Installare il package MariaDB-server: + +```bash +$ sudo dnf install mariadb-server +Last metadata expiration check: 0:10:05 ago on Thu Jun 20 11:26:03 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Installing: + mariadb-server x86_64 3:10.5.22-1.el9_2 appstream 9.6 M +Installing dependencies: +... +``` + +L'installazione aggiunge un utente `mysql` al sistema, con `/var/lib/mysql` come home directory: + +```bash +$ cat /etc/passwd +... +mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin +... +``` + +Attivare e avviare il servizio con il seguente comando: + +```bash +$ sudo systemctl enable mariadb --now +Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service. +``` + +Controllare l'installazione: + +```bash +$ sudo systemctl status mariadb +● mariadb.service - MariaDB 10.5 database server + Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled) + Active: active (running) since Thu 2024-06-20 11:48:56 CEST; 1min 27s ago + Docs: man:mariadbd(8) + https://mariadb.com/kb/en/library/systemd/ + Process: 6538 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS) + Process: 6560 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS) + Process: 6658 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS) + Main PID: 6643 (mariadbd) + Status: "Taking your SQL requests now..." + Tasks: 9 (limit: 11110) + Memory: 79.5M + CPU: 1.606s + CGroup: /system.slice/mariadb.service + └─6643 /usr/libexec/mariadbd --basedir=/usr + +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: The second is mysql@localhost, it has no password either, but +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: you need to be the system 'mysql' user to connect. +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: After connecting you can set the password, if you would need to be +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: able to connect as any of these users with a password and without sudo +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: See the MariaDB Knowledgebase at https://mariadb.com/kb +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: Please report any problems at https://mariadb.org/jira +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: The latest information about MariaDB is available at https://mariadb.org>Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: Consider joining MariaDB's strong and vibrant community: +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: https://mariadb.org/get-involved/ +Jun 20 11:48:56 localhost.localdomain systemd[1]: Started MariaDB 10.5 database server. +``` + +Provare a connettersi al server: + +```bash +$ sudo mariadb +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 9 +Server version: 10.5.22-MariaDB MariaDB Server + +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 | ++--------------------+ +3 rows in set (0.001 sec) + +MariaDB [(none)]> exit +Bye +``` + +```bash +$ sudo mariadb-admin version +mysqladmin Ver 9.1 Distrib 10.5.22-MariaDB, for Linux on x86_64 +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Server version 10.5.22-MariaDB +Protocol version 10 +Connection Localhost via UNIX socket +UNIX socket /var/lib/mysql/mysql.sock +Uptime: 7 min 24 sec + +Threads: 1 Questions: 9 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.020 +``` + +Come si può vedere, l'utente \`root' non ha bisogno di fornire una password. Lo si correggerà durante il prossimo task. + +#### Task 2: Proteggere il server + +Lanciare `mariadb-secure-installation` e seguire le istruzioni: + +```bash +$ sudo mariadb-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] y +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] y +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! + +No identifier (key) + +``` + +Provare a connettersi nuovamente al server con e senza password: + +```bash +$ mariadb -u root +ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) + +$ mariadb -u root -p +Enter password: +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 4 +Server version: 10.5.22-MariaDB MariaDB Server + +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)]> +``` + +Configurare il firewall: + +```bash +sudo firewall-cmd --zone=public --add-service=mysql --permanent +sudo firewall-cmd --reload +``` + +#### Task 3: Testare l'installazione + +Verificare l'installazione: + +```bash +$ mysqladmin -u root -p version +Enter password: +mysqladmin Ver 9.1 Distrib 10.5.22-MariaDB, for Linux on x86_64 +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Server version 10.5.22-MariaDB +Protocol version 10 +Connection Localhost via UNIX socket +UNIX socket /var/lib/mysql/mysql.sock +Uptime: 29 min 18 sec + +Threads: 1 Questions: 35 Slow queries: 0 Opens: 20 Open tables: 13 Queries per second avg: 0.019 +``` + +Il parametro `version` fornisce le informazioni sul server. + +#### Task 4: Creare un nuovo database ed un user + +Creare un nuovo database: + +```sql +MariaDB [(none)]> create database NEW_DATABASE_NAME; +``` + +Creare un nuovo utente e dargli tutti i diritti su tutte le tabelle del database: + +```sql +MariaDB [(none)]> grant all privileges on NEW_DATABASE_NAME.* TO 'NEW_USER_NAME'@'localhost' identified by 'PASSWORD'; +``` + +Sostituire `localhost` con `%` se si vuole garantire l'accesso da ogni luogo, oppure sostituire per indirizzo IP, se possibile. + +È sempre possibile limitare i privilegi concessi. Esistono diversi tipi di autorizzazioni da offrire agli utenti: + +- **SELECT**: leggere i dati +- **USAGE**: autorizzazione a connettersi al server (fornita di default quando viene creato un nuovo utente) +- **INSERT**: aggiunge nuove tuple a una tabella. +- **UPDATE**: modifica delle tuple esistenti +- **DELETE**: cancella le tuples +- **CREATE**: crea nuove tabelle o database +- **DROP**: cancella tabelle o database esistenti +- **ALL PRIVILEGES**: tutti i diritti +- **GRANT OPTION**: fornire o rimuovere diritti ad altri utenti + +Non dimenticate di riavviare e applicare i nuovi diritti: + +```sql +MariaDB [(none)]> flush privileges; +``` + +Verifica: + +```bash +$ mariadb -u NEW_USER_NAME -p +Enter password: +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 8 +Server version: 10.5.22-MariaDB MariaDB Server + +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 | ++--------------------+ +| NEW_DATABASE_NAME | +| information_schema | ++--------------------+ +2 rows in set (0.001 sec) +``` + +Aggiungete i dati di esempio nel vostro database: + +```bash +$ mariadb -u NEW_USER_NAME -p NEW_DATABASE_NAME +MariaDB [NEW_DATABASE_NAME]> CREATE TABLE users( + id INT NOT NULL AUTO_INCREMENT, + first_name VARCHAR(30) NOT NULL, + last_name VARCHAR(30) NOT NULL, + age INT DEFAULT NULL, + PRIMARY KEY (id)); +Query OK, 0 rows affected (0.017 sec) + +MariaDB [NEW_DATABASE_NAME]> INSERT INTO users (first_name, last_name, age) VALUES ("Antoine", "Le Morvan", 44); +Query OK, 1 row affected (0.004 sec) +``` + +#### Task 5: Creare un utente remoto + +In questa attività si creerà un nuovo utente, si concederà l'accesso da remoto e si testerà la connessione con tale utente. + +```bash +MariaDB [(none)]> grant all privileges on NEW_DATABASE_NAME.* TO 'NEW_USER_NAME'@'%' identified by 'PASSWORD'; +Query OK, 0 rows affected (0.005 sec) + +MariaDB [(none)]> flush privileges; +Query OK, 0 rows affected (0.004 sec) +``` + +Utilizzare questo utente e l'opzione \`-h' per connettersi da remoto al server: + +```bash +$ mariadb -h YOUR_SERVER_IP -u NEW_USER_NAME -p NEW_DATABASE_NAME +Enter password: +... + +MariaDB [NEW_DATABASE_NAME]> +``` + +#### Task 6: Eseguire un upgrade + +Abilitare il mobulo richiesto: + +```bash +$ sudo dnf module enable mariadb:10.11 +[sudo] password for antoine: +Last metadata expiration check: 2:00:16 ago on Thu Jun 20 11:50:27 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +=============================================================================================================================================Enabling module streams: + mariadb 10.11 + +Transaction Summary +============================================================================================================================================= +Is this ok [y/N]: y +Complete! +``` + +Aggiornare i packages: + +```bash +$ sudo dnf update mariadb +Last metadata expiration check: 2:00:28 ago on Thu Jun 20 11:50:27 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Upgrading: + mariadb x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 1.7 M + mariadb-backup x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 6.7 M + mariadb-common x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 28 k + mariadb-errmsg x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 254 k + mariadb-gssapi-server x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 15 k + mariadb-server x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 10 M + mariadb-server-utils x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 261 k + +Transaction Summary +============================================================================================================================================= +Upgrade 7 Packages + +Total download size: 19 M +Is this ok [y/N]: y +Downloading Packages: +(1/7): mariadb-gssapi-server-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 99 kB/s | 15 kB 00:00 +(2/7): mariadb-server-utils-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 1.1 MB/s | 261 kB 00:00 +(3/7): mariadb-errmsg-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 2.5 MB/s | 254 kB 00:00 +(4/7): mariadb-common-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 797 kB/s | 28 kB 00:00 +(5/7): mariadb-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 5.7 MB/s | 1.7 MB 00:00 +(6/7): mariadb-server-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 9.5 MB/s | 10 MB 00:01 +(7/7): mariadb-backup-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 7.7 MB/s | 6.7 MB 00:00 +--------------------------------------------------------------------------------------------------------------------------------------------- +Total 13 MB/s | 19 MB 00:01 +Running transaction check +Transaction check succeeded. +Running transaction test +Transaction test succeeded. +Running transaction + +... + +Complete! +``` + +I database ora devono essere aggiornati (controllare \`/var/log/messages' per i problemi del servizio): + +```text +mariadb-check-upgrade[8832]: The datadir located at /var/lib/mysql needs to be upgraded using 'mariadb-upgrade' tool. This can be done using the following steps: +mariadb-check-upgrade[8832]: 1. Back-up your data before with 'mariadb-upgrade' +mariadb-check-upgrade[8832]: 2. Start the database daemon using 'systemctl start mariadb.service' +mariadb-check-upgrade[8832]: 3. Run 'mariadb-upgrade' with a database user that has sufficient privileges +mariadb-check-upgrade[8832]: Read more about 'mariadb-upgrade' usage at: +mariadb-check-upgrade[8832]: https://mariadb.com/kb/en/mysql_upgrade/ +``` + +Non dimenticate di eseguire lo script di aggiornamento fornito da MariaDB: + +```bash +sudo mariadb-upgrade +Major version upgrade detected from 10.5.22-MariaDB to 10.11.6-MariaDB. Check required! +Phase 1/8: Checking and upgrading mysql database +Processing databases +mysql +mysql.column_stats OK +mysql.columns_priv OK +mysql.db OK +... +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views +mysql.user OK +... +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables +Processing databases +NEW_DATABASE_NAME +information_schema +performance_schema +sys +sys.sys_config OK +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' +OK +``` + +#### Task 6: Eseguire un dump + +Il comando `mariadb-dump` può eseguire un dump del database. + +```bash +mariadb-dump -u root -p NEW_DATABASE_NAME > backup.sql +``` + +Verifica: + +```bash +cat backup.sql +-- MariaDB dump 10.19 Distrib 10.11.6-MariaDB, for Linux (x86_64) +-- +-- Host: localhost Database: NEW_DATABASE_NAME +-- ------------------------------------------------------ +-- Server version 10.11.6-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +... + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(30) NOT NULL, + `last_name` varchar(30) NOT NULL, + `age` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `users` +-- + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` VALUES +(1,'Antoine','Le Morvan',44); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +... +-- Dump completed on 2024-06-20 14:32:41 +``` + +### Verificare le proprie Conoscenze + +:heavy_check_mark: Quale versione di database è installata di default? + +- [ ] MySQL 5.5 +- [ ] MariaDB 10.5 +- [ ] MariaDB 11.11 +- [ ] Mysql 8 + +:heavy_check_mark: Quale di questi comandi si utilizza per applicare le modifiche sui diritti? + +- [ ] flush rights +- [ ] flush privileges +- [ ] mariadb reload +- [ ] apply + +### Conclusione + +In questo capitolo è stato installato e protetto un server di database MariaDB e sono stati creati un database e un utente dedicato. + +Queste competenze sono un prerequisito per l'amministrazione dei database. + +Nella prossima sezione vedremo come installare il database MySQL invece del fork di MariaDB. diff --git a/docs/books/web_services/07-high-availability.it.md b/docs/books/web_services/07-high-availability.it.md new file mode 100644 index 0000000000..d1bca5dbcb --- /dev/null +++ b/docs/books/web_services/07-high-availability.it.md @@ -0,0 +1,886 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Capitolo 7. High availability +tags: + - clustering + - ha + - high availability + - pcs + - pacemaker +--- + +## Clustering su Linux + +> **High availability** è un termine spesso usato in IT, in relazione all'architettura di un sistema o di un servizio, per indicare il fatto che questa architettura o questo servizio hanno un tasso di disponibilità adeguato. ~ wikipedia + +Questa availability è una misura di prestazione espressa come percentuale ottenuta dal rapporto **tempo Operativo** / **tempo operativo totale desiderato**. + +| Disponibilità | Downtime annuale | +| ------------- | -------------------------- | +| 90% | 876 ore | +| 95% | 438 ore | +| 99% | 87 ore e 36 minuti | +| 99,9% | 8 ore 45 minuti 36 secondi | +| 99,99% | 52 minuti e 33 secondi | +| 99,999% | 5 minuti e 15 secondi | +| 99,9999% | 31,68 secondi | + +Per "High Availability" (**HA**) si intendono tutte le misure adottate per garantire la massima disponibilità possibile di un servizio, ossia il corretto funzionamento 24 ore al giorno. + +### Panoramica + +Un cluster è un “cluster di computer”, un gruppo di due o più macchine. + +Un cluster consente: + +- calcolo distribuito utilizzando la potenza di calcolo di tutti i nodi +- high availability: continuità del servizio e failover automatico del servizio in caso di guasto di un nodo + +#### Tipi di servizi + +- Servizi attivi/passivi + + L'installazione di un cluster con due nodi attivi/passivi utilizzando Pacemaker e DRBD è una soluzione a basso costo per molte situazioni che richiedono un sistema ad high-availability. + +- Servizi N+1 + + Con più nodi, Pacemaker può ridurre i costi dell'hardware consentendo a diversi cluster attivi/passivi di combinarsi e condividere un nodo di backup. + +- Servizi N to N + + Con la shared storage, ogni nodo può potenzialmente essere utilizzato per la fault tolerance. Pacemaker può anche eseguire più copie di servizi per distribuire il carico di lavoro. + +- Servizi in remoto + + Pacemaker include funzionalità per semplificare la creazione di cluster su più siti. + +#### VIP + +Il VIP è un indirizzo IP virtuale assegnato a un cluster attivo/passivo. Assegnare il VIP a un nodo cluster attivo. Se si verifica un'interruzione del servizio, il VIP viene disattivato sul nodo guasto, mentre l'attivazione avviene sul nodo che lo sostituisce. Questo è noto come failover. + +I client si rivolgono sempre al cluster tramite VIP, rendendo trasparenti i failover dei server attivi. + +#### Split-brain + +Lo split-brain è il rischio principale che un cluster può incontrare. Questa condizione si verifica quando diversi nodi di un cluster pensano che il loro vicino sia inattivo. Il nodo tenta quindi di avviare il servizio ridondante e diversi nodi forniscono lo stesso servizio, il che può portare a fastidiosi effetti collaterali (VIP duplicati sulla rete, accesso ai dati in competizione e così via). + +Le possibili soluzioni tecniche per evitare questo problema sono: + +- Separare il traffico della rete pubblica da quello del cluster +- Utilizzare network bonding + +## Pacemaker (PCS) + +In questo capitolo viene illustrato Pacemaker, una soluzione di clustering. + +**** + +**Obiettivi**: si imparerà come: + +:heavy_check_mark: installare e configurare un cluster Pacemaker;\ +:heavy_check_mark: amministrare un cluster Pacemaker. + +:checkered_flag: **clustering**, **ha**, **high availability**, **pcs**, **pacemaker** + +**Conoscenza**: :star: :star: :star:\ +**Complessità**: :star: :star: + +**Tempo di lettura**: 20 minuti + +**** + +### Generalità + +**Pacemaker** è la parte software del cluster che gestisce le sue risorse (VIP, servizi, dati). È responsabile dell'avvio, dell'arresto e della supervisione delle risorse del cluster. Si assicura che i nodi operino in high availability. + +Pacemaker utilizza il message layer fornito da **corosync** (predefinito) o **Heartbeat**. + +Pacemaker consiste in **5 componenti chiave**: + +- Cluster Information Base (**CIB**) +- Cluster Resource Management daemon (**CRMd**) +- Local Resource Management daemon (**LRMd**) +- Policy Engine (**PEngine** or **PE**) +- Fencing daemon (**STONITHd**) + +La CIB rappresenta la configurazione del cluster e lo stato attuale di tutte le risorse del cluster. I suoi contenuti vengono sincronizzati automaticamente in tutto il cluster e utilizzati dal PEngine per calcolare come raggiungere lo stato ideale del cluster. + +L'elenco delle istruzioni viene quindi fornito al controllore designato (DC). Pacemaker centralizza tutte le decisioni del cluster eleggendo una delle istanze di CRMd come master. + +Il DC esegue le istruzioni della PEngine nell'ordine richiesto, trasmettendole all'LRMd locale o al CRMd degli altri nodi tramite Corosync o Heartbeat. + +A volte può essere necessario arrestare i nodi per proteggere i dati condivisi o consentire il ripristino. A questo scopo, il pacemaker è dotato di STONITHd. + +#### Stonith + +Stonith è un componente di Pacemaker. È l'acronimo di Shoot-The-Other-Node-In-The-Head, una pratica consigliata per garantire l'isolamento del nodo malfunzionante il più rapidamente possibile (chiusura o almeno disconnessione dalle risorse condivise), evitando così la corruzione dei dati. + +Un nodo che non risponde non significa che non possa più accedere ai dati. L'unico modo per assicurarsi che un nodo non stia più accedendo ai dati prima di cederli a un altro nodo è usare STONITH, che spegnerà o riavvierà il server guasto. + +STONITH ha un ruolo anche nel caso in cui un servizio in cluster non riesca a spegnersi. In questo caso, Pacemaker utilizza STONITH per forzare l'arresto dell'intero nodo. + +#### Gestione del quorum + +Il quorum rappresenta il numero minimo di nodi in funzione per convalidare una decisione, come ad esempio decidere quale nodo di backup deve subentrare quando uno dei nodi è in errore. Per impostazione predefinita, Pacemaker richiede che più della metà dei nodi sia online. + +Quando i problemi di comunicazione dividono un cluster in diversi nodi del gruppo, il quorum impedisce l'avvio delle risorse su un numero di nodi superiore a quello previsto. Un cluster è quorum quando più della metà di tutti i nodi noti per essere online sono nel suo gruppo (active_nodes_group > active_total_nodes / 2 ). + +Quando non si raggiunge il quorum, la decisione predefinita è quella di disattivare tutte le risorse. + +Casi studio: + +- In un cluster a **due nodi**, poiché il raggiungimento del quorum **non è possibile**, il guasto di un nodo deve essere ignorato, altrimenti l'intero cluster verrà spento. +- Se un cluster di 5 nodi viene diviso in due gruppi di 3 e 2 nodi, il gruppo di 3 nodi avrà un quorum e continuerà a gestire le risorse. +- Se un cluster di 6 nodi viene diviso in 2 gruppi di 3 nodi, nessun gruppo avrà un quorum. In questo caso, il comportamento predefinito del pacemaker è quello di arrestare tutte le risorse per evitare la corruzione dei dati. + +#### Gestione comunicazioni del cluster + +Un Pacemaker utilizza **Corosync** o **Heartbeat** (dal progetto Linux-ha) per la comunicazione tra nodi e la gestione del cluster. + +##### Corosync + +**Corosync Cluster Engine** è un layer di messaggistica tra i membri del cluster che integra funzionalità aggiuntive per implementare l'high availability nelle applicazioni. Corosync deriva dal progetto OpenAIS. + +I nodi comunicano in modalità client/server con il protocollo UDP. + +Può gestire cluster con più di 16 modalità attive/passiva o attiva/attiva. + +##### Heartbeat + +La tecnologia Heartbeat è più limitata rispetto a Corosync. È impossibile creare un cluster di più di due nodi e le sue regole di gestione sono meno sofisticate di quelle del suo concorrente. + +!!! NOTE "Nota" + +``` +La scelta di pacemaker/corosync sembra oggi più appropriata, poiché è la scelta predefinita per le distribuzioni RedHat, Debian e Ubuntu. +``` + +#### Gestione dei dati + +##### Il raid DRDB network + +DRDB è un driver di periferica block-type che consente l'implementazione di RAID 1 (mirroring) sulla rete. + +DRDB può essere utile quando le tecnologie NAS o SAN non sono disponibili, ma è necessaria la sincronizzazione dei dati. + +### Installazione + +Per installare Pacemaker, occorre innanzitutto abilitare il repository `highavailability`: + +```bash +sudo dnf config-manager --set-enabled highavailability +``` + +Alcune informazioni sul pacchetto pacemaker: + +```bash +$ dnf info pacemaker +Rocky Linux 9 - High Availability 289 kB/s | 250 kB 00:00 +Available Packages +Name : pacemaker +Version : 2.1.7 +Release : 5.el9_4 +Architecture : x86_64 +Size : 465 k +Source : pacemaker-2.1.7-5.el9_4.src.rpm +Repository : highavailability +Summary : Scalable High-Availability cluster resource manager +URL : https://www.clusterlabs.org/ +License : GPL-2.0-or-later AND LGPL-2.1-or-later +Description : Pacemaker is an advanced, scalable High-Availability cluster resource + : manager. + : + : It supports more than 16 node clusters with significant capabilities + : for managing resources and dependencies. + : + : It will run scripts at initialization, when machines go up or down, + : when related resources fail and can be configured to periodically check + : resource health. + : + : Available rpmbuild rebuild options: + : --with(out) : cibsecrets hardening nls pre_release profiling + : stonithd +``` + +Utilizzando il comando `repoquery`, è possibile scoprire le dipendenze del pacchetto pacemaker: + +```bash +$ repoquery --requires pacemaker +corosync >= 3.1.1 +pacemaker-cli = 2.1.7-5.el9_4 +resource-agents +systemd +... +``` + +Nell'installazione di Pacemaker sarà installato automaticamente corosync e un'interfaccia CLI per un pacemaker. + +Alcune informazioni sul pacchetto corosync: + +```bash +$ dnf info corosync +Available Packages +Name : corosync +Version : 3.1.8 +Release : 1.el9 +Architecture : x86_64 +Size : 262 k +Source : corosync-3.1.8-1.el9.src.rpm +Repository : highavailability +Summary : The Corosync Cluster Engine and Application Programming Interfaces +URL : http://corosync.github.io/corosync/ +License : BSD +Description : This package contains the Corosync Cluster Engine Executive, several default + : APIs and libraries, default configuration files, and an init script. +``` + +Installare ora i pacchetti necessari: + +```bash +sudo dnf install pacemaker +``` + +Aprire il firewall, se ne avete uno: + +```bash +sudo firewall-cmd --permanent --add-service=high-availability +sudo firewall-cmd --reload +``` + +!!! NOTE "Nota" + +``` +Non avviare ora i servizi, poiché non sono configurati e non funzioneranno. +``` + +### Gestione del cluster + +Il package `pcs` fornisce gli strumenti di gestione del cluster. Il comando `pcs` è un'interfaccia a riga di comando per la gestione del **Pacemaker high availability stack**. + +La configurazione del cluster può essere fatta a mano, ma il pacchetto pcs rende la gestione (creazione, configurazione e risoluzione dei problemi) di un cluster molto più semplice! + +!!! NOTE "Nota" + +``` +Ci sono altre alternative a pcs. +``` + +Installare il pacchetto su tutti i nodi e attivare il daemon pcsd: + +```bash +sudo dnf install pcs +sudo systemctl enable pcsd --now +``` + +L'installazione del pacchetto ha creato un utente `hacluster` con una password vuota. Per eseguire operazioni come la sincronizzazione dei file di configurazione di corosync o il riavvio dei nodi remoti. È necessario assegnare una password a questo utente. + +```text +hacluster:x:189:189:cluster user:/var/lib/pacemaker:/sbin/nologin +``` + +Su tutti i nodi, assegnare una password identica all'utente hacluster: + +```bash +echo “pwdhacluster” | sudo passwd --stdin hacluster +``` + +!!! NOTE "Nota" + +``` +“pwdhacluster” è di esempio, sostituirla con una password più sicura. +``` + +Da qualsiasi nodo, è possibile autenticarsi come utente hacluster su tutti i nodi e utilizzare i comandi `pcs` su di essi: + +```bash +$ sudo pcs host auth server1 server2 +Username: hacluster +Password: +server1: Authorized +server2: Authorized +``` + +Dal nodo in cui si verifica l'autenticazione di pcs, lanciare la configurazione del cluster: + +```bash +$ sudo pcs cluster setup mycluster server1 server2 +No addresses specified for host 'server1', using 'server1' +No addresses specified for host 'server2', using 'server2' +Destroying cluster on hosts: 'server1', 'server2'... +server2: Successfully destroyed cluster +server1: Successfully destroyed cluster +Requesting remove 'pcsd settings' from 'server1', 'server2' +server1: successful removal of the file 'pcsd settings' +server2: successful removal of the file 'pcsd settings' +Sending 'corosync authkey', 'pacemaker authkey' to 'server1', 'server2' +server1: successful distribution of the file 'corosync authkey' +server1: successful distribution of the file 'pacemaker authkey' +server2: successful distribution of the file 'corosync authkey' +server2: successful distribution of the file 'pacemaker authkey' +Sending 'corosync.conf' to 'server1', 'server2' +server1: successful distribution of the file 'corosync.conf' +server2: successful distribution of the file 'corosync.conf' +Cluster has been successfully set up. +``` + +!!! NOTE "Nota" + +``` +Il comando pcs cluster setup gestisce il problema del quorum per i cluster a due nodi. Un cluster di questo tipo funzionerà quindi correttamente in caso di guasto di uno dei due nodi. Se si configura Corosync manualmente o si usa un'altra shell di gestione del cluster, è necessario configurare Corosync correttamente. +``` + +Ora è possibile avviare il cluster: + +```bash +$ sudo pcs cluster start --all +server1: Starting Cluster... +server2: Starting Cluster... +``` + +Abilitare l'avvio del servizio cluster all'avvio: + +```bash +sudo pcs cluster enable --all +``` + +Controllare lo stato di servizio: + +```bash +$ sudo pcs status +Cluster name: mycluster + +WARNINGS: +No stonith devices and stonith-enabled is not false + +Cluster Summary: + * Stack: corosync (Pacemaker is running) + * Current DC: server1 (version 2.1.7-5.el9_4-0f7f88312) - partition with quorum + * Last updated: Mon Jul 8 17:50:14 2024 on server1 + * Last change: Mon Jul 8 17:50:00 2024 by hacluster via hacluster on server1 + * 2 nodes configured + * 0 resource instances configured + +Node List: + * Online: [ server1 server2 ] + +Full List of Resources: + * No resources + +Daemon Status: + corosync: active/disabled + pacemaker: active/disabled + pcsd: active/enabled +``` + +#### Aggiungere risorse + +Prima di configurare le risorse, è necessario cofigurare il messaggio di alert: + +```bash +WARNINGS: +No stonith devices and stonith-enabled is not false +``` + +In questo stato, Pacemaker si rifiuta di avviare le nuove risorse. + +Si ha due possibili scelte: + +- disabilitare `stonith` +- configurarlo + +Per prima cosa, si disabilita `stonith` finché non si imparerà a configurarlo: + +```bash +sudo pcs property set stonith-enabled=false +``` + +!!! WARNING "Attenzione" + +``` +Fare attenzione a non lasciare `stonith` disabilitato in un ambiente di produzione! +``` + +##### Configurazione VIP + +La prima risorsa creata nel cluster è una VIP. + +Elenca le risorse standard disponibili con il comando `pcs resource standards`: + +```bash +$ pcs resource standards +lsb +ocf +service +systemd +``` + +Questo VIP corrisponde agli indirizzi IP dei clienti, in modo che possano accedere ai futuri servizi del cluster. È necessario assegnarlo a uno dei nodi. Quindi, in caso di guasto, il cluster passerà questa risorsa da un nodo all'altro per garantire la continuità del servizio. + +```bash +pcs resource create myclusterVIP ocf:heartbeat:IPaddr2 ip=192.168.1.12 cidr_netmask=24 op monitor interval=30s +``` + +L'argomento `ocf:heartbeat:IPaddr2` contiene tre campi che forniscono a Pacemaker quanto segue: + +- lo standard (in questo caso `ocf`) +- lo script namespace (in questo caso `heartbeat`) +- lo resource script name + +Il risultato è l'aggiunta di un indirizzo IP virtuale all'elenco delle risorse gestite: + +```bash +$ sudo pcs status +Cluster name: mycluster + +... +Cluster name: mycluster +Cluster Summary: + * Stack: corosync (Pacemaker is running) + ... + * 2 nodes configured + * 1 resource instance configured + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server1 +... +``` + +In questo caso, il VIP è attivo sul server1. È possibile effettuare una verifica con il comando `ip`: + +```bash +$ ip add show dev enp0s3 +2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 08:00:27:df:29:09 brd ff:ff:ff:ff:ff:ff + inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute enp0s3 + valid_lft forever preferred_lft forever + inet 192.168.1.12/24 brd 192.168.1.255 scope global secondary enp0s3 + valid_lft forever preferred_lft forever +``` + +###### Toggle tests + +Da qualsiasi punto della rete, eseguire il comando ping sul VIP: + +```bash +ping 192.168.1.12 +``` + +Mettere il nodo attivo in standby: + +```bash +sudo pcs node standby server1 +``` + +Controllare che tutti i ping abbiano successo durante l'operazione (nessun `icmp_seq` mancante): + +```bash +64 bytes from 192.168.1.12: icmp_seq=39 ttl=64 time=0.419 ms +64 bytes from 192.168.1.12: icmp_seq=40 ttl=64 time=0.043 ms +64 bytes from 192.168.1.12: icmp_seq=41 ttl=64 time=0.129 ms +64 bytes from 192.168.1.12: icmp_seq=42 ttl=64 time=0.074 ms +64 bytes from 192.168.1.12: icmp_seq=43 ttl=64 time=0.099 ms +64 bytes from 192.168.1.12: icmp_seq=44 ttl=64 time=0.044 ms +64 bytes from 192.168.1.12: icmp_seq=45 ttl=64 time=0.021 ms +64 bytes from 192.168.1.12: icmp_seq=46 ttl=64 time=0.058 ms +``` + +Controllare lo stato del cluster: + +```bash +$ sudo pcs status +Cluster name: mycluster +Cluster Summary: +... + * 2 nodes configured + * 1 resource instance configured + +Node List: + * Node server1: standby + * Online: [ server2 ] + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server2 +``` + +Il VIP si è spostato sul server2. Verificare con il comando `ip add` come in precedenza. + +Riportare il server1 nel pool: + +```bash +sudo pcs node unstandby server1 +``` + +!!! Nota +Una volta che il server1 è stato `unstandby`, il cluster torna al suo stato normale, ma la risorsa non viene trasferita di nuovo al server1: rimane sul server2. + +##### Configurazione del servizio + +Si installerà il servizio Apache su entrambi i nodi del cluster. Questo servizio viene avviato solo sul nodo attivo e cambia nodo contemporaneamente al VIP se il nodo attivo si guasta. + +Per istruzioni dettagliate sull'installazione, consultare il capitolo Apache. + +È necessario installare `httpd` su entrambi i nodi: + +```bash +sudo dnf install -y httpd +sudo firewall-cmd --permanent --add-service=http +sudo firewall-cmd --reload +``` + +!!! WARNING "Attenzione" + +``` +Non avviare o attivare il servizio da soli. Se ne occuperà il Pacemaker. +``` + +Di default, viene visualizzata una pagina HTML contenente il nome del server: + +```bash +echo "Node $(hostname -f)" | sudo tee "/var/www/html/index.html" +``` + +L'agente di risorse Pacemaker utilizzerà la pagina `/server-status` (si veda il capitolo Apache) per determinare il suo stato di salute. È necessario attivarlo creando il file `/etc/httpd/conf.d/status.conf` su entrambi i server: + +```bash +sudo vim /etc/httpd/conf.d/status.conf + + SetHandler server-status + Require local + +``` + +Per creare una risorsa, la si chiamerà “WebSite”; si chiamerà lo script Apache della risorsa OCF e nello spazio dei nomi heartbeat. + +```bash +sudo pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min +``` + +Il cluster controllerà la salute di Apache ogni minuto (`op monitor interval=1min`). + +Infine, per garantire che il servizio Apache venga avviato sullo stesso nodo dell'indirizzo VIP, è necessario aggiungere un vincolo al cluster: + +```bash +sudo pcs constraint colocation add WebSite with myclusterVIP INFINITY +``` + +È anche possibile configurare il servizio Apache in modo che si avvii dopo il VIP. Questo può essere utile se Apache ha configurazioni VHost per ascoltare l'indirizzo VIP (`Listen 192.168.1.12`): + +```bash +$ sudo pcs constraint order myclusterVIP then WebSite +Adding myclusterVIP WebSite (kind: Mandatory) (Options: first-action=start then-action=start) +``` + +###### Testare il failover + +Eseguire un failover e verificare che il vostro server web sia ancora disponibile: + +```bash +$ sudo pcs status +Cluster name: mycluster +Cluster Summary: + * Stack: corosync (Pacemaker is running) + * Current DC: server1 (version 2.1.7-5.el9_4-0f7f88312) - partition with quorum + ... + +Node List: + * Online: [ server1 server2 ] + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server1 + * WebSite (ocf:heartbeat:apache): Started server1 +``` + +Attualmente si sta lavorando sul server1. + +```bash +$ curl http://192.168.1.12/ +Node server1 +``` + +Simulare un failover sul server1: + +```bash +sudo pcs node standby server1 +``` + +```bash +$ curl http://192.168.1.12/ +Node server2 +``` + +Come si può vedere, il servizio Web funziona ancora, ma ora è sul server2. + +```bash +sudo pcs node unstandby server1 +``` + +Si noti che il servizio è stato interrotto solo per pochi secondi, mentre il VIP passava al servizio e i servizi si riavviavano. + +### Cluster troubleshooting + +#### Il comando `pcs status` + +Il comando `pcs status` fornisce informazioni sullo stato generale del cluster: + +```bash +$ sudo pcs status +Cluster name: mycluster +Cluster Summary: + * Stack: corosync (Pacemaker is running) + * Current DC: server1 (version 2.1.7-5.el9_4-0f7f88312) - partition with quorum + * Last updated: Tue Jul 9 12:25:42 2024 on server1 + * Last change: Tue Jul 9 12:10:55 2024 by root via root on server1 + * 2 nodes configured + * 2 resource instances configured + +Node List: + * Online: [ server1 ] + * OFFLINE: [ server2 ] + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server1 + * WebSite (ocf:heartbeat:apache): Started server1 + +Daemon Status: + corosync: active/enabled + pacemaker: active/enabled + pcsd: active/enabled +``` + +Come si può vedere, uno dei due server è offline. + +#### Il comando `pcs status corosync` + +Il comando `pcs status corosync` fornisce informazioni sullo stato dei nodi `corosync`: + +```bash +$ sudo pcs status corosync + +Membership information +---------------------- + Nodeid Votes Name + 1 1 server1 (local) +``` + +e quando il server2 è tornato disponibile: + +```bash +$ sudo pcs status corosync + +Membership information +---------------------- + Nodeid Votes Name + 1 1 server1 (local) + 2 1 server2 +``` + +#### Il comando `crm_mon` + +Il comando `crm_mon` restituisce informazioni sullo stato del cluster. Usare l'opzione \`-1' per visualizzare lo stato del cluster una volta e uscire. + +```bash +$ sudo crm_mon -1 +Cluster Summary: + * Stack: corosync (Pacemaker is running) + * Current DC: server1 (version 2.1.7-5.el9_4-0f7f88312) - partition with quorum + * Last updated: Tue Jul 9 12:30:21 2024 on server1 + * Last change: Tue Jul 9 12:10:55 2024 by root via root on server1 + * 2 nodes configured + * 2 resource instances configured + +Node List: + * Online: [ server1 server2 ] + +Active Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server1 + * WebSite (ocf:heartbeat:apache): Started server1 +``` + +#### Il comando `corosync-*cfgtool*` + +Il comando `corosync-cfgtool` controlla che la configurazione sia corretta e che la comunicazione con il cluster funzioni correttamente: + +```bash +$ sudo corosync-cfgtool -s +Local node ID 1, transport knet +LINK ID 0 udp + addr = 192.168.1.10 + status: + nodeid: 1: localhost + nodeid: 2: connected +``` + +Il comando \`corosync-cmapctl' è uno strumento per accedere al object database. +Ad esempio, si può usare per controllare lo stato dei nodi membri del cluster: + +```bash +$ sudo corosync-cmapctl | grep members +runtime.members.1.config_version (u64) = 0 +runtime.members.1.ip (str) = r(0) ip(192.168.1.10) +runtime.members.1.join_count (u32) = 1 +runtime.members.1.status (str) = joined +runtime.members.2.config_version (u64) = 0 +runtime.members.2.ip (str) = r(0) ip(192.168.1.11) +runtime.members.2.join_count (u32) = 2 +runtime.members.2.status (str) = joined +``` + +### Workshop + +Per questo workshop sono necessari due server con i servizi Pacemaker installati, configurati e protetti, come descritto nei capitoli precedenti. + +Si configurerà un cluster Apache ad alta disponibilità. + +I due server hanno i seguenti indirizzi IP: + +- server1: 192.168.1.10 +- server2: 192.168.1.11 + +Se non si dispone di un servizio di risoluzione dei nomi, inserire nel file `/etc/hosts` un contenuto simile al seguente: + +```bash +$ cat /etc/hosts +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 + +192.168.1.10 server1 server1.rockylinux.lan +192.168.1.11 server2 server2.rockylinux.lan +``` + +Si utilizzerà l'indirizzo VIP `192.168.1.12`. + +#### Task 1: Installazione e configurazione + +Per installare Pacemaker, abilitare il repository `highavailability`. + +Su entrambi i nodi eseguire: + +```bash +sudo dnf config-manager --set-enabled highavailability +sudo dnf install pacemaker pcs +sudo firewall-cmd --permanent --add-service=high-availability +sudo firewall-cmd --reload +sudo systemctl enable pcsd --now +echo "pwdhacluster" | sudo passwd --stdin hacluster +``` + +Sul server1 eseguire: + +```bash +sudo dnf config-manager --set-enabled highavailability +sudo dnf install pacemaker pcs +sudo firewall-cmd --permanent --add-service=high-availability +sudo firewall-cmd --reload +sudo systemctl enable pcsd --now +echo "pwdhacluster" | sudo passwd --stdin hacluster +``` + +#### Task 2: Aggiungere un VIP + +La prima risorsa creata nel cluster è una VIP. + +```bash +pcs resource create myclusterVIP ocf:heartbeat:IPaddr2 ip=192.168.1.12 cidr_netmask=24 op monitor interval=30s +``` + +Controllare lo stato del cluster: + +```bash +$ sudo pcs status +Cluster name: mycluster +Cluster Summary: +... + * 2 nodes configured + * 1 resource instance configured + +Node List: + * Node server1: standby + * Online: [ server2 ] + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server2 +``` + +#### Task 3: Installare il server Apache + +Installare il server Apache su entrambi i nodi: + +```bash +$ sudo dnf install -y httpd +$ sudo firewall-cmd --permanent --add-service=http +$ sudo firewall-cmd --reload +echo "Node $(hostname -f)" | sudo tee "/var/www/html/index.html" +sudo vim /etc/httpd/conf.d/status.conf + + SetHandler server-status + Require local + +``` + +#### Task 4: Aggiungere la risorsa `httpd` + +Solo sul server1, aggiungere la nuova risorsa al cluster con i vincoli necessari: + +```bash +sudo pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min +sudo pcs constraint colocation add WebSite with myclusterVIP INFINITY +sudo pcs constraint order myclusterVIP then WebSite +``` + +#### Task 5: Testare il cluster + +Eseguire un failover e verificare che il vostro server web sia ancora disponibile: + +```bash +$ sudo pcs status +Cluster name: mycluster +Cluster Summary: + * Stack: corosync (Pacemaker is running) + * Current DC: server1 (version 2.1.7-5.el9_4-0f7f88312) - partition with quorum + ... + +Node List: + * Online: [ server1 server2 ] + +Full List of Resources: + * myclusterVIP (ocf:heartbeat:IPaddr2): Started server1 + * WebSite (ocf:heartbeat:apache): Started server1 +``` + +Attualmente si sta lavorando sul server1. + +```bash +$ curl http://192.168.1.12/ +Node server1 +``` + +Simulare un failover sul server1: + +```bash +sudo pcs node standby server1 +``` + +```bash +$ curl http://192.168.1.12/ +Node server2 +``` + +Come si può vedere, il servizio web funziona ancora, ma sul server2. + +```bash +sudo pcs node unstandby server1 +``` + +Si noti che il servizio è stato interrotto solo per pochi secondi, mentre il VIP passava al servizio e i servizi si riavviavano. + +### Verificate le vostre conoscenze + +:heavy_check_mark: Il comando `pcs` è l'unico per controllare un cluster di pacemaker? + +:heavy_check_mark: Quale comando restituisce lo stato del cluster? + +- [ ] `sudo pcs status` +- [ ] `systemctl status pcs` +- [ ] `sudo crm_mon -1` +- [ ] `sudo pacemaker -t` diff --git a/docs/desktop/gaming/proton.fr.md b/docs/desktop/gaming/proton.fr.md index 38176b5fe1..3ae9433501 100644 --- a/docs/desktop/gaming/proton.fr.md +++ b/docs/desktop/gaming/proton.fr.md @@ -71,13 +71,13 @@ Cela renverra l'un des trois résultats suivants : * SELinux status : permissive (si SELinux est en mode permissif) * SELinux status : enforcing (si SELinux protège entièrement votre système) -Si SELinux est désactivé, ce n'est pas ce qui cause vos problèmes avec le jeu. S'il est en mode enforcing, il pourrait en être le coupable. Essayez de définir temporairement SELinux en mode permissif avant de commencer à jouer avec : +Si SELinux est désactivé, ce n'est pas ce qui cause vos problèmes avec le jeu. S'il est en mode enforcing, il pourrait en être le coupable. Essayez de définir temporairement SELinux en mode permissif avant de commencer à jouer : ``` sudo setenforce 0 ``` -Une fois le jeu terminé, n'oubliez pas de rétablir l'application de votre politique SELinux avec : +Une fois le jeu terminé, n'oubliez pas de rétablir l'application de votre politique SELinux : ``` sudo setenforce 1 diff --git a/docs/desktop/gnome/flatpak.fr.md b/docs/desktop/gnome/flatpak.fr.md index 1408062dff..4dd8805ac1 100644 --- a/docs/desktop/gnome/flatpak.fr.md +++ b/docs/desktop/gnome/flatpak.fr.md @@ -130,7 +130,7 @@ Mémoriser la liste des commandes n'est pas nécessaire, mais savoir comment y a !!! warning "Rocky Linux 8.x et `flatpak search`" ```` -If you are on a version of Rocky Linux 8.x, you will experience this bug. When running the command: +If you are on a Rocky Linux 8.x version, you will experience this bug. When running the command: ```bash flatpak search [packagename] diff --git a/docs/gemstones/htop.it.md b/docs/gemstones/htop.it.md index b0df58b9b0..1060800885 100644 --- a/docs/gemstones/htop.it.md +++ b/docs/gemstones/htop.it.md @@ -11,6 +11,7 @@ tags: # htop - Gestione dei processi ## installare `htop` + Ogni amministratore di sistema ama utilizzare alcuni dei comandi più comuni. Oggi raccomando `htop` come alternativa al comando `top`. Per utilizzare normalmente il comando `htop`, è necessario prima installarlo. ``` bash @@ -23,9 +24,10 @@ dnf -y install htop ``` ## Utilizzare `htop` + È sufficiente digitare `htop` nel terminale e l'interfaccia interattiva è la seguente: -``` +```bash 0[ ||| 3%] Tasks: 22, 46thr, 174 kthr 1 running 1[ | 1%] Load average: 0.00 0.00 0.05 Mem[ ||||||| 197M/8G] Uptime: 00:31:39 @@ -34,7 +36,7 @@ PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command(mer ... ``` -F1Help F2Setup F3Search F4Filter F5Tree F6SortBy F7Nice F8Nice+ F9Kill F10Quit +++f1++ Help ++f2++ Setup ++f3++ Search ++f4++ Filter ++f5++ Tree ++f6++ SortBy ++f7++ Nice ++f8++ Nice ++f9++ Kill ++f10++ Quit ### Descrizione Superiore @@ -84,13 +86,15 @@ PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command(mer * Command - Il comando corrispondente al processo ### Descrizione del tasto di scelta rapida -Nell'interfaccia interattiva, premere il tasto F1 per visualizzare la descrizione del tasto di scelta rapida corrispondente. -* I tasti direzionali su, giù, sinistra e destra consentono di scorrere l'interfaccia interattiva e spazio può contrassegnare il processo corrispondente, che è contrassegnato in giallo. -* I pulsanti N, P, M e T indicano rispettivamente PID, CPU%, MEM%, TIME+ e sono usati per l'ordinamento. Naturalmente, è anche possibile fare clic con il mouse per ordinare in ordine crescente o decrescente un determinato campo. +Nell'interfaccia interattiva, premere il tasto ++f1++ per visualizzare la descrizione del tasto di scelta rapida corrispondente. + +* I tasti direzionali su, giù, sinistra e destra consentono di scorrere l'interfaccia interattiva e ++space++ può contrassegnare il processo corrispondente, che è contrassegnato in giallo. +* I pulsanti ++n++, ++p++, ++m++ e ++t++ indicano rispettivamente PID, CPU%, MEM%, TIME+ e sono usati per l'ordinamento. Naturalmente, è anche possibile fare clic con il mouse per ordinare in ordine crescente o decrescente un determinato campo. ### Altri strumenti comunemente utilizzati -Per gestire il processo, utilizzare il tasto F9 per inviare diversi segnali al processo. L'elenco dei segnali si trova in `kill -l`. Quelli più comunemente utilizzati sono: + +Per gestire il processo, utilizzare il tasto ++f9++ per inviare diversi segnali al processo. L'elenco dei segnali si trova in `kill -l`. Quelli più comunemente utilizzati sono: | Segnale | Descrizione | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -99,4 +103,5 @@ Per gestire il processo, utilizzare il tasto F9 per inviare diversi s | 15 | Il segnale predefinito per il comando kill. A volte, se si è verificato un problema nel processo e il processo non può essere terminato normalmente con questo segnale, si proverà con il segnale 9 | ## Fine + `htop` è molto più facile da usare rispetto al `top` fornito con il sistema, è più intuitivo e migliora notevolmente l'uso quotidiano. Per questo motivo `htop` è di solito uno dei primi pacchetti che l'autore installa dopo aver installato un nuovo sistema operativo. diff --git a/docs/gemstones/scripts/bash_stub.it.md b/docs/gemstones/scripts/bash_stub.it.md index e6b4d651e5..4319089b43 100644 --- a/docs/gemstones/scripts/bash_stub.it.md +++ b/docs/gemstones/scripts/bash_stub.it.md @@ -1,7 +1,7 @@ --- title: bash - Script Stub author: Steven Spencer -contributors: Ezequiel Bruni, Franco Colussi +contributors: Ezequiel Bruni --- # Bash - Script Stub @@ -12,7 +12,7 @@ Dove lavoravo prima, avevamo un programmatore eccezionale che conosceva un sacco Lo stub è ben documentato, ma si tenga presente che questo non è assolutamente uno script esaustivo! Si potrebbero aggiungere molte altre routine. Se **avete** esempi che si adattano bene a questo stub, sentitevi liberi di aggiungere qualche modifica: -``` +```bash #!/bin/sh # By exporting the path, this keeps you from having to enter full paths for commands that exist in those paths: @@ -20,11 +20,11 @@ Lo stub è ben documentato, ma si tenga presente che questo non è assolutamente export PATH="$PATH:/bin:/usr/bin:/usr/local/bin" # Determine and save absolute path to program directory. -# Attention! In bash, ' ' rappresenta la stringa stessa; ma " " è un po' diverso. $, ` ` e \ rappresentano rispettivamente i valori delle variabili di chiamata, i comandi di riferimento e i caratteri di escape -# When done will be in same directory as script +# Attention! In bash, the ' 'represents the string itself; But " " is a little different. $, ` `, and \ represent call variable values, reference commands, and escape characters, respectively +# When done will be in same directory as script: -PGM=`basename $0` # Name of the program -CDIR=`pwd` # Save directory program was run from +PGM=`basename $0` # Name of the program +CDIR=`pwd` # Save directory program was run from PDIR=`dirname $0` cd $PDIR @@ -41,8 +41,8 @@ runby="root" iam=`/usr/bin/id -un` if [ $iam != "$runby" ] then - echo "$PGM : program must be run by user \"$runby\"" - exit + echo "$PGM : program must be run by user \"$runby\"" + exit fi # Check for missing parameter. @@ -50,9 +50,9 @@ fi if [ "$1" = "" ] then - echo "$PGM : parameter 1 is required" - echo "Usage: $PGM param-one" - exit + echo "$PGM : parameter 1 is required" + echo "Usage: $PGM param-one" + exit fi # Prompt for data (in this case a yes/no response that defaults to "N"): @@ -61,8 +61,8 @@ fi read yn if [ "$yn" != "y" ] && [ "$yn" != "Y" ] then - echo "Cancelling..." - exit; + echo "Cancelling..." + exit; fi # If only one copy of your script can run at a time, use this block of code. @@ -72,27 +72,27 @@ fi LOCKF="/tmp/${PGM}.lock" if [ ! -e $LOCKF ] then - touch $LOCKF + touch $LOCKF else - echo "$PGM: cannot continue -- lock file exists" - echo - echo "To continue make sure this program is not already running, then delete the" - echo "lock file:" - echo - echo " rm -f $LOCKF" - echo - echo "Aborting..." - exit 0 + echo "$PGM: cannot continue -- lock file exists" + echo + echo "To continue make sure this program is not already running, then delete the" + echo "lock file:" + echo + echo " rm -f $LOCKF" + echo + echo "Aborting..." + exit 0 fi script_list=`ls customer/*` for script in $script_list do - if [ $script != $PGM ] - then - echo "./${script}" - fi + if [ $script != $PGM ] + then + echo "./${script}" + fi done # Remove the lock file diff --git a/docs/guides/automation/cron_jobs_howto.it.md b/docs/guides/automation/cron_jobs_howto.it.md index 8d094dc234..69d11edc4f 100644 --- a/docs/guides/automation/cron_jobs_howto.it.md +++ b/docs/guides/automation/cron_jobs_howto.it.md @@ -85,7 +85,7 @@ Se si è in grado di lasciare che il sistema esegua automaticamente gli script e ### Creare il proprio `cron` -Se gli orari automatici e randomizzati non funzionano bene in [Per le postazioni di lavoro sopra](#per-le-workstations) e gli orari programmati in [Per i server sopra](#per-i-server), è possibile crearne di propri. In questo esempio, si presume che l'operazione venga eseguita come utente root. [vedere Ipotesi](#presupposti) Per fare questo, digitate quanto segue: +Se gli orari automatici e casuali non funzionano bene per le postazioni di lavoro o gli orari programmati per i server, è possibile crearne di propri. In questo esempio, si presume che l'operazione venga eseguita come utente root. Per farlo, digitare quanto segue: `crontab -e` diff --git a/docs/guides/automation/cron_jobs_howto.uk.md b/docs/guides/automation/cron_jobs_howto.uk.md index befe9fe84a..f2f9dd7d2d 100644 --- a/docs/guides/automation/cron_jobs_howto.uk.md +++ b/docs/guides/automation/cron_jobs_howto.uk.md @@ -85,7 +85,7 @@ MAILTO=root ### Створення власного `cron` -Якщо автоматизований рандомізований час не працює належним чином у розділі [Для робочих станцій вище](#for-workstations), а запланований час у розділі [Для серверів вище ](#for-servers), тоді ви зможете створити свій власний. У цьому прикладі ми припускаємо, що ви робите це як root. [див. Припущення](#assumptions) Для цього введіть наступне: +Ви можете створити власний, якщо автоматизований рандомізований час не підходить для робочих станцій або запланований час для серверів. У цьому прикладі ми припускаємо, що ви робите це як root. Для цього введіть наступне: `crontab -e` diff --git a/docs/guides/contribute/rockydocs_formatting.uk.md b/docs/guides/contribute/rockydocs_formatting.uk.md index 7096ed5011..fa1a5b4b18 100644 --- a/docs/guides/contribute/rockydocs_formatting.uk.md +++ b/docs/guides/contribute/rockydocs_formatting.uk.md @@ -57,9 +57,30 @@ tags: Якщо вам потрібно використовувати підтримуваний елемент HTML, подивіться, чи можете ви знайти інший спосіб написати свій документ, який не використовуватиме ці елементи. Якщо ви повинні їх використовувати, це все одно дозволено. +!!! info "Примітка про посилання" + + Посилання – це не спеціальне форматування, а стандартні методи посилання на інші документи (внутрішні посилання) або зовнішні веб-сторінки. Однак є один тип посилання, який не слід використовувати під час створення документів для Rocky Linux, і це прив’язка або посилання на місце в тому самому документі. + + Якір працює на вихідній мові для Rocky Linux (англійська), але щойно їх перекладає наш інтерфейс Crowdin, вони ламаються на цих мовах. Це відбувається через те, що прийнятний прив’язка у markdown, яка не містить елементів HTML, використовує заголовок для створення посилання: + + ``` + ## Заголовок + + текст + + Посилання [на заголовок](#-заголовок) + ``` + + + Це посилання можна знайти, навівши курсор миші на постійне посилання у створеному документі, але це, по суті, заголовок із «#» і заголовок у нижньому регістрі, розділений тире (-). + + Коли документ перекладається, перекладається заголовок, АЛЕ посилання знаходиться за межами того, що Crowdin дозволяє перекладати, тому воно залишається в оригінальному (англійському) стані. + + Якщо вам знадобиться використовувати прив’язку, подивіться на свій документ і подивіться, чи реорганізація вмісту не зробить прив’язку непотрібною. Просто знайте, що якщо ви використовуєте прив’язку у щойно створеному документі, ця прив’язка розірветься після перекладу цього документа. + ## Застереження -Попередження — це спеціальні візуальні «коробки», які дозволяють привернути увагу до важливих фактів і виділити їх серед решти тексту. Існують наступні типи застережень: +Попередження — це спеціальні візуальні «коробки», які звертають увагу на важливі факти та виділяють їх. Існують наступні типи застережень: | тип | Опис | | ------------------- | -------------------------------------------------------------- | diff --git a/docs/guides/file_sharing/nfsserver.it.md b/docs/guides/file_sharing/nfsserver.it.md index d2974c4d4a..9caa13edf0 100644 --- a/docs/guides/file_sharing/nfsserver.it.md +++ b/docs/guides/file_sharing/nfsserver.it.md @@ -25,18 +25,18 @@ I file remoti vengono montati in una directory e appaiono come un file system lo Per funzionare, NFS richiede due servizi: -* Il servizio `network` (ovviamente) -* Il servizio `rpcbind` +- Il servizio `network` (ovviamente) +- Il servizio `rpcbind` Visualizzare lo stato dei servizi con il comando: -``` +```bash systemctl status rpcbind ``` Se il pacchetto `nfs-utils` non è installato: -``` +```bash sudo dnf install nfs-utils ``` @@ -44,18 +44,18 @@ Il pacchetto `nfs-utils` richiede l'installazione di diverse dipendenze, tra cui Avviare il servizio NFS con: -``` +```bash sudo systemctl enable --now nfs-server rpcbind ``` L'installazione del servizio NFS crea due utenti: -* `nobody`: usato per le connessioni anonime -* `rpcuser`: per il funzionamento del protocollo RPC +- `nobody`: usato per le connessioni anonime +- `rpcuser`: per il funzionamento del protocollo RPC È necessario configurare il firewall: -``` +```bash sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent sudo firewall-cmd --reload ``` @@ -70,20 +70,20 @@ sudo firewall-cmd --reload Impostare le condivisioni delle risorse con il file `/etc/exports`. Ogni riga di questo file corrisponde a una condivisione NFS. -``` +```bash /share_name client1(permissions) client2(permissions) ``` -* **/share_name**: Percorso assoluto della directory condivisa -* **clients**: Clienti autorizzati ad accedere alle risorse -* **(permissions)**: Permessi sulle risorse +- **/share_name**: Percorso assoluto della directory condivisa +- **clients**: Clienti autorizzati ad accedere alle risorse +- **(permissions)**: Permessi sulle risorse Dichiarare le macchine autorizzate ad accedere alle risorse con: -* **Indirizzo IP**: `192.168.1.2` -* **Indirizzo di Rete**: `192.168.1.0/255.255.255.0` o formato CIDR `192.168.1.0/24` -* **FQDN**: client_*.rockylinux.org: consente gli FQDN che iniziano con client_ dal dominio rockylinux.org -* `*` per tutti +- **Indirizzo IP**: `192.168.1.2` +- **Indirizzo di Rete**: `192.168.1.0/255.255.255.0` o formato CIDR `192.168.1.0/24` +- **FQDN**: client_*.rockylinux.org: consente gli FQDN che iniziano con client_ dal dominio rockylinux.org +- `*` per tutti È possibile inserire più impostazioni del client sulla stessa riga, separate da uno spazio. @@ -91,8 +91,8 @@ Dichiarare le macchine autorizzate ad accedere alle risorse con: Esistono due tipi di permessi: -* `ro`: di sola lettura -* `rw`: lettura-scrittura +- `ro`: di sola lettura +- `rw`: lettura-scrittura Se non viene specificato alcun diritto, il permesso applicato sarà di sola lettura. @@ -100,7 +100,7 @@ Per impostazione predefinita, il server NFS conserva gli UID e i GID degli utent Per forzare l'uso di un UID o GID diverso da quello dell'utente che scrive sulla risorsa, specificare le opzioni `anonuid=UID` e `nongid=GID`, oppure concedere l'accesso `anonimo` ai dati con l'opzione `all_squash`. -!!! warning "Attenzione" +!!! warning "Attenzione" Un parametro, `no_root_squash`, identifica l'utente root del client come utente root del server. Questo parametro può essere pericoloso dal punto di vista della sicurezza del sistema. @@ -108,19 +108,19 @@ L'attivazione del parametro `root_squash` è predefinita (anche se non specifica ### Casi di studio -* `/share client(ro,all_squash)` Gli utenti client hanno accesso alle risorse in sola lettura e sono identificati come anonimi sul server. +- `/share client(ro,all_squash)` Gli utenti client hanno accesso alle risorse in sola lettura e sono identificati come anonimi sul server. -* `/share client(rw)` Gli utenti client possono modificare le risorse e mantenere il proprio UID sul server. Solo `root` è identificato come `anonymous`. +- `/share client(rw)` Gli utenti client possono modificare le risorse e mantenere il proprio UID sul server. Solo `root` è identificato come `anonymous`. -* `/share client1(rw) client2(ro)` Gli utenti della workstation client 1 possono modificare le risorse, mentre quelli della workstation client 2 hanno accesso in sola lettura. Gli UID sono conservati sul server e solo `root` è identificato come `anonymous`. +- `/share client1(rw) client2(ro)` Gli utenti della workstation client 1 possono modificare le risorse, mentre quelli della workstation client 2 hanno accesso in sola lettura. Gli UID sono conservati sul server e solo `root` è identificato come `anonymous`. -* `/share client(rw,all_squash,anonuid=1001,anongid=100)` Gli utenti del Client1 possono modificare le risorse. L'UID viene modificato in `1001` e il GID in `100` sul server. +- `/share client(rw,all_squash,anonuid=1001,anongid=100)` Gli utenti del Client1 possono modificare le risorse. L'UID viene modificato in `1001` e il GID in `100` sul server. ### Il comando `exportfs` Il comando `exportfs` (file system exported) è usato per gestire la tabella dei file locali condivisi con i client NFS. -``` +```bash exportfs [-a] [-r] [-u share_name] [-v] ``` @@ -135,7 +135,7 @@ exportfs [-a] [-r] [-u share_name] [-v] Il comando `showmount` monitora i client. -``` +```bash showmount [-a] [-e] [host] ``` @@ -156,26 +156,26 @@ Le risorse condivise su un server NFS sono accessibili attraverso un punto di mo Se necessario, creare una cartella locale per il montaggio: -``` -$ sudo mkdir /mnt/nfs +```bash +sudo mkdir /mnt/nfs ``` Elenca le condivisioni NFS disponibili sul server: -``` +```bash $ showmount –e 172.16.1.10 /share * ``` Montare la condivisione NFS del server: -``` -$ mount –t nfs 172.16.1.10:/share /mnt/nfs +```bash +mount –t nfs 172.16.1.10:/share /mnt/nfs ``` L'automazione del montaggio può essere effettuata all'avvio del sistema con il file `/etc/fstab`: -``` +```bash $ sudo vim /etc/fstab 172.16.1.10:/share /mnt/nfs nfs defaults 0 0 ``` diff --git a/docs/guides/file_sharing/secure_ftp_server_vsftpd.uk.md b/docs/guides/file_sharing/secure_ftp_server_vsftpd.uk.md index ac22826b14..d3e96c219d 100644 --- a/docs/guides/file_sharing/secure_ftp_server_vsftpd.uk.md +++ b/docs/guides/file_sharing/secure_ftp_server_vsftpd.uk.md @@ -282,7 +282,9 @@ session required pam_loginuid.so Кожен віртуальний користувач має конфігураційний файл із зазначенням власного каталогу "local_root". Власником цього локального кореня є користувач "vsftpd" і група "nogroup". -Див. розділ [Налаштування віртуальних користувачів вище.](#setting-up-virtual-users) Щоб змінити право власності на каталог, введіть це в командному рядку: +(Див. розділ «Налаштування віртуальних користувачів») + +Щоб змінити право власності на каталог, введіть це в командному рядку: ```bash chown vsftpd.nogroup /var/www/sub-domains/whatever_the_domain_name_is/html diff --git a/docs/guides/file_sharing/sftp.it.md b/docs/guides/file_sharing/sftp.it.md index 5988ec74e5..d8a45fadcc 100644 --- a/docs/guides/file_sharing/sftp.it.md +++ b/docs/guides/file_sharing/sftp.it.md @@ -45,11 +45,11 @@ Tutti questi passaggi vi permetteranno di offrire un accesso SFTP sicuro ai vost I presupposti sono che: -* si è a proprio agio nell'eseguire i comandi dalla riga di comando. -* si può usare un editor a riga di comando, come `vi` (usato qui), `nano`, `micro`, ecc. -* si conoscono i comandi di base di Linux utilizzati per l'aggiunta di gruppi e utenti, o si è in grado di seguirli bene. -* il vostro sito web multisito è come questo: [Apache Multi Sito](../web/apache-sites-enabled.md) -* avete già installato `httpd` (Apache) sul server. +- si è a proprio agio nell'eseguire i comandi dalla riga di comando. +- si può usare un editor a riga di comando, come `vi` (usato qui), `nano`, `micro`, ecc. +- si conoscono i comandi di base di Linux utilizzati per l'aggiunta di gruppi e utenti, o si è in grado di seguirli bene. +- il vostro sito web multisito è come questo: [Apache Multi Sito](../web/apache-sites-enabled.md) +- avete già installato `httpd` (Apache) sul server. !!! note "Nota" @@ -61,13 +61,13 @@ Si tratta di scenari fittizi. Qualsiasi somiglianza con persone o siti reali è **Siti:** -* mybrokenaxel = (site1.com) user = mybroken -* myfixedaxel = (site2.com) user = myfixed +- mybrokenaxel = (site1.com) user = mybroken +- myfixedaxel = (site2.com) user = myfixed -**Amministratori** +**Amministratori:** -* Steve Simpson = ssimpson -* Laura Blakely = lblakely +- Steve Simpson = ssimpson +- Laura Blakely = lblakely ## Parte 2: SFTP chroot jail @@ -75,7 +75,7 @@ Si tratta di scenari fittizi. Qualsiasi somiglianza con persone o siti reali è L'installazione non è difficile. È sufficiente avere installato `openssh-server`, che probabilmente è già installato. Inserisci questo comando per essere sicuro: -``` +```bash dnf install openssh-server ``` @@ -87,17 +87,18 @@ La struttura del percorso della directory sarà `/var/www/sub-domains/[ext.domai Creare le directory di configurazione: -``` +```bash mkdir -p /etc/httpd/sites-available mkdir -p /etc/httpd/sites-enabled ``` Creare le directory web: -``` +```bash mkdir -p /var/www/sub-domains/com.site1/html mkdir -p /var/www/sub-domains/com.site2/html ``` + La proprietà di queste directory verrà gestita in seguito nell'applicazione di script. ### Configurazione `httpd` @@ -106,13 +107,13 @@ La proprietà di queste directory verrà gestita in seguito nell'applicazione di Modificare il file con l'editor preferito. L'autore utilizza `vi` qui: -``` +```bash vi /etc/httpd/conf/httpd.conf ``` e aggiungere questo in fondo al file: -``` +```bash Include /etc/httpd/sites-enabled ``` @@ -122,7 +123,7 @@ Salvare il file e uscire. È necessario creare due siti. Si creeranno le configurazioni in `/etc/httpd/sites-available` e si collegheranno a `../sites-enabled`: -``` +```bash vi /etc/httpd/sites-available/com.site1 ``` @@ -130,7 +131,7 @@ vi /etc/httpd/sites-available/com.site1 L'esempio utilizza solo il protocollo HTTP. Qualsiasi sito web reale necessita della configurazione del protocollo HTTPS, dei certificati SSL e di molto altro ancora. -``` +```bash ServerName www.site1.com ServerAdmin username@rockylinux.org @@ -154,13 +155,14 @@ vi /etc/httpd/sites-available/com.site1 ``` + Salva questo file ed esci. -``` +```bash vi /etc/httpd/sites-available/com.site2 ``` -``` +```bash ServerName www.site2.com ServerAdmin username@rockylinux.org @@ -184,17 +186,19 @@ vi /etc/httpd/sites-available/com.site2 ``` + Salvare il file e uscire. Una volta terminata la creazione dei due file di configurazione, collegarli all'interno di `/etc/httpd/sites-enabled`: -``` +```bash ln -s ../sites-available/com.site1 ln -s ../sites-available/com.site2 ``` + Abilitare e avviare il processo `httpd`: -``` +```bash systemctl enable --now httpd ``` @@ -204,15 +208,16 @@ Per il nostro ambiente di esempio, si presume che nessuno degli utenti sia ancor #### Amministratori -``` +```bash useradd -g wheel ssimpson useradd -g wheel lblakely ``` + Aggiungendo i nostri utenti al gruppo "wheel" si concede loro l'accesso `sudo`. È comunque necessaria una password per l'accesso `sudo`. Ci sono modi per aggirare questo problema, ma nessuno è così sicuro. Francamente, se avete problemi di sicurezza usando `sudo` sul vostro server, allora avete problemi molto più grandi con la vostra intera configurazione. Impostare le due password amministrative con password sicure: -``` +```bash passwd ssimpson Changing password for user ssimpson. New password: @@ -228,8 +233,8 @@ passwd: all authentication tokens updated successfully. Testate l'accesso al server con `ssh` per i due utenti amministrativi. Dovreste essere in grado di: -* utilizzare `ssh` per accedere come uno degli utenti amministrativi del server. (Esempio: `ssh lblakely@192.168.1.116` o `ssh lblakely@mywebserver.com`) -* si dovrebbe poter accedere a root con `sudo -s` inserendo la password dell'utente amministrativo. +- utilizzare `ssh` per accedere come uno degli utenti amministrativi del server. (Esempio: `ssh lblakely@192.168.1.116` o `ssh lblakely@mywebserver.com`) +- si dovrebbe poter accedere a root con `sudo -s` inserendo la password dell'utente amministrativo. Se questo funziona per tutti gli utenti amministrativi, sarete pronti per la fase successiva. @@ -237,24 +242,24 @@ Se questo funziona per tutti gli utenti amministrativi, sarete pronti per la fas È necessario aggiungere i nostri utenti web. La struttura della cartella `../html` esiste già, quindi non si vuole crearla quando si aggiunge l'utente, ma *si vuole* specificarla. Inoltre, non si vuole effettuare alcun login se non con SFTP, quindi è necessario utilizzare una shell che neghi i login. -``` +```bash useradd -M -d /var/www/sub-domains/com.site1/html -g apache -s /usr/sbin/nologin mybroken useradd -M -d /var/www/sub-domains/com.site2/html -g apache -s /usr/sbin/nologin myfixed ``` Scomponiamo un po' questi comandi: -* L'opzione `-M` dice di *non* creare la directory home standard per l'utente. -* `-d` specifica che ciò che viene dopo è la directory *effettiva*. -* `-g` dice che il gruppo a cui appartiene questo utente è `apache`. -* `-s` dice che la shell assegnata è `/usr/sbin/nologin` -* Alla fine si trova il nome utente effettivo dell'utente. +- L'opzione `-M` dice di *non* creare la directory home standard per l'utente. +- `-d` specifica che ciò che viene dopo è la directory *effettiva*. +- `-g` dice che il gruppo a cui appartiene questo utente è `apache`. +- `-s` dice che la shell assegnata è `/usr/sbin/nologin` +- Alla fine si trova il nome utente effettivo dell'utente. **Nota:** Per un server Nginx, si usa `nginx` come gruppo. I nostri utenti SFTP hanno ancora bisogno di password. Impostare una password sicura per ciascuno di essi. L'output del comando è già stato visualizzato sopra: -``` +```bash passwd mybroken passwd myfixed ``` @@ -273,24 +278,25 @@ passwd myfixed Per prima cosa, effettuare la modifica manuale necessaria: -``` +```bash vi /etc/ssh/sshd_config ``` In fondo al file si trova questo: -``` +```bash # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server ``` Si desidera modificare il testo come segue: -``` +```bash # override default of no subsystems # Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp ``` + Salvare e uscire dal file. Il `sftp-server` e l'`internal-sftp` fanno parte di OpenSSH. L'`internal-sftp`, pur non essendo molto diverso dallo `sftp-server`, semplifica le configurazioni usando `ChrootDirectory` per forzare una diversa root del file system sui client. Ecco perché si usa `internal-sftp`. @@ -303,13 +309,13 @@ Perché state creando un modello e uno script per la parte successiva? Il motivo Per prima cosa, create il vostro template: -``` +```bash vi /usr/local/sbin/sshd_template ``` Questo template avrà le seguenti caratteristiche: -``` +```bash Match User replaceuser PasswordAuthentication yes ChrootDirectory replacedirectory @@ -324,11 +330,10 @@ Match User replaceuser Si vuole anche una cartella per i file utente che verranno creati dal template: -``` +```bash mkdir /usr/local/sbin/templates ``` - #### Lo script e le modifiche di `sshd_config` Con i rilasci di Rocky Linux 8.6 e 9.0, una nuova opzione per il file `sshd_config` consente di effettuare configurazioni drop-in. Si tratta di un **GRANDE** cambiamento. Ciò significa che si apporterà una singola modifica aggiuntiva al file `sshd_config` e il nostro script costruirà le modifiche a sftp in un file di configurazione separato. Questa nuova modifica rende le cose ancora più sicure. La sicurezza è buona!! @@ -337,13 +342,13 @@ Grazie alle modifiche introdotte per il file `sshd_config` in Rocky Linux 8.6 e Per iniziare, creare la directory: -``` +```bash mkdir /etc/ssh/sftp ``` Ora fate una copia di backup di `sshd_config`: -``` +```bash cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` @@ -355,13 +360,13 @@ Include /etc/ssh/sftp/sftp_config Salvare le modifiche e uscire dal file. È necessario riavviare `sshd`, ma il nostro script lo farà per noi dopo aver aggiornato il file `sftp_config`, quindi create lo script ed eseguitelo. -``` +```bash vi /usr/local/sbin/webuser ``` E inserite questo codice: -``` +```bash #!/bin/bash # script to populate the SSHD configuration for web users. @@ -433,7 +438,7 @@ Il chroot SFTP richiede che il percorso indicato in `sshd_config` sia di proprie Rendere lo script eseguibile: -``` +```bash chmod +x /usr/local/sbin/webuser ``` @@ -443,17 +448,18 @@ Eseguire lo script per i due domini di prova. Per prima cosa, eseguire un test con `ssh` da un'altra macchina alla nostra macchina host come uno degli utenti SFTP. Si dovrebbe ricevere questo messaggio dopo aver inserito la password: -``` +```bash This service allows sftp connections only. ``` + #### Test con strumenti grafici Se *ricevete* questo messaggio, la prossima cosa da fare è testare l'accesso SFTP. Per facilitare i test, è possibile utilizzare un'applicazione FTP grafica che supporti SFTP, come Filezilla. In questi casi, i campi avranno un aspetto simile a questo: -* **Host:** sftp://hostname_o_IP_del_server -* **Username:** (Esempio: myfixed) -* **Password:** (la password dell'utente SFTP) -* **Port:** Se si utilizzano SSH e SFTP sulla porta 22 predefinita, immettere tale porta +- **Host:** sftp://hostname_o_IP_del_server +- **Username:** (Esempio: myfixed) +- **Password:** (la password dell'utente SFTP) +- **Port:** Se si utilizzano SSH e SFTP sulla porta 22 predefinita, immettere tale porta Una volta compilato, si può fare clic sul pulsante "Quickconnect" (Filezilla) e ci si collegherà alla directory `../html` del sito appropriato. Fare doppio clic sulla directory "html" per posizionarsi al suo interno e provare a inviare un file nella directory. Se il risultato è positivo, tutto funziona correttamente. @@ -461,13 +467,13 @@ Una volta compilato, si può fare clic sul pulsante "Quickconnect" (Filezilla) e È possibile eseguire tutte queste operazioni dalla riga di comando su una macchina con SSH installato (la maggior parte delle installazioni Linux). Ecco una breve panoramica del metodo di connessione da riga di comando e di alcune opzioni: -* sftp username (Esempio: myfixed@ hostname o IP del server: sftp myfixed@192.168.1.116) -* Immettere la password quando viene richiesta -* cd html (passare alla directory html) -* pwd (dovrebbe mostrare che ci si trova nella directory html) -* lpwd (dovrebbe mostrare la directory di lavoro locale) -* lcd PATH (dovrebbe cambiare la propria directory di lavoro locale in qualcosa che si vuole utilizzare) -* put filename (copierà un file nella directory `..html`.) +- sftp username (Esempio: myfixed@ hostname o IP del server: sftp myfixed@192.168.1.116) +- Immettere la password quando viene richiesta +- cd html (passare alla directory html) +- pwd (dovrebbe mostrare che ci si trova nella directory html) +- lpwd (dovrebbe mostrare la directory di lavoro locale) +- lcd PATH (dovrebbe cambiare la propria directory di lavoro locale in qualcosa che si vuole utilizzare) +- put filename (copierà un file nella directory `..html`.) Per un elenco esaustivo delle opzioni e altro ancora, consultare la pagina del manuale [SFTP](https://man7.org/linux/man-pages/man1/sftp.1.html). @@ -475,7 +481,7 @@ Per un elenco esaustivo delle opzioni e altro ancora, consultare la pagina del m Per i nostri domini fittizi, vogliamo creare un paio di file `index.html` con cui popolare la directory `../html`. Una volta creati, è necessario inserirli nella directory di ciascun dominio con le credenziali SFTP di quel dominio. Questi file sono semplicistici. Si vuole solo verificare che i siti siano attivi e funzionanti e che SFTP funzioni come previsto. Ecco un esempio di questo file. Se lo si desidera, è possibile modificarlo: -``` +```html @@ -494,10 +500,10 @@ Per i nostri domini fittizi, vogliamo creare un paio di file `index.html` con cu È necessario modificare il file _hosts_ sulla propria workstation per verificare che questi file vengano visualizzati e caricati come previsto. Per Linux sarà `sudo vi /etc/hosts` e aggiungete gli IP e i nomi degli host con cui state facendo i test in questo modo: -``` -127.0.0.1 localhost -192.168.1.116 www.site1.com site1.com -192.168.1.116 www.site2.com site2.com +```bash +127.0.0.1 localhost +192.168.1.116 www.site1.com site1.com +192.168.1.116 www.site2.com site2.com # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet @@ -510,7 +516,7 @@ ff02::2 ip6-allrouters Per i domini reali, si consiglia di popolare i server DNS con gli host di cui sopra. Tuttavia, è possibile utilizzare questo *Poor Man's DNS* per testare qualsiasi dominio, anche se non è stato attivato sui server DNS reali. -Aprite il browser web e assicuratevi che il file `index.html` per ogni dominio venga visualizzato inserendo l'URL nella barra degli indirizzi del browser. (Esempio: "http://site1.com") Se i file index di prova vengono caricati, tutto funziona correttamente. +Aprite il browser web e assicuratevi che il file `index.html` per ogni dominio venga visualizzato inserendo l'URL nella barra degli indirizzi del browser. (Esempio: ) se i file `index` di prova vengono caricati, tutto funziona correttamente. ## Parte 3: Accesso amministrativo con coppie di chiavi SSH @@ -520,26 +526,26 @@ Si noti che qui si utilizzeranno i concetti discussi nel documento [SSH Public a Dalla riga di comando di una delle stazioni di lavoro dell'utente amministrativo (esempio: lblakely), eseguire le seguenti operazioni: -``` +```bash ssh-keygen -t rsa ``` Che vi darà questo risultato: -``` +```text Generating public/private rsa key pair. Enter file in which to save the key (/home/lblakely/.ssh/id_rsa): ``` Premete invio per creare la chiave privata nella posizione indicata. Si aprirà questa finestra di dialogo: -``` +```text Enter passphrase (empty for no passphrase): ``` Dovrete decidere personalmente se avete bisogno di una passphrase per questo passaggio. L'autore si limita sempre a premere invio qui. -``` +```text Enter same passphrase again: ``` @@ -553,13 +559,13 @@ Il passo successivo consiste nell'esportare la nostra chiave sul server. In real L'utente può inviare la chiave al server in modo sicuro con `ssh-id-copy` al momento della creazione: -``` +```bash ssh-id-copy lblakely@192.168.1.116 ``` -Il server richiederà una volta la password dell'utente e copierà la chiave in _authorized_keys_. Riceverete anche voi questo messaggio: +Il server richiederà una volta la password dell'utente e copierà la chiave in authorized_keys. Riceverete anche voi questo messaggio: -``` +```bash Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'lblakely@192.168.1.116'" @@ -574,37 +580,37 @@ Se tutto ha funzionato come previsto e le chiavi per gli amministratori sono sta Per eseguire questo passaggio, è necessario modificare nuovamente `sshd_config` e, come in precedenza, è necessario eseguire prima un backup del file: -``` +```bash cp -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` Quindi, modificare il file `sshd_config`: -``` +```bash vi /etc/ssh/sshd_config ``` Si desidera disattivare le password con tunnel. Trovate questa riga nella configurazione: -``` +```text PasswordAuthentication yes ``` Cambiatelo in "no" - notate che la semplice annotazione di questa riga fallirà, poiché l'impostazione predefinita è sempre "sì". -``` +```text PasswordAuthentication no ``` L'autenticazione a chiave pubblica è attiva per impostazione predefinita, ma è bene assicurarsi che lo sia rimuovendo il commento davanti a questa riga: -``` +```text #PubkeyAuthentication yes ``` In modo che si legga: -``` +```text PubkeyAuthentication yes ``` @@ -612,7 +618,7 @@ Questo rende il nostro file `sshd_config` in qualche modo autodocumentante. Salvare le modifiche. Incrociate le dita e riavviate `sshd`: -``` +```bash systemctl restart sshd ``` @@ -622,7 +628,7 @@ Il tentativo di accedere al server come uno degli utenti amministrativi utilizza In pratica l'avete già fatto. Se si tenta di accedere al server con l'utente root, si otterrà il seguente risultato: -``` +```bash root@192.168.1.116: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). ``` @@ -630,31 +636,31 @@ Ma si vuole garantire che qualcuno non possa creare una chiave pubblica/privata Come per tutti gli altri passaggi, quando si modifica il file `sshd_config`, è necessario fare una copia di backup del file prima di continuare: -``` +```bash cp -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` Modificare `sshd_config`: -``` +```bash vi /etc/ssh/sshd_config ``` Trovate questa linea: -``` +```text PermitRootLogin yes ``` Cambiarlo in "no": -``` +```text PermitRootLogin no ``` Salvate, uscite dal file e riavviate `sshd`: -``` +```bash systemctl restart sshd ``` @@ -668,26 +674,26 @@ Non è ancora stato discusso cosa succede quando si aggiunge un altro amministra Questa soluzione presuppone l'accesso fisico al server e che il server sia hardware fisico e non virtuale (container o VM): -* Aggiungere l'utente al gruppo "wheel" sul server SFTP -* Chiedete all'utente di generare le sue chiavi pubbliche e private SSH -* Utilizzando un'unità USB, copiate la chiave pubblica sull'unità, portatela fisicamente sul server e installatela manualmente nella directory del nuovo amministratore di sistema `/home/[nomeutente]/.ssh` +- Aggiungere l'utente al gruppo "wheel" sul server SFTP +- Chiedete all'utente di generare le sue chiavi pubbliche e private SSH +- Utilizzando un'unità USB, copiate la chiave pubblica sull'unità, portatela fisicamente sul server e installatela manualmente nella directory del nuovo amministratore di sistema `/home/[nomeutente]/.ssh` ### Soluzione due - modifica temporanea di `sshd_config` Questa soluzione è soggetta all'errore umano, ma poiché non è praticata spesso, è probabilmente accettabile se eseguita con cura: -* Aggiungere l'utente al gruppo "wheel" sul server SFTP -* Chiedete a un altro amministratore di sistema, che ha già un'autenticazione basata su chiavi, di attivare temporaneamente "PasswordAuthentication yes" nel file `sshd_config` e di riavviare `sshd` -* Chiedete al nuovo amministratore di sistema di eseguire `ssh-copy-id` utilizzando la propria password per copiare la chiave ssh sul server. +- Aggiungere l'utente al gruppo "wheel" sul server SFTP +- Chiedete a un altro amministratore di sistema, che ha già un'autenticazione basata su chiavi, di attivare temporaneamente "PasswordAuthentication yes" nel file `sshd_config` e di riavviare `sshd` +- Chiedete al nuovo amministratore di sistema di eseguire `ssh-copy-id` utilizzando la propria password per copiare la chiave ssh sul server. ### Soluzione tre - script del processo Questo processo utilizza un amministratore di sistema che ha già un accesso basato su chiavi e uno script che deve essere eseguito con `bash [nome-script]` per ottenere lo stesso risultato della "Soluzione due" di cui sopra: -* modificare manualmente il file `sshd_config` e rimuovere la riga rimarcata che assomiglia a questa: `#PasswordAuthentication no`. Questa riga documenta il processo di disattivazione dell'autenticazione tramite password, ma sarà d'intralcio allo script sottostante, perché il nostro script cercherà la prima occorrenza di `PasswordAuthentication no` e successivamente la prima occorrenza di `PasswordAuthentication yes`. Se si rimuove questa riga, lo script funzionerà correttamente. -* creare uno script sul server SFTP chiamato "quickswitch", o come lo si vuole chiamare. Il contenuto di questo script è il seguente: +- modificare manualmente il file `sshd_config` e rimuovere la riga rimarcata che assomiglia a questa: `#PasswordAuthentication no`. Questa riga documenta il processo di disattivazione dell'autenticazione tramite password, ma sarà d'intralcio allo script sottostante, perché il nostro script cercherà la prima occorrenza di `PasswordAuthentication no` e successivamente la prima occorrenza di `PasswordAuthentication yes`. Se si rimuove questa riga, lo script funzionerà correttamente. +- creare uno script sul server SFTP chiamato "quickswitch", o come lo si vuole chiamare. Il contenuto di questo script è il seguente: -``` +```bash #!/bin/bash # for use in adding a new system administrator @@ -701,7 +707,8 @@ read yn /usr/bin/systemctl restart sshd echo "Changes reversed" ``` -Spiegazione dello script: Non rendere questo script eseguibile. Il motivo è che non si vuole che venga eseguito accidentalmente. Lo script viene eseguito (come indicato sopra) in questo modo: `bash /usr/local/sbin/quickswitch`. Questo script crea una copia di backup del file `sshd_config` proprio come tutti gli altri esempi precedenti. Quindi modifica il file `sshd_config` esistente e cerca nel file la *PRIMA* presenza di `PasswordAuthentication no` e la modifica in `PasswordAuthentication yes` quindi riavvia `sshd` e attende che l'utente dello script prema INVIO prima di proseguire. L'amministratore di sistema che esegue lo script sarebbe in comunicazione con il nuovo amministratore di sistema e, una volta che quest'ultimo esegue `ssh-copy-id` per copiare la sua chiave sul server, l'amministratore di sistema che sta eseguendo lo script preme invio e inverte la modifica. + +Spiegazione dello script: Non rendere questo script eseguibile. Il motivo è che non si vuole che venga eseguito accidentalmente. Lo script viene eseguito (come indicato sopra) in questo modo: `bash /usr/local/sbin/quickswitch`. Questo script crea una copia di backup del file `sshd_config` proprio come tutti gli altri esempi precedenti. Quindi modificare il file `sshd_config` esistente e cercare nel file la *PRIMA* presenza di `PasswordAuthentication no` e modificarla in `PasswordAuthentication yes` quindi riavviare `sshd` e attendere che l'utente dello script prema ++enter++ prima di proseguire. L'amministratore di sistema che esegue lo script sarebbe in comunicazione con il nuovo amministratore di sistema e, una volta che quest'ultimo esegue `ssh-copy-id` per copiare la sua chiave sul server, l'amministratore di sistema che sta eseguendo lo script preme invio e inverte la modifica. In breve, esistono molti modi per aggiungere un altro amministratore di sistema dopo l'implementazione delle procedure di blocco SSH. diff --git a/docs/guides/isos/iso_creation.uk.md b/docs/guides/isos/iso_creation.uk.md new file mode 100644 index 0000000000..abdc35cb9b --- /dev/null +++ b/docs/guides/isos/iso_creation.uk.md @@ -0,0 +1,121 @@ +--- +title: Створення власного ISO Rocky Linux +author: Howard Van Der Wal +contributors: Steven Spencer, Ganna Zhyrnova +tested with: 9.5 +tags: + - create + - custom "Власний заголовок" + - ISO +--- + +## Вступ + +Вам може знадобитися створити власний ISO з багатьох причин. Можливо, ви хочете змінити процес завантаження, додати певні пакети або оновити файл конфігурації. + +Цей посібник проінструктує вас від початку до кінця про те, як створити свій власний Rocky Linux ISO. + +## Передумови + +- 64-бітна машина під керуванням Rocky Linux 9 створює новий образ ISO. +- ISO-образ DVD Rocky Linux 9. +- Файл `kickstart` для застосування до ISO. +- Прочитайте документацію Lorax [Quickstart](https://weldr.io/lorax/lorax.html#quickstart) і [mkksiso](https://weldr.io/lorax/mkksiso.html), щоб ознайомитися зі створенням `boot.iso` `Anaconda`. + +## Встановлення та налаштування пакета + +- Встановлення пакету `lorax`: + +```bash +sudo dnf install -y lorax +``` + +## Створення ISO за допомогою файлу kickstart + +- Виконайте команду `mkksiso`, щоб додати файл `kickstart`, а потім створіть новий ISO: + +```bash +mkksiso --ks +``` + +- Нижче наведено приклад файлу `kickstart` `example-ks.cfg`, який налаштовує середовище Rocky Linux 9.5 `Server With GUI`: + +```bash +lang en_GB +keyboard --xlayouts='us' +timezone Asia/Tokyo --utc +reboot +cdrom +bootloader --append="rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M" +zerombr +clearpart --all --initlabel +autopart +network --bootproto=dhcp +firstboot --disable +selinux --enforcing +firewall --enabled +%packages +@^server-product-environment +%end +``` + +## Додавання репозиторію з його пакетами до образу ISO + +- Переконайтеся, що репозиторій, який ви хочете додати, має всередині каталог `repodata`. Якщо ні, ви можете створити це за допомогою команди `createrepo_c` і встановити за допомогою `sudo dnf install -y createrepo_c` +- Додайте репозиторій до свого файлу `kickstart`, використовуючи такий синтаксис: + +```bash + +repo --name=extra-repo --baseurl=file:///run/install/repo// +``` + +- Додайте свій репозиторій за допомогою прапорця `--add` за допомогою інструмента `mkksiso`: + +```bash +mkksiso --add --ks +``` + +- Ви можете побачити додаткові деталі цього процесу за допомогою репозиторію `baseos` у прикладі нижче +- Репозиторій `base os` буде завантажено локально разом із усіма його пакетами: + +```bash +dnf reposync -p ~ --download-metadata --repo=baseos +``` + +- Потім додайте репозиторій до файлу `kickstart`: + +```bash +repo --name=extra-repo --baseurl=file:///run/install/repo/baseos/ +``` + +- Файл `kickstart` виглядатиме так: + +```bash +lang en_GB +keyboard --xlayouts='us' +timezone Asia/Tokyo --utc +reboot +cdrom +bootloader --append="rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M" +zerombr +clearpart --all --initlabel +autopart +network --bootproto=dhcp +firstboot --disable +selinux --enforcing +firewall --enabled +%packages +@^server-product-environment +repo --name=extra-repo --baseurl=file:///run/install/repo/baseos/ +%end +``` + +- Потім введіть команду `mkksiso` безпосередньо до каталогу сховища та створіть ISO: + +```bash +mkksiso --add ~/baseos --ks example-ks.cfg ~/Rocky-9.5-x86_64-dvd.iso ~/Rocky-9.5-x86_64-dvd-new.iso +``` + +## Висновок + +Тут обговорювалося лише кілька варіантів налаштування та створення власного ISO Rocky Linux. Для подальших способів, включаючи зміну аргументів командного рядка ядра, автор наполегливо рекомендує ознайомитися з документацією [mkksiso](https://weldr.io/lorax/mkksiso.html) більш детально. diff --git a/docs/guides/network/glances_network_monitoring.uk.md b/docs/guides/network/glances_network_monitoring.uk.md new file mode 100644 index 0000000000..e1fc946a0d --- /dev/null +++ b/docs/guides/network/glances_network_monitoring.uk.md @@ -0,0 +1,220 @@ +--- +title: Моніторинг мережі та ресурсів з Glances +author: Alex Zolotarov +contributors: Steven Spencer +tested_with: 9 +tags: + - моніторинг + - мережа +--- + +# Вступ + +З мінімальними зусиллями цей посібник покаже вам, як налаштувати гідний **моніторинг мережі або ресурсів**. +З точки зору автора, Glances схожий на `vim` в інструментах моніторингу. + +## Про Glances + +Glances — це міжплатформний інструмент моніторингу системи з відкритим кодом. +Це дозволяє вам відстежувати різні аспекти вашої системи в режимі реального часу, такі як ЦП, пам’ять, диск, використання мережі тощо. +Він також дозволяє контролювати запущені процеси, користувачів, які ввійшли в систему, температуру, напругу, швидкість вентилятора тощо. +Він також підтримує моніторинг контейнерів і різні системи керування контейнерами, такі як Docker і LXC. +Інформаційна панель представляє інформацію в зручному для читання вигляді, а також може виконувати віддалений моніторинг систем через веб-інтерфейс або інтерфейс командного рядка. +Його легко встановити та використовувати, його можна налаштувати, щоб відображати лише ту інформацію, яка вас цікавить. + +## Передумови + +- Сервер або контейнер +- Привілеї root +- Встановлений репозиторій EPEL + +## Встановлення пакетів + +**Спочатку встановіть репозиторій EPEL (додаткові пакети для Enterprise Linux):** + +```bash +dnf install -y epel-release +``` + +Далі встановіть **Glances** + +```bash +dnf install -y glances +``` + +Тепер ви можете контролювати все, що вам потрібно. + +Впишіть `glances` для запуску glances. + +## Веб-інтерфейс + +Ви можете отримати доступ до поглядів навіть за допомогою веб-браузера, вам просто потрібно передати один прапорець `-w`: + +```bash +glances -w +``` + +Надіславши це, ви побачите: + +```bash +Glances Web User Interface started on http://0.0.0.0:61208/ +``` + +Ви можете отримати до нього доступ за допомогою IP-адреси або зворотного проксі-сервера до доменного імені. + +## Як виглядає Glances + +За замовчуванням ви можете бачити всі свої мережеві інтерфейси, середні значення навантаження, графіки навантаження, контейнери, сповіщення та процеси. + +![glances-dashboard](./images/glances-dashboard.webp) + +## Інтерактивні команди + +**Повний потенціал Glances полягає в його ярликах, оскільки він приховує багато мережевих показників за замовчуванням.** + +Наступні команди (натиснута клавіша) підтримуються в Glances: + +- \++enter++ : Встановлює фільтр процесу + +!!! NOTE "Примітка" + +``` +У macOS використовуйте ++ctrl+h++, щоб видалити фільтр. +``` + +Фільтр є шаблоном регулярного виразу: + +- `gnome`: відповідає всім процесам, починаючи з рядка `gnome` + +- `.*gnome.*`: відповідає всім процесам, що містять рядок `gnome` + +- \++"a"++, Сортує список процесів автоматично + +- Якщо ЦП `>70%`, сортує процеси за використанням ЦП + +- Якщо MEN `>70%`, сортує процеси за використанням ПАМ'ЯТІ + +- Якщо CPU iowait `>60%`, сортує процеси за читанням і записом введення-виведення + +- \++a++, вмикає або вимикає процес моніторингу програми + +- \++"b"++, перемикання між біт/с або байт/с для мережевого введення/виведення + +- \++b++, Переглядає лічильники дискового введення/виведення за секунду + +- \++"c"++, Сортує процеси за використанням ЦП + +- \++c++, Вмикає або вимикає хмарну статистику + +- \++"d"++, Показує або приховує статистику дискового введення/виведення + +- \++d++, Вмикає або вимикає статистику Docker + +- \++"e"++, Вмикає або вимикає розширену статистику + +- \++e++, Стирає поточний фільтр процесу + +- \++"f"++, Показує або приховує статистику моніторингу системи та папок + +- \++f++, Перемикання між використовуваною файловою системою та вільним місцем + +- \++"g"++, Створює графіки для поточної історії + +- \++g++, Вмикає або вимикає статистику GPU + +- \++"h"++, Показує або приховує екран довідки + +- \++"i"++, Сортує процеси за швидкістю введення-виведення + +- \++i++, Показує або приховує IP-модуль + +- `+`, Підвищує приємний рівень вибраного процесу / Знижує пріоритет (необхідне право) - Тільки в автономному режимі. + +- `-`, Зменшує приємний рівень вибраного процесу / Вищий пріоритет (потрібне право) - Лише в автономному режимі. + +- \++"k"++, Знищує вибраний процес (потрібне право) - Лише в автономному режимі. + +- \++k++, показує або приховує з'єднання TCP + +- \++"l"++, Показує або приховує повідомлення журналу + +- \++"m"++, Сортує процеси за використанням MEM + +- \++m++, Скидає підсумок процесів мін/макс + +- \++"n"++, Показує або приховує статистику мережі + +- \++n++, Показує або приховує поточний час + +- \++"p"++, Сортує процеси за назвою + +- \++p++, Вмикає або вимикає статистику портів + +- \++"q"++ або ++esc++ або ++ctrl+c++, Завершує поточний сеанс Glances + +- \++q++, Показує або приховує модуль IRQ + +- \++"r"++, Скидання історії + +- \++r++, показує або приховує плагін RAID + +- \++"s"++, показує або приховує статистику датчиків + +- \++s++, Вмикає або вимикає спарклайни + +- \++"t"++, Сортує процес за часом ЦП (TIME+) + +- \++t++, Розглядає мережевий ввід-вивід як комбінацію + +- \++"u"++, Сортує процеси за USER + +- \++u++, Переглядає сукупний мережевий ввід-вивід + +- \++"w"++, Видаляє готові повідомлення журналу попереджень + +- \++w++, Показує або приховує модуль Wi-Fi + +- \++"x"++, Видаляє попередження про завершення та критичні повідомлення журналу + +- \++"z"++, Показує або приховує статистику процесів + +- \++0++, Вмикає або вимикає режим Irix/Solaris. Розділяє використання ЦП завданням на загальну кількість ЦП + +- \++1++, Перемикання між глобальною статистикою процесора та статистикою кожного процесора + +- \++2++, Вмикає або вимикає ліву бічну панель + +- \++3++, Вмикає або вимикає модуль швидкого перегляду + +- \++4++, Вмикає або вимикає модуль швидкого перегляду та завантаження + +- \++5++, Вмикає або вимикає головне меню (QuickLook, CPU, MEM, SWAP і LOAD) + +- \++6++, Вмикає або вимикає середній режим GPU + +- \++9++, Перемикає інтерфейс користувача між чорним і білим + +- \++slash++, Перемикання між командним рядком процесу та назвою команди + +- \++f5++ або ++ctrl+"R"++, Оновлює інтерфейс користувача + +- \++left++, Навігація вліво через процес сортування + +- \++right++, Навігація прямо через процес сортування + +- \++up++, Вгору в списку процесів + +- \++down++, Вниз в списку процесів + +У браузері клієнта Glances (доступний через аргумент командного рядка `--browser`): + +- \++enter++, Запускає вибраний сервер +- \++up++, Вгору в списку серверів +- \++down++, Вниз в списку серверів +- \++q++ або ++esc++, Вихід із Glances + +## Висновок + +Хоча Glances не може точно замінити такі інструменти, як Grafana, він все одно є чудовою альтернативою, якщо у вас немає часу на налаштування складних панелей моніторингу. +Ви можете розгорнути його за лічені секунди та отримати точні показники в Grafana з Prometheus. +Веб-інтерфейс не такий універсальний, як у Grafana. Якщо ви можете використовувати термінал, ви повинні це зробити. diff --git a/docs/guides/rsod/2024/summer-of-docs-2024.uk.md b/docs/guides/rsod/2024/summer-of-docs-2024.uk.md index 0acb3603dd..f444f2f1ce 100644 --- a/docs/guides/rsod/2024/summer-of-docs-2024.uk.md +++ b/docs/guides/rsod/2024/summer-of-docs-2024.uk.md @@ -2,7 +2,11 @@ title: Rocky Linux Summer of Docs 2024 --- -# Rocky Linux Summer of Docs 2024 +!!! NOTE "Проект завершено" + +``` +Цей проект завершився. Слідкуйте за майбутніми програмами RSOD. +``` ## Проект: Покращення документації користувача робочого столу diff --git a/docs/guides/rsod/index.uk.md b/docs/guides/rsod/index.uk.md new file mode 100644 index 0000000000..b8f6eb644c --- /dev/null +++ b/docs/guides/rsod/index.uk.md @@ -0,0 +1,11 @@ +--- +title: Rocky Summer of Docs +author: Steven Spencer +contributors: null +--- + +## Вступ + +Rocky Summer of Docs (RSOD) — це програма, яка стартувала влітку 2024 року. Базуючись на Google Summer of Code, RSOD закликає нових і існуючих учасників документації додавати документацію на основі конкретних цілей команди документації. Сподіваюся пропонувати цю програму щорічно. + +Якщо у вас є пропозиції щодо майбутніх проектів RSOD, ми будемо раді їх почути. Ви можете зв’язатися з нами на [каналі Documentation Team Mattermost](https://chat.rockylinux.org/rocky-linux/channels/documentation). diff --git a/docs/guides/security/freeradius_radius_server.uk.md b/docs/guides/security/freeradius_radius_server.uk.md new file mode 100644 index 0000000000..d316bfb516 --- /dev/null +++ b/docs/guides/security/freeradius_radius_server.uk.md @@ -0,0 +1,106 @@ +--- +title: Сервер RADIUS FreeRADIUS +author: Neel Chauhan +contributors: Steven Spencer +tested_with: 9.4 +tags: + - безпека +--- + +# Сервер FreeRADIUS 802.1X + +## Вступ + +RADIUS — це протокол AAA (автентифікація, авторизація та облік) для керування доступом до мережі. [FreeRADIUS](https://www.freeradius.org/) — це де-факто сервер RADIUS для Linux та інших Unix-подібних систем. + +## Передумови та припущення + +Нижче наведено мінімальні вимоги до цієї процедури: + +- Можливість запускати команди від імені користувача root або використовувати `sudo` для підвищення привілеїв. +- Клієнт RADIUS, наприклад маршрутизатор, комутатор або точка доступу Wi-Fi + +## Встановлення FreeRADIUS + +Ви можете встановити FreeRADIUS зі сховищ `dnf`: + +```bash +dnf install -y freeradius +``` + +## Налаштування FreeRADIUS + +Після встановлення пакетів вам спочатку потрібно створити сертифікати шифрування TLS для FreeRADIUS: + +```bash +cd /etc/raddb/certs +./bootstrap +``` + +Згодом вам потрібно буде додати користувачів для автентифікації. Відкрийте файл `users`: + +```bash +cd .. +vi users +``` + +У файл вставте наступне: + +```bash +user Cleartext-Password := "password" +``` + +Замініть `user` і `password` на потрібне ім'я користувача та пароль. + +Пам’ятайте, що пароль не хешується, тож якщо зловмисник отримає файл `users`, він може отримати неавторизований доступ до вашої захищеної мережі. + +Ви також можете використовувати хешований пароль `MD5` або хешований `Crypt`. Щоб згенерувати хешований пароль MD5, виконайте: + +```bash +echo -n password | md5sum | awk '{print $1}' +``` + +Замініть `password` на потрібний пароль. + +Ви отримаєте хеш `5f4dcc3b5aa765d61d8327deb882cf99`. У файлі `users` замість цього вставте наступне: + +```bash +user MD5-Password := "5f4dcc3b5aa765d61d8327deb882cf99" +``` + +Вам також потрібно буде визначити клієнтів. Це зроблено для запобігання неавторизованому доступу до нашого сервера RADIUS. Відредагуйте файл `clients.conf`: + +```bash +vi clients.conf +``` + +Вставте наступне: + +```bash +client 172.20.0.254 { + secret = secret123 +} +``` + +Замініть `172.20.0.254` і `secret123` на IP-адресу та секретне значення, які використовуватимуть клієнти. Повторіть це для інших клієнтів. + +## Увімкнення FreeRADIUS + +Після початкового налаштування ви можете запустити `radiusd`: + +```bash +systemctl enable --now radiusd +``` + +## Налаштування RADIUS на комутаторі + +Після налаштування сервера FreeRADIUS ви налаштуєте клієнт RADIUS на комутаторі MikroTik автора як дротовий клієнт 802.1X: + +```bash +/radius +add address=172.20.0.12 secret=secret123 service=dot1x +/interface dot1x server +add interface=combo3 +``` + +Замініть `172.20.0.12` на IP-адресу сервера FreeRADIUS, а `secret123` — на встановлений раніше секрет. diff --git a/docs/guides/security/generating_ssl_keys_lets_encrypt.uk.md b/docs/guides/security/generating_ssl_keys_lets_encrypt.uk.md index 3459ffb661..a42a3030b1 100644 --- a/docs/guides/security/generating_ssl_keys_lets_encrypt.uk.md +++ b/docs/guides/security/generating_ssl_keys_lets_encrypt.uk.md @@ -9,8 +9,6 @@ tags: - certbot --- -# Генерація ключів SSL - Let's Encrypt - ## Передумови та припущення - Володіння командним рядком @@ -18,7 +16,7 @@ tags: - Знання текстових редакторів командного рядка (у цьому прикладі використовується *vi*) - Веб-сервер, відкритий для світу та працює на порту 80 (http) - Знайомство з *ssh* (захищена оболонка) і можливість доступу до вашого сервера за допомогою *ssh* -- Усі команди припускають, що ви або користувач root, або використовували *sudo* для отримання доступу root. +- Усі команди припускають, що ви є користувачем root або що ви використовували `sudo` для отримання доступу root ## Вступ @@ -28,7 +26,7 @@ tags: ## Встановлення -Щоб виконати наступні кроки, скористайтеся *ssh* для входу на свій сервер. Якщо повне DNS-ім’я вашого сервера було www.myhost.com, ви б використовували: +Щоб виконати наступні кроки, скористайтеся `ssh` для входу на свій сервер. Якщо повне DNS-ім’я вашого сервера було www.myhost.com, ви б використовували: ```bash ssh -l root www.myhost.com @@ -46,7 +44,7 @@ ssh -l username www.myhost.com sudo -s ``` -У цьому випадку вам знадобляться облікові дані вашого користувача *sudo*, щоб отримати доступ до системи як root. +У цьому випадку вам знадобляться облікові дані вашого користувача, щоб отримати доступ до системи як root. Let's Encrypt використовує пакет під назвою *certbot*, який потрібно встановити через репозиторії EPEL. Додайте їх першими: @@ -74,9 +72,9 @@ dnf install certbot python3-certbot-nginx ## Отримання сертифіката Let's Encrypt для сервера Apache -Є два способи отримати ваш сертифікат Let's Encrypt: або за допомогою команди, щоб змінити файл конфігурації HTTP для вас, або отримати сертифікат. Якщо ви використовуєте процедуру багатосайтового налаштування, запропоновану для одного чи кількох сайтів у процедурі [Мультисайтове налаштування веб-сервера Apache](../web/apache-sites-enabled.md), тоді ви захочете лише отримати свій сертифікат. +Ви можете отримати свій сертифікат Let's Encrypt двома способами: за допомогою команди для зміни файлу конфігурації `http` або лише отриманням сертифіката. Якщо ви використовуєте процедуру багатосайтового налаштування, запропоновану для одного або кількох сайтів у процедурі [Мультисайтове налаштування веб-сервера Apache](../web/apache-sites-enabled.md), просто отримайте свій сертифікат. -Ми припускаємо, що ви **використовуєте** цю процедуру, тому ми отримаємо лише сертифікат. Якщо ви використовуєте автономний веб-сервер із конфігурацією за замовчуванням, ви можете отримати сертифікат і змінити файл конфігурації за один крок, використовуючи: +Налаштування на кількох сайтах є припущенням, тому наведені нижче інструкції отримають лише сертифікат. Якщо ви використовуєте автономний веб-сервер із конфігурацією за замовчуванням, ви можете отримати сертифікат і змінити файл конфігурації одним кроком: ```bash certbot --apache @@ -157,11 +155,15 @@ IMPORTANT NOTES: Donating to EFF: https://eff.org/donate-le ``` -## Конфігурація сайту - https +## Конфігурація сайту - `https` + +Застосування файлу конфігурації на нашому сайті майже ідентично процедурі, яка використовується для придбаного сертифіката SSL від іншого постачальника. -Застосування файлу конфігурації до нашого сайту дещо відрізняється від того, якби ми використовували придбаний сертифікат SSL від іншого постачальника (і якби ми не дозволили *certbot* зробити це автоматично). +Один файл PEM (Privacy Enhanced Mail) містить сертифікат і файл ланцюжка. Зараз це загальний формат для всіх файлів сертифікатів. Незважаючи на те, що в посиланні є «Пошта», це лише тип файлу сертифіката. Нижче наведено ілюстрацію файлу конфігурації та опис того, що відбувається: -Один файл PEM (Privacy Enhanced Mail) містить сертифікат і файл ланцюжка. Зараз це загальний формат для всіх файлів сертифікатів, тому, хоча в посиланні на нього є «Пошта», це лише тип файлу сертифіката. Щоб проілюструвати файл конфігурації, ми покажемо його повністю, а потім опишемо, що відбувається: +!!! info "Інформація" + + Раніше ця документація містила рядок у конфігурації для директиви `SSLCertificateChainFile`. Починаючи з версії Apache 2.4.8, ця директива застаріла як директива `SSLCertificateFile` [тепер включає проміжний файл CA](https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatechainfile). ```bash @@ -188,7 +190,6 @@ IMPORTANT NOTES: SSLCertificateFile /etc/letsencrypt/live/your-server-hostname/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your-server-hostname/privkey.pem - SSLCertificateChainFile /etc/letsencrypt/live/your-server-hostname/fullchain.pem Options -ExecCGI -Indexes @@ -203,21 +204,20 @@ IMPORTANT NOTES: ``` -Ось що відбувається вище. Ви можете переглянути [Налаштування кількох сайтів веб-сервера Apache](../web/apache-sites-enabled.md), щоб побачити відмінності в застосуванні SSL, придбаного в іншого постачальника і сертифікат Let's Encrypt: +Ось що відбувається: -- Незважаючи на те, що порт 80 (стандартний http) прослуховує, ми перенаправляємо весь трафік на порт 443 (https) +- Навіть якщо порт 80 (стандартний `http`) прослуховує, ви перенаправляєте весь трафік на порт 443 (`https`) - SSLEngine увімкнуто - просто говорить про використання SSL - SSLProtocol all -SSLv2 -SSLv3 -TLSv1 - говорить про використання всіх доступних протоколів, крім тих, які мають вразливості. Ви повинні періодично досліджувати, які протоколи зараз прийнятні для використання. - SSLHonorCipherOrder on - це стосується наступного рядка щодо наборів шифрів і повідомляє, що потрібно мати справу з ними в тому порядку, у якому вони вказані. Це ще одна область, де ви повинні переглядати набори шифрів, які ви хочете періодично включати -- SSLCertificateFile – це файл PEM, який містить сертифікат сайту **ТА** проміжний сертифікат. Нам все ще потрібен рядок «SSLCertificateChainFile» у нашій конфігурації, але він просто знову вкаже той самий файл PEM. +- SSLCertificateFile – це файл PEM, який містить сертифікат сайту **ТА** проміжний сертифікат. - SSLCertificateKeyFile – файл PEM для закритого ключа, згенерований за допомогою запиту *certbot*. -- SSLCertificateChainFile – сертифікат від вашого постачальника сертифікатів, який часто називають проміжним сертифікатом, у цьому випадку точно так само, як розташування «SSLCertificateFile» вище. -Коли ви внесете всі зміни, просто перезапустіть *httpd* і, якщо він почнеться, протестуйте свій сайт, щоб переконатися, що тепер у вас відображається дійсний файл сертифіката. Якщо так, ви готові переходити до наступного кроку: автоматизації. +Коли ви внесете всі зміни, перезапустіть *httpd* і, якщо він почнеться, протестуйте свій сайт, щоб переконатися, що тепер у вас відображається дійсний файл сертифіката. Якщо так, ви готові переходити до наступного кроку: автоматизації. ## Використання *certbot* із Nginx -Коротка примітка: використання *certbot* з Nginx майже таке ж, як і з Apache. Ось коротка, коротка версія посібника: +Коротка примітка: використання *certbot* з Nginx майже таке ж, як і з Apache. Ось коротка версія посібника: Виконайте цю команду, щоб почати: @@ -225,7 +225,7 @@ IMPORTANT NOTES: certbot --nginx ``` -Ви повинні ввести адресу електронної пошти та сайт, для якого ви хочете отримати сертифікат. Якщо припустити, що у вас налаштовано принаймні один сайт (з доменним іменем, що вказує на сервер), ви побачите такий список: +Ви повинні ввести адресу електронної пошти та сайт, для якого ви хочете отримати сертифікат. Якщо припустити, що у вас налаштовано принаймні один сайт (з доменним іменем, що вказує на сервер), ви побачите список: ```bash 1. yourwebsite.com @@ -283,9 +283,7 @@ server { } ``` -Залежно від кількох речей (наприклад, якщо ви використовуєте Nginx як зворотний проксі), вам може знадобитися заглибитися в новий конфігураційний файл, щоб виправити деякі речі, які *certbot * не впорається ідеально сам по собі. - -Або напишіть власний файл конфігурації важким способом. +Якщо ви використовуєте Nginx як зворотний проксі, вам може знадобитися змінити новий файл конфігурації, щоб виправити деякі речі, які *certbot* не впорається ідеально. ## Автоматизація поновлення сертифіката Let's Encrypt @@ -293,7 +291,7 @@ server { Замініть випадки на «ім’я хоста-вашого-сервера» в цих прикладах на фактичне ім’я домену або ім’я хосту. -Принадність встановлення *certbot* полягає в тому, що сертифікат Let's Encrypt автоматично поновлюється. Для цього не потрібно створювати процес. Нам потрібно перевірити оновлення за допомогою: +Принадність встановлення *certbot* полягає в тому, що сертифікат Let's Encrypt автоматично поновлюється. Для цього не потрібно створювати процес. Вам *треба* перевірити оновлення за допомогою: ```bash certbot renew --dry-run @@ -333,7 +331,7 @@ Congratulations, all simulated renewals succeeded: - Перерахувавши вміст `/etc/cron.*/*` - Запустивши `systemctl list-timers` -У цьому прикладі ми використовуємо останню опцію та бачимо, що *certbot* існує та що його було встановлено за допомогою процедури `snap`: +Використовуючи метод `systemctl list-timers`, ви можете побачити, що *certbot* існує, і його інсталяцію було виконано за допомогою процедури `snap`: ```bash sudo systemctl list-timers @@ -344,4 +342,4 @@ Sat 2021-04-03 07:12:00 UTC 14h left n/a n/a Сертифікати Let's Encrypt SSL є ще одним варіантом для захисту вашого веб-сайту за допомогою SSL. Після встановлення система забезпечує автоматичне оновлення сертифікатів і шифрує трафік до вашого веб-сайту. -Слід зазначити, що сертифікати Let's Encrypt використовуються для стандартних сертифікатів DV (Domain Validation). Їх не можна використовувати для сертифікатів OV (перевірка організації) або EV (розширена перевірка). +Сертифікати Let's Encrypt призначені для стандартних сертифікатів DV (перевірка домену). Їх неможливо використовувати для сертифікатів OV (перевірка організації) або EV (розширена перевірка). diff --git a/docs/guides/security/ssl_keys_https.uk.md b/docs/guides/security/ssl_keys_https.uk.md index 6976311a82..e3d53a0962 100644 --- a/docs/guides/security/ssl_keys_https.uk.md +++ b/docs/guides/security/ssl_keys_https.uk.md @@ -9,8 +9,6 @@ tags: - openssl --- -# Генерація ключів SSL - ## Передумови * Робоча станція та сервер під керуванням Rocky Linux @@ -18,7 +16,6 @@ tags: * Здатність зручно виконувати команди з командного рядка * Корисно: знання команд SSL і OpenSSL - ## Вступ Майже кожен веб-сайт сьогодні _має_ працювати з сертифікатом SSL/TLS (рівень захищених сокетів). Ця процедура допоможе вам створити закритий ключ для вашого веб-сайту, а потім створити CSR (запит на підписання сертифіката), який ви використовуватимете для придбання сертифіката. @@ -29,9 +26,13 @@ tags: Станом на 2021 рік рекомендований розмір закритого ключа веб-сайту все ще становить 2048 біт. Ви можете піти вище, але подвоєння розміру ключа з 2048 біт до 4096 біт лише приблизно на 16% безпечніше, займає більше місця для зберігання ключа та спричиняє більші навантаження на ЦП під час обробки ключа. -Це сповільнює продуктивність вашого веб-сайту без значної безпеки. Дотримуйтеся розміру ключа 2048 і завжди стежте за тим, що зараз рекомендовано. Для початку переконайтеся, що на вашій робочій станції та сервері встановлено OpenSSL: +Це сповільнює продуктивність вашого веб-сайту без значної безпеки. Дотримуйтеся розміру ключа 2048 і завжди стежте за тим, що зараз рекомендовано. + +Для початку переконайтеся, що на вашій робочій станції та сервері встановлено OpenSSL: -`dnf install openssl` +```bash +dnf install openssl +``` Якщо його не встановлено, ваша система встановить його та всі необхідні залежності. @@ -41,11 +42,13 @@ tags: Згенеруйте ключ за допомогою `openssl`: -`openssl genrsa -des3 -out example.com.key.pass 2048` +```bash +openssl genrsa -des3 -out example.com.key.pass 2048 +``` -Зверніть увагу, що ви назвали ключ із розширенням *.pass*. Це тому, що коли ви запускаєте цю команду, вона вимагає ввести парольну фразу. Введіть спрощену парольну фразу, яку ви можете запам’ятати, оскільки незабаром збираєтеся видалити це: +Зверніть увагу, що ви назвали ключ із розширенням *.pass*. Це тому, що коли ви виконуєте цю команду, вона вимагає ввести парольну фразу. Введіть спрощену парольну фразу, яку ви можете запам’ятати, оскільки незабаром збираєтеся видалити це: -``` +```bash Enter pass phrase for example.com.key.pass: Verifying - Enter pass phrase for example.com.key.pass: ``` @@ -54,13 +57,15 @@ Verifying - Enter pass phrase for example.com.key.pass: Можливо, вас навіть не буде поруч, щоб увійти в нього, або, що ще гірше, може не мати доступної консолі. Видаліть його зараз, щоб уникнути всього цього: -`openssl rsa -in example.com.key.pass -out example.com.key` +```bash +openssl rsa -in example.com.key.pass -out example.com.keys +``` -Це ще раз запитає цю парольну фразу, щоб видалити її з ключа: +Це знову запитає цю парольну фразу, щоб видалити її з ключа: `Введіть парольну фразу, наприклад.com.key.pass:` -Тепер ваш пароль видалено з ключа після того, як ви ввели парольну фразу втретє, і збережено як *example.com.key* +Тепер ваш пароль видалено з ключа після того, як ви ввели парольну фразу втретє та збережено як _example.com.key_ ## Створення CSR @@ -68,29 +73,31 @@ Verifying - Enter pass phrase for example.com.key.pass: Під час генерації CSR виникає запит щодо кількох фрагментів інформації. Це атрибути X.509 сертифіката. -Одним із запитів буде «Загальне ім’я (наприклад, ВАШЕ доменне ім’я)». Це поле має містити повне доменне ім’я сервера, який захищає SSL/TLS. Якщо веб-сайт, який потрібно захистити, буде https://www.example.com, тоді введіть www.example.com у цьому запиті: +Одним із запитів буде «Загальне ім’я (наприклад, ВАШЕ доменне ім’я)». Це поле має містити повне доменне ім’я сервера, який захищає SSL/TLS. Якщо веб-сайт, який ви захищаєте, , тоді введіть у цьому запиті: -`openssl req -new -key example.com.key -out example.com.csr` +```bash +openssl req -new -key example.com.key -out example.com.csr +``` Це відкриває діалогове вікно: `Назва країни (2-літерний код) [XX]:` введіть двозначний код країни, у якій знаходиться ваш сайт, наприклад "US" -`Назва штату або провінції (повна назва) []:` введіть повну офіційну назву свого штату або провінції, наприклад «Nebraska» +`State or Province Name (full name) []:` введіть повну офіційну назву свого штату або провінції, наприклад «Nebraska» -`Назва населеного пункту (наприклад, місто) [Місто за замовчуванням]:` введіть повну назву міста, наприклад «Omaha» +`Locality Name (eg, city) [Default City]:` введіть повну назву міста, наприклад "Omaha" -`Назва організації (наприклад, компанія) [Company Ltd за замовчуванням]:` За бажанням ви можете ввести організацію, частиною якої є цей домен, або просто натиснути ENTER, щоб пропустити. +`Organization Name (eg, company) [Default Company Ltd]:` Якщо хочете, ви можете ввести організацію, частиною якої є цей домен, або просто натиснути ++enter++, щоб пропустити. -`Назва організаційного підрозділу (наприклад, розділ) []:` Це буде опис підрозділу організації, до якого належить ваш домен. Знову ж таки, ви можете просто натиснути ENTER, щоб пропустити. +`Organizational Unit Name (eg, section) []:` Це буде опис підрозділу організації, до якої належить ваш домен. Знову ж таки, ви можете просто натиснути ++enter++, щоб пропустити. -`Загальне ім’я (наприклад, ваше ім’я чи ім’я хосту вашого сервера) []:` Тут потрібно ввести ім’я хосту свого сайту, наприклад, «www.example.com» +`Common Name наприклад, ваше ім'я або ім'я хосту вашого сервера []:` Тут вам потрібно ввести ім’я хосту свого сайту, наприклад «www.example.com» -`Адреса електронної пошти []:` Це поле необов’язкове, ви можете заповнити його або просто натиснути ENTER, щоб пропустити. +`Email Address []:` Це поле необов’язкове, ви можете заповнити його або просто натиснути ++enter++, щоб пропустити. -Далі процедура запропонує вам ввести додаткові атрибути. Пропустити їх можна, натиснувши ENTER: +Далі процедура запропонує вам ввести додаткові атрибути. Пропустити їх можна, натиснувши ++enter++: -``` +```bash Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: @@ -105,9 +112,9 @@ An optional company name []: `more example.com.csr` -Що має показати вам щось на зразок цього: +Що покаже вам щось на зразок цього: -``` +```bash -----BEGIN CERTIFICATE REQUEST----- MIICrTCCAZUCAQAwaDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5lYnJhc2thMQ4w DAYDVQQHDAVPbWFoYTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDEYMBYG @@ -127,11 +134,10 @@ HFOltYOnfvz6tOEP39T/wMo= -----END CERTIFICATE REQUEST----- ``` -Ви хочете скопіювати все, включно з рядками «BEGIN CERTIFICATE REQUEST» і «END CERTIFICATE REQUEST». Потім вставте їх у поле CSR на веб-сайті, де ви купуєте сертифікат. +Ви хочете скопіювати все, включно з рядками «ПОЧАТИ ЗАПИТУ НА СЕРТИФІКАТ» і «КІНЕЦЬ ЗАПИТУ НА СЕРТИФІКАТ». Потім вставте їх у поле CSR на веб-сайті, де ви купуєте сертифікат. -Перед видачею сертифіката вам, можливо, доведеться виконати інші кроки перевірки залежно від власності на домен, реєстратора, який ви використовуєте, тощо. Після видачі він міститиме проміжний сертифікат від постачальника, який ви також використовуватимете в конфігурації. +Перед видачею сертифіката вам, можливо, доведеться виконати інші кроки перевірки залежно від власності на домен і реєстратора, яким ви користуєтеся. ## Висновок Згенерувати всі деталі для придбання сертифіката веб-сайту не складно за допомогою цієї процедури. - diff --git a/docs/guides/security/wireguard_vpn.uk.md b/docs/guides/security/wireguard_vpn.uk.md index 2c96ae9de1..577b225253 100644 --- a/docs/guides/security/wireguard_vpn.uk.md +++ b/docs/guides/security/wireguard_vpn.uk.md @@ -24,19 +24,19 @@ tags: Встановіть додаткові пакети для Enterprise Linux (EPEL): ```bash -sudo dnf install epel-release +sudo dnf install epel-release -y ``` Оновіть пакети вашої системи: ```bash -sudo dnf upgrade +sudo dnf upgrade -y ``` Встановити WireGuard: ```bash -sudo dnf install wireguard-tools +sudo dnf install wireguard-tools -y ``` ## Налаштування сервера WireGuard @@ -62,13 +62,13 @@ sudo touch /etc/wireguard/wg0.conf Створіть нову пару закритого та відкритого ключів для сервера WireGuard: ```bash -wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey +wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub ``` Відредагуйте файл конфігурації за допомогою обраного вами редактора. ```bash -sudo vim /etc/wireguard/wg0.conf +sudo vi /etc/wireguard/wg0.conf ``` Вставте наступне: @@ -80,10 +80,10 @@ Address = x.x.x.x/24 ListenPort = 51820 ``` -Ви повинні замінити `privatekey` на закритий ключ, згенерований раніше. Ви можете переглянути закритий ключ за допомогою: +Ви повинні замінити `server_privatekey` на закритий ключ, згенерований раніше. Ви можете переглянути закритий ключ за допомогою: ```bash -sudo cat /etc/wireguard/privatekey +sudo cat /etc/wireguard/wg0 ``` Далі вам потрібно буде замінити `x.x.x.x/24` на мережеву адресу в межах діапазону приватних IP-адрес, визначеного [RFC 1918] (https://datatracker.ietf.org/doc/html/rfc1918). Наша демонстраційна приватна IP-адреса в цьому посібнику – `10.255.255.0/24`. @@ -94,7 +94,7 @@ sudo cat /etc/wireguard/privatekey IP-переадресація дозволяє маршрутизувати пакети між мережами. Це дозволяє внутрішнім пристроям спілкуватися один з одним через тунель WireGuard: -Увімкніть IP-переадресацію для IPv4: +Увімкніть IP-переадресацію для IPv4 і IPv6: ```bash sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv6.conf.all.forwarding=1 @@ -102,7 +102,7 @@ sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv6.conf.all.forward ## Налаштуйте `firewalld` -Якщо `firewalld` не встановлено, встановіть його: +Встановіть `firewalld`: ```bash sudo dnf install firewalld -y @@ -157,7 +157,7 @@ sudo touch /etc/wireguard/wg0.conf Створіть нову пару закритого та відкритого ключів: ```bash -wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey +wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub ``` Відредагуйте файл конфігурації за допомогою обраного вами редактора, додавши цей вміст: @@ -174,20 +174,20 @@ Endpoint = serverip:51820 PersistentKeepalive = 25 ``` -Замініть `peer_privatekey` на закритий ключ пір, який зберігається в `/etc/wireguard/privatekey` на пірі. +Замініть `peer_privatekey` на закритий ключ пір, який зберігається в `/etc/wireguard/wg0` на пірі. Ви можете використати цю команду, щоб вивести ключ, щоб ви могли його скопіювати: ```bash -sudo cat /etc/wireguard/privatekey +sudo cat /etc/wireguard/wg0 ``` -Замініть `server_publickey` на відкритий ключ сервера, який зберігається в `/etc/wireguard/publickey` на сервері. +Замініть `server_publickey` на відкритий ключ сервера, який зберігається в `/etc/wireguard/wg0.pub` на сервері. Ви можете використати цю команду, щоб вивести ключ, щоб ви могли його скопіювати: ```bash -sudo cat /etc/wireguard/publickey +sudo cat /etc/wireguard/wg0.pub ``` Замініть `serverip` загальнодоступною IP-адресою сервера WireGuard. @@ -200,36 +200,69 @@ ip a | grep inet Файл конфігурації вузла тепер містить правило `PersistentKeepalive = 25`. Це правило вказує одноранговому вузлу перевіряти сервер WireGuard кожні 25 секунд, щоб підтримувати з’єднання VPN-тунелю. Без цього параметра тунель VPN закінчуватиметься після бездіяльності. +## Увімкніть WireGuard VPN + +Щоб увімкнути WireGuard, ви запустите таку команду як на сервері, так і на одноранговому пристрої: + +```bash +sudo systemctl enable wg-quick@wg0 +``` + +Потім запустіть VPN, виконавши цю команду як на сервері, так і на одноранговому пристрої: + +```bash +sudo systemctl start wg-quick@wg0 +``` + ## Додайте ключ клієнта до конфігурації сервера WireGuard Виведіть відкритий ключ партнера та скопіюйте його: ```bash -sudo cat /etc/wireguard/publickey +sudo cat /etc/wireguard/wg0.pub ``` -На сервері виконайте наступну команду, замінивши `peer_publickey` на одноранговий відкритий ключ: +На сервері виконайте наступну команду, замінивши `peer_publickey` відкритим ключем однорангового вузла: ```bash sudo wg set wg0 peer peer_publickey allowed-ips 10.255.255.2 ``` -Варто зазначити, що ви можете вручну редагувати та додавати вузли до файлу конфігурації. +Використання `wg set` вносить лише тимчасові зміни в інтерфейс WireGuard. Для постійних змін конфігурації ви можете вручну відредагувати файл конфігурації та додати вузла. Вам потрібно буде перезавантажити інтерфейс WireGuard після внесення будь-яких постійних змін конфігурації. -## Увімкніть WireGuard VPN +Відредагуйте файл конфігурації сервера за допомогою обраного редактора. -Щоб увімкнути WireGuard, ви запустите таку команду як на сервері, так і на одноранговому пристрої: +```bash +sudo vi /etc/wireguard/wg0.conf +``` + +Додайте вузол до файлу конфігурації. Вміст має виглядати приблизно так: ```bash -sudo systemctl enable wg-quick@wg0 +[Interface] +PrivateKey = +Eo5oVjt+d3XWvFWYcOChaLroGj5vapdXKH8UZ2T2Fc= +Address = 10.255.255.1/24 +ListenPort = 51820 + +[Peer] +PublicKey = 1vSho8NvECkG1PVVk7avZWDmrd2VGZ2xTPaNe5+XKSg= +AllowedIps = 10.255.255.2/32 ``` -Потім запустіть VPN, виконавши цю команду як на сервері, так і на одноранговому пристрої: +Відключити інтерфейс: ```bash -systemctl start wg-quick@wg0 +sudo wg-quick down wg0 ``` +Вивести інтерфейс: + +```bash +sudo wg-quick up wg0 +``` + +## Перегляньте інтерфейси WireGuard і перевірте підключення + Ви можете переглядати інформацію WireGuard як на сервері, так і на одноранговому пристрої за допомогою: ```bash diff --git a/docs/guides/virtualization/libvirt-rocky.uk.md b/docs/guides/virtualization/libvirt-rocky.uk.md new file mode 100644 index 0000000000..386200c95c --- /dev/null +++ b/docs/guides/virtualization/libvirt-rocky.uk.md @@ -0,0 +1,173 @@ +--- +title: Налаштування libvirt на Rocky Linux +author: Howard Van Der Wal +contributors: Steven Spencer +tested with: 9.5 +tags: + - libvirt + - kvm + - віртуалізація +--- + +## Вступ + +[libvirt](https://libvirt.org/) — це неймовірний API віртуалізації, який дозволяє віртуалізувати майже будь-яку операційну систему на ваш вибір за допомогою потужності KVM як гіпервізора та QEMU як емулятора. + +Цей документ містить інструкції з налаштування libvirt у Rocky Linux 9. + +## Передумови + +- 4-бітна машина під керуванням Rocky Linux 9. +- Переконайтеся, що віртуалізація включена в налаштуваннях BIOS. Якщо наступна команда повертає вихідні дані, це означає, що активацію віртуалізації завершено: + +```bash +sudo grep -e 'vmx' /proc/cpuinfo +``` + +## Налаштування репозиторію та встановлення пакетів + +- Увімкніть репозиторій EPEL (додаткові пакети для Enterprise Linux): + +```bash +sudo dnf install -y epel-release +``` + +- Встановіть необхідні пакунки для `libvirt` (необов’язково для `virt-manager`, якщо ви бажаєте використовувати GUI для керування своїми віртуальними машинами): + +```bash +sudo dnf install -y bridge-utils virt-top libguestfs-tools bridge-utils virt-viewer qemu-kvm libvirt virt-manager virt-install +``` + +## налаштування користувача libvirt + +- Додайте свого користувача до групи `libvirt`. Це дає змогу керувати вашими віртуальними машинами та використовувати такі команди, як `virt-install`, як не-root користувач: + +```bash +sudo usermod -aG libvirt $USER +``` + +- Активуйте групу `libvirt` за допомогою команди `newgrp`: + +```bash +sudo newgrp libvirt +``` + +- Увімкніть і запустіть службу `libvirtd`: + +```bash +sudo systemctl enable --now libvirtd +``` + +## Налаштування інтерфейсу Bridge для прямого доступу до віртуальних машин + +- Перевірте поточні інтерфейси, які використовуються, і запишіть основний інтерфейс із підключенням до Інтернету: + +```bash +sudo nmcli connection show +``` + +- Видаліть інтерфейс, підключений до Інтернету, і будь-які існуючі віртуальні мостові підключення: + +```bash +sudo nmcli connection delete +``` + +!!! warning "Важливо" + +``` +Переконайтеся, що у вас є прямий доступ до машини. Якщо ви налаштовуєте машину через SSH, з’єднання буде розірвано після видалення з’єднання основного інтерфейсу. +``` + +- Створіть нове з'єднання мосту: + +```bash +sudo nmcli connection add type bridge autoconnect yes con-name ifname +``` + +- Призначте статичну IP-адресу: + +```bash +sudo nmcli connection modify ipv4.addresses ipv4.method manual +``` + +- Призначте адресу шлюзу: + +```bash +sudo nmcli connection modify ipv4.gateway +``` + +- Призначте адресу DNS: + +```bash +sudo nmcli connection modify ipv4.dns +``` + +- Додайте підпорядковане підключення мосту: + +```bash +sudo nmcli connection add type bridge-slave autoconnect yes con-name ifname master +``` + +- Запустіть з'єднання мостом: + +```bash +sudo nmcli connection up +``` + +- Додайте рядок `allow all` до `bridge.conf`: + +```bash +sudo tee -a /etc/qemu-kvm/bridge.conf < +``` + +- Щоб примусово вимкнути віртуальну машину, яка не відповідає, скористайтеся командою `destroy`: + +```bash +virsh destroy --domain +``` + +## Як видалити віртуальну машину + +- Використовуйте команду `undefine`: + +```bash +virsh undefine --domain --nvram +``` + +- Щоб отримати додаткові команди `virsh`, перевірте сторінки `man` `virsh`. + +## Висновок + +- libvirt надає багато можливостей і дозволяє легко встановлювати віртуальні машини та керувати ними. Якщо у вас є додаткові доповнення або зміни до цього документа, якими ви хотіли б поділитися, автор люб’язно запрошує вас це зробити. diff --git a/docs/guides/web/apache-sites-enabled.uk.md b/docs/guides/web/apache-sites-enabled.uk.md index 0c87393fc8..197c99f7a6 100644 --- a/docs/guides/web/apache-sites-enabled.uk.md +++ b/docs/guides/web/apache-sites-enabled.uk.md @@ -86,7 +86,7 @@ Include /etc/httpd/sites-enabled Якщо ви хочете обслуговувати веб-сайт за допомогою SSL/TLS (і погодьтеся, у більшості випадків ви це робите), додайте ще один (майже ідентичний) розділ до цього файлу, щоб увімкнути порт 443. -Ви можете перевірити це нижче в розділі [Конфігурація `https` за допомогою сертифіката SSL/TLS](#https-ssltls). +Ви можете перевірити це нижче в розділі «Конфігурація `https` за допомогою сертифіката SSL/TLS». Спочатку вам потрібно створити цей файл конфігурації в *sites-available*: @@ -197,6 +197,10 @@ cp /root/com.wiki.www.crt /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/ Далі вам потрібно визначити частину `https` файлу конфігурації: +!!! info + + Починаючи з Apache 2.4.8, директива `SSLCertificateChainFile` застаріла. Розширення директиви `SSLCertificateFile` включає сертифікат CA постачальника. + ```apache ServerName your-server-hostname @@ -222,7 +226,6 @@ cp /root/com.wiki.www.crt /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/ SSLCertificateFile /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/com.wiki.www.crt SSLCertificateKeyFile /var/www/sub-domains/your-server-hostname/ssl/ssl.key/com.wiki.www.key - SSLCertificateChainFile /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/your_providers_intermediate_certificate.crt Options -ExecCGI -Indexes @@ -244,7 +247,6 @@ cp /root/com.wiki.www.crt /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/ * SSLHonorCipherOrder on -це стосується наступного рядка, що стосується наборів шифрів, і каже мати справу з ними у вказаному порядку. Це ще одна область, де періодично слід переглядати набори шифрів. * SSLCertificateFile - це саме те, що в ньому сказано: нещодавно придбаний і застосований файл сертифіката та його розташування * SSLCertificateKeyFile - ключ, який ви створили під час створення запиту на підписання сертифіката -* SSLCertificateChainFile - сертифікат від постачальника сертифікатів, який часто називають проміжним сертифікатом Візьміть усе в режимі реального часу, і якщо веб-служба не запускає жодних помилок і якщо перехід на ваш веб-сайт показує `https` без помилок, ви готові до роботи. diff --git a/docs/guides/web/apache_hardened_webserver/index.it.md b/docs/guides/web/apache_hardened_webserver/index.it.md index b4309af691..c3c3eaa1c3 100644 --- a/docs/guides/web/apache_hardened_webserver/index.it.md +++ b/docs/guides/web/apache_hardened_webserver/index.it.md @@ -1,6 +1,6 @@ --- title: Server web Apache Protetto -author: Steven Spencer, Franco Colussi +author: Steven Spencer contributors: Ezequiel Bruni, Ganna Zhyrnova tested_with: 8.8, 9.2 tags: @@ -26,14 +26,13 @@ Che si tratti dell'hosting di molti siti web per i clienti o di un singolo sito Con molti siti web caricati dai vostri clienti, uno di loro probabilmente caricherà un sistema di gestione dei contenuti (CMS) con la possibilità di vulnerabilità. La maggior parte dei clienti si concentra sulla facilità d'uso, non sulla sicurezza, e ciò che accade è che l'aggiornamento del proprio CMS diventa un processo che esce completamente dall'elenco delle priorità. - Se per un'azienda con un grande staff IT è possibile notificare ai clienti le vulnerabilità del loro CMS, per un piccolo team IT questo potrebbe non essere realistico. La migliore difesa è un server Web protetto. L'hardening dei server Web può assumere molte forme, tra cui uno o tutti gli strumenti qui descritti ed eventualmente altri non definiti. Potreste utilizzare un paio di questi strumenti e non gli altri. Per chiarezza e leggibilità, questo documento è suddiviso in documenti separati per ogni strumento. L'eccezione sarà il firewall basato sui pacchetti`(firewalld`) di cui al presente documento principale. -* Un buon firewall con filtro dei pacchetti basato sulle porte (iptables, firewalld o hardware firewall - useremo `firewalld` per i nostri esempi) procedura `firewalld` +* Un buon firewall con filtro dei pacchetti basato sulle porte (iptables, firewalld o firewall hardware - per gli esempi utilizzeremo `firewalld`). Vedere la procedura di `firewalld` più avanti in questo documento. * Un sistema di rilevamento delle intrusioni basato su host (HIDS), in questo caso _ossec-hids_ [Apache Hardened Web Server - ossec-hids](ossec-hids.md) * Un firewall per applicazioni basate sul Web (WAF), con regole `mod_security` [Apache Hardened Web Server - mod_security](modsecurity.md) * Rootkit Hunter`(rkhunter`): Uno strumento di scansione che controlla il malware Linux [Apache Hardened Web Server - rkhunter](rkhunter.md) diff --git a/docs/guides/web/apache_hardened_webserver/index.uk.md b/docs/guides/web/apache_hardened_webserver/index.uk.md index 880be4807d..6de8929bc6 100644 --- a/docs/guides/web/apache_hardened_webserver/index.uk.md +++ b/docs/guides/web/apache_hardened_webserver/index.uk.md @@ -26,14 +26,13 @@ tags: З великою кількістю веб-сайтів, завантажених вашими клієнтами, один із них, ймовірно, завантажить систему керування вмістом (CMS) із можливою вразливістю. Більшість клієнтів зосереджуються на простоті використання, а не на безпеці, і відбувається так, що оновлення власної CMS стає процесом, який взагалі випадає зі списку пріоритетів. - Хоча сповіщення клієнтів про вразливі місця в їх CMS можливо для компанії з великим ІТ-персоналом, це може бути нереально для невеликої ІТ-команди. Найкращий захист – надійний веб-сервер. Захист веб-сервера може приймати різні форми, включаючи будь-який або всі інструменти, наведені тут, і, можливо, інші, не визначені. Ви можете використовувати пару цих інструментів, а не інші. Цей документ поділено на окремі документи для кожного інструменту для ясності та зручності читання. Винятком буде брандмауер на основі пакетів (`firewalld`) у цьому основному документі. -* Хороший брандмауер із фільтром пакетів на основі портів (iptables, firewalld або апаратний брандмауер – у наших прикладах використовується `firewalld`) [`firewalld` процедура](#configuring-firewalld) +* Хороший брандмауер фільтрації пакетів на основі портів (iptables, firewalld або апаратний брандмауер - використання `firewalld` для наших прикладів) Дивіться процедуру `firewalld` далі в цьому документі. * Система виявлення вторгнень на основі хосту (HIDS), у цьому випадку _ossec-hids_ [Apache Hardened Web Server - ossec- ховається](ossec-hids.md) * Брандмауер веб-додатків (WAF) із правилами `mod_security` [Apache Hardened Web Server - mod_security](modsecurity.md) * Rootkit Hunter (`rkhunter`): інструмент сканування, який перевіряє Linux на зловмисне програмне забезпечення [Apache Hardened Web Server - rkhunter](rkhunter.md)