I comandi Linux: l'utente | ALTRI capitoli | ||||||
I comandi e le utility di Linux: l'utente Linux è un sistema multiutente. Per poter gestire la presenza contemporanea di più utenti, Linux deve identificare ciascun utente in modo univoco. Un utente, all'interno di un sistema Linux, viene identificato con un nome account e con un numero, lo User IDentifier ( UID ). Al contempo, Linux permette di creare gruppi di utenti. Ciascun gruppo sarà identificabile con un nome e con un numero univoco, il Group IDentifier ( GID ). Un utente, in un sistema Linux, può appartenere a più di un gruppo. A ciascun utente e a ciascun gruppo di utenti vengono assegnati determinati privilegi sui file e sulle risorse del sistema. Un file può essere creato, eliminato, modificato, sovrascritto, letto, eseguito. I privilegi determinano proprio chi può fare cosa su un file. Il comando
Il primo bit che apre ogni riga, nel nostro esempio:
esprime il tipo di file ( file, come nel nostro esempio, oppure directory,
esprimono i permessi: i primi tre bit sono riservati al proprietario, i secondi tre bit sono riservati al gruppo, gli ultimi tre bit sono riservati al resto del mondo ( other ). Il file
mentre tutti gli utenti appartenenti al gruppo "ufficio" detengono, sul file
così come qualsiasi altro utente ( other ). Chi possiede i soli permessi di lettura su un file, non sarà mai in grado di modificare o eliminare quel file. Fortunatamente! In un sistema Linux, esiste un solo utente per il quale il sistema non eseguirà mai alcun controllo, in merito ai privilegi di accesso ai file ed alle risorse del sistema: il superuser ( root ). L'utente "root", in un sistema Linux, equivale all'amministratore Windows: a lui, tutto è concesso. A ciascun utente, in un sistema Linux, viene riservata una directory, la cosiddetta "home directory". Per l'utente "root", la "home directory" è la radice stessa dell'intero filesystem:
mentre, per tutti gli altri utenti, la "home directory" viene creata, solitamente, all'interno della cartella:
Il nome utente e la directory HOME per l'utente corrente vengono memorizzati nelle variabili d'ambiente:
Per leggere una variabile d'ambiente è sufficiente utilizzare il comando
In alternativa, per conoscere il nome utente corrente, eseguire uno dei seguenti comandi:
che stampano a video il cosiddetto " effective UserID ". Lo " effective UserID " si distingue dal " real UserID ". Il " real UserID " è l'identificativo dell'utente corrente, utilizzato per accedere al sistema: è quello che comunemente chiamiamo " user ". Lo " effective UserID ", invece, è l'identificativo utente del quale il " real UserID " ha acquisito, momentaneamente, i privilegi di accesso. Questo accade, per esempio, quando un utente, con un suo " real UserID ", si trova ad eseguire un file con il suid bit impostato. Quando un file ha impostato il suid bit, quel file verrà eseguito con i privilegi del proprietario del file ( effective user ID ) e non dell'utente che esegue il file ( real UserID ), il quale, in quel preciso istante, sta effettivamente agendo, nel sistema, con i privilegi associati al suo " effective user ID ". Per comprendere la differenza tra Real ed Effective UserID, creiamo il seguente file C:
Per creare questo file
Questo semplice programma, composto, sostanzialmente, da una sola riga di comando, stampa a video il nostro ( real ) UID ed il nostro ( Effective ) UID ( EUID ). Compiliamo, ora, il file:
Questo comando crea il file eseguibile
I permessi associati al file sono:
per il proprietario ( user ) e per il gruppo primario ( user );
per chiunque altro. Se eseguiamo questo semplice programma da riga di comando:
riceveremo un output del tipo:
Ora modifichiamo il nome utente proprietario del file ed impostiamo il cosiddetto suid bit:
A questo punto, il nostro file apparirà come:
dove la "
e riceveremo un output ben differente:
Il nostro EUID ( Effective UID ) è diventato 0 ( zero: lo UID tipico di " root " ), mentre il nostro Real UID è rimasto inalterato ( 1000 ). Una avvertenza importante: non eseguite mai questo test, affidandovi al comando
ma il loro comportamento è diverso dal comportamento tenuto da tutti gli altri file che hanno il suid bit impostato: con i comandi
Un'altra avvertenza: molti sistemi operativi Linux ignorano il suid bit applicato a script di shell, riconoscendolo solo nei file binari eseguibili. Questo per ragioni di sicurezza. Infatti, quando il kernel deve eseguire uno script di shell, esegue, prima, una copia SUID della shell stessa, affidando a quest'ultima l'esecuzione dello script. Un malintenzionato, quindi, potrebbe interrompere il kernel, non appena quest'ultimo avesse eseguito la copia SUID della shell, e sottoporre, alla nuova shell, uno script diverso da eseguire. Il suid bit ed lo sgid bit sono da usare sempre con la massima cautela, poichè permettono ad un utente qualsiasi di acquisire i privilegi di un altro utente ( spesso, dell'amministratore stesso, " root " ). La gran parte delle informazioni relative ad un utente sono raccolte in pochi, essenziali file di configurazione:
Si tratta di file testuali, in tutti e quattro i casi. I file " shadow " sono file destinati alla conservazione delle password. Il file di password contiene la maggior parte delle informazioni relative agli utenti del sistema. A ciascun utente è riservata una riga ( record ). Ciascun record è composto da sette campi, ciascuno dei quali separato dall'altro dai due punti:
Un carattere Il comando
Il comando
Prima di modificare una password, è possibile chiedere a
oppure, possedendone le credenziali, le informazioni dell'account di un altro utente:
oppure, in qualità di utente " root ", di tutti gli utenti:
Le informazioni restituite sono le informazioni contenute in 7 campi:
Per bloccare una password:
Il LOCK disabilita la password, ma non l'account. L'utente, infatti, sarà in grado di accedere al sistema, usando una password di un servizio differente, quale SSH. Il LOCK viene eseguito modificando la password, nel file
L'opzione
Per modificare i giorni di validità di una password ( maximum password age ):
Per impostare il " minimum password age " ( il valore zero indica che l'utente potrà modificare la password in qualsiasi momento ):
Per modificare il numero dei giorni, prima della prossima scadenza di una password, nei quali il sistema invierà un messaggio di avviso all'utente:
Per modificare il numero dei giorni da attendere, prima di disabilitare un account, una volta scaduta la password:
Il file:
deve essere aperto, in lettura, a chiunque:
Troppi sono i programmi, i comandi e le applicazioni che devono poter leggere le informazioni in esso contenute. Nel file, chiunque potrebbe leggere, quindi, le password cifrate di tutti gli utenti presenti nel sistema. Anche se cifrate, le password, invece, dovrebbero sempre essere inaccessibili al resto del mondo. Ecco perchè si è pensato di conservare tutte le password in un file dedicato, consultabile solo dall'amministratore del sistema ( root ):
Come per il file
Ciascun record è composto da nove campi, ciascuno dei quali separato dall'altro dai due punti:
La funzione C
Nel primo caso, avremo, come valore di hash finale:
mentre, nel secondo caso, avremo:
E' evidente che le prime due lettere del valore di hash, restituito dalla funzione
Per quanto riguarda il programma che utilizza la funzione C
Nel nostro esempio,
Questo rende possibili ricerche intensive, eseguite da più computer in parallelo, sull'intero spazio delle chiavi. Per estendere lo spazio delle chiavi,
dove
Quindi, per codificare la password "miapassword", utilizzando l'algoritmo MD5 ed un salt "miosalt", occorrerà eseguire:
che restituirà, come hash finale:
La parte riservata alla password criptata, è composta da un numero fisso di caratteri, differente a seconda dell'algoritmo utilizzato:
Per una corretta gestione del file
Il comando
a partire dal file:
Alcune variabili, configurabili nel file:
possono modificare il comportamento di
La variabile PASS_MAX_DAYS esprime il numero dei giorni di validità di una password. Se la password è più vecchia, il sistema obbliga l'utente a modificarla. Se non viene specificato alcun valore, la restrizione decade ( si assume il valore -1 ).
La variabile PASS_MIN_DAYS esprime il numero minimo di giorni che dovranno trascorrere tra una modifica della password e l'altra. Se non viene specificato alcun valore, la restrizione decade ( si assume il valore -1 ).
La variabile PASS_WARN_AGE esprime il numero di giorni in cui dovrà essere emesso un Warning ( un messaggio di avviso ), relativamente alla scadenza di una password. Il valore zero significa: avvisa solo nel giorno della scadenza. Un valore negativo equivale a non impostare alcun valore e significa: non avvisare mai.
Il comando
ed eliminando il file:
Il comando
Mostra le informazioni sull'account specificato ( " pippo ", nel nostro esempio ).
Imposta la data dell'ultima modifica di password effettuata, espressa come il numero di giorni trascorsi dal 1 gennaio 1970. La data può anche essere specificata nel formato AAAA-MM-GG.
Imposta la data di scadenza dell'account ( campo 8 del file
Imposta il numero di giorni ammessi di mancata attività, dopo la scadenza della password, prima che l'account venga bloccato ( campo 7 del file
Impostano i campi 4, 5 e 6 del file
Il comando
Dell'utente di destinazione è possibile indicare lo UserID:
Quando l'utente di destinazione è " root ", invece, l'opzione
Diversamente dal comando
Nel primo caso, si aprirà una shell di root interattiva, mentre nel terzo caso, verrà eseguito il comando specificato (
Se l'utente che esegue il comando
Se eseguite il comando
scoprirete che il file ha il bit di setUID impostato:
Questo significa che chiunque esegua questo programma, acquisirà i privilegi del proprietario del file, per eseguirlo. E il proprietario del file è " root ", l'utente per il quale il sistema operativo non effettua alcuna verifica, prima di eseguire un qualsiasi programma o comando: l'utente " root ", se vuole, può eliminare qualsiasi file dal disco fisso. Il comando
Per sapere quali privilegi può acquisire un altro utente, eseguire:
Naturalmente, questa opzione (
Quando non presente,
che dovrebbe, sempre, essere manipolato indirettamente, utilizzando il comando:
che previene l'eventualità che due utenti modifichino il file nello stesso istante, oltre a mettere a disposizione dell'utente una sintassi ristretta. Per file di configurazione personalizzati, è a disposizione la directory:
Se nel file di configurazione
il comando
il cui nome non finisca in "
dove:
In questo primo esempio, l'utente
e a ciascuna di esse vanno assegnati un nome ed un valore, oppure una lista di valori. In questo secondo esempio:
diamo agli utenti bob, mary e jane, espressi dalla variabile SHUTDOWNUSERS ( User_Alias = who ), le credenziali dell'utente
tutti i membri del gruppo
Il comando
Il comando
E' possibile chiedere a
E' possibile chiedere a
Una volta aperto il file da editare, quali comandi usare? Dipende dall'editor di testo usato da
Questa riga, che indica a
Per esempio, nel file:
Normalmente,
a meno che non contengano un editor di testo presente nella lista di editor compresa nel codice sorgente di Il comando
Normalmente, l'ambiente corrente ( variabili d'ambiente ) viene trasferito alla nuova shell. Per caricare, invece, l'ambiente associato all'utente target, utilizzate l'opzione:
A differenza del comando
|
|||||||
I comandi Linux: l'utente | Le guide di .bit: contenuto originale |