Monthly Archives: Agosto 2018

Configurazione dell’autenticazione basata su chiavi per SSH

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

Presentazione

Invece di connettersi tramite login/password a un host remoto, SSH consente di utilizzare l’autenticazione basata su chiave. Per configurare l’autenticazione basata su chiave, sono necessari due server virtuali/fisici che chiameremo server1 e server2.

Procedura di configurazione

Sul server1, creare un utente user01 con password user01:

# useradd user01
# passwd user01
Changing password for user user01.
New password: your password
Retype new password: your password
passwd: all authentication tokens updated successfully.

Sul server2, creare lo stesso utente con password user01:

# useradd user01
# passwd user01
Changing password for user user01.
New password: your password
Retype new password: your password
passwd: all authentication tokens updated successfully.

Sul server1, connetti come questo nuovo utente:

# su - user01

Genera una coppia privata/pubblica per l’autenticazione basata su chiave (qui la chiave rsa con 2048 bit e nessuna passphrase):

[user01@server1 ~]$ ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa): return
Created directory '/home/user01/.ssh'.
Enter passphrase (empty for no passphrase): return
Enter same passphrase again: return
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
6d:ac:45:32:34:ac:da:4a:3b:4e:f2:83:85:84:5f:d8 user01@server1.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|       .o        |
|       ...       |
| . o   .o .      |
|. o E .  *       |
| o o o  S =      |
|  o + .  +       |
|  .+.o  .        |
|  .+=            |
|   .oo           |
+-----------------+

Sempre su server1, copia la chiave pubblica su server2.

[user01@server1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub user01@server2.example.com
The authenticity of host 'server2.example.com (192.168.1.49)' can't be established.
ECDSA key fingerprint is 67:79:67:88:7f:da:31:49:7b:dd:ed:40:af:ae:b6:ae.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user01@server2.example.com's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user01@server2.example.com'"
and check to make sure that only the key(s) you wanted were added.

Sul server2, modificare il file /etc/ssh/sshd_config e impostare le seguenti opzioni:

PasswordAuthentication no
PubkeyAuthentication yes

Nota: non esitare a configurare un accesso alla console virtuale su server2, evitando di reinstallare il server fisico/virtuale se qualcosa va storto.

Riavvia il servizio sshd:

# systemctl restart sshd

Tempo di prova

Sul server1 come user01, connettersi al server2:

[user01@server1 ~]$ ssh server2.example.com

Nota 1: questa configurazione può essere eseguita anche per l’account root.
Nota 2: utilizzare le opzioni -v, -vv o -vvv per ottenere alcune informazioni di debug.
Risorse addizionali

Imposta le modalità enforcing e permissive in SELinux

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

Presentazione

SELinux è l’acronimo di Security-Enhanced Linux. È un modo per migliorare la sicurezza del server.

Il file /etc/selinux/config memorizza la configurazione corrente:

# more /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

SELinux può funzionare in tre diverse modalità (enforcing, permissive e disabled) ben descritte nel file sopra.
Oltre alla modalità, c’è un tipo SELinux (targeted, minimum e mls). Tranne se lavori in un’agenzia militare, non dovrai mai cambiare il tipo di targeting.

Configurazione

Per ottenere lo stato di SELinux corrente:

# sestatus

Per impostare la modalità di applicazione, digitare:

# setenforce enforcing

Per rendere permanente questa modifica, modifica il file /etc/sysconfig/selinux (o il file /etc/selinux/config) e sostituisci il seguente valore:

SELINUX=enforcing

In alternativa, per impostare la modalità permissiva, digitare:

# setenforce permissive

Per rendere permanente questa modifica, modifica il file /etc/sysconfig/selinux (o il file /etc/selinux/config) e sostituisci il seguente valore:

SELINUX=permissive

Per rendere obbligatorio il riavvio per modificare la configurazione (-P può essere aggiunto ma con cautela), digitare:

# setsebool secure_mode_policyload on

Diagnosticare e risolvere violazioni dei criteri SELinux di routine

Nota: questo è un obiettivo d’esame RHCSA 7.
introduzione

In RHEL 7, ogni pacchetto non memorizza la propria politica SELinux. La politica di SELinux è memorizzata in un unico pacchetto chiamato selinux-policy-targeted.

Quando una politica è stata scritta per un determinato processo e SELinux è in modalità Permissive o Enforcing, tutte le azioni non consentite dalla politica di SELinux attiveranno una violazione.

La seguente procedura ti fornirà alcuni dettagli su qualsiasi violazione delle policy di SELinux.
Procedura principale

Installa il pacchetto setroubleshoot-server:

# yum install -y setroubleshoot-server

Nota: in effetti, è il pacchetto policycoreutils-python che contiene veramente il comando semanage. Tuttavia, ho sempre trovato il nome del pacchetto setroubleshoot-server, che contiene il pacchetto policycoreutils-python stesso, più facile da ricordare!

Mostra le violazioni dei criteri SELinux:

# sealert -a /var/log/audit/audit.log

Inoltre, quando si verifica un evento AVC (Access Vector Cache), è possibile acquisire la riga associata visualizzata nel file /var/log/audit/audit.log e inviarla al comando audit2why per ottenere una diagnostica.

Ad esempio, supponiamo che tu abbia questa linea nel tuo file /var/log/audit/audit.log:

type=AVC msg=audit(1415714880.156:29): avc:  denied  { name_connect } for  pid=1349 \
  comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 \
  tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

Esegui questo comando per ottenere una diagnostica:

# grep 1415714880.156:29 /var/log/audit/audit.log | audit2why

        Was caused by:
        One of the following booleans was set incorrectly.
        Description:
        Allow httpd to act as a relay

        Allow access by executing:
        # setsebool -P httpd_can_network_relay 1
        Description:
        Allow HTTPD scripts and modules to connect to the network using TCP.

        Allow access by executing:
        # setsebool -P httpd_can_network_connect 1

 

Questo renderà le tue analisi molto più semplici!

Utilizzare impostazioni booleane per modificare le impostazioni SELinux del sistema

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

Presentazione

SELinux usa i booleani per rendere la sua politica più flessibile.

La politica di base è piuttosto severa ma si adatta alla maggior parte dei requisiti. Ma se hai esigenze particolari, puoi facilmente regolarlo grazie ai booleani SELinux.
Gestione standard

Ottieni l’elenco dei booleani di SELinux su un argomento particolare (qui ftp):

# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> on
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

Per impostare un booleano SELinux specifico in base alle tue esigenze (qui ftp_home_dir), digita:

# setsebool -P ftp_home_dir on
or
# yum install -y setroubleshoot-server
# semanage boolean -m --on ftp_home_dir

Nota 1: è possibile utilizzare on o 1, off o 0 con il comando setsebool.
Nota 2: l’opzione -P indica Permanente. Se non lo usi ripristinerà la sua configurazione permanente o predefinita precedente dopo il prossimo riavvio.
Nota3: il comando semanage boolean assegna solo configurazioni permanenti.

Per ottenere un elenco più dettagliato dei booleani SELinux, digitare:

# yum install -y setroubleshoot-server
# semanage boolean -l
SELinux boolean                State  Default Description
ftp_home_dir                   (off  ,  off)  Allow ftp to read and write files in the user home directories
smartmon_3ware                 (off  ,  off)  Enable additional permissions needed to support devices on 3ware controllers.
xdm_sysadm_login               (off  ,  off)  Allow xdm logins as sysadm
xen_use_nfs                    (off  ,  off)  Allow xen to manage nfs files
mozilla_read_content           (off  ,  off)  Control mozilla content access
ssh_chroot_rw_homedirs         (off  ,  off)  Allow ssh with chroot env to read and write files in the user home directories
postgresql_can_rsync           (off  ,  off)  Allow postgresql to use ssh and rsync for point-in-time recovery
allow_console_login            (on   ,   on)  Allow direct login to the console device. Required for System 390
spamassassin_can_network       (off  ,  off)  Allow user spamassassin clients to use the network.
authlogin_shadow               (off  ,  off)  Allow users login programs to access /etc/shadow.
httpd_can_network_relay        (off  ,  off)  Allow httpd to act as a relay
openvpn_enable_homedirs        (on   ,   on)  Allow openvpn to read home directories
...

Nota importante: la colonna Stato(State) mostra rispettivamente la configurazione booleana corrente e la colonna Default la configurazione booleana permanente.

Per ottenere l’elenco di tutti i booleani SELinux con un valore corrente diverso da quello predefinito (opzione -C per la personalizzazione (Custom) locale), digitare:

# semanage boolean -l -C
SELinux boolean                State  Default Description

ftp_home_dir                   (on   ,   on)  Allow ftp to read and write files in the user home directories
httpd_can_sendmail             (on   ,   on)  Allow http daemon to send mail
allow_postfix_local_write_mail_spool (on   ,   on)  Allow postfix_local domain full write access to mail_spool directories
allow_ftpd_full_access         (on   ,   on)  Allow ftp servers to login to local users and read/write all files on the system, governed by DAC.

Per visualizzare l’elenco di booleani di SELinux relativi a NFS, digitare:

# semanage boolean -l | egrep "nfs|SELinux"
SELinux boolean                State  Default Description
xen_use_nfs                    (off  ,  off)  Allow xen to use nfs
virt_use_nfs                   (off  ,  off)  Allow virt to use nfs
mpd_use_nfs                    (off  ,  off)  Allow mpd to use nfs
nfsd_anon_write                (off  ,  off)  Allow nfsd to anon write
ksmtuned_use_nfs               (off  ,  off)  Allow ksmtuned to use nfs
git_system_use_nfs             (off  ,  off)  Allow git to system use nfs
virt_sandbox_use_nfs           (off  ,  off)  Allow virt to sandbox use nfs
logrotate_use_nfs              (off  ,  off)  Allow logrotate to use nfs
git_cgi_use_nfs                (off  ,  off)  Allow git to cgi use nfs
cobbler_use_nfs                (on   ,  off)  Allow cobbler to use nfs
httpd_use_nfs                  (off  ,  off)  Allow httpd to use nfs
sge_use_nfs                    (off  ,  off)  Allow sge to use nfs
ftpd_use_nfs                   (off  ,  off)  Allow ftpd to use nfs
sanlock_use_nfs                (off  ,  off)  Allow sanlock to use nfs
samba_share_nfs                (off  ,  off)  Allow samba to share nfs
openshift_use_nfs              (off  ,  off)  Allow openshift to use nfs
polipo_use_nfs                 (off  ,  off)  Allow polipo to use nfs
use_nfs_home_dirs              (off  ,  off)  Allow use to nfs home dirs
nfs_export_all_rw              (on   ,   on)  Allow nfs to export all rw
nfs_export_all_ro              (on   ,   on)  Allow nfs to export all ro