Indice
Quando una persona (o un programma) richiede l'accesso al sistema, l'autenticazione verifica che l'identità sia fidata.
![]() |
Avvertimento |
---|---|
Errori di configurazione di PAM possono lasciare l'utente fuori dal proprio sistema. Si deve avere un CD di ripristino a portata di mano o impostare una partizione di avvio alternativa. Per fare il ripristino, avviare il sistema con uno di essi e correggere le cose da lì. |
L'autenticazione Unix normale è fornita dal modulo
pam_unix
(8) sotto PAM (Pluggable Authentication
Modules). I suoi 3 importanti file di configurazione, con voci
separate da ":
", sono i seguenti.
Tabella 4.1. I 3 importanti file di configurazione per pam_unix
(8)
file | permessi | utente | gruppo | descrizione |
---|---|---|---|---|
/etc/passwd
|
-rw-r--r--
|
root
|
root
|
informazioni sugli account utente (ripulite) |
/etc/shadow
|
-rw-r-----
|
root
|
shadow
|
informazioni sicure sugli account utente |
/etc/group
|
-rw-r--r--
|
root
|
root
|
informazioni sui gruppi |
"/etc/passwd
" contiene righe come le seguenti.
... utente1:x:1000:1000:Utente1 Nome,,,:/home/utente1:/bin/bash utente2:x:1001:1001:Utente2 Nome,,,:/home/utente2:/bin/bash ...
Come spiegato in "passwd
(5), le voci separate da
":
in questo file hanno il significato seguente.
La seconda voce del file "/etc/passwd
" era usata per la
password cifrata. Dopo l'introduzione di "/etc/shadow
",
questa voce è usata per la specificazione della password.
Tabella 4.2. Il contenuto della seconda voce di "/etc/passwd
"
contenuto | significato |
---|---|
(vuoto) | account senza password |
x |
la password cifrata è in "/etc/shadow "
|
* | nessun login per questo account |
! | nessun login per questo account |
"/etc/shadow
" contiene righe come le seguenti.
... utente1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: utente2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...
Come spiegato in "shadow
(5), le voci separate da
":
in questo file hanno il significato seguente.
$1$
" iniziali indicano
l'uso della cifratura MD5. "*" indica nessun login.)
"/etc/group
" contiene righe come le seguenti.
gruppo1:x:20:utente1,utente2
Come spiegato in "group
(5), le voci separate da
":
in questo file hanno il significato seguente.
![]() |
Nota |
---|---|
" |
![]() |
Nota |
---|---|
Può essere dinamicamente aggiunta la reale appartenenza di un utente ad un
gruppo se viene aggiunta la riga " |
![]() |
Nota |
---|---|
Il pacchetto |
Quelli che seguono sono alcuni comandi degni di nota per gestire le informazioni sugli account
Tabella 4.3. Elenco di comandi per gestire informazioni su account
comando | funzione |
---|---|
getent passwd <nome_utente>
|
sfoglia le informazioni sull'account di
"<nome_utente> "
|
getent shadow <nome_utente>
|
sfoglia le informazioni shadow sull'account di
"<nome_utente> "
|
getent group <nome_gruppo>
|
sfoglia le informazioni sul gruppo "<nome_gruppo> "
|
passwd
|
gestisce la password per l'account |
passwd -e
|
imposta una password usa e getta per l'attivazione dell'account |
chage
|
gestisce le informazioni sulla scadenza della password |
Può essere necessario avere i privilegi di root per far funzionare alcune di
queste funzioni. Vedere crypt
(3) per la cifratura di
password e dati.
![]() |
Nota |
---|---|
Nei sistemi configurati con PAM e NSS, come la macchina alioth Debian, il contenuto dei file locali
" |
Quando si crea un account, durante l'installazione del sistema o con il
comando passwd
(1), si dovrebbe scegliere una buona password che consiste, secondo
passwd
(1), di un numero di caratteri da 6 a 8, incluso
uno o più caratteri da ciascuno dei seguenti insiemi.
![]() |
Avvertimento |
---|---|
Non scegliere come password parole indovinabili. |
Ci sono strumenti indipendenti per generare password cifrate con salt
Tabella 4.4. Elenco di strumenti per generare password
pacchetto | popcon | dimensione | comando | funzione |
---|---|---|---|---|
whois
*
|
V:10, I:88 | 396 |
mkpasswd
|
frontend ricco di funzionalità per la libreria crypt (3)
|
openssl *
|
V:56, I:91 | 2380 |
openssl passwd
|
calcola hash di password (OpenSSL). passwd (1ssl)
|
I moderni sistemi *nix come il sistema Debian, forniscono all'amministratore di sistema i meccanismi PAM (Pluggable Authentication Modules) e NSS (Name Service Switch) per configurare il sistema. Il ruolo di questi meccanismi può essere riassunto nel modo seguente.
ls
(1) e id
(1).
Questi sistemi PAM e NSS devono essere configurati in modo coerente.
I pacchetti degni di nota relativi ai sistemi PAM e NSS sono i seguenti.
Tabella 4.5. Elenco dei pacchetti degni di nota per i sistemi PAM e NSS
pacchetto | popcon | dimensione | descrizione |
---|---|---|---|
libpam-modules *
|
V:88, I:99 | 1036 | Pluggable Authentication Modules, moduli di autenticazione inseribili (servizio base) |
libpam-ldap *
|
V:2, I:4 | 408 | Pluggable Authentication Module, modulo di autenticazione inseribile, che permette interfacce LDAP |
libpam-cracklib *
|
V:2, I:2 | 104 | Pluggable Authentication Module, modulo di autenticazione inseribile, che permette il supporto di cracklib |
libpam-doc *
|
I:0.6 | 1208 | Pluggable Authentication Modules, moduli di autenticazione inseribili (documentazione in html e testo semplice) |
libc6
*
|
V:97, I:99 | 10012 | Libreria GNU C: librerie condivise che forniscono anche il servizio "Name Service Switch" |
glibc-doc *
|
I:3 | 2008 | Libreria GNU C: pagine man |
glibc-doc-reference *
|
I:1.4 | 12156 | Libreria GNU C: manuale di riferimento nei formati info, pdf e html (non-free) |
libnss-mdns *
|
I:49 | 116 | Modulo NSS per la risoluzione dei nomi DNS Multicast |
libnss-ldap *
|
I:4 | 268 | Modulo NSS per l'uso di LDAP come servizio per i nomi |
libnss-ldapd *
|
V:0.18, I:0.5 | 144 |
Modulo NSS per l'uso di LDAP come servizio per i nomi (nuovo fork di
libnss-ldap )
|
libpam-doc
è essenziale per
imparare la configurazione di PAM.
glibc-doc-reference
è essenziale per imparare la
configurazione di NSS.
![]() |
Nota |
---|---|
Si può ottenere un elenco più esteso ed aggiornato usando il comando
" |
![]() |
Nota |
---|---|
PAM è il metodo più basilare per inizializzare le variabili d'ambiente per ciascun programma con valori predefiniti a livello di sistema. |
Quelli che seguono sono alcuni file degni di nota letti da PAM.
Tabella 4.6. Elenco di file di configurazione letti da PAM
file di configurazione | funzione |
---|---|
/etc/pam.d/<nome_programma>
|
imposta la configurazione PAM per il programma
"<nome_programma> "; vedere
pam (7) e pam.d (5)
|
/etc/nsswitch.conf
|
imposta la configurazione NSS con la voce per ciascun servizio. Vedere
nsswitch.conf (5)
|
/etc/nologin
|
limita il login utente con il modulo pam_nologin (8)
|
/etc/securetty
|
limita la tty per l'accesso root con il modulo
pam_securetty (8)
|
/etc/security/access.conf
|
imposta il limite di accesso con il modulo pam_access (8)
|
/etc/security/group.conf
|
imposta restrizioni basate su gruppi con il modulo
pam_group (8)
|
/etc/security/pam_env.conf
|
imposta le variabili d'ambiente con il modulo pam_env (8)
|
/etc/environment
|
imposta variabili d'ambiente aggiuntive con il modulo
pam_env (8) con l'argomento "readenv=1 "
|
/etc/default/locale
|
imposta la localizzazione con il modulo pam_env (8) con
l'argomento "readenv=1 envfile=/etc/default/locale "
(Debian)
|
/etc/security/limits.conf
|
imposta limitazioni alle risorse (ulimit, core, …) con il modulo
pam_limits (8)
|
/etc/security/time.conf
|
imposta limitazioni temporali con il modulo pam_time (8)
|
Le restrizioni sulla scelta delle password sono implementate dai moduli PAM
pam_unix
(8) e pam_cracklib
(8). Possono
essere configurati tramite i loro argomenti.
![]() |
Suggerimento |
---|---|
I moduli PAM usano il suffisso " |
La moderna gestione centralizzata del sistema può essere messa in atto usando il server del Protocollo LDAP (Lightweight Directory Access Protocol) per amministrare molti sistemi *nix e non *nix in rete. L'implementazione open source del protocollo LDAP è il software OpenLDAP.
Il server LDAP fornisce le informazioni sugli account attraverso l'uso di
PAM e NSS con i pacchetti per il sistema Debian
libpam-ldap
e libnss-ldap
. Per
abilitare ciò sono necessarie diverse azioni. (Non ho mai usato questa
configurazione e le informazioni che seguono sono di seconda mano. Tenerlo a
mente quando si legge quanto segue.)
slapd
(8).
Si modificano i file di configurazione di PAM nella directory
"/etc/pam.d/
" per usare "pam_ldap.so
"
invece del predefinito "pam_unix.so
".
/etc/pam_ldap.conf
" come file di
configurazione per libpam-ldap
e
"/etc/pam_ldap.secret
" come file per archiviare la
password di root.
Si modifica la configurazione di NSS nel file
"/etc/nsswitch.conf
" per usare "ldap
"
invece della scelta predefinita ("compat
" o
"file
").
/etc/libnss-ldap.conf
" come file di
configurazione per libnss-ldap
.
libpam-ldap
usi una connessione SSL (o TLS).
libnss-ldap
usi una connessione SSL (o TLS) a prezzo di un maggiore carico sulla
rete LDAP.
nscd
(8) localmente per mettere nella
cache ogni risultato di ricerche LDAP in modo da ridurre il traffico di rete
LDAP.
Vedere la documentazione in pam_ldap.conf
(5) e
"/usr/share/doc/libpam-doc/html/
" fornita dal pacchetto
libpam-doc
e in "info libc 'Name Service
Switch'
" fornita dal pacchetto glibc-doc
.
In modo simile si possono impostare sistemi centralizzati alternativi con altri metodi.
Questa è la famosa sezione scritta da Richard M. Stallman, alla fine della
vecchia pagina "info su
. Non c'è da preoccuparsi:
l'attuale comando su
in Debian usa PAM, perciò questo può
limitare la possibilità di usare su
verso il gruppo
root
abilitando la riga con
"pam_wheel.so
" in "/etc/pam.d/su
".
L'installazione del pacchetto libpam-cracklib
permette di
imporre regole più stringenti sulle password, per esempio usando righe
attive nel file "/etc/pam.d/common-password
" come le
seguenti.
Per lenny
:
password required pam_cracklib.so retry=3 minlen=9 difok=3 password required pam_unix.so use_authtok nullok md5
Per squeeze
:
password required pam_cracklib.so retry=3 minlen=9 difok=3 password [success=1 default=ignore] pam_unix.so use_authtok nullok md5 password requisite pam_deny.so password required pam_permit.so
![]() |
Nota |
---|---|
Vedere Sezione 9.5.15, «Tasto Alt-SysRq» per limitare la funzionalità SAK (Secure Attention Key) del kernel. |
sudo
(8) è un programma progettato per permettere ad un
sysadmin di dare privilegi di root limitati ad utenti e di registrare
l'attività come root. sudo
richiede solo la password di
un utente regolare. Installare il pacchetto sudo
e
attivarlo impostando le opzioni in "/etc/sudoers
". Vedere
un esempio di configurazione in
"/usr/share/doc/sudo/examples/sudoers
".
Il mio uso di sudo
per un sistema con un singolo utente
(vedere Sezione 1.1.12, «Configurazione di sudo») è mirato a proteggere me
stesso dalla mia stupidità. Personalmente condidero l'uso di
sudo
come un'alternativa migliore all'uso costante del
sistema dall'account root. Per esempio, il comando seguente cambia il
proprietario di "<un_certo_file>
" in
"<mio_nome>
".
$ sudo chown <mio_nome> <un_certo_file>
Naturalmente se si conosce la password di root (come accade per ogni utente
Debian che ha installato il proprio sistema), qualsiasi comando può essere
eseguito come utente root da qualsiasi account utente usando "su
-c
".
SELinux (Security-Enhanced Linux) è un'infrastruttura per rendere il modello basato su privilegi più restrittivo del modello ordinario di sicurezza in stile Unix, usando politiche di controllo obbligatorio degli accessi (MAC, mandatory access control). I poteri di root possono essere limitati in determinate condizioni.
Per la sicurezza del sistema è una buona idea disabilitare il maggior numero di programmi server possibile. Questo aspetto diventa critico per i server di rete. Avere server inutilizzati, attivati direttamente come demoni o attraverso un programma super-server, è considerato un rischio per la sicurezza.
Molti programmi, come sshd
(8), usano un controllo degli
accessi basato su PAM. Ci sono molti modi per limitare gli accessi ad un
qualche servizio server.
/etc/default/<nome_programma>
"
/etc/inetd.conf
" per il super-server
/etc/hosts.deny
" e "/etc/hosts.allow
"
per il wrapper TCP,
tcpd
(8)
/etc/rpc.conf
" per Sun RPC
/etc/at.allow
" e "/etc/at.deny
" per
atd
(8)
/etc/cron.allow
" e "/etc/cron.deny
"
per crontab
(1)
Vedere Sezione 3.5.3, «Esempio di gestione dei runlevel», Sezione 3.5.4, «Il parametro predefinito per ciascuno script init», Sezione 4.5.1, «File di configurazione letti da PAM e NSS», Sezione 3.5.8, «Inizializzazione dei servizi di rete» e Sezione 5.9, «Infrastruttura netfilter».
![]() |
Suggerimento |
---|---|
I servizi Sun RPC devono essere attivi per i programmi NFS ed altri programmi basati su RPC. |
![]() |
Suggerimento |
---|---|
Se si hanno problemi con l'accesso remoto in sistemi Debian recenti,
commentare la configurazione responsabile come "ALL: PARANOID" in
" |
Le informazioni fornite in questo documento potrebbe non essere sufficienti per le proprie necessità di sicurezza ma dovrebbero essere un buon punto di partenza.
Molti servizi per livello di trasporto popolari comunicano i loro messaggi, compresa l'autenticazione con password, in puro testo. È una pessima idea trasmettere password in puro testo attraverso l'Internet selvaggia dove possono essere intercettate. Si possono eseguire questi servizi attraverso "TLS" (Transport Layer Security, sicurezza del livello di trasporto), o il suo predecessore "SSL" (Secure Sockets Layer, livello per socket sicuri), per rendere sicura tramite cifratura tutta la comunicazione, compresa la password.
Tabella 4.7. Elenco di servizi e porte sicuri e non sicuri
nome del servizio non sicuro | porta | nome del servizio sicuro | porta |
---|---|---|---|
www (http) | 80 | https | 443 |
smtp (posta) | 25 | ssmtp (smtps) | 465 |
ftp-data | 20 | ftps-data | 989 |
ftp | 21 | ftps | 990 |
telnet | 23 | telnets | 992 |
imap2 | 143 | imaps | 993 |
pop3 | 110 | pop3s | 995 |
ldap | 389 | ldaps | 636 |
La cifratura ha un costo in termini di tempo CPU. Come alterativa leggera per la CPU, si può mantenere la comunicazione in testo semplice, rendendo allo stesso tempo sicura la sola password con un protocollo di autenticazione sicura come "APOP" (Authenticated Post Office Protocol) per POP e "CRAMD-MD5" (Challenge-Response Authentication Mechanism MD5) per SMTP e IMAP. (Per inviare messaggi di posta elettronica via Internet dal proprio programma di posta al proprio server di posta è diventato popolare recentemente l'uso per SMTP della porta 587 invece della porta tradizionale 25, per evitare il blocco da parte del fornitore del servizio Internet della porta 25 autenticandosi allo stesso tempo con CRAM-MD5.)
Il programma Secure Shell (SSH
fornisce comunicazioni sicure cifrate tra due host non fidati attraverso una
rete non sicura, grazie ad un'autenticazione sicura. Consiste del client
OpenSSH, ssh
(1) e del
demone OpenSSH,
sshd
(8). SSH può essere usato per fare da tunnel sicuro
attraverso Internet per le comunicazioni con protocollo non sicuro come POP
ed X, con la funzionalità di inoltro delle porte.
Il client cerca di autenticarsi usando un'autenticazione basata sull'host, su una chiave pubblica, challenge-response o con password. L'uso di un'autenticazione con chiave pubblica permette il login remoto senza password. Vedere Sezione 6.9, «Il server e le utilità per l'accesso remoto (SSH)».
Anche quando si eseguono servizi sicuri, come server SSH (Secure shell) e PPTP (Point-to-Point Tunneling Protocol), esiste sempre la possibilità di un'intrusione da Internet con attacchi basati sull'indovinare la password usando metodi con forza bruta, ecc. L'uso di una politica di firewall (vedere Sezione 5.9, «Infrastruttura netfilter») insieme agli strumenti di sicurezza elencati in seguito, può migliorare la sicurezza generale.
Tabella 4.8. Elenco di strumenti per fornire misure aggiuntive di sicurezza
pacchetto | popcon | dimensione | descrizione |
---|---|---|---|
knockd *
|
V:0.15, I:0.3 | 164 |
piccoli demone, knockd (1), e client,
knock (1) per bussare alle porte
|
denyhosts *
|
V:2, I:2 | 356 | utilità per aiutare gli amministratori di sistema a contrastare hacker ssh |
fail2ban *
|
V:4, I:5 | 660 | strumento per interdire IP che causano errori di autenticazione multipli |
libpam-shield *
|
V:0.01, I:0.05 | 104 | blocca all'esterno gli attacchi remoti che cercano di indovinare le password |
Per impedire che qualcuno possa accedere alla propria macchina con privilegi di root, è necessario compiere le azioni seguenti.
Avendo accesso fisico al disco fisso, reimpostare la password di root è relativamente semplice seguendo i passi seguenti.
/etc/passwd
" nella partizione root e
rendere la seconda voce per l'account di root
vuota.
Se si ha l'accesso in modifica alle voci di menu di GRUB (vedere Sezione 3.3, «Stadio 2: il bootloader») per grub-rescue-pc
all'avvio, è ancora più semplice, seguendo i passi seguenti.
root=/dev/hda6 rw init=/bin/sh
".
/etc/passwd
" e rendere la seconda
voce per l'account di root
vuota.
Si può ora accedere alla shell di root del sistema senza password.
![]() |
Nota |
---|---|
Una volta ottenuto l'accesso alla shell di root, si ha l'accesso a qualsiasi
cosa sul sistema e si può reimpostare qualsiasi password. Inoltre, si
possono compromettere le password per tutti gli account utente usando
strumenti di violazione delle password con attacchi a forza bruta, come
quelli nei pacchetti |
L'unica soluzione software ragionevole per evitare tutte queste
preoccupazioni è l'uso di una partizione root (o partizione
"/etc
") cifrata, usando dm-crypt e initramfs (vedere Sezione 9.4, «Suggerimenti per la cifratura dei dati»). Tuttavia è sempre necessaria la password
per avviare il sistema.