[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 134.   Parole d'ordine oscurate

Il meccanismo delle parole d'ordine oscurate (shadow password) 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 parole d'ordine oscurate 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 parole d'ordine oscurate 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 che si utilizza. L'attivazione di parole d'ordine oscurate in una distribuzione che non sia stata predisposta, comporta una serie di difficoltà che rendono la cosa sconsigliabile.

Tabella 134.1. Riepilogo dei programmi e dei file per la gestione delle parole d'ordine oscurate.

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 parole d'ordine oscurate.
pwunconv Conversione dalle parole d'ordine oscurate 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 parole d'ordine oscurate.
grpunconv Conversione dai gruppi con parole d'ordine oscurate 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.

134.1   Funzioni delle parole d'ordine oscurate

Con le parole d'ordine oscurate 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.

134.1.1   File «/etc/shadow»

La presenza del file /etc/shadow indica l'attivazione delle parole d'ordine oscurate. 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 134.2. Schema dei tempi riferiti alle utenze. I numeri fanno riferimento ai campi del file /etc/shadow.

tempi dal file /etc/shadow

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

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

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

Perché il sistema delle parole d'ordine oscurate 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).

134.1.2   File «/etc/passwd»

Quando è attivo il sistema delle parole d'ordine oscurate, 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 parole d'ordine oscurate sono ovviamente disattivate e non dovrebbero esserci altre conseguenze.

134.2   Amministrazione degli utenti

La presenza delle parole d'ordine oscurate richiede strumenti adeguati alla loro amministrazione. Le informazioni aggiuntive che richiede un'utenza quando sono attive le parole d'ordine oscurate, rendono utile la presenza di un file di configurazione contenente le caratteristiche predefinite che questo dovrebbe avere. Questo file è /etc/login.defs.

134.2.1   File «/etc/login.defs»

Il file /etc/login.defs permette di stabilire alcune caratteristiche predefinite delle utenze che utilizzano le parole d'ordine oscurate. La sua presenza è importante soprattutto nel momento della creazione di un nuovo utente, ovvero della trasformazione di utenze normali in utenze munite di parole d'ordine oscurate, 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 (or any maildir-compatible MTA, such as Exim or
#   Postfix when suitably configured).
# 
#   Essentially, MAIL_DIR defines the $MAIL environmental variable
#   (for mbox use) by appending the username to MAIL_DIR as defined
#   below.  MAIL_FILE defines the $MAIL environment variable as the
#   fully-qualified filename obtained by prepending the user home
#   directory before $MAIL_FILE, and QMAIL_DIR defines the MAIL
#   environment variable as the fully-qualified directory name
#   obtained by prepending the user home directory before $QMAIL_DIR.
#
# 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, and, in default setup, overrides this setting
# in determining the $MAIL environmental variable.
# 
#QMAIL_DIR      Maildir/
#MAIL_DIR        /var/mail
MAIL_FILE      mail/mbox

#
# 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, all su activity is logged to this file.
#
#SULOG_FILE     /var/log/sulog

#
# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100  tty01".
#
#TTYTYPE_FILE   /etc/ttytype

#
# If defined, login failures will be logged here in a utmp format.
# last, when invoked as lastb, will read /var/log/btmp, so...
#
FTMP_FILE       /var/log/btmp

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

#
# If defined, the presence of this value in an /etc/passwd "shell" field will
# disable logins for that user, although "su" will still be allowed.
#
# XXX this does not seem to be implemented yet...  --marekm
# no, it was implemented but I ripped it out ;-) -- jfh
NOLOGIN_STR     NOLOGIN

#
# If defined, either a TZ environment parameter spec or the
# fully-rooted pathname of a file containing such a spec.
#
#ENV_TZ         TZ=CST6CDT
#ENV_TZ         /etc/tzname

#
# If defined, an HZ environment parameter spec.
#
# for Linux/x86
ENV_HZ          HZ=100
# For Linux/Alpha...
#ENV_HZ         HZ=1024

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/etc/script:/sbin:/bin:/usr/sbin:/usr/bin:\
  \/usr/bin/X11:/usr/local/sbin:/usr/local/bin ENV_PATH PATH=/etc/script:/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 # # Password prompt (%s will be replaced by user name). # # XXX - it doesn't work correctly yet, for now leave it commented out # to use the default which is just "Password: ". #LOGIN_STRING "%s's Password: " # # Should login be allowed if we can't cd to the home directory? # Default in no. # DEFAULT_HOME yes # # If defined, this command is run when removing a user. # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # #USERDEL_CMD /usr/sbin/userdel_local # # If defined, either full pathname of a file containing device names or # a ":" delimited list of device names. No password is required to log in # as a non-root user on these devices. # #NO_PASSWORD_CONSOLE tty1:tty2:tty3:tty4:tty5:tty6 # # When prompting for password without echo, getpass() can optionally # display a random number (in the range 1 to GETPASS_ASTERISKS) of '*' # characters for each character typed. This feature is designed to # confuse people looking over your shoulder when you enter a password :-). # Also, the new getpass() accepts both Backspace (8) and Delete (127) # keys to delete previous character (to cope with different terminal # types), Control-U to delete all characters, and beeps when there are # no more characters to delete, or too many characters entered. # # Setting GETPASS_ASTERISKS to 1 results in more traditional behaviour - # exactly one '*' displayed for each character typed. # # Setting GETPASS_ASTERISKS to 0 disables the '*' characters (Backspace, # Delete, Control-U and beep continue to work as described above). # # Setting GETPASS_ASTERISKS to -1 reverts to the traditional getpass() # without any new features. This is the default. # #GETPASS_ASTERISKS 1 # # 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 # # Instead of the real user shell, the program specified by this parameter # will be launched, although its visible name (argv[0]) will be the shell's. # The program may do whatever it wants (logging, additional authentification, # banner, ...) before running the actual shell. # # FAKE_SHELL /bin/fakeshell # # 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 parole d'ordine oscurate, 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 GNU e l'altra, 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.

Tabella 134.6. Alcune direttive.

Direttiva Descrizione
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 deve quindi 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 vengono 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.

134.2.2   Utilizzo di «pwconv»

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

pwconv

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.

134.2.3   Utilizzo di «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.

pwunconv

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.

134.2.4   Utilizzo di «useradd»

Il programma useradd(3) permette di aggiungere un utente in un sistema in cui siano attive, o meno, le parole d'ordine oscurate.

useradd [opzioni] utente
useradd -D [opzioni]

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; inoltre è opportuno creare la directory personale dell'utente.

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 fa affidamento sulla configurazione memorizzata nel file.

Per questa ragione, nella tabella successiva vengono mostrate solo le opzioni valide in presenza dell'opzione -D. Quando questa opzione viene usata da sola, useradd visualizza semplicemente la configurazione attuale.

Tabella 134.7. Alcune opzioni di configurazione.

Opzione Descrizione
-D [...] -b directory_base
Definisce la nuova directory predefinita di partenza per la creazione di directory personali. A questa viene 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 anno-mese-giorno
Definisce la nuova data di scadenza predefinita delle utenze. La data va inserita nella forma aaaa-mm-gg. 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 rimane 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.
Si osservi che possono esserci delle distribuzioni GNU in cui il programma useradd è modificato in modo che alla creazione di un nuovo utente, gli venga abbinato un gruppo privato. In tale condizione, questa opzione di configurazione risulterebbe non utilizzata in pratica.
-D [...] -s shell
Definisce la shell predefinita da assegnare ai nuovi utenti. Di solito si tratta di /bin/bash.
L'argomento di questa opzione viene annotato nella direttiva SHELL del file /etc/default/useradd.

Segue la descrizione di alcuni esempi.

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

134.2.5   File «/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.

134.2.6   Utilizzo di «userdel»

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

userdel [-r] utente

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.

Nella distribuzione GNU/Linux Debian, è bene utilizzare sempre solo l'eseguibile deluser, che in pratica è un programma Perl in grado di gestire correttamente sia userdel, sia groupdel, occupandosi anche della directory personale dell'utente che viene rimosso.

134.2.7   Utilizzo di «usermod»

Il programma 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 01/01/1970, necessaria per modificare direttamente il file /etc/shadow, potrebbe essere un po' seccante.

usermod [opzioni] utente

Tabella 134.9. Alcune opzioni.

Opzione Descrizione
-e anno-mese-giorno
Definisce la data di scadenza dell'utenza. La data va inserita nella forma aaaa-mm-gg.
-f giorni
Definisce il numero di giorni in cui l'utenza rimane 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.

134.2.8   Utilizzo di «chage»

Il programma 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 parole d'ordine oscurate. 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.

chage [opzioni] utente

L'interrogazione di un'utenza come quella che appare nella figura 134.3 si traduce nel risultato seguente:

chage -l tizio[Invio]

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.

Tabella 134.11. Alcune opzioni.

Opzione Descrizione
-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/shadow. 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/shadow; entro questo tempo, l'utente non può cambiare la parola d'ordine. Se si indica il valore zero, si consente di cambiare la 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/shadow; 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/shadow.
-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/shadow.
-E data_termine
Definisce la data di scadenza dell'utenza, corrispondente all'ottavo campo nel file /etc/shadow. 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).

134.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 ha la possibilità di 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 parole d'ordine oscurate.

134.3.1   File «/etc/gshadow»

La presenza del file /etc/gshadow indica l'attivazione delle parole d'ordine oscurate 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.

134.3.2   Utilizzo di «grpconv»

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

grpconv

134.3.3   Utilizzo di «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.

grpunconv

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.

134.3.4   Utilizzo di «gpasswd»

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

gpasswd [opzioni] 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, a dimostrazione 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.

Tabella 134.12. Alcune opzioni.

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

134.3.5   Utilizzo di «groupadd»

Il programma groupadd (10) permette di aggiungere un gruppo in un sistema in cui siano attive, o meno, le parole d'ordine oscurate.

groupadd [opzioni] gruppo

134.3.6   Utilizzo di «groupdel»

Il programma groupdel (11) permette di eliminare un gruppo in un sistema in cui siano attive, o meno, le parole d'ordine oscurate.

groupdel gruppo

134.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 parole d'ordine oscurate), dispone di un programma Perl creato appositamente per gestire simultaneamente la creazione degli utenti e dei gruppi privati relativi. Se si dispone di parole d'ordine oscurate, 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.

Tabella 134.14. Alcune opzioni.

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

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

134.5.1   utilizzo di «pwck»

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

pwck [-r] [file_passwd [file_shadow]] 

Se necessario, si possono indicare espressamente i file che svolgono le funzioni di passwd e shadow.

134.5.2   Utilizzo di «grpck»

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

grpck [-r] [file_group [file_gshadow]] 

Se necessario, si possono indicare espressamente i file che svolgono le funzioni di group e gshadow.

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

134.7   Riferimenti


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


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome parole_160_d_x0027_ordine_160_oscurate.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory