[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Il meccanismo delle password shadow si basa su un principio molto semplice: nascondere le parole d'ordine cifrate ai processi che non hanno i privilegi dell'utente root. Infatti, nei sistemi in cui le password shadow non sono attivate, è il file /etc/passwd
, leggibile a tutti i tipi di utenti, che contiene tali parole d'ordine cifrate.
Il problema nasce dal fatto che è possibile scoprire la parola d'ordine degli utenti attraverso programmi specializzati che scandiscono un vocabolario alla ricerca di una parola che possa corrispondere alla parola d'ordine cifrata.
L'utilizzo del sistema delle password shadow richiede che alcuni programmi siano predisposti per questo. In questo capitolo si fa riferimento a strumenti standard che però si intende siano stati integrati nella distribuzione GNU/Linux che si utilizza. L'attivazione di password shadow in una distribuzione che non sia stata predisposta, comporta una serie di difficoltà che rendono la cosa sconsigliabile.
Tabella 55.1. Riepilogo dei programmi e dei file per la gestione delle password shadow.
Con le password shadow attivate si aggiunge il file /etc/shadow
a fianco del consueto /etc/passwd
. In questo secondo file vengono tolte le parole d'ordine cifrate e al loro posto viene inserita una x, mentre nel file /etc/shadow
, oltre alle parole d'ordine cifrate, vengono inserite altre informazioni sulle utenze che permettono di aumentare la sicurezza.
Anche i gruppi possono avere delle parole d'ordine ed è possibile affiancare al file /etc/group
il file /etc/gshadow
.
La presenza del file /etc/shadow
indica l'attivazione delle password shadow. I record di questo file sono organizzati in campi, separati attraverso il simbolo due punti (:), secondo la sintassi seguente:
utente:parola_d'ordine_cifrata:modifica:valid_min:valid_max:preavviso:tempo_riserva:termine:riservato
I campi che rappresentano una data possono contenere un numero intero che indica il numero di giorni trascorsi dal 1/1/1970, mentre quelli che rappresentano una durata, possono contenere un numero intero che esprime una quantità di giorni.
utente
Il nominativo dell'utente.
parola_d'ordine_cifrata
La parola d'ordine cifrata, quella tolta dal file /etc/passwd
.
modifica
Data in cui è stata modificata la parola d'ordine per l'ultima volta.
validità_minima
Numero di giorni di validità minima della parola d'ordine; entro questo tempo, l'utente non può cambiare la parola d'ordine.
validità_massima
Numero di giorni di validità massima della parola d'ordine; prima che trascorra questo tempo, l'utente deve cambiare la parola d'ordine.
preavviso
Numero di giorni, prima della scadenza della parola d'ordine, durante i quali l'utente viene avvisato della necessità di modificarla.
tempo_di_riserva
Durata massima di validità dell'utenza dopo che la parola d'ordine è scaduta.
termine
Data di scadenza dell'utenza.
riservato
Riservato per usi futuri.
|
A titolo di esempio, viene mostrato un caso sufficientemente completo nella figura 55.2.
|
Quando è attivo il sistema delle password shadow, il file /etc/passwd
non dovrebbe contenere più le parole d'ordine cifrate. Al loro posto dovrebbe apparire una lettera x (minuscola), come nell'esempio seguente:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: ... tizio:x:1000:1000::/home/tizio:/bin/bash ...
Tuttavia, dovrebbe essere ammissibile la presenza di record contenenti la parola d'ordine cifrata dell'utente relativo, con la corrispondente assenza di un record nel file /etc/shadow
. Per questi utenti, le funzionalità delle password shadow sono ovviamente disattivate e non dovrebbero esserci altre conseguenze.
La presenza delle password shadow richiede strumenti adeguati alla loro amministrazione. Le informazioni aggiuntive che richiede un'utenza quando sono attive le password shadow, rende utile la presenza di un file di configurazione contenente le caratteristiche predefinite che questo dovrebbe avere. Questo file è /etc/login.defs
.
Il file /etc/login.defs
permette di stabilire alcune caratteristiche predefinite delle utenze che utilizzano le password shadow. La sua presenza è importante soprattutto nel momento della creazione di un nuovo utente, ovvero della trasformazione di utenze normali in utenze munite di password shadow, per definire i valori relativi alla validità e alla scadenza delle parole d'ordine.
Il file si compone di righe, in cui, ciò che inizia con il simbolo # viene considerato un commento, le righe vuote vengono ignorate e il resto compone le direttive di configurazione. La sintassi di queste è molto semplice: ogni direttiva occupa una sola riga e si compone di coppie nome valore, spaziate, senza simboli di assegnamento.
I valori che possono essere attribuiti sono di tre tipi: stringa, numerico e logico (booleano). Le stringhe vengono indicate senza delimitatori di alcun tipo; i valori numerici possono essere di tipo decimale, ottale (e in tal caso iniziano con uno zero) ed esadecimale (quando iniziano con la sigla 0x); i valori booleani sono indicati attraverso le costanti yes (Vero) e no (Falso).
Segue un estratto di esempio, derivante da una distribuzione GNU/Linux Debian.
# *REQUIRED* # Directory where mailboxes reside, _or_ name of file, relative to the # home directory. If you _do_ define both, MAIL_DIR takes precedence. # QMAIL_DIR is for Qmail # # NOTE: This is used to setup your MAIL environment variable, and also # used by userdel to determine if any mail spools need to be removed when # removing a user. If you change this, you should also change the # pam_mail.so module setup in /etc/pam.d/login, which affects the "You # have mail" message on login. # #QMAIL_DIR Maildir MAIL_DIR /var/spool/mail #MAIL_FILE .mail # Delay in seconds before being allowed another attempt after a login failure FAIL_DELAY 3 # Enable logging and display of /var/log/faillog login failure info. FAILLOG_ENAB yes # Enable display of unknown usernames when login failures are recorded. LOG_UNKFAIL_ENAB no # Enable logging of successful logins LOG_OK_LOGINS no # Enable setting of ulimit, umask, and niceness from passwd gecos field. QUOTAS_ENAB yes # Enable "syslog" logging of su activity - in addition to sulog file logging. # SYSLOG_SG_ENAB does the same for newgrp and sg. SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes # If defined, the command name to display when running "su -". For # example, if this is defined as "su" then a "ps" will display the # command is "-su". If not defined, then "ps" would display the # name of the shell actually being run, e.g. something like "-sh". # SU_NAME su # If defined, file which inhibits all the usual chatter during the login # sequence. If a full pathname, then hushed mode will be enabled if the # user's name or shell are found in the file. If not a full pathname, then # hushed mode will be enabled if the file exists in the user's home directory. # HUSHLOGIN_FILE .hushlogin #HUSHLOGIN_FILE /etc/hushlogins # *REQUIRED* The default PATH settings, for superuser and normal users. # # (they are minimal, add the rest in the shell startup files) ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games # Terminal permissions # # TTYGROUP Login tty will be assigned this group ownership. # TTYPERM Login tty will be set to this permission. # # If you have a "write" program which is "setgid" to a special group # which owns the terminals, define TTYGROUP to the group number and # TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign # TTYPERM to either 622 or 600. # TTYGROUP tty TTYPERM 0600 # Login configuration initializations: # # ERASECHAR Terminal ERASE character ('\010' = backspace). # KILLCHAR Terminal KILL character ('\025' = CTRL/U). # UMASK Default "umask" value. # ULIMIT Default "ulimit" value. # # The ERASECHAR and KILLCHAR are used only on System V machines. # The ULIMIT is used only if the system supports it. # (now it works with setrlimit too; ulimit is in 512-byte units) # # Prefix these values with "0" to get octal, "0x" to get hexadecimal. # ERASECHAR 0177 KILLCHAR 025 UMASK 022 #ULIMIT 2097152 # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 # Min/max values for automatic gid selection in groupadd # GID_MIN 100 GID_MAX 60000 # Max number of login retries if password is bad. This will most likely be # overriden by PAM, since the default pam_unix module has it's own built # in of 3 retries However, this is a safe fallback in case you are using # and authentication module that does not enforce PAM_MAXTRIES. # LOGIN_RETRIES 5 # Max time in seconds for login # LOGIN_TIMEOUT 60 # Number of significant characters in the password for crypt(). # Default is 8, don't change unless your crypt() is better. # If using MD5 in your PAM configuration, set this higher. # PASS_MAX_LEN 8 # Require password before chfn/chsh can make any changes. # CHFN_AUTH yes # Which fields may be changed by regular users using chfn - use # any combination of letters "frwh" (full name, room number, work # phone, home phone). If not defined, no changes are allowed. # For backward compatibility, "yes" = "rwh" and "no" = "frwh". # CHFN_RESTRICT rwh # Should login be allowed if we can't cd to the home directory? # Default in no. # DEFAULT_HOME yes # Enable setting of the umask group bits to be the same as owner bits # (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is # the same as gid, and username is the same as the primary group name. # # This also enables userdel to remove user groups if no members exist. # USERGROUPS_ENAB yes # Enable pam_close_session() calling. When using normal (pam_unix.so) # session handling modules, this is not needed. However with modules # (such as kerberos or other persistent session models), login and su # need to fork and wait for the shell to exit so that sessions can be # cleaned up. # CLOSE_SESSIONS no
Per quanto riguarda il problema particolare delle password shadow, si possono osservare le direttive PASS_MAX_DAYS, PASS_MIN_DAYS e PASS_WARN_AGE. La prima permette di stabilire la durata massima, predefinita, di validità di una parola d'ordine; la seconda serve a stabilire la durata minima; la terza il periodo di preavviso.
Tra una distribuzione e l'altra di GNU/Linux, questo file può contenere o meno determinate direttive. In particolare, quando è attiva la gestione del sistema di autenticazione PAM, alcune direttive perdono di significato, perché riguardano aspetti che passano sotto il controllo della configurazione dei servizi di autenticazione PAM. |
La descrizione dettagliata di alcune delle direttive può essere utile, anche se queste non hanno effetto in tutte le distribuzioni GNU/Linux.
CHFN_AUTH {yes|no}
Se si assegna il valore yes, si intende fare in modo che i programmi chfn e chsh chiedano di reintrodurre la parola d'ordine prima di eseguire, rispettivamente, la sostituzione delle informazioni personali e della shell.
CHFN_RESTRICT [f][r][w][h]
Per consentire all'utente di modificare i propri dati personali, è necessario utilizzare questa direttiva. Attraverso la stringa che può contenere le lettere f, r, w e h, si possono indicare quali elementi ha diritto di modificare l'utente:
f, full name -- nome e cognome;
r, room -- numero della stanza;
w, work -- telefono dell'ufficio (di lavoro);
h, home -- numero telefonico di casa.
CONSOLE {file|elenco_dispositivi_console}
Permette di definire quali siano i terminali da cui può accedere l'utente root, attraverso l'indicazione di un file, che solitamente è /etc/securetty
, oppure attraverso un elenco di nomi di file di dispositivo (senza l'indicazione della directory /dev/
), separati da due punti verticali: console:tty01:tty02:tty03:tty04:tty05:tty06.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_securetty.so
.
DEFAULT_HOME {yes|no}
Se si assegna il valore yes, si intende permettere l'accesso anche se non risulta possible entrare nella directory personale dell'utente (perché non esiste, perché i permessi non sono corretti, ecc.). Se non viene indicata questa direttiva, il valore predefinito è (o dovrebbe essere) no.
FAIL_DELAY n_secondi
Permette di specificare un ritardo, espresso in secondi, da applicare nel caso di un tentativo fallito di accesso. L'utente dovrà attendere quella quantità di tempo prima di poter ritentare.
GID_MIN n_gid_minimo
GID_MAX n_gid_massimo
Queste due direttive permettono rispettivamente di definire il valore minimo e quello massimo per i numeri GID, cioè quelli che vengono utilizzati per distinguere i gruppi di utenti.
UID_MIN n_uid_minimo
UID_MAX n_uid_massimo
Queste due direttive permettono rispettivamente di definire il valore minimo e quello massimo per i numeri UID, cioè quelli che vengono utilizzati per distinguere gli utenti.
ISSUE_FILE percorso
Permette di definire il percorso assoluto di un file il cui contenuto deve essere visualizzato prima della presentazione dell'invito della procedura di accesso. Tradizionalmente si tratta del file /etc/issue
.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_issue.so
.
LASTLOG_ENAB {yes|no}
Se si assegna il valore yes si intende fare in modo che, nel momento in cui viene concesso l'accesso, venga visualizzata la data, l'ora e il terminale dell'ultimo accesso precedente.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_lastlog.so
.
LOGIN_RETRIES n_tentativi
Permette di definire un numero massimo di tentativi che possono essere compiuti dall'utente che cerca di accedere, a seguito di errori nella combinazione tra nominativo e parola d'ordine. Esauriti i tentativi a disposizione, il programma login dovrebbe terminare il suo funzionamento, anche se poi, di solito, viene riavviata una nuova copia del programma Getty.
LOGIN_TIMEOUT n_secondi
Stabilisce un tempo massimo per completare la procedura di accesso, dopo il quale il programma login conclude il suo funzionamento.
MAIL_CHECK_ENAB {yes|no}
Se si assegna il valore yes, si vuole che il programma login verifichi la presenza di messaggi di posta elettronica per l'utente, in modo da avvisarlo prima di lasciare il controllo alla shell. La verifica viene fatta in base alle informazioni indicate con la direttiva MAIL_DIR, oppure in MAIL_FILE.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_mail.so
.
MAIL_DIR directory_caselle_postali
Se si vuole fare in modo che login verifichi la presenza di messaggi di posta elettronica per l'utente che accede, è necessario utilizzare questa direttiva (oppure MAIL_FILE, a seconda della configurazione del sistema di posta elettronica) per fornire l'indicazione della directory che contiene le caselle dei vari utenti. Se queste caselle sono contenute nelle rispettive directory personali, si utilizza la direttiva MAIL_FILE.
MAIL_FILE file_casella_postale
Questa direttiva si contrappone e si sostituisce a MAIL_DIR. Serve a definire il percorso, relativo alla directory personale dell'utente, del file contenente i messaggi di posta elettronica.
MD5_CRYPT_ENAB {yes|no}
Se si assegna il valore yes, si vuole che il programma passwd utilizzi l'algoritmo MD5 per le parole d'ordine cifrate da annotare nel file /etc/passwd
, o /etc/shadow
. Ciò può essere fatto solo se la funzione crypt() del sistema lo consente.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dall'opzione md5 del modulo pam_unix.so
.
MOTD_FILE elenco_percorsi
Permette di definire uno o più percorsi assoluti di file il cui contenuto deve essere visualizzato subito dopo il completamento della procedura di accesso, come messaggio del giorno. L'elenco è separato attraverso due punti verticali (:). Tradizionalmente si tratta del file /etc/motd
.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_motd.so
.
NOLOGINS_FILE percorso
Permette di definire il percorso assoluto di un file, la cui presenza inibisce l'accesso da parte degli utenti comuni. Se il file contiene qualcosa, questo viene visualizzato; solitamente si tratta della spiegazione del rifiuto a concedere l'accesso. Tradizionalmente si tratta del file /etc/nologin
.
Se è attiva la gestione del sistema di autenticazione PAM, questa direttiva non serve perché rimpiazzata dal modulo pam_nologin.so
.
PASS_MIN_DAYS n_giorni
PASS_MAX_DAYS n_giorni
Queste due direttive permettono di definire l'intervallo di validità delle parole d'ordine. Questi valori vengono utilizzati all'atto della registrazione di un nuovo utente, per il quale verranno presi come predefiniti. Per la precisione, PASS_MIN_DAYS stabilisce la durata minima di una parola d'ordine che quindi non può essere modificata con maggiore frequenza; PASS_MAX_DAYS stabilisce invece la durata massima di una parola d'ordine dopo la quale l'utenza viene bloccata.
PASS_WARN_AGE n_giorni
Stabilisce il numero di giorni di preavviso per la scadenza delle parole d'ordine.
PASS_MIN_LEN n_caratteri
PASS_MAX_LEN n_caratteri
Queste due direttive servono a porre dei limiti alla dimensione che può essere assegnata a una nuova parola d'ordine. Finché si utilizza la funzione crypt() tradizionale, non ha senso consentire l'uso di parole d'ordine più lunghe di otto caratteri.
TTYGROUP {gruppo|gid}
Permette di definire il gruppo a cui attribuire il dispositivo corrispondente al terminale utilizzato dall'utente che accede. Di solito si tratta di tty. Ciò è utile in abbinamento alla direttiva TTYPERM, in modo da consentire al programma write (abbinato allo stesso gruppo e impostato con il bit SGID) di scrivere su quel terminale.
TTYPERM permessi_numerici
Permette di definire i permessi da attribuire al dispositivo corrispondente al terminale utilizzato per accedere. Di solito, se si utilizza l'abbinamento al gruppo tty, si assegnano anche i permessi 06208. Il valore predefinito per questi è 06228, cosa che consentirebbe la scrittura a chiunque, mentre per motivi di sicurezza si potrebbe preferire 06008, in modo da escludere a priori l'uso di write e di qualunque altra interferenza simile.
pwconv
pwconv (1) permette di convertire un file /etc/passwd
normale in una coppia /etc/passwd
e /etc/shadow
, togliendo dal primo le parole d'ordine cifrate. Il programma funziona anche se il file /etc/shadow
esiste già; in tal caso serve per fare in modo che tutte le utenze siano registrate correttamente nel file /etc/shadow
e le parole d'ordine siano tolte dal file /etc/passwd
.
Come si vede dalla sintassi indicata, questo programma non richiede argomenti: si avvale semplicemente della configurazione contenuta in /etc/login.defs
per stabilire i periodi di validità delle parole d'ordine. In pratica, utilizza precisamente le informazioni delle direttive PASS_MAX_DAYS, PASS_MIN_DAYS e PASS_WARN_AGE.
pwunconv
A fianco di pwconv, il programma pwunconv (2) svolge il compito inverso: quello di trasferire le parole d'ordine cifrate nel file /etc/passwd
, perdendo le informazioni aggiuntive contenute nel file /etc/shadow
.
Anche questo programma è in grado di funzionare correttamente se parte delle utenze si trovano già solo nel file /etc/passwd
. In ogni caso, al termine viene eliminato il file /etc/shadow
.
useradd [opzioni] utente
useradd -D [opzioni]
Il programma useradd (3) permette di aggiungere un utente in un sistema in cui siano attive, o meno, le password shadow.
Il funzionamento di useradd può essere configurato attraverso il file /etc/default/useradd
e l'uso dell'opzione -D manifesta l'intenzione di visualizzare tale configurazione o di modificarla.
Dopo la creazione dell'utente, è necessario attribuirgli una parola d'ordine iniziale, attraverso il programma passwd. |
Il funzionamento di useradd può essere controllato attraverso il file di configurazione /etc/default/useradd
, oppure attraverso opzioni della riga di comando. Queste opzioni possono essere utili quando si utilizza useradd attraverso uno script, mentre di solito si farà affidamento sulla configurazione memorizzata nel file.
Per questa ragione, qui vengono mostrate solo le opzioni valide in presenza dell'opzione -D. Quando questa opzione viene usata da sola, useradd visualizza semplicemente la configurazione attuale.
-D [...] -b directory_base
Definisce la nuova directory predefinita di partenza per la creazione di directory personali. A questa verrà aggiunta una directory con lo stesso nome dell'utente che si crea. Il valore normale è /home/
.
L'argomento di questa opzione viene annotato nella direttiva HOME del file /etc/default/useradd
.
-D [...] -e mese/giorno/anno
Definisce la nuova data di scadenza predefinita delle utenze. La data va inserita nella forma mm/mm/gg/[ss]aa, dove l'anno può essere composto da due o quattro cifre (secolo e anno). Il valore normale di questa data è indefinito.
L'argomento di questa opzione viene annotato nella direttiva EXPIRE del file /etc/default/useradd
.
-D [...] -f giorni
Definisce il numero di giorni predefinito in cui l'utenza resterà utilizzabile dopo la scadenza della validità della parola d'ordine. Il valore normale è -1, pari al numero più grande che possa essere gestito.
L'argomento di questa opzione viene annotato nella direttiva INACTIVE del file /etc/default/useradd
.
-D [...] -g gruppo|uid
Definisce il gruppo predefinito a cui possono essere aggregati i nuovi utenti. Il valore normale è 100, pari al gruppo di utenti generico.
L'argomento di questa opzione viene annotato nella direttiva GROUP del file /etc/default/useradd
.
-D [...] -s shell
Definisce la shell predefinita da assegnare ai nuovi utenti. Di solito di tratta di /bin/bash
.
L'argomento di questa opzione viene annotato nella direttiva SHELL del file /etc/default/useradd
.
#
useradd caio
Crea l'utente caio secondo la configurazione stabilita nel file /etc/default/useradd
.
#
useradd -D
Visualizza la configurazione attuale per la creazione di nuove utenze.
Il file /etc/default/useradd
contiene la configurazione del programma useradd. Si tratta di una serie di direttive nella forma nome=valore e quasi tutto ciò che appare in questo file può essere modificato attraverso lo stesso useradd, con l'opzione -D. Segue un esempio di questo file.
# useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel
Il significato delle varie direttive è intuitivo; in ogni caso appare descritto nella sezione dedicata a useradd.
userdel [-r] utente
userdel (4) permette di eliminare facilmente un'utenza dai file /etc/passwd
e /etc/shadow
. Eventualmente, se si utilizza l'opzione -r, viene eliminata anche la directory personale dell'utente cancellato, mente altri file che dovessero trovarsi al di fuori di quella gerarchia, possono essere tolti solo in modo manuale.
Se si utilizza la tecnica dei gruppi privati, potrebbe essere necessaria, o desiderabile, l'eliminazione del gruppo corrispondente. In tal caso, occorre intervenire manualmente nel file /etc/group
.
usermod [opzioni] utente
usermod (5) permette di modificare facilmente alcune caratteristiche di un'utenza. A seconda delle preferenze dell'amministratore del sistema, può darsi che si consideri più facile la modifica diretta dei file /etc/passwd
e /etc/shadow
, tuttavia, se si intende indicare una data di scadenza per un'utenza, la conversione in giorni trascorsi dal 1/1/1970, necessaria per modificare direttamente il file /etc/shadow
, potrebbe essere un po' seccante.
-e mese/giorno/anno
Definisce la data di scadenza dell'utenza. La data va inserita nella forma mm/mm/gg/[ss]aa, dove l'anno può essere composto da due o quattro cifre (secolo e anno).
-f giorni
Definisce il numero di giorni in cui l'utenza resterà utilizzabile dopo la scadenza della validità della parola d'ordine.
[-m] -d directory_home
Modifica la posizione della directory personale dell'utente. Se viene usata anche l'opzione -m si ottiene lo spostamento della vecchia directory nella nuova collocazione, oppure, se manca, questa viene creata.
chage [opzioni] utente
chage (6) consente di visualizzare o di modificare le informazioni relative alla validità della parola d'ordine di un utente, all'interno di un sistema in cui siano attive le password shadow. A seconda dell'impostazione della propria distribuzione GNU, può darsi che sia consentito agli utenti comuni di utilizzare l'opzione -l per conoscere le proprie scadenze. Perché ciò avvenga, l'eseguibile chage deve essere SUID-root, oppure deve avere il bit SGID attivo, abbinato a un gruppo particolare che abbia accesso al file /etc/passwd
in lettura.
L'interrogazione di un'utenza come quella che appare nella figura 55.2 si traduce nel risultato seguente:
#
chage -l tizio
Minimum: 0 Maximum: 30 Warning: 7 Inactive: 10 Last Change: Aug 21, 1998 Password Expires: Sep 20, 1998 Password Inactive: Sep 30, 1998 Account Expires: Aug 21, 1999
Se non si indicano opzioni, chage richiede interattivamente le informazioni necessarie all'utilizzatore.
-d data_modifica_parola_d'ordine
Definisce la data in cui è stata modificata la parola d'ordine per l'ultima volta, corrispondente al terzo campo nel file /etc/passwd
. La data può essere inserita con un numero intero, corrispondente alla quantità di giorni trascorsi dal 01/01/1970, oppure secondo una forma differente, in base alla localizzazione (nella configurazione italiana, dovrebbe essere possibile scrivere la data come gg/mm/ssaa).
-m giorni_validità_minima
Definisce il numero di giorni di validità minima della parola d'ordine, corrispondenti al valore inserito nel quarto campo nel file /etc/passwd
; entro questo tempo, l'utente non può cambiare la parola d'ordine. Se si indica il valore zero, si consente di cambiare parola d'ordine in qualsiasi momento.
-M giorni_validità_massima
Definisce il numero di giorni di validità massima della parola d'ordine, corrispondenti al valore inserito nel quinto campo nel file /etc/passwd
; prima che trascorra questo tempo, l'utente deve cambiare la parola d'ordine.
-W giorni_di_preavviso
Definisce il numero di giorni, prima della scadenza della parola d'ordine, durante i quali l'utente viene avvisato della necessità di modificarla. L'informazione viene annotata nel sesto campo nel file /etc/passwd
.
-I giorni_di_riserva
Definisce la quantità di giorni, dopo la scadenza della parola d'ordine, in cui è consentito accedere con l'obbligo di modificare la parola d'ordine. L'informazione viene annotata nel settimo campo nel file /etc/passwd
.
-E data_termine
Definisce la data di scadenza dell'utenza, corrispondente all'ottavo campo nel file /etc/passwd
. La data può essere inserita con un numero intero, corrispondente alla quantità di giorni trascorsi dal 01/01/1970, oppure secondo una forma differente, in base alla localizzazione (nella configurazione italiana, dovrebbe essere possibile scrivere la data come gg/mm/ssaa).
Anche i gruppi possono avere una parola d'ordine, per permettere agli utenti che non vi appartengono di potervisi inserire attraverso il comando newgrp.
Generalmente, per fare in modo che un utente possa partecipare a un gruppo del quale non fa già parte, basta aggiungere il suo nome nell'ultimo campo del record del gruppo in cui questo vuole essere inserito. Da quel momento, quell'utente potrà utilizzare il comando newgrp gruppo per agire con i privilegi concessi a quel gruppo.
L'idea di poter aggiungere una parola d'ordine ai gruppi, in modo che gli utenti estranei che la conoscono possano usare ugualmente newgrp per questo, è piuttosto discutibile. Infatti, una parola d'ordine è «sicura» solo se conosciuta da una sola persona; nel momento in cui la stessa parola d'ordine è conosciuta da un gruppo di persone diventa incontrollabile la sua diffusione (a causa della natura umana).
Tuttavia, il problema esiste e vale la pena di analizzarne gli effetti in presenza di password shadow.
La presenza del file /etc/gshadow
indica l'attivazione delle password shadow per i gruppi. I record di questo file sono organizzati in campi, separati attraverso due punti verticali (:), secondo la sintassi seguente:
gruppo:parola_d'ordine_cifrata:amministratori:utenti_membri
gruppo
Il nome del gruppo.
parola_d'ordine_cifrata
amministratori
Un elenco, separato da virgole, di utenti amministratori del gruppo.
utenti_membri
Un elenco, separato da virgole, di utenti che fanno parte del gruppo.
Gli amministratori del gruppo hanno la possibilità di aggiungere e togliere utenti membri; inoltre, possono cambiare la parola d'ordine.
grpconv
grpconv (7) permette di convertire un file /etc/group
normale in una coppia /etc/group
e /etc/gshadow
, togliendo dal primo le eventuali parole d'ordine cifrate. Il programma funziona anche se il file /etc/gshadow
esiste già: in tal caso serve per fare in modo che tutti i gruppi siano registrati correttamente nel file /etc/gshadow
e le parole d'ordine siano tolte dal file /etc/group
.
grpunconv
A fianco di grpconv, il programma grpunconv (8) svolge il compito inverso: quello di trasferire le parole d'ordine cifrate nel file /etc/group
perdendo le informazioni aggiuntive contenute nel file /etc/gshadow
.
Anche questo programma è in grado di funzionare correttamente se parte delle utenze si trovano solo nel file /etc/group
. In ogni caso, al termine viene eliminato il file /etc/gshadow
.
gpasswd [opzioni] gruppo
gpasswd, (9) come suggerisce il nome, serve a cambiare la parola d'ordine di un gruppo. Oltre a questo, però, permette anche di intervenire sugli altri campi del file /etc/gshadow
, inserendo o eliminando gli amministratori e i membri di un gruppo.
-A amministratore[,...]
Permette all'utente root di definire uno o più amministratori per il gruppo. L'argomento dell'opzione è un elenco di uno o più utenti a cui viene attribuito il ruolo di amministratori del gruppo. L'elenco di amministratori va a sostituirsi a quanto impostato in precedenza.
-M membro[,...]
Permette all'utente root di definire uno o più membri del gruppo. L'argomento dell'opzione è un elenco di uno o più utenti membri del gruppo. L'elenco di membri va a sostituirsi a quanto impostato in precedenza.
-a membro
Permette a un amministratore del gruppo di aggiungere un utente membro.
-d membro
Permette a un amministratore del gruppo di eliminare un utente membro.
-r
Permette a un amministratore del gruppo di eliminare la parola d'ordine.
-R
Permette a un amministratore del gruppo di rendere impossibile l'accesso attraverso la parola d'ordine.
groupadd [opzioni] gruppo
Il programma groupadd (10) permette di aggiungere un gruppo in un sistema in cui siano attive, o meno, le password shadow.
groupdel gruppo
Il programma groupdel (11) permette di eliminare un gruppo in un sistema in cui siano attive, o meno, le password shadow.
La distribuzione GNU/Linux Debian, al posto del programma adduser tradizionale (quello che si usa di solito quando non si gestiscono le password shadow), dispone di un programma Perl creato appositamente per gestire simultaneamente la creazione degli utenti e dei gruppi privati relativi. Se si dispone di password shadow, provvede a richiamare i programmi useradd e groupadd, nel modo più opportuno. (12)
Con la distribuzione GNU/Linux Debian, i programmi useradd e groupadd non vanno usati direttamente; al loro posto si utilizzano adduser e addgroup (il secondo è solo un alias, in qualità di collegamento del primo), che si configurano attraverso il file /etc/adduser.conf
. Senza approfondire la sintassi degli argomenti di adduser e di addgroup, nella versione Debian, si può utilizzare il primo di questi due eseguibili indicando semplicemente il nome dell'utente che si vuole creare, affidandosi alla sua configurazione predefinita. Di seguito appare l'esempio standard del file /etc/adduser.conf
:
# /etc/adduser.conf: `adduser' configuration. # See adduser(8) and adduser.conf(5) for full documentation. # The DSHELL variable specifies the default login shell on your # system. DSHELL=/bin/bash # The DHOME variable specifies the directory containing users' home # directories. DHOME=/home # If GROUPHOMES is "yes", then the home directories will be created as # /home/groupname/user. GROUPHOMES=no # If LETTERHOMES is "yes", then the created home directories will have # an extra directory - the first letter of the user name. For example: # /home/u/user. LETTERHOMES=no # The SKEL variable specifies the directory containing "skeletal" user # files; in other words, files such as a sample .profile that will be # copied to the new user's home directory when it is created. SKEL=/etc/skel # FIRST_SYSTEM_UID to LAST_SYSTEM_UID inclusive is the range for UIDs # for dynamically allocated administrative and system accounts. FIRST_SYSTEM_UID=100 LAST_SYSTEM_UID=999 # FIRST_UID to LAST_UID inclusive is the range of UIDs of dynamically # allocated user accounts. FIRST_UID=1000 LAST_UID=29999 # The USERGROUPS variable can be either "yes" or "no". If "yes" each # created user will be given their own group to use as a default, and # their home directories will be g+s. If "no", each created user will # be placed in the group whose gid is USERS_GID (see below). USERGROUPS=yes # If USERGROUPS is "no", then USERS_GID should be the GID of the group # `users' (or the equivalent group) on your system. USERS_GID=100 # If QUOTAUSER is set, a default quota will be set from that user with # `edquota -p QUOTAUSER newuser' QUOTAUSER=""
Come si può osservare, le direttive sono degli assegnamenti a variabili, dove le righe vuote e quelle bianche vengono ignorate, così come è ignorato il testo che segue il simbolo # fino alla fine della riga in cui appare.
DSHELL=percorso_shell_standard
Definisce la shell da attribuire agli utenti che vengono creati. In mancanza di questa indicazione, si utilizza /bin/bash
.
DHOME=radice_directory_personali
Definisce la radice delle directory personali che vengono create. Il valore predefinito è /home/
.
SKEL=scheletro_directory_personali
Definisce la directory da utilizzare come scheletro per la creazione delle directory personali. In modo predefinito si tratta di /etc/skel/
.
FIRST_UID=n_uid_iniziale
LAST_UID=n_uid_finale
Definiscono l'intervallo dei numeri UID che possono essere utilizzati per gli utenti. In modo predefinito, si tratta di 1 000 e 29 999 rispettivamente.
USERGROUPS={yes|no}
Serve a definire se gli utenti devono avere un gruppo privato. Se si attiva questa modalità, assegnando la parola chiave yes, che è il valore predefinito, si ottiene anche l'attribuzione del bit SGID alla directory personale.
USERS_GID=n_gid
Questa direttiva serve solo nel caso sia stata utilizzata USERGROUPS=no, permettendo così di stabilire il numero GID del gruppo da abbinare agli utenti nuovi.
La gestione delle utenze non è fatta solo di inserimenti, modifiche ed eliminazioni. Dal momento che le modifiche possono anche essere fatte direttamente sui file, è comodo se si dispone di qualche strumento di controllo di coerenza.
pwck [-r] [file_passwd [file_shadow]]
pwck (13) verifica la coerenza del file /etc/passwd
e, se esiste, del file /etc/shadow
(utilizzando anche il file /etc/group
per la verifica dell'appartenenza ai gruppi). Il programma, previo consenso dell'utilizzatore (l'utente root), può risolvere da solo alcuni tipi di problemi modificando i file. Tuttavia, se si utilizza l'opzione -r, pwck si limita a segnalare i problemi.
Se necessario, si possono indicare espressamente i file che svolgono le funzioni di passwd
e shadow
.
grpck [-r] [file_group [file_gshadow]]
grpck (14) verifica la coerenza del file /etc/group
e, se esiste, del file /etc/gshadow
(utilizzando anche il file /etc/passwd
per la verifica dell'aggregazione degli utenti). Il programma, previo consenso dell'utilizzatore (l'utente root), può risolvere da solo alcuni tipi di problemi modificando i file. Tuttavia, se si utilizza l'opzione -r, grpck si limita a segnalare i problemi.
Se necessario, si possono indicare espressamente i file che svolgono le funzioni di group
e gshadow
.
Quando si aggiunge, elimina, o si modifica un'utenza attraverso gli strumenti previsti, vengono generate delle copie di sicurezza dei file amministrativi coinvolti. Tipicamente può trattarsi di /etc/passwd
, /etc/shadow
, /etc/group
e /etc/gshadow
.
Queste copie di sicurezza si distinguono perché hanno gli stessi nomi dei file corrispondenti con l'aggiunta di un trattino finale. In pratica: /etc/passwd-
, /etc/shadow-
, /etc/group-
e /etc/gshadow-
. È importante fare un minimo di attenzione anche a questi file, se si vuole evitare che informazioni importanti vengano conosciute da utenti che non ne hanno il diritto. Infatti, un file /etc/shadow-
che per qualche motivo dovesse diventare leggibile a tutti gli utenti, costituirebbe un grosso buco nel sistema di sicurezza.
Michael H. Jackson, Linux Shadow Password HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
daniele @ swlibero.org
1) Shadow utilities software libero con licenza speciale
2) Shadow utilities software libero con licenza speciale
3) Shadow utilities software libero con licenza speciale
4) Shadow utilities software libero con licenza speciale
5) Shadow utilities software libero con licenza speciale
6) Shadow utilities software libero con licenza speciale
7) Shadow utilities software libero con licenza speciale
8) Shadow utilities software libero con licenza speciale
9) Shadow utilities software libero con licenza speciale
10) Shadow utilities software libero con licenza speciale
11) Shadow utilities software libero con licenza speciale
12) Debian adduser GNU GPL
13) Shadow utilities software libero con licenza speciale
14) Shadow utilities software libero con licenza speciale
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome password_shadow.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]