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 |
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 sonoL
per una password bloccata eNP
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
ousermod --lock carol
. - Sblocca la password dell’utente
carol
-
usermod -U carol
ousermod --unlock carol
.
Note
|
Con le opzioni |
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 di0
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 di99999
. -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 di0
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 diusermod -f
ousermod --inactive
. Una volta trascorso questo numero di giorni, l’account sarà bloccato. Con un valore di0
, 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 |
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 |
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 |
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
|
|
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.*
onmap 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
|
|
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 |
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:
-
L’utente
carol
sul terminalepts/0
dall’host192.168.1.4
ha iniziato la sua sessionesab giu 6
alle14:25
ed è ancoralogged in
. Il sistema — che sta utilizzando il kernel4.19.0-9-amd64
— è stato avviato (reboot system boot
)sab giu 6
alle14:24
ed èstill running
. -
L’utente
mimi
sul terminalepts/0
dall’host192.168.1.4
ha iniziato la sua sessionesab giu 6
alle12:07
e si è disconnesso alle14:24
(la sessione è durata un totale di(02:16)
ore). Il sistema — che sta utilizzando il kernel4.19.0-9-amd64
— è stato avviato (reboot system boot
)sab giu 6
alle12:07
ed è stato spento alle14:24
(è stato in funzione per(02:17)
ore).
Note
|
La linea |
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 |
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:
-
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/*
. -
sudo
ti permette di eseguire singoli comandi con privilegi elevati invece di lanciare un’intera nuova subshell per root come fasu
.
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
|
|
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 |
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 |
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 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 hostSERVERS
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 utenteADMINS
, per esempio, include l’utentecarol
, i membri del grupposudo
e quei membri dell’alias utentePRIVILEGE_USERS
che non appartengono all’alias utenteREGULAR_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 |
Esercizi Guidati
-
Completa la seguente tabella relativa alle autorizzazioni speciali:
Permesso speciale Rappresentazione numerica Rappresentazione simbolica Trova i file con solo quel permesso impostato SUID
SGID
-
Visualizzare i file con solo il bit
SUID
oSGID
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 ilSGID
impostato in/usr/bin
:
-
-
chage
permette di cambiare le informazioni sulla scadenza della password di un utente. Come root, completa la seguente tabella fornendo i comandi corretti sull’utentemary
: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.
-
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 porta22
usandolsof
.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
a443
sull’host192.168.1.55
usandonmap
. -
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é?
-
-
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é?
-
-
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 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
-
Oltre a
SUID
eSGID
, 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
:
-
-
Quando la password di un utente è bloccata tramite
passwd -l username
ousermod -L username
, come puoi capirlo guardando in/etc/shadow
? -
Qual è la controparte del comando
usermod
dichage -E date username
ochage --expiredate date username
? -
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
eSGID
. -
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
-
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
-
Visualizzare i file con solo il bit
SUID
oSGID
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
orfind /usr/bin -perm -u+s
-
Trova tutti i file con
SGID
(e altri permessi) impostato in/usr/bin
:find /usr/bin -perm -2000
orfind /usr/bin -perm -g+s
-
Trova tutti i file con il
SUID
o ilSGID
impostato in/usr/bin
:find /usr/bin -perm /6000
-
-
chage
permette di cambiare le informazioni sulla scadenza della password di un utente. Come root, completa la seguente tabella fornendo i comandi corretti sull’utentemary
: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
-
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 porta22
usandolsof
.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
a443
sull’host192.168.1.55
usandonmap
.nmap -p 80-443 192.168.1.55
-
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.
-
-
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).
-
-
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 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 daADMINS
; gli unici utenti (a partecarol
, membri del grupposudo
eroot
) che possono eseguiresystemctl status apache2
suiSERVERS
.
Risposte agli Esercizi Esplorativi
-
Oltre a
SUID
eSGID
, 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
-
-
Quando la password di un utente è bloccata tramite
passwd -l username
ousermod -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…
). -
Qual è la controparte del comando
usermod
dichage -E date username
ochage --expiredate date username
?usermod -e date username
,usermod --expiredate date username
-
Fornisci due diversi comandi
nmap
per analizzare tutte le 65535 porte su localhost:nmap -p 1-65535 localhost
enmap -p- localhost