Monthly Archives: Dicembre 2018

RHEL7: Creare un semplice schema di un database

Presentazione dello schema del database MariaDB

Uno schema di database consiste di:

1)un nome di database che raggruppa tutti gli oggetti insieme,
2)uno o più utenti con i loro diritti di accesso associati,
3)un elenco di tabelle che memorizzano i record,
4)altri oggetti come indici, viste, trigger, ecc.

Nota: una singola istanza di MariaDB può ospitare diversi database.

Prerequisiti

Innanzitutto, è necessario installare un database MariaDB.

Procedura

Quindi, è necessario connettersi al server con la password creata in precedenza:

# mysql -u root -p
Enter password: your password
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.35-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>


Quindi, puoi creare un database (qui chiamato test):

MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)

Nota: utilizzare il comando drop database per rimuovere un database.

Assegna le autorizzazioni all’utente chiamato user:

MariaDB [(none)]> grant all on test.* to user@localhost identified by 'your password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Nota: durante l’installazione del server è richiesta una password associata all’account di root. Quindi, c’è un’altra password collegata al proprietario del database (qui user). È più facile se entrambi sono uguali ma non ne hanno bisogno.

Esci dalla riga di comando di MariaDB:

MariaDB [(none)]> quit
Bye

Ora puoi collegarti direttamente al tuo database:

# mysql -u user -p test
Enter password: your password
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 5.5.35-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

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

MariaDB [test]>

Per ottenere l’elenco di tutti i database disponibili, digitare:

MariaDB [test]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)

Nota: è possibile accedere a un database con il comando use. Ad esempio, digitare use test; per andare al tuo nuovo database.

Per creare una tabella chiamata address, digitare:

MariaDB [test]> create table addresses(id int(10) unsigned, name varchar(20), address varchar(40));
Query OK, 0 rows affected (0.14 sec)

Nota: utilizzare il comando drop table per rimuovere una tabella.

Per vedere l’elenco di tutte le tabelle create nel database, digitare:

MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| addresses      |
+----------------+
1 row in set (0.00 sec)

Invece per vedere una descrizione di una tabella particolare (qui address), digitare:

MariaDB [test]> desc addresses;
+---------+------------------+------+-----+---------+-------+
| Field   | Type             | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| id      | int(10) unsigned | YES  |     | NULL    |       |
| name    | varchar(20)      | YES  |     | NULL    |       |
| address | varchar(40)      | YES  |     | NULL    |       |
+---------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Per ottenere l’istruzione della tabella di creazione associata alla tabella address, digitare:

MariaDB [test]> show create table addresses;
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                    |
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| addresses | CREATE TABLE `addresses` (
  `id` int(10) unsigned DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `address` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Suggerimento utile

Al prompt MariaDB, è possibile ottenere alcune informazioni sulla sintassi utilizzando il comando help:

MariaDB [(none)]> help drop table
Name: 'DROP TABLE'
Description:
Syntax:
DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]

DROP TABLE removes one or more tables. You must have the DROP privilege
for each table. All table data and the table definition are removed, so
be careful with this statement! If any of the tables named in the
argument list do not exist, MySQL returns an error indicating by name
which nonexisting tables it was unable to drop, but it also drops all
of the tables in the list that do exist.
...

RHEL7: Come installare un servizio MariaDB/MySql

Nota: questo è un obiettivo d’esame RHCE 7.

Presentazione di MariaDB

MariaDB è un sostituto di MySql, il famoso sistema di database.

Prerequisiti

Poiché l’installazione MariaDB predefinita utilizza la directory /var/lib/mysql per archiviare i database, tenere presente che la partizione o il volume logico associato a /var richiede uno spazio adeguato.

Procedura d’installazione

Per installarlo, applica i seguenti passaggi:

Installa i pacchetti MariaDB:

yum install -y mariadb mariadb-server

Avvia e attiva all’avvio il servizio MariaDB:

systemctl start mariadb && systemctl enable mariadb

Esegui la configurazione di base:

# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

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

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

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

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

Set root password? [Y/n] Y
New password: your-password
Re-enter new password: your-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!

Se è necessario accedere al database da un server diverso, aggiungere il servizio MySql alla configurazione del firewall e ricaricarlo:

# firewall-cmd --permanent --add-service=mysql
success
# firewall-cmd --reload
success

Il sito Web di Centminmod avverte dei problemi di riavvio di MariaDB dopo l’aggiornamento di RHEL 7.4 / CentOS 7.4.

Configurazione iniziale

Per aiutarti a definire la configurazione iniziale in base alle specifiche del tuo sistema (dimensioni della memoria, numero di CPU, tipo di attività, ecc.), Puoi trovare utili esempi di file my.cnf nel pacchetto mariadb-server:

# rpm -ql mariadb-server | grep my-
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf

Inizia leggendo il file /usr/share/mysql/my-innodb-heavy-4G.cnf perché è pieno di commenti utili.

Quindi, scarica mysqltuner.pl di Major Hayden. Dopo aver eseguito questo script, otterrai una valutazione approssimativa della configurazione e dei suggerimenti di base per migliorarlo.

Il pacchetto innotop contiene un comando con lo stesso nome che si comporta come il comando superiore sui server MariaDB, fornendo molti dettagli sull’attività corrente (cache, blocchi, stato di replica, ecc.). Questo pacchetto è disponibile nel repository EPEL.

Suggerimento di configurazione

Per ottenere una spiegazione di tutte le opzioni del server, tutti i parametri di configurazione e i loro valori correnti, digitare:

/usr/libexec/mysqld –verbose –help
/usr/libexec/mysqld  Ver 5.5.52-MariaDB for Linux on x86_64 (MariaDB Server)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Starts the MariaDB database server.

Usage: /usr/libexec/mysqld [OPTIONS]

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
The following groups are read: mysqld server mysqld-5.5 mariadb mariadb-5.5 client-server
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.

  --allow-suspicious-udfs 
                      Allows use of UDFs consisting of only one symbol xxx()
                      without corresponding xxx_init() or xxx_deinit(). That
                      also means that one can load any function from any
                      library, for example exit() from libc.so
  -a, --ansi          Use ANSI SQL syntax instead of MySQL syntax. This mode
                      will also set transaction isolation level 'serializable'.
  --archive[=name]    Enable or disable ARCHIVE plugin. Possible values are ON,
                      OFF, FORCE (don't start if the plugin fails to load).
...
  --xtradb-admin-command[=name] 
                      Enable or disable XTRADB_ADMIN_COMMAND plugin. Possible
                      values are ON, OFF, FORCE (don't start if the plugin
                      fails to load).

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}                  Value (after reading options)
------------------------------------------------- ------------------------
allow-suspicious-udfs                             FALSE
archive                                           ON
aria                                              ON
aria-block-size                                   8192
aria-checkpoint-interval                          30
aria-checkpoint-log-activity                      1048576
aria-force-start-after-recovery-failures          0
aria-group-commit                                 none
...
verbose                                           TRUE
wait-timeout                                      28800
xtradb-admin-command                              ON

To see what values a running MySQL server is using, type
'mysqladmin variables' instead of 'mysqld --verbose --help'.

Configurare un server Kerberos

Presentazione di Kerberos

Kerberos è un protocollo di autenticazione sviluppato al MIT nel 1988.Un client si connette a un server KDC (Kerberos Distribution Center) utilizzando un principal (tipo di accesso) e ottiene un ticket. Finché il ticket è valido, il client può accedere ad alcuni servizi e non ha più bisogno di autenticarsi.Sia il client (qui kbclient.example.com) che il server KDC (qui kbserver.example.com) devono trovarsi nello stesso dominio (in genere il nome del dominio scritto in maiuscolo, qui EXAMPLE.COM).

Prerequisiti

Prima di configurare Kerberos, la sincronizzazione NTP e la risoluzione del nome host devono essere funzionanti.
Se DNS non è configurato, aggiungi le seguenti righe nel file /etc/hosts (sostituisci gli indirizzi IP specificati con i tuoi):

192.168.1.11 kbserver.example.com
192.168.1.12 kbclient.example.com

Attenzione: quando si aggiunge una nuova riga nel file /etc/hosts, è necessario scrivere il nome di dominio completo subito dopo l’indirizzo IP. Se usi uno o più alias e li aggiungi prima del nome di dominio completo, Kerberos non funzionerà.

Configurazione del server

Installa i pacchetti Kerberos:

# yum install -y krb5-server krb5-workstation pam_krb5

Innanzitutto, modifica il file /var/kerberos/krb5kdc/kdc.conf e sostituisci EXAMPLE.COM con il tuo dominio.
Facoltativamente, decommentare la riga master_key_type = aes256-cts e incollare la seguente riga nella stanza [realms]:

default_principal_flags = +preauth

Nota: rimuove la compatibilità con Kerberos 4 ma migliora la sicurezza.

Quindi, nel file /etc/krb5.conf, decommenta tutte le linee, sostituisci EXAMPLE.COM con il tuo dominio, esempio.com con il tuo nome di dominio e kerberos.example.com con il tuo nome del server KDC (qui kbserver .example.com).

Infine, modifica il file /var/kerberos/krb5kdc/kadm5.acl e sostituisci EXAMPLE.COM con il tuo dominio.

Crea il database Kerberos (sostituisci EXAMPLE.COM con il tuo dominio):

# kdb5_util create -s -r EXAMPLE.COM
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM',
master key name 'K/M@EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: example
Re-enter KDC database master key to verify: example

Nota: può essere necessario digitare i tasti sulla tastiera per aumentare l’entropia necessaria per la generazione casuale dei dati!

Avvia i servizi Kerberos:

# systemctl start krb5kdc kadmin

Attiva i servizi Kerberos all’avvio:

# systemctl enable krb5kdc kadmin

Crea un utente per il test:

# useradd user01

Esegui lo strumento di amministrazione Kerberos:

# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.

Crea il principal admin:

kadmin.local:  addprinc root/admin
Authenticating as principal root/admin@EXAMPLE.COM with password.
WARNING: no policy specified for root/admin@EXAMPLE.COM; defaulting to no policy
Enter password for principal "root/admin@EXAMPLE.COM": kerberos
Re-enter password for principal "root/admin@EXAMPLE.COM": kerberos
Principal "root/admin@EXAMPLE.COM" created.

Crea il principal user01:

kadmin.local:  addprinc user01
Enter password for principal "user01@EXAMPLE.COM": user01
Re-enter password for principal "user01@EXAMPLE.COM": user01
Principal "user01@EXAMPLE.COM" created.

Aggiungi il nome host KDC al database Kerberos:

kadmin.local:  addprinc -randkey host/kbserver.example.com
Authenticating as principal root/admin@EXAMPLE.COM with password.
WARNING: no policy specified for host/kbserver.example.com@EXAMPLE.COM; defaulting to no policy
Principal "host/kbserver.example.com@EXAMPLE.COM" created.

Crea una copia locale memorizzata per impostazione predefinita nel file /etc/krb5.keytab:

kadmin.local:  ktadd host/kbserver.example.com
Authenticating as principal root/admin@EXAMPLE.COM with password.
Entry for principal host/kbserver.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbserver.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.

Esci dallo strumento di amministrazione Kerberos:

kadmin.local:  quit

Modifica il file / etc / ssh / sshd_config e aggiungi / rimuovi le seguenti righe:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Ricarica la configurazione del servizio sshd:

# systemctl reload sshd

Configura il componente PAM sulla riga di comando:

# authconfig --enablekrb5 --update

Per ottenere la configurazione corretta del firewall (porta udp/tcp 88 per Kerberos stesso, porta tcp 749 per comunicazione kadmin), creare il file /etc/firewalld/services/kerberos.xml e incollare le seguenti righe:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Kerberos</short>
  <description>Kerberos network authentication protocol server</description>
  <port protocol="tcp" port="88"/>
  <port protocol="udp" port="88"/>
  <port protocol="tcp" port="749"/>
</service>

Nota: un file di configurazione di Kerberos Firewalld esiste già nella directory /usr/lib/firewalld/ services ma non specifica il protocollo kadmin (749/tcp). Ciò costringerebbe tutte le configurazioni a essere eseguite solo sul server KDC, il che non è molto utile.

Aggiungi il nuovo servizio al firewall:

# firewall-cmd --permanent --add-service=kerberos

Ricarica la configurazione del firewall:

# firewall-cmd --reload

Verifica la tua configurazione (qui kbserver.example.com è il nome del server KDC):

# su - user01
$ kinit
Password for user01@EXAMPLE.COM: user01
$ klist
Ticket cache: KEYRING:persistent:1000:1000
Default principal: user01@EXAMPLE.COM

Valid starting Expires Service principal
07/22/2014 16:48:35 07/23/2014 16:48:11 krbtgt/EXAMPLE.COM@EXAMPLE.COM
 renew until 07/22/2014 16:48:11
$ ssh kbserver.example.com

Ora dovresti essere in grado di uscire e riconnettersi senza fornire alcuna password.
Nota: per eliminare un ticket, utilizzare il comando kdestroy.

Troubleshooting

Quando si risolve il comportamento di Kerberos come root, è possibile assegnare un nome file alla variabile di ambiente KRB5_TRACE. Questo ti aiuterà a tracciare i vari passi seguiti da Kerberos.

# export KRB5_TRACE=/dev/stdout
# kinit
[2878] 1451496694.41411: Getting initial credentials for root@EXAMPLE.COM
[2878] 1451496694.41547: Sending request (183 bytes) to EXAMPLE.COM
...

Risorse addizionali

Il capitolo 11 della Guida all’autenticazione a livello di sistema RHEL 7 tratta della configurazione KDC.

RHEL7: Fornire condivisioni di rete NFS adatte alla collaborazione di gruppo

Nota: questo è un obiettivo d’esame RHCE 7.

Procedura di configurazione

Installa i pacchetti NFS:

# yum groupinstall -y "file-server"

Aggiungi un nuovo servizio al firewall:

# firewall-cmd --permanent --add-service=nfs
Success

Ricarica la configurazione del firewall:

# firewall-cmd --reload
Success

Attiva i servizi NFS all’avvio:

# systemctl enable rpcbind
# systemctl enable nfs-server
# systemctl enable nfs-lock

Nota: con la release RHEL 7.3, il sistema Systemd è in grado di utilizzare gli alias. Ad esempio, nfs.service è un collegamento simbolico/alias al file del servizio nfs-server.service. Ciò consente, ad esempio, di utilizzare il comando systemctl status nfs.service invece di systemctl status nfs-server.service.

Avvia i servizi NFS:

# systemctl start rpcbind
# systemctl start nfs-server
# systemctl start nfs-lock

Crea una directory da esportare (qui /shared):

# mkdir /shared

Crea un gruppo dedicato (qui chiamato sharedgrp):

# groupadd -g 60000 sharedgrp

Assegna questo gruppo alla nuova directory:

# chgrp sharedgrp /shared

Definisci le autorizzazioni:

# chmod 2770 /shared

Modifica il file /etc /exports e aggiungi le seguenti righe con il nome (o l’indirizzo IP) dei client:

/shared client(rw,no_root_squash)

Esporta le directory:

# exportfs -avr
# systemctl restart nfs-server

Nota 1: il client deve avere accesso allo stesso gruppo (tramite LDAP) ed essere membro di questo gruppo.
Nota 2: l’ultimo comando non dovrebbe essere necessario in futuro. Ma, per il momento, evita il riavvio.
Nota3: il modo standard per esportare le condivisioni consiste nel creare un file che termina con .exports nella directory /etc/exports.d (per esempio /etc/exports.d/openshift-ansible.exports).