[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 55.   Password shadow

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.

Nome Descrizione
/etc/shadow File delle parole d'ordine cifrate.
/etc/login.defs Configurazione generale del sistema di autenticazione.
pwconv Conversione dal sistema tradizionale alle password shadow.
pwunconv Conversione dalle password shadow al sistema tradizionale.
useradd Inserimento di un nuovo utente.
/etc/default/useradd Configurazione di useradd.
userdel Eliminazione di un utente.
usermod Modifica di alcune impostazioni riferite a un utente.
chage Modifica i tempi nel file /etc/shadow.
/etc/gshadow File delle parole d'ordine cifrate dei gruppi.
grpconv Conversione dai gruppi tradizionali alle password shadow.
grpunconv Conversione dai gruppi con password shadow a quelli tradizionali.
gpasswd Modifica della parola d'ordine di un gruppo.
groupadd Inserimento di un nuovo gruppo.
groupdel Eliminazione di un gruppo.
pwck Verifica di coerenza delle informazioni sugli utenti.
grpck Verifica di coerenza delle informazioni sui gruppi.
/etc/adduser.conf Configurazione degli script Debian.
adduser Script Debian.
addgroup Script Debian.

55.1   Funzioni 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.

55.1.1   /etc/shadow

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.

  1. utente

    Il nominativo dell'utente.

  2. parola_d'ordine_cifrata

    La parola d'ordine cifrata, quella tolta dal file /etc/passwd.

  3. modifica

    Data in cui è stata modificata la parola d'ordine per l'ultima volta.

  4. validità_minima

    Numero di giorni di validità minima della parola d'ordine; entro questo tempo, l'utente non può cambiare la parola d'ordine.

  5. 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.

  6. preavviso

    Numero di giorni, prima della scadenza della parola d'ordine, durante i quali l'utente viene avvisato della necessità di modificarla.

  7. tempo_di_riserva

    Durata massima di validità dell'utenza dopo che la parola d'ordine è scaduta.

  8. termine

    Data di scadenza dell'utenza.

  9. riservato

    Riservato per usi futuri.

Figura 55.1. Schema dei tempi riferiti alle utenze. I numeri fanno riferimento ai campi del file /etc/shadow.

          si può modificare la parola d'ordine
          |
          |                       inizia il preavviso
          |                       |
          |                       |         la parola d'ordine non
          |                       |         funziona più e viene imposto
          |                       |         di modificarla
          |                       |         |
          |                       |         |            non si può accedere
          |                       |         |            |          
          |                       |         |            |          l'utenza
          |                       |         |            |          viene
          |                       |         |            |          rimossa
          |                       |         |            |          |
*=========*=======================*=========+============*==========*====> tempo
|         |                       |         |            |          |
|         |                       |         |            |          |
|         |                       |         |<-----7---->|          8
|         |                       |         |  giorni di            data
|<---------------------5------------------->|   riserva             finale
|         |   giorni di validità  |         |
|         | della parola d'ordine |<---6--->|
|         |                                giorni di preavviso
|         |
|<---4--->|
|    giorni di validità minima
|
3 data di modifica

A titolo di esempio, viene mostrato un caso sufficientemente completo nella figura 55.2.

Figura 55.2. Esempio di un record del file /etc/shadow.

tizio:wsLHjp.FutW0s:10459:0:30:7:10:10824:
 |     |             |    | |  | |   |
 |     password      |    | |  | |   termine dell'utenza il
 |     cifrata       |    | |  | |   giorno 21/08/1999
 |                   |    | |  | |
 utente              |    | |  | dieci giorni di riserva
                     |    | |  |
                     |    | |  sette giorni di preavviso
                     |    | |
    la password è stata   | trenta giorni di validità massima
    modificata il giorno  |
    21/08/1998            l'utente può cambiare password
                          in ogni momento

Perché il sistema delle password shadow possa dare la sicurezza che promette, è necessario che il file /etc/shadow appartenga all'utente root e abbia esclusivamente il permesso di lettura per il proprietario (04008).

55.1.2   /etc/passwd

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.

55.2   Amministrazione degli utenti

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.

55.2.1   /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.

Alcune direttive

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.

55.2.2   # pwconv

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.

55.2.3   # pwunconv

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.

55.2.4   # useradd

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.

Opzioni di configurazione

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.

Nella distribuzione GNU/Linux Red Hat, il programma useradd è modificato in modo che alla creazione di un nuovo utente, gli venga abbinato un gruppo privato. In tal senso, questa opzione di configurazione risulta non utilizzata in pratica.

-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.

Esempi

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.

Nella distribuzione GNU/Linux Debian, è bene utilizzare sempre solo l'eseguibile adduser, che in pratica è un programma Perl in grado di gestire correttamente sia useradd che groupadd, in particolare per ciò che riguarda il problema dei gruppi privati. Per questo motivo, con la distribuzione GNU/Linux Debian non si deve toccare il file /etc/default/useradd, ammesso che ci sia; inoltre non deve essere creato se questo non c'è.

55.2.5   /etc/default/useradd

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.

55.2.6   # userdel

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.

55.2.7   # usermod

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.

Alcune opzioni

-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.

55.2.8   # chage

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.

Alcune opzioni

-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).

55.3   Amministrazione dei gruppi

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.

55.3.1   /etc/gshadow

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

  1. gruppo

    Il nome del gruppo.

  2. parola_d'ordine_cifrata

    La parola d'ordine cifrata (che normalmente è assente).

  3. amministratori

    Un elenco, separato da virgole, di utenti amministratori del gruppo.

  4. 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.

55.3.2   # grpconv

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.

55.3.3   # grpunconv

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.

55.3.4   $ gpasswd

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.

La presenza di una parola d'ordine in un gruppo, serve a permettere a utenti che non siano già membri di poterne fare parte utilizzando il comando newgrp. Tuttavia, il meccanismo potrebbe non funzionare e ciò è sintomo dello scarso interesse verso questa possibilità. Infatti, la vera innovazione nell'introduzione del file /etc/gshadow sta nella possibilità di definire degli amministratori per i gruppi, competenti per l'aggregazione dei membri rispettivi.

Alcune opzioni

-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.

55.3.5   # groupadd

groupadd [opzioni] gruppo

Il programma groupadd (10) permette di aggiungere un gruppo in un sistema in cui siano attive, o meno, le password shadow.

55.3.6   # groupdel

groupdel gruppo

Il programma groupdel (11) permette di eliminare un gruppo in un sistema in cui siano attive, o meno, le password shadow.

55.4   Caso particolare di adduser e addgroup nella distribuzione GNU/Linux Debian

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.

Alcune direttive

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.

55.5   Verifiche di coerenza

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.

55.5.1   # pwck

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.

55.5.2   # grpck

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.

55.6   Copie di sicurezza

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.

55.7   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- 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]