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


Capitolo 130.   Utenza

Le informazioni sugli utenti registrati nel sistema sono raccolte principalmente all'interno di /etc/passwd. Anche se il nome suggerisce che debba contenere le parole d'ordine, in realtà il suo scopo è più ampio e la sua accessibilità in lettura è essenziale per tutti i programmi che hanno qualcosa a che fare con gli utenti. Per questo motivo, in molti sistemi si preferisce trasferire le parole d'ordine in un altro file con meno possibilità di accesso: /etc/shadow. Il file /etc/group permette di raccogliere le notizie sui gruppi e in particolare di stabilire la possibile appartenenza da parte di un utente a più gruppi.

Questi file sono descritti nelle sezioni 129.1.2, 129.1.3 e 129.1.4.

La tabella 130.1 elenca i programmi e i file a cui si accenna in questo capitolo.

Tabella 130.1. Riepilogo dei programmi e dei file per la gestione della registrazione degli utenti.

Nome Descrizione
adduser Aggiunge un utente e tutto quello che serve perché possa accedere.
/etc/skel/ Struttura tipica di una nuova directory personale.
passwd Permette di modificare la parola d'ordine.
chsh Cambia la shell abbinata all'utente.
/etc/shells Elenco delle shell utilizzabili nel sistema.
chfn Modifica i dati personali dell'utente.

130.1   Parole d'ordine cifrate

In questo documento si accenna più volte al fatto che le parole d'ordine utilizzate per accedere vengono annotate in forma cifrata, nel file /etc/passwd, oppure nel file /etc/shadow.

La cifratura genera una stringa che può essere usata per verificare la correttezza della parola d'ordine, mentre da sola, questa stringa non permette di determinare quale sia la parola d'ordine di origine. In pratica, data la parola d'ordine si può determinare la stringa cifrata, ma dalla stringa cifrata non si ottiene la parola d'ordine.

La verifica dell'identità avviene quindi attraverso la generazione della stringa cifrata corrispondente: se corrisponde a quanto annotato nel file /etc/passwd, oppure nel file /etc/shadow, la parola d'ordine è valida, altrimenti no.

130.1.1   Funzione «crypt()»

L'algoritmo usato per generare la parola d'ordine cifrata non è uguale in tutti i sistemi. Per quanto riguarda i sistemi GNU si distinguono due possibilità: l'algoritmo tradizionale DES, che accetta parole d'ordine con un massimo di otto caratteri, e l'algoritmo MD5 che al contrario non pone limiti.

La gestione dell'algoritmo di cifratura delle parole d'ordine è a carico della funzione crypt() (descritta in crypt(3)). Nelle distribuzioni GNU in cui si può usare l'algoritmo MD5 dovrebbe essere possibile scegliere questo, o l'algoritmo precedente, attraverso un file di configurazione (/etc/login.defs, che viene descritto nel capitolo 131).

Se la propria distribuzione non sembra predisposta per la cifratura MD5, è meglio non fare esperimenti, perché è importante che ogni componente del sistema di autenticazione e di gestione delle parole d'ordine sia aggiornato correttamente.

130.1.2   Trasferimento delle utenze

Il trasferimento, o la replicazione delle utenze si basa sulla riproduzione delle parole d'ordine cifrate, in modo tale da poter ignorare quale sia il loro valore di origine. Questa riproduzione può avvenire in modo manuale o automatico; cioè può essere l'amministratore del sistema che provvede a ricopiare le utenze, oppure può essere un servizio di rete, come il NIS (Network information service, noto anche come YP, Yellow pages).

In tutti i casi di riproduzione delle utenze, occorre che i sistemi coinvolti concordino nel funzionamento della funzione crypt(), cioè generino le stesse stringhe cifrate a partire dalle parole d'ordine. Questo è il punto più delicato nella scelta di utilizzare o meno un algoritmo più sofisticato rispetto a quello tradizionale.

130.1.3   Debolezza di questo sistema

Questo sistema di autenticazione basato sulla conservazione di una parola d'ordine cifrata, ha una debolezza fondamentale: conoscendo la stringa cifrata e l'algoritmo che la genera, si può determinare la parola d'ordine originale per tentativi.(1)

Un sistema che consente l'utilizzo di parole d'ordine con un massimo di otto caratteri è molto debole ai giorni nostri, perché tutte le combinazioni possibili possono essere provate in tempi brevi, anche con un elaboratore di potenza media.

130.2   Utenti e gruppi

I nuovi utenti possono essere aggiunti solo da parte dell'utente root, ma poi possono essere loro stessi a cambiare alcuni elementi della loro registrazione. Il più importante è naturalmente la parola d'ordine.

130.2.1   Utilizzo di «adduser» e «useradd»

Il programma per l'inserimento di un utente nuovo può avere due nomi alternativi: adduser o useradd. L'inserimento di un utente è consentito solo all'utente root e consiste normalmente nell'aggiunta delle voci necessarie ai file /etc/passwd, /etc/group e /etc/shadow, creando eventualmente anche la directory personale dell'utente stesso.

adduser [opzioni]
useradd [opzioni] utente

Se si vuole mantenere la massima compatibilità con qualunque programma che abbia qualcosa a che fare con il riconoscimento delle utente, il nome dell'utente non può superare gli otto caratteri. In ogni caso, è opportuno limitarsi all'uso di lettere non accentate e di numeri; qualunque altro simbolo, compresi i segni di punteggiatura, potrebbero creare problemi di vario tipo.

Quando l'inserimento dell'utente implica la creazione automatica della sua directory personale, vengono copiati all'interno di questa alcuni file di configurazione standard contenuti nella directory /etc/skel/. Di conseguenza, basta porre all'interno di questa directory i file e le directory che si vogliono riprodurre nella directory personale di ogni nuovo utente.

Se nel proprio sistema GNU sono presenti entrambi questi programmi, molto probabilmente si comportano in maniera leggermente diversa. Nella distribuzione Debian, useradd, senza l'indicazione di opzioni particolari, si comporta così:

useradd mevio[Invio]

In pratica non si vede altro; l'utente mevio viene creato, inserendo dati predefiniti essenziali nel file /etc/passwd e /etc/shadow, ma senza specificare la parola d'ordine e nemmeno la shell:

mevio:x:1002:100::/home/mevio:

Quello che si vede sopra è l'esempio di quanto viene aggiunto nel file /etc/passwd.

Al contrario, sempre nella distribuzione Debian, il programma adduser è più completo:

adduser mevio[Invio]

Adding user mevio...
Adding new group mevio (1003).
Adding new user mevio (1003) with group mevio.
Creating home directory /home/mevio.
Copying files from /etc/skel

Enter new UNIX password: *******[Invio]

Retype new UNIX password: *******[Invio]

Changing the user information for mevio
Enter the new value, or press ENTER for the default

Full Name []: Mevio Mevi[Invio]

Room Number []: [Invio]

Work Phone []: [Invio]

Home Phone []: [Invio]

Other []: [Invio]

Is the information correct? [y/n] y[Invio]

A proposito di adduser della distribuzione Debian si veda la sezione 131.4.

130.2.2   File «/etc/skel/*»

La directory /etc/skel/ viene utilizzata normalmente come directory personale tipica per i nuovi utenti. In pratica, quando si aggiunge un nuovo utente e gli si prepara la sua directory personale, viene copiato all'interno di questa il contenuto di /etc/skel/.

Il nome skel sta per skeleton, cioè scheletro. In effetti rappresenta lo scheletro di una nuova directory personale.

È molto importante la preparazione di questa directory, in modo che ogni nuovo utente trovi subito una serie di file di configurazione, necessari a utilizzare le shell previste nel sistema ed eventualmente altri programmi essenziali.

130.2.3   Utilizzo di «passwd»

Il programma passwd permette di cambiare la parola d'ordine registrata all'interno di /etc/passwd (oppure all'interno di /etc/shadow, come viene mostrato in seguito). (2) Solo l'utente root può cambiare la parola d'ordine di un altro utente. Gli utenti comuni (tutti escluso root) devono utilizzare una parola d'ordine non troppo breve composta, sia da maiuscole, sia da minuscole o simboli diversi. Alcune parole d'ordine simili al nome utilizzato per identificare l'utente, non sono valide.(3)

passwd [utente]

Se non si dispone di un mezzo per l'inserimento di un nuovo utente, come quello fornito da adduser, è possibile aggiungere manualmente un record all'interno del file /etc/passwd senza l'indicazione della parola d'ordine che può essere specificata successivamente attraverso passwd.

Quando si inventa una nuova parola d'ordine bisogna essere sicuri di poterla introdurre in tutte le situazioni che si potrebbero presentare. Se si utilizzano lettere accentate (cosa sconsigliabile), potrebbe poi capitare di trovare un terminale che non permette il loro inserimento. In generale, conviene limitarsi a utilizzare i simboli che rientrano nella codifica ASCII a 7 bit, con la debita prudenza.

130.2.4   Utilizzo di «chsh»

Il programma chsh permette di cambiare la shell predefinita all'interno del file /etc/passwd. (4) È possibile indicare solo una shell esistente e possibilmente elencata all'interno di /etc/shells. Se la nuova shell non viene indicata tra gli argomenti, questa viene richiesta subito dopo l'avvio di chsh. Per conferma, viene richiesta anche la ripetizione della parola d'ordine.

chsh [opzioni] [utente]

Tabella 130.5. Alcune opzioni.

Opzione Descrizione
-s shell
--shell shell
Permette di specificare la shell.
-l
--list-shells
Emette un elenco delle shell disponibili in base al contenuto di /etc/shells.

130.2.5   File «/etc/shells»

Il file /etc/shells contiene semplicemente un elenco di shell valide, cioè di quelle che sono esistenti e possono essere utilizzate. Segue un esempio di questo file.

/bin/sh
/bin/bash
/bin/tcsh
/bin/csh
/bin/ash
/bin/zsh

È molto importante che questo file sia preparato con cura e contenga solo le shell per le quali il sistema è predisposto. Ciò significa, quanto meno, che deve esistere una configurazione generalizzata per ognuna di queste e che nella directory /etc/skel/ devono essere stati predisposti tutti i file di configurazione personalizzabili che sono necessari. Quindi, un file /etc/shells con un semplice elenco di tutte le shell disponibili non è sufficiente.

130.2.6   Utilizzo di «chfn»

Il programma chfn consente di modificare le informazioni personali registrate all'interno del file /etc/passwd. (5) Si tratta in pratica del nome e cognome dell'utente, del numero dell'ufficio, del telefono dell'ufficio e del telefono di casa. Se non vengono specificate opzioni, i dati vengono inseriti in maniera interattiva, se non viene specificato l'utente, si intende quello che ha eseguito il comando. Solo l'utente root può cambiare le informazioni di un altro utente.

chfn [opzioni] [utente]

Le informazioni indicate nel quinto capo dei record del file /etc/passwd, sono strutturate solo in modo convenzionale, senza che esista una necessità effettiva.

L'esempio seguente mostra le azioni compiute da un utente per definire le proprie informazioni personali.

tizio$ chfn[Invio]

Changing finger information for tizio

Password: ********[Invio]

Name [tizio]: Tizio Tizi[Invio]

Office []: Riparazioni[Invio]

Office Phone[]: 123456[Invio]

Home Phone[]: 9876543[Invio]

Finger information changed.

Volendo verificare il risultato all'interno del file /etc/passwd, si può trovare il record seguente, che appare suddiviso su due righe per la mancanza di spazio:

tizio:724AD9dGbG25k:502:502:Tizio Tizi,Riparazioni,123456,987654:\
  \/home/tizio:/bin/bash

Le informazioni personali possono essere delicate, specialmente quando si tratta di indicare il numero telefonico dell'abitazione di un utente. Per questo, quando si tratta di utenze presso elaboratori raggiungibili attraverso una rete estesa, come Internet, occorre prudenza.

130.3   Utenti e gruppi importanti

Osservando il file /etc/passwd si possono notare diversi utenti fittizi standard che hanno degli scopi particolari. Si tratta di utenti di sistema, nel senso che servono al buon funzionamento del sistema operativo.

root:dxdFf9MvQ3s:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:uucp:/var/spool/uucp:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:14:50:FTP User:/home/ftp:
nobody:*:99:99:Nobody:/:

Di conseguenza, anche /etc/group contiene l'indicazione di gruppi particolari (gruppi di sistema).

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root
lp::7:daemon,lp
mem::8:
kmem::9:
wheel::10:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:
games::20:
gopher::30:
dip::40:
ftp::50:
nobody::99:
users::100:

I campi delle parole d'ordine di questi utenti speciali (tutti tranne root) hanno un asterisco che di fatto impedisce qualunque accesso.

Le varie distribuzioni GNU si distinguono spesso nella quantità e nell'organizzazione degli utenti e dei gruppi fittizi. In questo caso, in particolare, l'utente fittizio nobody ha il numero UID 99, come definito nella distribuzione GNU/Linux Red Hat. In generale, questo utente potrebbe avere il numero -1, che applicandosi a un intero positivo rappresenta in pratica il numero più alto gestibile di UID, altre volte potrebbe essere il numero -2. Il numero massimo di UID dipende dalle caratteristiche del file system e dalle librerie utilizzate.

Tabella 130.12. Alcuni utenti e gruppi importanti.

Opzione Descrizione
root L'utente root è l'amministratore del sistema: ogni sistema Unix ha un utente root. L'utente root ha sempre il numero UID pari a zero.
bin L'utente bin non esiste nella realtà. Si tratta di un nome fittizio definito per assegnare ai file eseguibili (binary) un proprietario diverso dall'utente root. Di solito, con GNU/Linux, questi eseguibili appartengono al gruppo bin, mentre l'utente proprietario resta root.
tty Di solito, al gruppo tty appartengono i file di dispositivo utilizzabili come canali per la connessione di un terminale.
disk Di solito, al gruppo disk appartengono i file di dispositivo che si riferiscono a unità a dischi, compresi CD e DVD.
floppy Di solito, al gruppo floppy appartengono i file di dispositivo che si riferiscono alle unità a dischetti.
nobody L'utente nobody corrisponde in linea di massima a un utente generico, non identificato, senza privilegi particolari. Viene usato in particolare per evitare che un utente root possa accedere a un file system di rete (NFS) mantenendo i suoi privilegi: quando ciò accade, l'elaboratore che offre il servizio NFS lo tratta come utente nobody.
In generale, nobody non deve essere utilizzabile per l'accesso umano.
A seconda della distribuzione GNU che si utilizza, il gruppo abbinato a questo utente potrebbe chiamarsi nobody, oppure anche nogroup.

130.4   Eliminazione di un utente

L'eliminazione di un utente dal sistema non è gestibile attraverso un programma di servizio standard di uso generale: la particolare distribuzione GNU può fornire degli strumenti adatti, oppure si deve agire manualmente. In questa sezione si descrive come si può intervenire manualmente. Fondamentalmente si tratta di agire su due punti:

I file di un utente possono trovarsi ovunque gli sia stato consentito di scriverli. In particolare:

Per elencare tutti i file appartenenti a un certo utente, è possibile usare il programma Find in uno dei modi seguenti.

find / -uid numero_utente -print
find / -user utente -print

Volendo, si potrebbe costruire uno script per l'eliminazione automatica di tutti i file appartenenti a un utente determinato. L'esempio seguente, prima di eliminare i file, crea una copia compressa.

#!/bin/sh
###
### eliminautente
###
##
## Variabili.
##
#
# Il nome dell'utente viene fornito come primo e unico argomento
# di questo script.
#
NOME_UTENTE="$1"
#
# Nome per un file temporaneo contenente l'elenco dei file
# appartenenti all'utente che si vuole eliminare.
#
ELENCO_FILE_UTENTE=`tempfile`
##
## Funzioni.
##
#
# Visualizza la sintassi corretta per l'utilizzo di questo script.
#
function sintassi () {
    echo ""
    echo "eliminautente <nome-utente>"
    echo ""
    echo "Il nome può avere al massimo otto caratteri."
}
##
## Inizio.
##
#
# Verifica la quantità di argomenti.
#
if [ $# != 1 ]
then
    #
    # La quantità di argomenti è errata. Richiama la funzione
    # «sintassi» e termina l'esecuzione dello script restituendo
    # un valore corrispondente a «falso».
    #
    sintassi
    exit 1
fi
#
# Verifica che l'utente sia root.
#
if [ $UID != 0 ]
then
    #
    # Dal momento che l'utente non è root, avvisa dell'errore
    # e termina l'esecuzione restituendo un valore corrispondente
    # a «falso».
    #
    echo -n "Questo script può essere utilizzato "
    echo -n "solo dall'utente root."
    echo
    exit 1
fi
#
# Crea un elenco di tutti i file appartenenti all'utente
# specificato.
# Si deve evitare che find cerchi di entrare nella directory /dev/.
#
find / -user $NOME_UTENTE -a \( -path "/dev" -prune -o -print \) \
    > $ELENCO_FILE_UTENTE
#
# Comprime i file generando un file compresso con lo stesso nome
# dell'utente da eliminare e con estensione «.tgz».
# Si utilizza «tar» e in particolare:
# «z» permette di comprimere automaticamente l'archivio
# attraverso «gzip».
# In questo caso, l'archivio viene generato nella directory
# personale dell'amministratore del sistema.
#
if tar czvf ~/$NOME_UTENTE.tgz `cat $ELENCO_FILE_UTENTE`
then
    #
    # Se è andato tutto bene elimina i file
    # (togliere il commento), quindi elimina l'elenco temporaneo.
    #
    rm $ELENCO_FILE_UTENTE

    echo
fi

130.5   Trucchi

Alcuni accorgimenti nella gestione degli utenti e dei gruppi possono essere utili in situazioni particolari, anche se a volte si tratta di scelte discutibili. Nelle sezioni seguenti se ne descrivono alcuni.

130.5.1   Utente con funzione specifica

Un trucco che potrebbe rivelarsi comodo in certe situazioni è quello di creare un utente fittizio, con o senza parola d'ordine, al quale si associa un programma o uno script, al posto di una shell. La directory corrente nel momento in cui il programma o lo script viene eseguito è quella indicata come directory home (directory personale).

L'esempio seguente mostra un record del file /etc/passwd preparato in modo da permettere a chiunque di eseguire il programma (o lo script) /usr/local/bin/ciao partendo dalla posizione della directory /tmp/. Il numero UID 505 e GID 100 sono solo un esempio.

ciao::505:100:Ciao a tutti:/tmp:/usr/local/bin/ciao

Naturalmente, il fatto di poter avere un utente (reale o fittizio) che possa accedere senza parola d'ordine, dipende dal sistema di autenticazione: il programma login, il quale potrebbe essere stato configurato (o predisposto all'atto della compilazione) per vietare un tale comportamento.

130.5.2   Gruppo di utenti con lo stesso UID

All'interno di un ambiente in cui esiste una certa fiducia nel comportamento reciproco, potrebbe essere conveniente creare un gruppo di utenti con lo stesso numero UID.

Ogni utente avrebbe un proprio nome e una parola d'ordine per accedere al sistema, ma poi, tutti i file apparterrebbero a un utente immaginario che rappresenta tutto il gruppo. Segue un esempio del file /etc/passwd.

tutti:*:1000:1000:Gruppo di lavoro:/home/tutti:/bin/sh
alfa:34gdf6r123455:1000:1000:Gruppo di lavoro:/home/tutti:/bin/sh
bravo:e445gsdfr2124:1000:1000:Gruppo di lavoro:/home/tutti:/bin/sh
charlie:t654df7u72341:1000:1000:Gruppo di lavoro:/home/tutti:/bin/sh
tutti:*:1000:1000:Gruppo di lavoro:/home/tutti:/bin/sh

Si osservi che l'utente fittizio tutti dell'esempio mostrato appare per primo e per ultimo, in modo da non avere differenze di comportamento in presenza di un sistema NIS per la condivisione delle utenze in rete.

Se esiste la necessità o l'utilità si possono assegnare anche directory personali e shell differenti.

130.5.3   Uno stesso UID e GID per più nominativi-utente

Un utente reale potrebbe avere bisogno di gestire diversi nominativi-utente per accedere allo stesso elaboratore e gestire attività differenti, pur mantenendo lo stesso numero UID e lo stesso numero GID. In questo modo, avrebbe a disposizione diverse directory personali, una per ogni progetto che conduce.

tizio:34gdf6r123455:1000:1000:Tizio Tizi:/home/tizio:/bin/sh
alfa:34gdf6r123455:1000:1000:Tizio Tizi prog. Alfa:/home/alfa:/bin/sh
bravo:34gdf6r123455:1000:1000:Tizio Tizi prog. Bravo:/home/bravo:/bin/sh
charlie:34gdf6r123455:1000:1000:Tizio Tizi prog. Charlie:/home/charlie:/bin/sh
tizio:34gdf6r123455:1000:1000:Tizio Tizi:/home/tizio:/bin/sh

Si osservi che la dichiarazione dell'utente tizio dell'esempio mostrato appare per primo e per ultimo, in modo da non avere differenze di comportamento in presenza di un sistema NIS per la condivisione delle utenze in rete.

Eventualmente, per distinguere quale sia il nominativo-utente utilizzato effettivamente, si potrebbe modificare la stringa di definizione dell'invito della shell. Nel caso di Bash, si potrebbe utilizzare quella seguente:

PS1="$USER->\u@\h:\w\\$ "
export PS1

Il significato di questo viene approfondito nei capitoli dedicati alla shell POSIX, in cui vengono annotate anche alcune particolarità di Bash (la parte xxv).

130.5.4   Un gruppo per ogni utente (gruppi privati)

Si tratta di una strategia di gestione degli utenti e dei gruppi con cui, ogni volta che si crea un nuovo utente, si crea anche un gruppo con lo stesso nome e, possibilmente, lo stesso numero (UID = GID). Questa tecnica si combina con una maschera dei permessi 0028. In pratica, i file vengono creati in modo predefinito con i permessi di lettura e scrittura, sia per l'utente proprietario, sia per il gruppo, mentre si esclude la scrittura per gli altri utenti.

Il motivo di tutto questo sta nella facilità con cui si può concedere a un altro utente di poter partecipare al proprio lavoro: basta aggiungere il suo nome nell'elenco degli utenti associati al proprio gruppo.

Volendo agire in maniera più elegante, si possono creare degli altri gruppi aggiuntivi, in base alle attività comuni e aggiungere a questi gruppi i nomi degli utenti che di volta in volta partecipano a quelle attività. Naturalmente, i file da condividere all'interno dei gruppi devono appartenere a questi stessi gruppi.(6)

A titolo di esempio, si mostra cosa sia necessario fare per gestire un gruppo di lavoro per un ipotetico progetto «alfa».

  1. Si fa in modo che la maschera dei permessi predefiniti (umask) degli utenti che devono far parte del progetto, sia pari a 0028, per consentire in modo normale ogni tipo di accesso agli utenti dei gruppi di cui si fa parte, ai file e alle directory che vengono create.

  2. Si crea il gruppo alfa e a questo si abbinano tutti gli utenti che devono fare parte del progetto. Il record del file /etc/group potrebbe essere simile a quello seguente:

    alfa::101:tizio,caio,sempronio
    
  3. Si crea una sorta di directory home per i file del progetto, con eventuali ramificazioni.

    mkdir /home/progetti/alfa[Invio]

    mkdir /home/progetti/alfa/...[Invio]

  4. Si assegna l'appartenenza di questa directory (ed eventuali sottodirectory) al gruppo di lavoro.

    chown -R root:alfa /home/gruppi/alfa[Invio]

  5. Si assegnano i permessi in modo che ciò che viene creato all'interno del gruppo di directory appartenga al gruppo delle directory stesse.

    chmod -R 2775 /home/progetti/alfa[Invio]

    In questo modo tutte le directory del progetto ottengono l'attivazione del bit SGID, attraverso il quale, in modo predefinito, i file creati al loro interno vengono abbinati allo stesso gruppo delle directory stesse, cioè quello del progetto per cui sono state predisposte.

130.5.5   Creazione di un'utenza in più contesti

Può capitare la necessità di creare un proprio script per la creazione delle utenze, per esempio quando si vuole concedere una forma di accesso alternativa, che prevede però un proprio meccanismo di autenticazione e di memorizzazione delle parole d'ordine. Questo problema può capitare per esempio con Samba, anche se teoricamente è già previsto un meccanismo del genere al suo interno.

Volendo o dovendo creare un tale script, il problema che si incontra sta nell'assegnare o modificare la parola d'ordine dell'utente. Per farlo, si può cercare di controllare il programma passwd tramite lo script, ma bisogna dare il tempo a passwd di fare le domande:

passwd tizio[Invio]

Enter new UNIX password: digitazione_all'oscuro[Invio]

Retype new UNIX password: digitazione_all'oscuro[Invio]

passwd: password updated successfully.

Per poter inviare al programma passwd la parola d'ordine (si supponga che si tratti della parola «segreta»), non la si può inserire in un file del genere per poi inviarla attraverso lo standard input:

segreta
segreta

Supponendo che questo sia il file /tmp/nuova non serve a nulla fare così:

cat /tmp/nuova | passwd tizio[Invio]

Ecco cosa si vedrebbe apparire:

Enter new UNIX password: Retype new UNIX password: Sorry, \
  \passwords do not match\
  \passwd: Authentication information cannot be recovered

Per risolvere il problema, va inserita una pausa nel flusso dello standard input. Ecco come:

( sleep 1 ; echo "segreta" ; sleep 1 ; echo "segreta" ) \
  \| passwd tizio
[Invio]

Enter new UNIX password: Retype new UNIX password: passwd: password \
  \updated successfully

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Naturalmente, questo vale finché nessuno riesce a trovare un algoritmo inverso che permetta di ricalcolare la parola d'ordine a partire dalla stessa stringa cifrata.

2) Shadow utilities   software libero con licenza speciale

3) In generale, i sistemi pongono anche un limite superiore alla lunghezza delle parole d'ordine. In tali casi, può capitare che la parte eccedente tale dimensione venga semplicemente ignorata, rendendo vano lo sforzo dell'utente.

4) Shadow utilities   software libero con licenza speciale

5) Shadow utilities   software libero con licenza speciale

6) Questo metodo di comportamento è quello predefinito di alcune distribuzioni GNU.


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

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

Valid ISO-HTML!

CSS validator!