Top: International: Italiano: Computer: Software: Sistemi Operativi: Linux: Utenti, Gruppi e Permessi per Halt


[ history ]

Creiamo gli utenti

Come avrete certamente notato, la cosa più importante da fare è sicuramente creare gli utenti. Se avete appena installato la Slack 8.1 a maggior ragione. Infatti potete accedere al sistema solo come root. Fino a questo momento.

Creiamo il gruppo
La cosa migliore da fare è creare un gruppo per ogni utente. Per questo prima di tutto è meglio crearlo. Il comando per creare un nuovo gruppo di utenti è "groupadd". "groupadd" è semplicissimo. La sintassi del comando è:

#groupadd [-g GID [-o]] nome_gruppo

dove l'opzione -g è opzionale (perchè compresa tra parentesi quadre) e permette di specificare il GID (Group ID). Il GID non è altro che un numero che identificherà univocamente il gruppo creato. Ogni gruppo ha un proprio GID. Di solito i gruppi da 0 a 99 sono riservati per usi del sistema, quindi è meglio specificare un GID molto superiore a questi numeri. Supponendo di volere creare un gruppo di nome "chiaramelli" scriveremo:

#groupadd chiaramelli

Ecco creato il gruppo. Per verificare basta aprire il file /etc/group e cercare la riga corrispondente al gruppo. Questo file contiene, in dettaglio, tutti i nomi dei gruppi, con relativo GID e utenti che vi appartengono. A questo punto la riga dovrebbe risultare così:

chiaramelli:x:111:

dove 111 è il GID assegnato automaticamente. Un altro file relativo ai gruppi è /etc/gshadow (Group Secure account Information). In questo file vengono memorizzate le password crittate dei gruppi. Settare la password per un gruppo è del tutto opzionale e raramente lo si fa. Le password vengono memorizzate crittate con un potente algoritmo di crittazione.

Creiamo l'utente
Viene il momento di creare l'utente. Il comando usato è "useradd". Questo comando è anche usato per modificare le informazioni di un utente già esistente. La sintassi è:

#useradd [opzioni] nome_utente == crea un nuovo utente
#useradd -D [opzioni] nome_utente == modifica un utente già esistente

Le opzioni possibili sono:

-c commento = un commento sull'utente
-d home_dir = specifica quale sarà la home directory dell'utente. Se non è specificato, allora di default sarà /home/nome_utente.
-e expire_date = data di espirazione, ovvero quando l'utente non sarà ritenuto più valido ed eliminato. E' espressa nella forma YYYY-MM-DD
-f inactive_days = il numero di giorni successivi all'espirazione della password per la definitiva eliminazione dell'account. Se settato a 0, l'account viene eliminato contemporaneamente al decadimento della password.
- g initial_group = il nome o il GID del gruppo di login dell'utente.
-G group,[...] = il nome di gruppi supplementari di cui l'utente farà parte. Ogni gruppo è separato da una virgola.
-m = crea automaticamente la home se non esiste.
-s shell = specifica la shell di login usata dall'utente. Se non è specificata, sarà usata la shell di default. In ogni caso è sempre meglio specificarla, in quanto può dare problemi ad alcuni programmi in seguito (tipo KDM).
-u uid = l'UID (User ID), lo stesso concetto del GID.

Creiamo quindi l'utente con il maggiore numero di informazioni possibili:

#useradd -m -s /bin/bash -G chiaramelli chiaramelli

In questo modo l'utente chiaramelli avrà home dir in /home/chiaramelli, creata in automatico da -m, apparterrà al gruppo chiaramelli ed avrà shell /bin/bash (di solito quella di default). Per verificare quello che abbiamo fatto aprite il file /etc/passwd. In questo file vengono salvate tutte le infomazioni sugli utenti del sistema, tranne la password (salvata in /etc/shadow). Ecco come si dovrebbe presentare la nostra riga:

chiaramelli:x:1009:100::/home/chiaramelli:/bin/bash

E' un insieme di stringhe separate da :, 1009 è l'UID dell'utente, poi abbiamo due punti di seguito (::) In quello spazio dovrebbero esserci le informazioni circa l'utente. SI possono inserire informazioni di ogni tipo, ma di solito si fanno risalire ad uno schema ben definito (quello del programma finger, che carpisce informazioni su un utente di una macchina). Una directory importante collegata a questo discorso è /etc/skel (o /etc/skeleton), al cui interno sono contenuti tutti quei file che il sistema installerà di default nella nuova directory di un utente. Se ad esempio in /etc/skel ho il file .screenrc, in /home/chiaramelli per ora troverò soltanto .screenrc (esatta copia di quello dello scheletro (skeleton, appunto)).

Settiamo la password
Infine, come ultimo passo, settiamo la password per l'utente. Il comando usato è "passwd". Avremmo anche potuto settarla con "useradd -p password ...." ma era meno sicuro visto che la visualizza a video. Passwd, una volta chiesta la vecchia password (se esiste), la critta e la compara con quella salvata (la crittatura, una volta effettuata, è irreversibile!!!!) per verificarne la correttezza. Se la password è corretta (o è nuova) allora chiede quella nuova, poi la richiede per conferma. A quel punto la critta e la salva nel file /etc/shadow. La password può contenere sia lettere maiuscole che minuscole, i numeri da 0 a 9 e i segni di punteggiatura. L'unico argomento passato è il nome dell'utente di cui modificarne la password.

#passwd chiaramelli [INVIO]
Changing password for user chiaramelli
Enter the new password (minimum of 5, maximum of 127)
Please use a combination of upper and lower case letters and numbers.
New password: [digita password poi INVIO]
Re-enter new password: [ridigitala e premi INVIO]
Password changed

Se ottenete un warning dopo avere inserito la nuova password dicendovi che è troppo semplice, questa verrà salvata ugualmente. Il computer vi avrà solo avvisato della sua semplicità.

I permessi
Accedendo come il vostro nuovo utente, e provando a spegnere il computer, vi verrà detto che non trova il comando "halt" (cioè quello appunto per spegnere il computer). Grave limitazione che deve essere aggirata. Vediamo come.
Dal fatto che vi dice che non trova il comando halt, cerchiamo di trovarlo:

#which halt
/sbin/halt

Sappiamo dunque che halt si trova in /sbin. Quello che possiamo dedurre è che nel nostro $PATH (la variabile d'ambiente in cui vengono elencate tutte le directory dove cercare gli eseguibili) non è presente /sbin. Come aggiungercelo? Invece di fare ad ogni avvio "set path:....:/sbin && export $PATH" possiamo modificare il file /etc/profile. Questo file contiene tutte le informazioni di configurazione della shell e relativo prompt. Aprendolo, cerchiamo la riga che dice:

# Set the default system $PATH:
PATH="/usr/local/bin:/usr/sbin:...[altro]"

e dentro le virgolette di path aggiungiamo /sbin (stando attenti a comprenderlo tra ":"

# Set the default system $PATH:
PATH="/usr/local/bin:/usr/sbin:/sbin:...[altro]"

In questo modo avremo detto di inserire /sbin nel path per tutti gli utenti del sistema. Qualsiasi utente adesso potrà vedere il file halt.
Come mai però solo root poteva vederlo? Perchè, poche righe sotto, sono specificate alcune directory da aggiungere al path (tra cui /sbin) solo nel caso che l'utente loggato sia esclusivamente root. Dobbiamo quindi togliere questa voce da lì, visto che l'abbiamo messa comune a tutti. Ecco com'era questa parte:

# For root users, ensure that /usr/local/sbin, /usr/sbin and /sbin are in the $PATH
# Some means of connection don't add these by default (sshd comes to mind):
if ["'id=u'" = "0"]; then
echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null
if [ ! $? = 0 ]; then
PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH
fi
fi

Ed ecco com'è dopo la modifica:

# For root users, ensure that /usr/local/sbin, /usr/sbin and /sbin are in the $PATH
# Some means of connection don't add these by default (sshd comes to mind):
if ["'id=u'" = "0"]; then
echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null
if [ ! $? = 0 ]; then
PATH=/usr/local/sbin:/usr/sbin:$PATH
fi
fi

Proviamo a questo punto a dare il comando halt da utente, e vediamo cosa ci dice:

$halt
Must be superuser

Ci dice che dobbiamo essere l'utente root. C'è un modo in linux per potere eseguire comandi riservati all'utente root, anche da un utente normale. A dire la verità ce ne sono molti, ma noi scegliamo quello migliore e più veloce: il SUID. Il SUID non è altro che un ulteriore permesso da dare ad un file oltre ai classici rwx (read-write-execute). Ce ne sono altri di questi permessi speciali. Per averne una lista completa usiamo "man chmod". SUID sta per "Set User/group ID" e viene identificato dalla lettera "s" (minuscola). Praticamente permette di settare il numero dell'utente (UID) e/o il numero del gruppo (GID) come proprietari del file alla sua esecuzione. In questo modo, mentre prima era richiesto UID=0 (UID di root) per eseguirlo, adesso qualunque UID è permesso. Per settare solo l'UID si userà "chmod u+s nome_file", mentre per settare il GID useremo "chmod g+s nome_file". La dicitura "chmod o+s nome_file" non fa niente, ovviamente.
Per dare SUID al comando HALT daremo:

#chmod u+s /sbin/halt

Dando un ls -l avremo:

-rwsr-xr-x 1 root bin ... /sbin/halt

Notiamo che il bit SUID si sovrascrive al bit execute (ma questo non vole dire che il file non è più eseguibile...).
Dando adesso l'halt dal nostro utente, il computer passerà al runlevel 0 (default di arresto) e si spegnerà.
Questo è tutto. Bye Bye... Giulio


[ history ]

OpenSP -- Open Site Project

Questo e altri tutorial su OpenSP: Open Site Project!
Linux e OpenSource.

Join the community!



 All text is available under the terms of the GNU Free Documentation License. (See Copyright Policy for details.) 
© Open-Site Foundation, Inc.
Hosted by Android Technologies, Inc. the medical robotics news source.
Visit our sister sites dmoz.org | mozilla.org | chefmoz.org | musicmoz.org