Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
110.1 Lezione 1
Argomento 105: Shell e Script di Shell
105.1 Personalizzare e utilizzare l'ambiente di shell
  • 105.1 Lezione 1
  • 105.1 Lezione 2
  • 105.1 Lezione 3
105.2 Personalizzare o scrivere semplici script
  • 105.2 Lezione 1
  • 105.2 Lezione 2
Argomento 106: Interfacce Utente e Desktop
106.1 Installare e configurare X11
  • 106.1 Lezione 1
106.2 Desktop grafici
  • 106.2 Lezione 1
106.3 Accessibilità
  • 106.3 Lezione 1
Argomento 107: Attività Amministrative
107.1 Gestire account utente e gruppo e file di sistema correlati
  • 107.1 Lezione 1
  • 107.1 Lezione 2
107.2 Automatizzare le attività di amministrazione del sistema attraverso la pianificazione
  • 107.2 Lezione 1
  • 107.2 Lezione 2
107.3 Localizzazione e internazionalizzazione
  • 107.3 Lezione 1
Argomento 108: Servizi Essenziali di Sistema
108.1 Mantenere l'orario di sistema
  • 108.1 Lezione 1
  • 108.1 Lezione 2
108.2 Logging di sistema
  • 108.2 Lezione 1
  • 108.2 Lezione 2
108.3 Concetti base dei Mail Transfer Agent (MTA)
  • 108.3 Lezione 1
108.4 Gestire stampa e stampanti
  • 108.4 Lezione 1
Argomento 109: Fondamenti di Networking
109.1 Fondamenti dei protocolli Internet
  • 109.1 Lezione 1
  • 109.1 Lezione 2
109.2 Configurazione di rete persistente
  • 109.2 Lezione 1
  • 109.2 Lezione 2
109.3 Risoluzione dei problemi di base di una rete
  • 109.3 Lezione 1
  • 109.3 Lezione 2
109.4 Configurare un client DNS
  • 109.4 Lezione 1
Argomento 110: Sicurezza
110.1 Eseguire attività di amministrazione della sicurezza
  • 110.1 Lezione 1
110.2 Configurare la sicurezza dell'host
  • 110.2 Lezione 1
110.3 Proteggere i dati con la crittografia
  • 110.3 Lezione 1
  • 110.3 Lezione 2
How to get certified
  1. Argomento 110: Sicurezza
  2. 110.1 Eseguire attività di amministrazione della sicurezza
  3. 110.1 Lezione 1

110.1 Lezione 1

Certificazione:

LPIC-1

Versione:

5.0

Argomento:

110 Sicurezza

Obiettivo:

110.1 Eseguire attività di amministrazione della sicurezza

Lezione:

1 di 1

Introduzione

La sicurezza è un must nell’amministrazione di sistema. Come buon sysadmin di Linux devi tenere d’occhio un certo numero di elementi come i permessi speciali sui file, la scadenza delle password degli utenti, porte e socket aperti, limitare l’uso delle risorse di sistema, trattare con gli utenti loggati, e l’escalation dei privilegi attraverso su e sudo. In questa lezione esamineremo ognuno di questi argomenti.

Controllo dei File con SUID e SGID Attivo

Oltre al tradizionale set di permessi di read, write e execute, i file in un sistema Linux possono anche avere alcuni permessi speciali come i bit SUID o SGID.

Il bit SUID permetterà al file di essere eseguito con i privilegi del proprietario del file. È rappresentato numericamente da 4000 e simbolicamente da s o S sul bit di autorizzazione execute del proprietario. Un esempio classico di un file eseguibile con il permesso SUID impostato è passwd:

carol@debian:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 jul 27  2018 /usr/bin/passwd

La s minuscola in rws indica la presenza del SUID sul file insieme al permesso execute. Una S maiuscola invece (rwS) significherebbe che il sottostante permesso execute non è impostato rendendo il SUID non operativo.

Note

Imparerai a conoscere passwd nella prossima sezione. L’utilità è usata principalmente da root per impostare/cambiare le password degli utenti (per esempio: passwd carol). Tuttavia, gli utenti regolari possono usarla anche per cambiare le proprie password. Questo è il motivo per il quale viene fornito con il set SUID.

D’altra parte, il bit SGID può essere impostato sia sui file sia sulle directory. Con i file, il suo comportamento è equivalente a quello di SUID ma i privilegi sono quelli del proprietario del gruppo. Quando è impostato su una directory, tuttavia, permetterà a tutti i file creati in essa di ereditare la proprietà del gruppo della directory. Come SUID, SGID è rappresentato simbolicamente da s o S sul bit di autorizzazione execute del gruppo. Numericamente, è rappresentato da 2000. Puoi impostare l’SGID su una directory usando chmod. Devi aggiungere 2 (SGID) ai permessi tradizionali (755 nel nostro caso):

carol@debian:~$ ls -ld shared_directory
drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory
carol@debian:~$ sudo chmod 2755 shared_directory/
carol@debian:~$ ls -ld shared_directory
drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory

Per trovare file con uno o entrambi i set SUID e SGID puoi usare il comando find e fare uso dell’opzione -perm. Puoi usare sia valori numerici sia simbolici. I valori — a loro volta — possono essere passati da soli o preceduti da un trattino (-) o da uno slash (/). Il significato è il seguente:

-perm numeric-value o -perm symbolic-value

trova i file che hanno esclusivamente il permesso speciale.

-perm -numeric-value o -perm -symbolic-value

trova i file che hanno il permesso speciale e altri permessi.

-perm /numeric-value o -perm /symbolic-value

trova i file che hanno uno dei permessi speciali (e altri permessi).

Per esempio, per trovare i file con solo SUID impostato nell’attuale directory di lavoro, usa il seguente comando:

carol@debian:~$ find . -perm 4000
carol@debian:~$ touch file
carol@debian:~$ chmod 4000 file
carol@debian:~$ find . -perm 4000
./file

Nota come, dato che non c’erano file che avessero esclusivamente il SUID, ne abbiamo creato uno per mostrare qualche output. Puoi eseguire lo stesso comando in notazione simbolica:

carol@debian:~$ find . -perm u+s
./file

Per trovare i file che corrispondono a SUID (indipendentemente da qualsiasi altro permesso) nella directory /usr/bin/, puoi usare uno dei seguenti comandi:

carol@debian:~$ sudo find /usr/bin -perm -4000
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su
carol@debian:~$ sudo find /usr/bin -perm -u+s
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su

Se stai cercando file nella stessa directory con il bit SGID impostato, puoi eseguire find /usr/bin/ -perm -2000 o find /usr/bin/ -perm -g+s.

Infine, per trovare i file con uno dei due permessi speciali impostati, aggiungi 4 a 2 e usa /:

carol@debian:~$ sudo find /usr/bin -perm /6000
/usr/bin/dotlock.mailutils
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/wall
/usr/bin/ssh-agent
/usr/bin/chage
/usr/bin/dotlockfile
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/expiry
/usr/bin/sudo
/usr/bin/bsd-write
/usr/bin/crontab
/usr/bin/su

Gestione e Scadenza delle Password

Come già detto, puoi usare l’utilità passwd per cambiare la tua password come utente normale. Inoltre, puoi utilizzare l’opzione -S o --status per ottenere informazioni sullo stato del tuo account:

carol@debian:~$ passwd -S
carol P 12/07/2019 0 99999 7 -1

Ecco la spiegazione dei sette campi che si ottengono nell’output:

carol

nome di login dell’utente.

P

Indica che l’utente ha una password valida (P); altri valori possibili sono L per una password bloccata e NP per nessuna password.

12/07/2019

Data dell’ultimo cambio password.

0

Età minima in giorni (il numero minimo di giorni tra i cambi di password). Un valore di 0 significa che la password può essere cambiata in qualsiasi momento.

99999

Età massima in giorni (il numero massimo di giorni di validità della password). Un valore di 99999 disabilita la scadenza della password.

7

Periodo di avvertimento in giorni (il numero di giorni prima della scadenza della password nei quali un utente verrà avvisato).

-1

Periodo di inattività della password in giorni (il numero di giorni inattivi dopo la scadenza della password prima che l’account sia bloccato). Un valore di -1 rimuoverà l’inattività dell’account.

Oltre a riportare lo stato dell’account, userai il comando passwd come root per eseguire alcune operazioni di base di manutenzione degli account. Puoi bloccare e sbloccare gli account, forzare un utente a cambiare la sua password al prossimo login e cancellare la password di un utente rispettivamente con le opzioni -l, -u, -e e -d.

Per testare queste opzioni è conveniente introdurre a questo punto il comando su. Attraverso su si può cambiare utente durante una sessione di login. Quindi, per esempio, usiamo passwd come root per bloccare la password di carol. Poi passeremo a carol e controlleremo lo stato del nostro account per verificare che la password sia stata effettivamente bloccata (L) e non possa essere cambiata. Infine, tornando all’utente root, sbloccheremo la password di carol:

root@debian:~# passwd -l carol
passwd: password expiry information changed.
root@debian:~# su - carol
carol@debian:~$ passwd -S
carol L 05/31/2020 0 99999 7 -1
carol@debian:~$ passwd
Changing password for carol.
Current password:
passwd: Authentication token manipulation error
passwd: password unchanged
carol@debian:~$ exit
logout
root@debian:~# passwd -u carol
passwd: password expiry information changed.

In alternativa, puoi anche bloccare e sbloccare la password di un utente con il comando usermod:

Blocca la password dell’utente carol

usermod -L carol o usermod --lock carol.

Sblocca la password dell’utente carol

usermod -U carol o usermod --unlock carol.

Note

Con le opzioni -f o --inactive, usermod può anche essere usato per impostare il numero di giorni prima che un account con una password scaduta sia disabilitato (per esempio: usermod -f 3 carol).

Oltre a passwd e usermod, il comando più diretto per gestire la durata di password e account è chage (“change age”). Come root, puoi passare a chage l’opzione -l (o --list) seguito da un nome utente per avere le sue informazioni sulla scadenza della sua password e dell’account stesso visualizzate sullo schermo; come utente normale, puoi visualizzare le tue informazioni:

carol@debian:~$ chage -l carol
Last password change					: Aug 06, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Eseguito senza opzioni e seguito solo da un nome utente, chage opererà in modalità interattiva:

root@debian:~# chage carol
Changing the aging information for carol
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]:
	Maximum Password Age [99999]:
	Last Password Change (YYYY-MM-DD) [2020-06-01]:
	Password Expiration Warning [7]:
	Password Inactive [-1]:
	Account Expiration Date (YYYY-MM-DD) [-1]:

Le opzioni per modificare le diverse impostazioni di chage sono le seguenti:

-m days username o --mindays days username

Specifica il numero minimo di giorni tra i cambi di password (per esempio: chage -m 5 carol). Un valore di 0 permetterà all’utente di cambiare la sua password in qualsiasi momento.

-M days username o --maxdays days username

Specifica il numero massimo di giorni di validità della password (per esempio: chage -M 30 carol). Per disabilitare la scadenza della password, si usa dare a questa opzione un valore di 99999.

-d days username o --lastday days username

Specifica il numero di giorni dall’ultima modifica della password (per esempio: chage -d 10 carol). Un valore di 0 forzerà l’utente a cambiare la sua password al prossimo login.

-W days username o --warndays days username

Specifica il numero di giorni in cui all’utente verrà ricordato che la sua password è scaduta.

-I days username o --inactive days username

Specifica il numero di giorni inattivi dopo la scadenza della password (per esempio: chage -I 10 carol) — lo stesso di usermod -f o usermod --inactive. Una volta trascorso questo numero di giorni, l’account sarà bloccato. Con un valore di 0, l’account non sarà bloccato.

-E date username o --expiredate date username

Specifica la data (o il numero di giorni da epoch — 1 gennaio 1970) in cui l’account sarà bloccato. È normalmente espressa nel formato YYYY-MM-DD (per esempio: chage -E 2050-12-13 carol).

Note

Puoi imparare di più su passwd, usermod e chage — e le loro opzioni — consultando le rispettive pagine di manuale.

Scoprire le Porte Aperte

Quando si tratta di tenere d’occhio le porte aperte presenti su un sistema, quattro potenti utility sono presenti sulla maggior parte dei sistemi Linux: lsof, fuser, netstat e nmap.

lsof sta per “list open files”, che non è una cosa da poco considerando che — per Linux — tutto è sostanzialmente un file. Infatti, se si digita lsof nel terminale, si otterrà un grande elenco di file normali, file di dispositivi, socket, ecc. Tuttavia, per lo scopo di questa lezione, ci concentreremo principalmente sulle porte. Per visualizzare l’elenco di tutti i file di rete “Internet”, esegui lsof con l’opzione -i:

root@debian:~# lsof -i
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient 357     root    7u  IPv4  13493      0t0  UDP *:bootpc
sshd     389     root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd     389     root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
apache2  399     root    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  401 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  402 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
sshd     557     root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd     569    carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

A parte il servizio bootpc - che è usato da DHCP - l’ouput mostra due servizi in ascolto per le connessioni - ssh e il server web Apache (http) - così come due connessioni SSH stabilite. Puoi specificare un particolare host con la notazione @ip-address per controllare le sue connessioni:

root@debian:~# lsof -i@192.168.1.7
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note

Per visualizzare solo i file di rete IPv4 e IPv6, usate rispettivamente le opzioni -i4 e -i6.

Allo stesso modo, puoi filtrare per porta passando all’opzione -i (o -i@ip-address) l’argomento :port:

root@debian:~# lsof -i :22
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    389  root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd    389  root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Le porte multiple sono separate da virgole (e gli intervalli sono specificati usando un trattino):

root@debian:~# lsof -i@192.168.1.7:22,80
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    705  root    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
sshd    718 carol    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note

La quantità di opzioni disponibili per lsof è piuttosto ampia. Per saperne di più, consulta la relativa pagina di manuale.

Il prossimo nella lista dei comandi di rete è fuser. Il suo scopo principale è quello di trovare un “utente del file” — il che implica sapere quali processi stiano accedendo a quali file; ti dà anche alcune altre informazioni come il tipo di accesso. Per esempio, per controllare la directory di lavoro corrente, è sufficiente eseguire fuser . Tuttavia, per ottenere qualche informazione in più, è conveniente usare l’opzione verbose (-v o --verbose):

root@debian:~# fuser .
/root:                 580c
root@debian:~# fuser -v .
                     USER        PID ACCESS COMMAND
/root:               root        580 ..c.. bash

Scomponiamo l’output:

File

Il file su cui stiamo ottenendo informazioni (/root).

Colonna USER

Il proprietario del file (root).

Colonna PID

L’identificatore del processo (580).

Colonna ACCESS

Tipo di accesso (..c..). Uno tra:

c

Directory corrente.

e

Eseguibile in fase di esecuzione.

f

File aperto (omesso nella modalità di visualizzazione predefinita).

F

File aperto per la scrittura (omesso nella modalità di visualizzazione predefinita).

r

directory principale.

m

file mappato in memoria (mmap) o libreria condivisa.

.

Segnaposto (omesso nella modalità di visualizzazione predefinita).

Colonna COMMAND

Il comando associato al file (bash).

Con l’opzione -n (o --namespace), puoi trovare informazioni sulle porte/socket di rete. Devi anche fornire il protocollo di rete e il numero di porta. Così, per ottenere informazioni sul server web Apache eseguirai il seguente comando:

root@debian:~# fuser -vn tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root        402 F.... apache2
                     www-data    404 F.... apache2
                     www-data    405 F.... apache2
Note

fuser può anche essere usato per terminare i processi che accedono al file con gli switch -k o --kill (per esempio: fuser -k 80/tcp). Fai riferimento alla pagina del manuale per informazioni più dettagliate.

Passiamo ora a netstat. netstat è uno strumento di rete molto versatile che viene usato principalmente per visualizzare “statistiche di rete”.

Eseguito senza opzioni, netstat mostrerà sia le connessioni Internet attive sia i socket Unix. A causa della dimensione dell’elenco, potresti voler convogliare il suo output verso less:

carol@debian:~$ netstat |less
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.7:ssh         192.168.1.4:55444       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    10509    /run/systemd/journal/syslog
unix  3      [ ]         DGRAM                    10123    /run/systemd/notify
(...)

Per elencare solo le porte e i socket “in ascolto”, si useranno le opzioni -l o --listening. Le opzioni -t/--tcp e -u/--udp possono essere aggiunte per filtrare rispettivamente per protocollo TCP e UDP (possono anche essere combinate nello stesso comando). Allo stesso modo, -e/--extend mostrerà informazioni aggiuntive:

carol@debian:~$ netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
carol@debian:~$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
carol@debian:~$ netstat -lute
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13729
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      root       14372
tcp6       0      0 [::]:http               [::]:*                  LISTEN      root       14159
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       13740
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       14374
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                           root       13604

Se ometti l’opzione -l, saranno mostrate solo le connessioni stabilite:

carol@debian:~$ netstat -ute
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:ssh         192.168.1.4:39144       ESTABLISHED root       15103

Se sei interessato solo alle informazioni numeriche riguardanti porte e host, puoi usare l’opzione -n o --numeric per stampare solo i numeri di porta e gli indirizzi IP. Nota come ssh si trasforma in 22 quando aggiungi -n al comando precedente:

carol@debian:~$ netstat -uten
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:22          192.168.1.4:39144       ESTABLISHED 0          15103

Come puoi vedere, è possibile creare comandi netstat molto utili e produttivi combinando alcune delle sue opzioni. Sfoglia le pagine man per saperne di più e trova le combinazioni che meglio si adattano alle tue esigenze.

Infine nmap — o network mapper. Questo port scanner viene eseguito specificando un indirizzo IP o un hostname:

root@debian:~# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds

A parte un singolo host, nmap permette di fare la scansione di:

host multipli

separandoli con degli spazi (per esempio: nmap localhost 192.168.1.7).

intervalli di host

usando un trattino (per esempio: nmap 192.168.1.3-20).

sottoreti

usando un carattere jolly o la notazione CIDR (per esempio: nmap 192.168.1.* o nmap 192.168.1.0/24). Puoi escludere particolari host (per esempio: nmap 192.168.1.0/24 --exclude 192.168.1.7).

Per scansionare una particolare porta, usa l’opzione -p seguita dal numero della porta o dal nome del servizio (nmap -p 22 e nmap -p ssh ti daranno lo stesso risultato):

root@debian:~# nmap -p 22 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds

Puoi anche scansionare più porte o intervalli di porte usando rispettivamente virgole e trattini:

root@debian:~# nmap -p ssh,80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000051s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 57 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds

Altre due importanti e pratiche opzioni nmap sono:

-F

Esegui una scansione veloce sulle 100 porte più comuni.

-v

Ottieni un output verboso (-vv stamperà un output ancora più verboso).

Note

nmap può eseguire comandi abbastanza complessi facendo uso di tipi di scansione. Tuttavia, questo argomento è al di fuori dallo scopo di questa lezione.

Limiti ai Login degli Utenti, ai Processi e all’Uso della Memoria

Le risorse su un sistema Linux non sono illimitate quindi — come sysadmin — dovresti assicurare un buon equilibrio tra i limiti dell’utente sulle risorse e il corretto funzionamento del sistema operativo. ulimit può aiutarti in questo senso.

ulimit si occupa dei limiti soft e hard, specificati rispettivamente dalle opzioni -S e -H. Eseguito senza opzioni o argomenti, ulimit mostrerà il limite soft dei file a blocchi dell’utente corrente:

carol@debian:~$ ulimit
unlimited

Con l’opzione -a, ulimit mostrerà tutti i limiti soft attuali (lo stesso di -Sa); per visualizzare tutti i limiti hard attuali, usa -Ha:

carol@debian:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)
carol@debian:~$ ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)

Le risorse della shell disponibili sono specificate da opzioni come:

-b

dimensione massima del buffer del socket.

-f

dimensione massima dei file scritti dalla shell e dai suoi figli.

-l

dimensione massima che può essere bloccata in memoria.

-m

dimensione massima dell’insieme residente (RSS) — la porzione corrente di memoria tenuta da un processo nella memoria principale (RAM).

-v

massima quantità di memoria virtuale.

-u

numero massimo di processi disponibili per un singolo utente.

Per visualizzare i limiti userai ulimit seguito da -S (soft) o -H (hard) e dall’opzione resource; se non viene fornito né -S né -H, verranno mostrati i limiti soft:

carol@debian:~$ ulimit -u
10000
carol@debian:~$ ulimit -Su
10000
carol@debian:~$ ulimit -Hu
15672

Allo stesso modo, per impostare nuovi limiti su una particolare risorsa si specificherà o -S o -H, seguito dall’opzione della risorsa corrispondente e dal nuovo valore. Questo valore può essere un numero o le parole speciali soft (limite soft corrente), hard (limite hard corrente) o unlimited (nessun limite). Se non viene specificato né -S né -H, verranno impostati entrambi i limiti. Per esempio, leggiamo prima il valore della dimensione massima corrente per i file scritti dalla shell e dai suoi figli:

root@debian:~# ulimit -Sf
unlimited
root@debian:~# ulimit -Hf
unlimited

Ora, cambiamo il valore da unlimited a 500 blocchi senza specificare né -S né -H. Nota come entrambi i limiti soft e hard vengono cambiati:

root@debian:~# ulimit -f 500
root@debian:~# ulimit -Sf
500
root@debian:~# ulimit -Hf
500

Infine, diminuiremo solo il limite soft a 200 blocchi:

root@debian:~# ulimit -Sf 200
root@debian:~# ulimit -Sf
200
root@debian:~# ulimit -Hf
500

I limiti hard possono essere aumentati solo dall’utente root. D’altra parte, gli utenti regolari possono diminuire i limiti hard e aumentare i limiti soft fino al valore dei limiti hard. Per rendere i nuovi valori dei limiti persistenti attraverso i riavvii, è necessario scriverli nel file /etc/security/limits.conf. Questo è anche il file usato dall’amministratore per applicare restrizioni a particolari utenti.

Note

Non c’è una pagina man di ulimit. È un builtin di bash quindi devi fare riferimento alla pagina man di bash per utilizzarlo.

Trattare con gli Utenti in Sessione

Un altro dei tuoi compiti come sysadmin consiste nel tenere traccia degli utenti connessi. Ci sono tre utility che possono aiutarti in questi compiti: last, who e w.

last mostra un elenco degli ultimi utenti connessi, a partire dalle informazioni più recenti:

root@debian:~# last
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 14:24   still running
mimi     pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 12:07 - 14:24  (02:17)
(...)
wtmp begins Sun May 31 14:14:58 2020

Considerando l’elenco troncato, otteniamo informazioni sugli ultimi due utenti del sistema. Le prime due linee ci parlano dell’utente carol; le due linee successive, dell’utente mimi. Le informazioni sono le seguenti:

  1. L’utente carol sul terminale pts/0 dall’host 192.168.1.4 ha iniziato la sua sessione sab giu 6 alle 14:25 ed è ancora logged in. Il sistema — che sta utilizzando il kernel 4.19.0-9-amd64 — è stato avviato (reboot system boot) sab giu 6 alle 14:24 ed è still running.

  2. L’utente mimi sul terminale pts/0 dall’host 192.168.1.4 ha iniziato la sua sessione sab giu 6 alle 12:07 e si è disconnesso alle 14:24 (la sessione è durata un totale di (02:16) ore). Il sistema — che sta utilizzando il kernel 4.19.0-9-amd64 — è stato avviato (reboot system boot) sab giu 6 alle 12:07 ed è stato spento alle 14:24 (è stato in funzione per (02:17) ore).

Note

La linea wtmp begins Sun May 31 14:14:58 2020 si riferisce a /var/log/wtmp, che è il file di log speciale da cui last prende le informazioni.

Puoi passare a last un nome utente per far visualizzare solo le voci che lo riguardano:

root@debian:~# last carol
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
carol    pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
carol    pts/0        192.168.1.4      Fri Jun  5 00:48 - 01:28  (00:39)
(...)

Per quanto riguarda la seconda colonna (terminal), pts sta per Pseudo Terminal Slave — al contrario di un vero e proprio terminale TeleTYpewriter o tty; 0 si riferisce al primo (il conteggio inizia da zero).

Note

Per controllare i tentativi falliti di login, esegui lastb invece di last.

Le utilità who e w si concentrano sugli utenti attualmente connessi e sono abbastanza simili. La prima mostra chi è connesso, mentre la seconda mostra anche informazioni su che cosa stanno facendo.

Quando viene eseguito senza opzioni, who mostrerà quattro colonne corrispondenti all’utente connesso, al terminale, alla data e all’ora e al nome dell’host:

root@debian:~# who
carol    pts/0        2020-06-06 17:16 (192.168.1.4)
mimi     pts/1        2020-06-06 17:28 (192.168.1.4)

who accetta una serie di opzioni, tra le quali possiamo evidenziare le seguenti:

-b,--boot

Visualizza l’ora dell’ultimo avvio del sistema.

-r,--runlevel

Visualizza il runlevel corrente.

-H,--heading

Mostra le intestazioni delle colonne.

Rispetto a who, w dà un output un po' più dettagliato:

root@debian:~# w
 17:56:12 up 40 min,  2 users,  load average: 0.04, 0.12, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
carol    pts/0    192.168.1.4    17:16    1.00s  0.15s  0.05s sshd: carol [priv]
mimi     pts/1    192.168.1.4    17:28   15:08   0.05s  0.05s -bash

La linea superiore fornisce informazioni sull’ora corrente (17:56:12), da quanto tempo il sistema è attivo e funzionante (up 40 min), il numero di utenti attualmente loggati (2 users) e i numeri di carico medio (load average: 0.04, 0.12, 0.09). Questi valori si riferiscono al numero di lavori nella coda di esecuzione in media rispettivamente negli ultimi 1, 5 e 15 minuti.

Seguono otto colonne:

USER

Login name dello user.

TTY

Nome del terminale su cui si trova l’utente.

FROM

Host remoto da cui l’utente ha effettuato l’accesso.

LOGIN@

Orario d’accesso.

IDLE

Tempo di inattività.

JCPU

Tempo utilizzato da tutti i processi collegati alla tty (compresi i lavori in background attualmente in esecuzione).

PCPU

Tempo utilizzato dal processo corrente (quello che appare sotto WHAT).

WHAT

Linea di comando del processo corrente.

Proprio come con who, si possono passare nomi utente w:

root@debian:~# w mimi
 18:23:15 up  1:07,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
mimi     pts/1    192.168.1.4      17:28    9:23   0.06s  0.06s -bash

Configurazione e Utilizzo di Base di sudo

Come già evidenziato in questa lezione, su ti permette di passare a qualsiasi altro utente del sistema purché tu fornisca la password dell’utente di destinazione. Nel caso dell’utente root, avere la sua password distribuita o conosciuta da (molti) altri utenti mette a rischio il sistema ed è una pessima pratica di sicurezza. L’uso base di su è su - target-username. Quando si passa a root — però — il nome utente di destinazione è opzionale:

carol@debian:~$ su - root
Password:
root@debian:~# exit
logout
carol@debian:~$ su -
Password:
root@debian:~#

L’uso del trattino (-) assicura che l’ambiente dell’utente di destinazione sia caricato. Senza di esso, verrà mantenuto l’ambiente del vecchio utente:

carol@debian:~$ su
Password:
root@debian:/home/carol#

Con il comando sudo si può eseguire un comando come utente root o qualsiasi altro utente. Dal punto di vista della sicurezza, sudo è un’opzione di gran lunga migliore di su in quanto presenta due vantaggi principali:

  1. per eseguire un comando come root, non è necessaria la password dell’utente root, ma solo quella dell’utente che lo invoca in conformità con una politica di sicurezza. La politica di sicurezza predefinita è sudoers come specificato in /etc/sudoers e /etc/sudoers.d/*.

  2. sudo ti permette di eseguire singoli comandi con privilegi elevati invece di lanciare un’intera nuova subshell per root come fa su.

L’uso di base di sudo è sudo -u target-username command. Tuttavia, per eseguire un comando come utente root, l’opzione -u target-username non è necessaria:

carol@debian:~$ sudo -u mimi whoami
mimi
carol@debian:~$ sudo whoami
root
Note

sudoers userà un riferimento temporale per utente (e per terminale) per la cache delle credenziali, in modo che tu possa usare sudo senza password per un periodo predefinito di quindici minuti. Questo valore predefinito può essere modificato aggiungendo l’opzione timestamp_timeout come impostazione Defaults in /etc/sudoers (per esempio: Defaults timestamp_timeout=1 imposterà il timeout della cache delle credenziali a un minuto).

Il File /etc/sudoers

Il file di configurazione principale di sudo è /etc/sudoers (c’è anche la directory /etc/sudoers.d), dove vengono determinati i privilegi di sudo degli utenti. In altre parole, è qui che si specifica chi può eseguire quali comandi, come quale utente su quali macchine così come anche altre impostazioni. La sintassi usata è la seguente:

carol@debian:~$ sudo less /etc/sudoers
(...)
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
(...)

La specifica dei privilegi per l’utente root è ALL=(ALL:ALL) ALL. Questo si traduce come: l’utente root (root) può accedere da tutti gli host (ALL), come tutti gli utenti e tutti i gruppi ((ALL:ALL)), ed eseguire tutti i comandi (ALL). Lo stesso vale per i membri del gruppo sudo: nota come i nomi dei gruppi siano identificati da un segno di percentuale precedente (%).

Così, per avere l’utente carol in grado di controllare lo stato di apache2 da qualsiasi host come qualsiasi utente o gruppo, si aggiungerà la seguente linea nel file sudoers:

carol   ALL=(ALL:ALL) /usr/bin/systemctl status apache2

Potresti voler risparmiare a carol l’inconveniente di dover fornire la sua password per eseguire il comando systemctl status apache2. Per questo, modificherai la linea in questo modo:

carol   ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2

Diciamo che ora vuoi limitare i tuoi host su 192.168.1.7 e permettere a carol di eseguire systemctl status apache2 come utente mimi. Dovresti modificare la linea nel seguente modo:

carol   192.168.1.7=(mimi) /usr/bin/systemctl status apache2

Ora puoi controllare lo stato del server web Apache come utente mimi:

carol@debian:~$ sudo -u mimi systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago
(...)

Se carol dovesse essere promossa a sysadmin e tu volessi darle tutti i privilegi, l’approccio più semplice sarebbe quello di includerla nel gruppo speciale sudo con usermod e l’opzione -G (potresti anche usare l’opzione -a, che assicura che l’utente non sia rimosso da qualsiasi altro gruppo a cui potrebbe appartenere):

root@debian:~# sudo useradd -aG sudo carol
Note

Nella famiglia delle distribuzioni Red Hat il gruppo wheel è la controparte dello speciale gruppo amministrativo sudo dei sistemi Debian.

Invece di modificare /etc/sudoers direttamente, dovresti semplicemente usare il comando visudo come root: aprirà /etc/sudoers usando il tuo editor di testo predefinito. Per cambiare l’editor di testo predefinito, puoi aggiungere l’opzione editor come impostazione Defaults in /etc/sudoers. Per esempio, per cambiare l’editor in nano, aggiungerai la seguente linea:

Defaults	editor=/usr/bin/nano
Note

In alternativa, puoi specificare un editor di testo tramite la variabile d’ambiente EDITOR quando usi visudo (per esempio: EDITOR=/usr/bin/nano visudo)

Oltre agli utenti e ai gruppi, puoi anche fare uso di alias in /etc/sudoers. Ci sono tre categorie principali di alias che puoi definire: host alias (Host_Alias), user alias (User_Alias) e command alias (Cmnd_Alias). Ecco un esempio:

# Host alias specification

Host_Alias SERVERS = 192.168.1.7, server1, server2

# User alias specification

User_Alias REGULAR_USERS = john, mary, alex

User_Alias PRIVILEGED_USERS = mimi, alex

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS

# Cmnd alias specification

Cmnd_Alias SERVICES = /usr/bin/systemctl *

# User privilege specification
root    ALL=(ALL:ALL) ALL
ADMINS  SERVERS=SERVICES

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Considerando questo file di esempio sudoers, spieghiamo i tre tipi di alias un po' più nel dettaglio:

Host aliases

Includono una lista separata da virgole di nomi di host, indirizzi IP, così come reti e netgroup (preceduti da +). Possono essere specificate anche le netmask. L’alias di host SERVERS include un indirizzo IP e due nomi di host:

Host_Alias SERVERS = 192.168.1.7, server1, server2
User aliases

Includono una lista separata da virgole di utenti specificati come nomi utente, gruppi (preceduti da %) e netgroup (preceduti da +). Puoi escludere particolari utenti con !. L’alias utente ADMINS, per esempio, include l’utente carol, i membri del gruppo sudo e quei membri dell’alias utente PRIVILEGE_USERS che non appartengono all’alias utente REGULAR_USERS:

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
Command aliases

Includono una lista di comandi e directory separata da virgole. Se viene specificata una directory, qualsiasi file in quella directory sarà incluso, ma le sottodirectory saranno ignorate. L’alias di comando SERVICES include un singolo comando con tutti i suoi sottocomandi, come specificato dall’asterisco (*):

Cmnd_Alias SERVICES = /usr/bin/systemctl *

Come risultato delle specifiche degli alias, la linea ADMINS SERVERS=SERVICES sotto la sezione User privilege specification si traduce come: tutti gli utenti appartenenti a ADMINS possono usare sudo per eseguire qualsiasi comando in SERVICES su qualsiasi server in SERVERS.

Note

C’è un quarto tipo di alias che puoi includere in /etc/sudoers: runas alias (Runas_Alias). Sono molto simili agli alias utente, ma ti permettono di specificare gli utenti per il loro user ID (UID). Questa caratteristica potrebbe essere conveniente in alcuni scenari.

Esercizi Guidati

  1. Completa la seguente tabella relativa alle autorizzazioni speciali:

    Permesso speciale Rappresentazione numerica Rappresentazione simbolica Trova i file con solo quel permesso impostato

    SUID

    SGID

  2. Visualizzare i file con solo il bit SUID o SGID impostato non è normalmente molto pratico. Esegui i seguenti compiti per dimostrare che le tue ricerche possono essere più produttive:

    • Trova tutti i file con SUID (e altri permessi) impostato in /usr/bin:

    • Trova tutti i file con SGID (e altri permessi) impostato in /usr/bin:

    • Trova tutti i file con il SUID o il SGID impostato in /usr/bin:

  3. chage permette di cambiare le informazioni sulla scadenza della password di un utente. Come root, completa la seguente tabella fornendo i comandi corretti sull’utente mary:

    Azione Comandi chage

    Rendi la password valida per 365 giorni.

    Fai in modo che l’utente cambi la password al prossimo login.

    Imposta a 1 il numero minimo di giorni tra i cambi di password.

    Disabilita la scadenza della password.

    Abilita l’utente a cambiare la sua password in qualsiasi momento.

    Imposta il periodo di avviso a 7 giorni e la data di scadenza dell’account al 20 agosto 2050.

    Stampa le informazioni sulla scadenza attuale della password dell’utente.

  4. Completa la seguente tabella con l’utilità di rete appropriata:

    Azione Comando(i)

    Mostra i file di rete per l’host 192.168.1.55 sulla porta 22 usando lsof.

    Mostra i processi che accedono alla porta predefinita del server web Apache sulla tua macchina con fuser.

    Elenca tutti i socket udp in ascolto sulla tua macchina usando netstat.

    Scansiona le porte da 80 a 443 sull’host 192.168.1.55 usando nmap.

  5. Esegui i seguenti compiti relativi a resident set size (RSS) e ulimit come un utente normale:

    • Visualizza i limiti soft sul maximum RSS:

    • Visualizza limiti hard sul maximum RSS:

    • Imposta i limiti soft del maximum RSS a 5.000 kilobyte:

    • Imposta i limiti hard del maximum RSS a 10.000 kilobyte:

    • Infine, prova ad aumentare il limite hard del maximum RSS fino a 15.000 kilobyte. Puoi farlo? Perché?

  6. Considera la seguente linea di output del comando last e rispondi alle domande:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • carol si è collegata da un host remoto? Perché?

    • Quanto è durata la sessione di carol?

    • Il collegamento di carol è avvenuto attraverso un vero terminale classico basato su testo? Perché?

  7. Considera il seguente estratto da /etc/sudoers e rispondi alla domanda che segue.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    Può alex controllare lo stato del server web Apache su qualsiasi host? Perché?

Esercizi Esplorativi

  1. Oltre a SUID e SGID, c’è un terzo permesso speciale: lo sticky bit. Attualmente è usato per lo più su directory come /tmp per impedire agli utenti regolari di cancellare o spostare file diversi dai propri. Esegui le seguenti operazioni:

    • Imposta lo sticky bit su ~/temporal:

    • Trova le directory con lo sticky bit (e qualsiasi altro permesso) impostato sulla tua home directory:

    • Rimuovi lo sticky bit su ~/temporal:

  2. Quando la password di un utente è bloccata tramite passwd -l username o usermod -L username, come puoi capirlo guardando in /etc/shadow?

  3. Qual è la controparte del comando usermod di chage -E date username o chage --expiredate date username?

  4. Fornisci due diversi comandi nmap per analizzare tutte le 65535 porte su localhost:

Sommario

In questa lezione hai imparato come eseguire una serie di compiti di amministrazione della sicurezza. Sono stati trattati i seguenti argomenti:

  • Trovare i file con i permessi speciali SUID e SGID.

  • Impostare e cambiare le password degli utenti e gestire le informazioni sulla scadenza delle password.

  • Usare un certo numero di utility di rete per scoprire le porte aperte su host/reti.

  • Impostare dei limiti delle risorse di sistema.

  • Controllare gli utenti che hanno effettuato l’accesso al sistema o che sono attualmente connessi.

  • Utilizzare e configurare sudo (attraverso il file /etc/sudoers).

Comandi e file discussi in questa lezione:

find

cerca i file in una gerarchia di directory.

passwd

Cambia la password dell’utente.

chmod

Cambia i bit della modalità del file.

chage

Cambia le informazioni sulla scadenza della password dell’utente.

lsof

Elenca i file aperti.

fuser

Identifica i processi che utilizzano file o socket.

netstat

Visualizza le connessioni di rete.

nmap

Esplorazione rete e scansione porte.

ulimit

Ottiene e imposta i limiti utente.

/etc/security/limits.conf

Configurazione delle restrizioni agli utenti.

last

Visualizzazione elenco degli ultimi utenti loggati.

lastb

Visualizzazione elenco di tentativi di login falliti.

/var/log/wtmp

Database dei login degli utenti.

who

Mostra chi è loggato.

w

Mostra chi è collegato e cosa sta facendo.

su

Cambia utente o diventa superutente.

sudo

Esegui un comando come un altro utente (incluso il superutente).

Risposte agli Esercizi Guidati

  1. Completa la seguente tabella relativa alle autorizzazioni speciali:

    Permesso speciale Rappresentazione numerica Rappresentazione simbolica Trova i file con solo quel permesso impostato

    SUID

    4000

    s,S

    find -perm 4000, find -perm u+s

    SGID

    2000

    s,S

    find -perm 2000, find -perm g+s

  2. Visualizzare i file con solo il bit SUID o SGID impostato non è normalmente molto pratico. Esegui i seguenti compiti per dimostrare che le tue ricerche possono essere più produttive:

    • Trova tutti i file con SUID (e altri permessi) impostato in /usr/bin:

      find /usr/bin -perm -4000 or find /usr/bin -perm -u+s

    • Trova tutti i file con SGID (e altri permessi) impostato in /usr/bin:

      find /usr/bin -perm -2000 or find /usr/bin -perm -g+s

    • Trova tutti i file con il SUID o il SGID impostato in /usr/bin:

      find /usr/bin -perm /6000

  3. chage permette di cambiare le informazioni sulla scadenza della password di un utente. Come root, completa la seguente tabella fornendo i comandi corretti sull’utente mary:

    Azione Comandi chage

    Rendi la password valida per 365 giorni.

    chage -M 365 mary, chage --maxdays 365 mary

    Fai in modo che l’utente cambi la password al prossimo login.

    chage -d 0 mary, chage --lastday 0 mary

    Imposta a 1 il numero minimo di giorni tra i cambi di password.

    chage -m 1 mary, chage --mindays 1 mary

    Disabilita la scadenza della password.

    chage -M 99999 mary, chage --maxdays 99999 mary

    Abilita l’utente a cambiare la sua password in qualsiasi momento.

    chage -m 0 mary, chage --mindays 0 mary

    Imposta il periodo di avviso a 7 giorni e la data di scadenza dell’account al 20 agosto 2050.

    chage -W 7 -E 2050-08-20 mary, chage --warndays 7 --expiredate 2050-08-20 mary

    Stampa le informazioni sulla scadenza attuale della password dell’utente.

    chage -l mary, chage --list mary

  4. Completa la seguente tabella con l’utilità di rete appropriata:

    Azione Comando(i)

    Mostra i file di rete per l’host 192.168.1.55 sulla porta 22 usando lsof.

    lsof -i@192.168.1.55:22

    Mostra i processi che accedono alla porta predefinita del server web Apache sulla tua macchina con fuser.

    fuser -vn tcp 80, fuser --verbose --namespace tcp 80

    Elenca tutti i socket udp in ascolto sulla tua macchina usando netstat.

    netstat -lu,netstat --listening --udp

    Scansiona le porte da 80 a 443 sull’host 192.168.1.55 usando nmap.

    nmap -p 80-443 192.168.1.55

  5. Esegui i seguenti compiti relativi a resident set size (RSS) e ulimit come un utente normale:

    • Visualizza i limiti soft sul maximum RSS:

      ulimit -m, ulimit -Sm

    • Visualizza limiti hard sul maximum RSS:

      ulimit -Hm

    • Imposta i limiti soft del maximum RSS a 5.000 kilobyte:

      ulimit -Sm 5000

    • Imposta i limiti hard del maximum RSS a 10.000 kilobyte:

      ulimit -Hm 10000

    • Infine, prova ad aumentare il limite hard del maximum RSS fino a 15.000 kilobyte. Puoi farlo? Perché?

      No. Una volta impostato, gli utenti regolari non possono aumentare i limiti hard.

  6. Considera la seguente linea di output del comando last e rispondi alle domande:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • carol si è collegata da un host remoto? Perché?

      Sì, l’indirizzo IP dell’host remoto è nella terza colonna.

    • Quanto è durata la sessione di carol?

      Sei minuti (come mostrato nell’ultima colonna).

    • Il collegamento di carol è avvenuto attraverso un vero terminale classico basato su testo? Perché?

      No, pts/0 nella seconda colonna indica che la connessione è stata fatta attraverso un emulatore di terminale grafico (conosciuto come: Pseudo Terminal Slave).

  7. Considera il seguente estratto da /etc/sudoers e rispondi alla domanda che segue.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    Può alex controllare lo stato del server web Apache su qualsiasi host? Perché?

    No, perché è un membro di REGULAR_USERS e quel gruppo di utenti è escluso da ADMINS; gli unici utenti (a parte carol, membri del gruppo sudo e root) che possono eseguire systemctl status apache2 sui SERVERS.

Risposte agli Esercizi Esplorativi

  1. Oltre a SUID e SGID, c’è un terzo permesso speciale: lo sticky bit. Attualmente è usato per lo più su directory come /tmp per impedire agli utenti regolari di cancellare o spostare file diversi dai propri. Esegui le seguenti operazioni:

    • Imposta lo sticky bit su ~/temporal:

      chmod +t temporal, chmod 1755 temporal

    • Trova le directory con lo sticky bit (e qualsiasi altro permesso) impostato sulla tua home directory:

      find ~ -perm -1000, find ~ -perm /1000

    • Rimuovi lo sticky bit su ~/temporal:

      chmod -t temporal, chmod 0755 temporal

  2. Quando la password di un utente è bloccata tramite passwd -l username o usermod -L username, come puoi capirlo guardando in /etc/shadow?

    Un punto esclamativo apparirà nel secondo campo, subito dopo il nome di login dell’utente interessato (per esempio: mary:!$6$gOg9xJgv…​).

  3. Qual è la controparte del comando usermod di chage -E date username o chage --expiredate date username?

    usermod -e date username, usermod --expiredate date username

  4. Fornisci due diversi comandi nmap per analizzare tutte le 65535 porte su localhost:

    nmap -p 1-65535 localhost e nmap -p- localhost

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

110.3 Proteggere i dati con la crittografia (110.3 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.