Disclaimer :
La versione originale di questo articolo è stata pubblicata da IBM
developerWorks ed è di proprietà di Westtech Information Services. Questo
documento è una versione aggiornata dell'articolo originale, e contiene
numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.
|
Preparazione all'esame per la Certificazione LPI 101 (release 2), Parte
3
1.
Prima di cominciare
Riguardo a questa introduzione
Benvenuti in "Amministrazione intermedia", la terza di quattro brevi guide
pensate per preparare il lettore all'esame 101 (release 2) del Linux
Professional Institute. Questa breve guida (Parte 3) è ideale per coloro che
vogliono migliorare la propria conoscenza nelle abilità fondamentali
dell'amministrazione in Linux. Verranno coperti diversi argomenti, inclusa la
documentazione di sistema e su Internet, il modello dei permessi in Linux, la
gestione degli account utente e il raffinamento dell'ambiente di login.
Per i nuovi arrivati nel mondo Linux, si raccomanda di cominciare con la Parte 1 e la Parte 2. Per alcuni,
molto di questo materiale risulterà nuovo, ma gli utenti Linux con più
esperienza potrebbero trovare questa breve guida un bel modo per affinare le
loro abilità di base nell'amministrazione in Linux.
Alla fine di questa breve serie di brevi guide (otto in tutto che coprono gli
esami 101 e 102 del LPI), il lettore avrà la conoscenza necessaria per diventare
Amministratore di Sistema Linux e sarà pronto per conseguire la certificazione
LPIC di Livello 1 del Linux Professional Institute se lo desidera.
Per coloro che fossero già in possesso della versione
di rilascio 1 di questa breve guida per altre ragioni oltre alla
preparazione dell'esame del LPI, probabilmente non sarà necessario prendere
anche questa. Comunque, se si pianifica di sostenere gli esami, dovrebbe essere
decisamente presa in considerazione la lettura di questa versione revisionata
della guida.
Riguardo agli autori
Per questioni tecniche riguardo ai contenuti di questa breve guida, contattare
gli autori:
Residente in Albuquerque, New Mexico, Daniel Robbins è l'Architetto Capo di
Gentoo Linux, un'avanzata meta distribuzione Linux basata su sorgenti. Ha anche
scritto articoli, brevi guide e suggerimenti nell'area dedicata a Linux dell'IBM
developerWorks e per l'Intel Developer Services e ha anche preso parte come
autore di contributi per diversi libri, incluso Samba Unleashed e SuSE Linux
Unleashed. Daniel si diverte passando il proprio tempo con sua moglie, Mary, e
sua figlia, Hadassah. È possibile contattare Daniel all'indirizzo
Daniel Robbins.
Chris Houser, conosciuto dagli amici come "Chouser", è diventato un sostenitore
di UNIX fin dal 1994 quando ha preso parte al gruppo di amministrazione delle
reti scientifiche di calcolatori alla Taylor University nell'Indiana, dove ha
conseguito la sua laurea in Scienze Informatiche e Matematiche. Fino da allora,
ha continuato a lavorare nella programmazione di applicazioni Web, sviluppo di
interfacce utente, supporto professionale al software video e ora alla
programmazione di driver per dispositivi Tru64 UNIX alla Compaq. Ha anche contribuito a diversi
progetti di software libero, più recentemente a Gentoo Linux. Vive con sua moglie e due
gatti in New Hampshire. È possibile contattare Chris a
Chris Houser.
Aron Griffis è diplomato alla Taylor University con una laurea in Scienze
Informatiche e un premio che dichiara, "Futuro Fondatore di un utopistico gruppo
UNIX". Lavorando verso questo obiettivo, Aron è impiegato presso Compaq scrivendo driver di rete per
Tru64 UNIX e spende il suo tempo libero accordando il piano o sviluppando Gentoo Linux. Vive con sua moglie Amy (anche
lei ingegnere UNIX) in Nashua, New Hampshire.
2.
Documentazione di sistema e in rete
Tipi di documentazione su sistemi Linux
Esistono essenzialmente tre fonti di documentazione su sistemi Linux: pagine di
manuale, pagine info e documentazione legata alle applicazioni in
/usr/share/doc. In questa sezione, sarà esplorata ognuna di queste
fonti prima di guardare "fuori dalla porta di casa" per maggiori informazioni.
Pagine di manuale (manual page)
Le pagine di manuale, o "man pages", sono la forma classica per la
documentazione di riferimento su UNIX e Linux. Idealmente, è possibile guardare
la pagina di manuale per ogni comando, file di configurazione o routine di
libreria. In pratica, Linux è software libero e alcune pagine non sono state
scritte o mostrano la propria età. Tuttavia, le pagine di manuale sono il primo
posto in cui guardare quando si ha bisogno di aiuto.
Per accedere ad una man page, semplicemente digitare man seguito dal
proprio argomento o ricerca. Un paginatore sarà avviato, quindi ci sarà bisogno
di premere q quando si è finito di leggere. Per esempio, per vedere le
informazioni sul comando ls, si dovrà digitare:
Codice 2.1: Cercare nelle pagine man |
$ man ls
|
Conoscere la struttura delle pagine man può essere utile per saltare velocemente
alle informazioni di cui si necessità. In generale, si avranno le seguenti
sezioni in una man page:
| NAME |
Nome e descrizione breve del comando |
| SYNOPSIS |
Come usare il comando |
| DESCRIPTION |
Discussione approfondita sulle funzionalità del comando |
| EXAMPLES |
Suggerimenti su come usare il comando |
| SEE ALSO |
Argomenti correlati (di solito altre man page) |
Sezioni delle pagine man
I file che comprendono le pagine di manuale sono memorizzati in
/usr/share/man (o in /usr/man su alcuni vecchi
sistemi). Dentro questa cartella si può scoprire che le pagine di manuale sono
organizzate nelle seguenti sezioni:
| man1 |
Programmi utente |
| man2 |
System call (Chiamate di sistema) |
| man3 |
Funzioni di libreria |
| man4 |
File speciali |
| man5 |
Formato dei file |
| man6 |
Giochi |
| man7 |
Varie |
Man Page multiple
Alcuni argomenti esistono in più di una sezione. Per dimostrarlo, basta usare il
comando whatis, il quale mostra tutte le man page disponibili per un dato
tema:
Codice 2.2: Usare il comando whatis |
$ whatis printf
printf (1) - format and print data
printf (3) - formatted output conversion
|
In questo caso, man printf sarebbe quello predefinito per la pagina nella
sezione 1 ("Programmi utente"). Se l'utente sta scrivendo un programma in C,
potrebbe essere però più interessato alla pagina nella sezione 3 ("Funzioni di
libreria"). È possibile richiamare una pagina di manuale da una certa sezione
specificandola sulla riga di comando, quindi per richiedere printf(3)
dovrà essere digitato:
Codice 2.3: Specificare la sezione nel comando man |
$ man 3 printf
|
Trovare la pagina man corretta
Talvolta è difficile trovare la giusta pagina man per uno specifico argomento.
In questo caso, è possibile provare ad usare man -k per cercare il NAME
(nome) della sezione nelle pagine di manuale. Bisogna fare attenzione perché è
una ricerca per sotto-stringa, quindi eseguendo qualcosa del tipo man -k
ls saranno restituiti un bel po' di risultati.Di seguito un esempio dell'uso
di una interrogazione un po' più precisa:
Codice 2.4: Cercare con man usando il comando man -k |
$ man -k whatis
apropos (1) - search the whatis database for strings
makewhatis (8) - Create the whatis database
whatis (1) - search the whatis database for complete words
|
Tutto riguardo apropos
L'esempio nella sezione precedente introduce alcuni altri punti. Primo, il
comando apropos è esattamente equivalente a man -k. (Infatti, è
stato taciuto un piccolo segreto. Quando viene eseguito man -k, in
effetti viene lanciato apropos dietro le quinte). Il secondo punto è il
comando makewhatis, il quale scansiona tutte le pagine man sul proprio
sistema Linux e costruisce la base dati per whatis e apropos. Di
solito viene lanciato periodicamente da root per mantenere aggiornata la base
dati:
Codice 2.5: Costruire la base dati per whatis apropos |
# makewhatis
|
Per maggiori informazioni su "man" e compagnia, bisognerebbe cominciare da
questa pagine di manuale:
Codice 2.6: Iniziare con la pagina man di man |
$ man man
|
Il MANPATH
Di base, il programma man cercherà le pagine man in
/usr/share/man, /usr/local/man,
/usr/X11R6/man e forse /opt/man. Qualche volta,
potrebbe risultare di dover aggiungere un elemento aggiuntivo a questo percorso
di ricerca. Se così fosse, basta semplicemente modificare
/etc/man.conf con un editor di testi e aggiungere una linea che
assomiglia alla seguente:
Codice 2.7: /etc/man.conf |
MANPATH /opt/man
|
Da questo momento in poi, ogni pagina man presente nella cartella
/opt/man/man* sarà rilevata. Ricordarsi che c'è bisogno di eseguire
nuovamente makewhatis per aggiungere queste nuove pagine di manuale alla
base dati di whatis.
GNU info
Un difetto delle man page è che non supportano l'ipertesto, quindi non è
possibile saltare facilmente da una all'altra. Il popolo GNU ha riconosciuto
questo difetto, quindi è stato inventato un altro formato per la documentazione:
le pagine "info". Molti dei programmi GNU sono forniti insieme ad un'ampia
documentazione nella forma di pagine info. È possibile iniziare a leggere le
pagine info con il comando info:
Codice 2.8: Usare il comando info |
$ info
|
Chiamando info in questo modo sarà caricato un indice delle pagine
disponibili sul sistema. L'utente può muoversi all'interno con i tasti freccia,
seguire collegamenti (indicati con un asterisco) usando il tasto Enter (Invio) e
uscire premendo q. I tasti sono basati su Emacs, quindi si dovrebbe
essere capaci di navigare facilmente se familiari con questo editor. Per una
introduzione all'editor Emacs, fare riferimento alla breve guida presente su
developerWorks Living
in Emacs (Vivere in Emacs).
È possibile anche indicare una pagina info da riga di comando:
Codice 2.9: Comando info specifico |
$ info diff
|
Per maggiori informazioni sull'uso del lettore info, provare a leggere
la pagina info relativa. Si dovrebbe essere in grado di mettere in pratica una
navigazione basilare usando i pochi tasti già citati:
Codice 2.10: Leggere la pagina info di info |
$ info info
|
/usr/share/doc
C'è un'ultima fonte di aiuto all'interno del proprio sistema Linux. Molti
programmi sono forniti con della documentazione aggiuntiva in altri formati:
testo, PDF, PostScript o HTML, per fare qualche nome. Basta dare un'occhiata in
/usr/share/doc (o /usr/doc in sistemi datati). È
presente una lunga lista di cartelle, ognuna delle quali è relativa ad una
determinata applicazione sul proprio sistema. Cercando attraverso questa
documentazione si possono scovare alcune perle che non sono disponibili come
pagine man o info, come ad esempio brevi guide o documentazione tecnica
aggiuntiva. Un controllo veloce rivela che c'è molto materiale disponibile per
la lettura:
Codice 2.11: /usr/share/doc/ |
$ cd /usr/share/doc
$ find . -type f | wc -l
7582
|
Niente male. Il compito del lettore per stasera è quello di leggere appena metà
(3791) di questi documenti. Lo aspetta un quiz domani.
Il Linux Documentation Project (LDP, o Progetto Documentazione
Linux)
Oltre alla documentazione di sistema, esistono un buon numero di eccellenti
risorse per Linux sulla rete. Il Linux
Documentation Project è un gruppo di volontari che stanno lavorando nel
mettere insieme un insieme completo di documentazione libera per Linux. Questo
progetto esiste per accentrare i vari pezzi di documentazione su Linux in una
posizione che sia facile da esplorare e usare.
Uno sguardo al LDP
Il LDP è composto dalle seguenti aree:
Per chi avesse dubbi in quale sezione curiosare, si può trarre vantaggio
dall'uso dell'area di ricerca, che permette all'utente di trovare cose per
argomento.
Il LDP fornisce inoltre una lista di collegamenti e risorse (Links and
Resources) come ad esempio Linux
Gazette (si faccia riferimento ai collegamenti in Risorse) e LinuxFocus, così come
collegamenti a mailing list e archivi di news (novità).
Mailing list
Le mailing list forniscono forse il più importante punto di collaborazione per
gli sviluppatori Linux. Spesso i progetti sono sviluppati da partecipanti che
vivono lontani fra loro, possibilmente di solito su lati opposti del globo. Le
mailing list mettono a disposizione un metodo ad ogni sviluppatore di un
progetto per contattare tutti gli altri e intrattenere discussioni di gruppo via
e-mail. Una delle più famose mailing list di sviluppo è la Mailing List del Kernel linux.
Ancora sulle mailing lists
In aggiunta allo sviluppo, le mailing list possono fornire un metodo per porre
domande e avere risposte da parte di sviluppatori ben informati o anche altri
utenti. Per esempio, distribuzioni indipendenti spesso hanno mailing list per i
nuovi arrivati. È possibile controllare il sito web della propria distribuzione
per informazioni sulle mailing list a disposizione.
Se si spende un po' di tempo per leggere le LKML FAQ (Linux Kernel Mailing List
FAQ) sul collegamento sopra citato, sarà possibile notare che gli iscritti alla
mailing list spesso non rispondono cortesemente a domande già fatte e rifatte. È
sempre saggio cercare negli archivi di una data mailing list prima di scrivere
la propria domanda. Le possibilità ci sono e potrebbe salvare anche un po' del
proprio tempo!
Newsgroup
I "newsgroup" di Internet sono simili alle mailing list ma basati su un
protocollo chiamato NNTP ("Network News Transfer Protocol") piuttosto che su
e-mail. Per partecipare, è necessario usare un client NNTP come slrn o
pan. Il primo vantaggio è che si può prendere parte alle discussioni solo
quando lo si desidera, invece di vedere arrivare messaggi continuamente nella
propria casella di posta.
I newsgroup di interesse primario iniziano con comp.os.linux. È possibile
navigare la lista sul sito di
LDP.
Come con le mailing list, le discussioni di un newsgroup sono spesso archiviate.
Un sito di archiviazione per newsgroup popolare è Deja
News.
Siti web di produttori e terze parti
I siti web delle varie distribuzioni Linux spesso forniscono documentazione
aggiornata, istruzioni di installazione, dritte su
compatibilità/incompatibilità hardware e altro supporto come uno strumento per
la ricerca delle conoscenze di base. Per esempio:
Produttori hardware e software
Molti produttori hardware e software hanno aggiunto il supporto a Linux ai loro
prodotti negli anni passati. Sui loro siti, si possono trovare informazioni
riguardo a quale hardware supporta Linux, strumenti di sviluppo software,
sorgenti rilasciati, download di driver Linux per hardware specifico e altri
progetti speciali per Linux. Per esempio:
Risorse per gli sviluppatori
In aggiunta, molti produttori hardware e software hanno rilasciato ottime
risorse per gli sviluppatori e amministratori Linux. A rischio di sembrare
votato alla causa, l'Autore sottolinea che una delle risorse di maggior valore
proposte da un produttore hardware/software è la IBM developerWorks Linux
zone.
3.
Il modello dei permessi in Linux
Un utente, un gruppo
In questa sezione, verrà dato uno sguardo al modello dei permessi e proprietari
in Linux. È stato già detto che ogni file è posseduto da un utente e un gruppo.
Questo è il vero nocciolo del modello dei permessi in Linux. Si possono vedere
utente e gruppo di un file in un listato ottenuto con ls -l:
Codice 3.1: Listato dei file |
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
|
In questo particolare esempio, l'eseguibile /bin/bash è posseduto
da root e legato al gruppo wheel. Il modello dei permessi in Linux lavora
permettendo l'impostazione di tre indipendenti livelli di permesso per ogni
oggetto del filesystem -- quello per il possessore del file, il gruppo del file
e tutti gli altri utenti.
Capire "ls -l"
Bisogna dare un'occhiata al proprio risultato di ls -l ed esaminare la
prima colonna del listato ottenuto:
Codice 3.2: Esaminare il comando ls -l |
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
|
Questo primo campo -rwxr-xr-x contiene una rappresentazione simbolica di
questi particolari permessi per file. Il primo carattere (-) in questo campo
indica il tipo di file, che in questo caso è un file regolare. Altri possibili
caratteri iniziali sono:
Codice 3.3: Caratteri iniziali |
'd' cartella (directory)
'l' collegamento simbolico
'c' dispositivo speciale a caratteri
'b' dispositivo speciale a blocchi
'p' fifo (o pipe)
's' socket
|
Tre triplette
Codice 3.4: ls -l /bin/bash |
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
|
Il resto del campo si compone di tre triplette di caratteri. La prima tripletta
rappresenta i permessi per il possessore del file, la seconda indica i permessi
per gli appartenenti al gruppo del file e la terza specifica i permessi per
tutti gli altri utenti:
Codice 3.5: Triplette nel comando ls -l |
"rwx"
"r-x"
"r-x"
|
Sopra, la r significa che la lettura (ovvero l'accedere ai dati contenuti nel
file) è permessa, la w significa che la scrittura (ovvero la modifica del file,
così come la cancellazione) è permessa e la x significa che la "esecuzione"
(cioè lanciare il programma) è permessa. Mettendo insieme tutte queste
informazioni, è possibile notare che tutti sono abilitati a leggere il contenuto
ed eseguire il file, ma solo il possessore (root) ha il diritto di modificare
questo file in qualche modo. Quindi, mentre i normali utenti possono copiare
questo file, solo root può aggiornarlo o cancellarlo.
Chi sono io?
Prima è stato spiegato come cambiare utente e gruppo nelle proprietà di un file,
adesso è necessario dire come scoprire l'attuale id utente e l'appartenenza ad
un gruppo. A meno che non sia stato usato il comando su di recente, l'id
utente attuale è quello usato per accedere al sistema. Se si usa su
frequentemente, comunque, potrebbe non essere possibile ricordare l'id utente
attuale effettivo. Per vederlo, digitare whoami:
Codice 3.6: Usare il comando whoami |
# whoami
root
# su drobbins
$ whoami
drobbins
|
A quali gruppi appartengo?
Per sapere di quali gruppi il proprio utente fa parte, usare il comando
groups:
Codice 3.7: Usare il comando groups |
$ groups
drobbins wheel audio
|
Nell'esempio precedente, l'utente risulta fare parte dei gruppi drobbins, wheel
e audio. Se si desidera sapere a quali gruppi appartiene un altro utente (o più
di uno), specificare il nome utente come argomento:
Codice 3.8: Specificare l'utente come argomento |
$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm
|
Cambiare le proprietà di utente e gruppo
Per cambiare il possessore o il gruppo di un file o altri oggetti su filesystem,
usare chown o chgrp, rispettivamente. Ognuno di questi comandi
prende un nome seguito da uno o più nomi di file.
Codice 3.9: Usare i comandi chown e chgrp |
# chown root /etc/passwd
# chgrp wheel /etc/passwd
|
È possibile anche impostare possessore e gruppo simultaneamente con una forma
alternativa del comando chown:
Codice 3.10: Impostare utente e gruppo simultaneamente |
# chown root:wheel /etc/passwd
|
Non si può usare chown a meno di non essere il super utente, ma
chgrp può essere usato da chiunque per cambiare la proprietà sul gruppo
di un file in un gruppo a cui si appartiene.
Modifiche di proprietà ricorsive
Sia chown che chgrp hanno l'opzione -R che può essere usata per
indicare di applicare ricorsivamente le modifiche su possessore e gruppo ad un
intero albero di cartelle. Per esempio:
Codice 3.11: Usare chown e chgrp con l'opzione -R |
# chown -R drobbins /home/drobbins
|
Introduzione a chmod
chown e chgrp possono essere usati per cambiare possessore e
gruppo di un oggetto su filesystem, ma un altro programma -- chiamato
chmod -- è usato per cambiare i permessi rwx che si possono vedere dal
listato di ls -l. chmod prende due o più argomenti: un "modo", che
descrive come i permessi dovrebbero essere cambiati, seguito da un file o una
lista di file che dovrebbe essere influenzata:
Codice 3.12: Aggiungere il permesso x con chmod |
$ chmod +x scriptfile.sh
|
Nell'esempio precedente, il "modo" è +x. Come è possibile indovinare, un modo +x
indica a chmod di rendere il particolare file eseguibile sia per l'utente
e gruppo che chiunque altro.
Se si desidera rimuovere tutti i permessi di esecuzione sul file, bisognerebbe
aire come segue:
Codice 3.13: Rimuovere i permessi x con chmod |
$ chmod -x scriptfile.sh
|
Granularità utente/gruppo/altri
Così facendo, gli esempi su chmod hanno influenzato i permessi per tutte
le tre triplette -- l'utente, il gruppo e tutti gli altri. Spesso, è utile
modificare solo una o due triplette alla volta. Per farlo, specificare
semplicemente il carattere simbolico per la particolare tripletta che si
desidera modificare prima del segno + o -. Usare u per la tripletta "utente", g
per il "gruppo" e o per "altri/chiunque":
Codice 3.14: Usare le triplette |
$ chmod go-w scriptfile.sh
|
Così sono stati appena rimossi i permessi di scrittura per il gruppo e tutti gli
altri utenti, ma lasciati intatti i permessi del "possessore".
Re-impostare i permessi
Oltre a poter impostare i bit dei permessi su on e off (attivi o meno), è
possibile anche resettarli insieme. Usando l'operatore = , si può dire a
chmod che si desiderano gli specifici permessi e nessun altro:
Codice 3.15: Variare i bit dei permessi |
$ chmod =rx scriptfile.sh
|
Sopra, sono solo stati impostati tutti i bit di "lettura" ed "esecuzione" e
tolti i permessi di "scrittura". Se si vuole solamente resettare una particolare
tripletta, si può specificare il nome simbolico per la tripletta prima del segno
=, come segue:
Codice 3.16: Reimpostare una tripletta |
$ chmod u=rx scriptfile.sh
|
Modi numerici
Fino ad'ora, sono stati usati quelli che vengono chiamati modi simbolici per
specificare i cambiamenti sui permessi a chmod. Comunque, esiste una
altro modo comune di specificare i permessi: usando un numero ottale a 4 valori.
Usando questa sintassi, chiamata sintassi dei permessi numerica, ogni cifra
rappresenta i permessi di una tripletta. Per esempio, in 1777, il 777 imposta i
flag per "possessore", "gruppo" e "altri" come discussi in questa sezione. Il
valore 1 è usato per impostare i bit di permesso speciali, che verranno discussi
in seguito (si veda "The
elusive first digit (L'elusiva prima cifra)" alla fine di questa sezione).
Questo grafico mostra come le cifre dalla seconda alla quarta sono interpretate:
| Modo |
Cifra |
| rwx |
7 |
| rw- |
6 |
| r-x |
5 |
| r-- |
4 |
| -wx |
3 |
| -w- |
2 |
| --x |
1 |
| --- |
0 |
Sintassi numerica per i permessi
La sintassi numerica per i permessi è specialmente utile quando si necessita di
specificare tutti i permessi per un file, come nel seguente esempio:
Codice 3.17: Aggiungere permessi numerici |
$ chmod 0755 scriptfile.sh
$ ls -l scriptfile.sh
-rwxr-xr-x 1 drobbins drobbins 0 Jan 9 17:44 scriptfile.sh
|
In questo esempio, è stato usato un modo di 0755, che si espande nell'insieme
completo di permessi come -rwxr-xr-x.
Il valore umask
Quando un processo crea un nuovo file, specifica i permessi che vorrebbe
attribuire a quest'ultimo. Spesso, il modo richiesto è 0666 (leggibile e
scrivibile da chiunque), che risulta più permissivo di quanto si potrebbe
volere. Fortunatamente, Linux consulta qualcosa chiamato "umask" ogni volta che
un nuovo file viene creato. Il sistema usa il valore umask per ridurre i
permessi specificati in origine in qualcosa di più ragionevole e sicuro. È
possibile vedere l'impostazione attuale per il proprio umask digitando umask da
riga di comando:
Codice 3.18: Vedere l'umask corrente |
$ umask
0022
|
Su sistemi Linux, il valore umask è normalmente impostato a 0022, il che abilita
gli altri a leggere i propri file nuovi (se questi possono interagire con essi)
ma non a modificarli.
Per rendere i nuovi file più sicuri in modo predefinito, è possibile cambiare il
valore di umask:
Codice 3.19: Cambiare le impostazioni per umask |
$ umask 0077
|
Questo umask assicurerà che il gruppo e gli altri non avranno assolutamente
alcun permesso per ogni nuovo file creato. Quindi, c'è da chiedersi come opera
umask. A differenza dei permessi "regolari" su file, il valore di umask indica
quali permessi dovrebbero essere tolti. Bisogna consultare la tabella dei modi
da digitare così che sia possibile capire cosa significa un umask di 0077:
| Modo |
Cifre |
| rwx |
7 |
| rw- |
6 |
| r-x |
5 |
| r-- |
4 |
| -wx |
3 |
| -w- |
2 |
| --x |
1 |
| --- |
0 |
Usando la tabella proposta, le ultime tre cifre di 0077 sono espanse in
---rwxrwx. Ora, si deve ricordare che umask indica al sistema quali
permessi disabilitare. Facendo due più due, è possibile vedere che tutti i
permessi per il "gruppo" e gli "altri" saranno disabilitati, mentre i permessi
per l'"utente" rimarranno intatti.
Introduzione a suid e sgid
Quando inizialmente si effettua il login, un nuovo processo shell è avviato.
Questo è già stato detto, ma forse non è stato detto che questo nuovo processo
shell (tipicamente bash) esegue usando l'id utente di chi lo avvia. In quanto
tale, il programma bash può accedere a tutti i file e le cartelle possedute
dall'utente. In realtà, come utenti si è totalmente dipendenti da altri
programmi nell'effettuare operazioni per conto proprio. Poiché i programmi che
vengono avviati ereditano l'id utente di chi li lancia, questi non possono
accedere ad alcun oggetto su filesystem per cui il tale utente non possieda
diritti d'accesso.
Per esempio, il file passwd non può essere cambiato da utenti normali
direttamente, dato che il flag di "scrittura" è disattivato per ogni utente ad
eccezione di root:
Codice 3.20: ls -l /etc/passwd |
$ ls -l /etc/passwd
-rw-r--r-- 1 root wheel 1355 Nov 1 21:16 /etc/passwd
|
Comunque, i normali utenti hanno bisogno di poter modificare /etc/passwd (almeno
indirettamente) ogni volta che necessitano di cambiare la loro password. Ma, se
l'utente non è abilitato a modificare questo file, c'è da capire come questo
opera esattamente.
suid
Fortunatamente, il modello dei permessi in Linux ha due bit speciali chiamati
suid e sgid. Quando un programma eseguibile ha il bit suid
impostato, si avvierà per conto del possessore dell'eseguibile, piuttosto che
per conto della persona che avvia il programma stesso.
Adesso, si può tornare al problema di /etc/passwd. Dando
un'occhiata all'eseguibile passwd è possibile notare che questo è
posseduto da root:
Codice 3.21: Controllare il possessore del file /usr/bin/passwd |
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root wheel 17588 Sep 24 00:53 /usr/bin/passwd
|
Inoltre è possibile vedere che al posto di una x nella tripletta di permessi per
l'utente, c'è una s. Questo indica che, per questo particolare programma, i bit
suid ed eseguibile sono impostati. Da questo segue che, quando è avviato
passwd, esso eseguirà per conto dell'utente root (con pieno accesso da
superuser, o superutente) piuttosto che per l'utente che lo ha lanciato. E dato
che passwd esegue con accesso root, è abilitato a modificare il file
/etc/passwd senza problemi.
Annotazioni su suid/sgid
È stato illustrato come lavora suid, e sgid opera in modo simile.
Permette ai programmi di ereditare la proprietà di gruppo del programma
piuttosto che dell'utente attuale.
Importante:
Di seguito vengono date un po' di informazioni varie ma importanti riguardo a
suid e sgid. Primo, i bit di suid e sgid occupano lo
stesso posto dei bit x in un listato ls -l. Se anche il bit x è impostato, i
rispettivi bit saranno mostrati come s (lettera minuscola). Comunque, se il bit
x non è impostato, verrà mostrata una S (lettera maiuscola).
|
Importante:
Un'altra nota importante: suid e sgid vengono in aiuto in molte situazioni ma un
uso improprio di questi bit può permettere di corrompere la sicurezza di un
sistema. È meglio avere meno programmi con bit suid attivo possibile. Il comando
passwd è uno dei pochi che deve avere abilitato tale bit.
|
Cambiare suid e sgid
Come impostare e rimuovere i bit suid e sgid è abbastanza chiaro.
Di seguito, un esempio su come impostare il bit suid:
Codice 3.22: Impostare il bit suid |
# chmod u+s /usr/bin/myapp
|
E adesso, un esempio su come rimuovere il bit sgid da una cartella. Sarà
evidenziato come il bit sgid influisce sulla cartella tra pochi pochi
paragrafi:
Codice 3.23: Rimuovere il bit sgid |
# chmod g-s /home/drobbins
|
Permessi e cartelle
Fino ad ora, sono stati discussi i permessi dal punto di vista dei file
regolari. Quando questi vengono applicati a cartelle, le cose sono un poco
diverse. Le cartelle usano gli stessi flag per i permessi ma questi vengono
interpretati nel loro significato in modo leggermente differente.
Per una cartella, se il flag di "lettura" è impostato, è possibile avere una
lista dei contenuti della cartella stessa; "scrittura" significa che si possono
creare file nella cartella; "esecuzione" indica la possibilità di entrare nella
cartella e accedere ogni sotto cartella al suo interno. Senza il flag
"esecuzione", gli oggetti del filesystem all'interno di una cartella non sono
raggiungibili. Senza il flag "lettura", gli oggetti del filesystem all'interno
di una cartella non sono visibili (nel senso che non vi si può accedere in
lettura), ma agli oggetti all'interno della cartella si può ancora accedere
a patto che qualcuno conosca il percorso completo dell'oggetto su disco.
Cartelle e sgid
E, se una cartella ha il flag "sgid" abilitato, ogni oggetto su filesystem
creato al suo interno erediterà il gruppo della cartella. Questo particolare
caratteristica viene in aiuto quando vi sia la necessità di creare un albero di
cartelle da mettere a disposizione di un insieme di persone che appartengano
tutte allo stesso gruppo. Basta fare quanto segue:
Codice 3.24: Creare una cartella per un insieme di persone |
# mkdir /home/groupspace
# chgrp mio_gruppo /home/groupspace
# chmod g+s /home/groupspace
|
Ora, ogni utente nel gruppo mio_gruppo può creare file e cartelle all'interno di
/home/groupspace e a questi sarà anche assegnata automaticamente la
proprietà sul gruppo per mio_gruppo. In relazione alle impostazioni di umask
degli utenti, i nuovi oggetti su filesystem possono o meno risultare leggibili,
scrivibili o eseguibili dagli altri membri del gruppo mio_gruppo.
Cartelle e cancellazione
In modo predefinito, le cartelle in Linux si comportano in un modo che può non
essere ideale in tutte le situazioni. Normalmente, chiunque può rinominare o
cancellare file all'interno di una cartella, a patto che chi opera abbia
l'accesso in scrittura alla specifica cartella. Per cartelle usate da utenti
individuali, questo comportamento è di solito abbastanza corretto.
Comunque, per cartelle che sono usate da molti utenti, specialmente
/tmp e /var/tmp, questo comportamento può rivelare
brutte sorprese. Dato che chiunque può scrivere in queste cartelle, chiunque può
cancellare o rinominare file di altri utenti -- anche se chi agisce non è il
proprietario! Ovviamente, è difficile usare /tmp per qualcosa che
abbia senso quando altri utenti possono digitare rm -rf /tmp/* in ogni
momento e cancellare i file di chiunque altro.
Fortunatamente, Linux ha un qualcosa chiamato bit sticky (letteralmente,
appiccicoso). Quando /tmp ha il bit sticky impostato (con il
comando chmod +t), le sole persone che possono cancellare o rinominare
file in /tmp sono i possessori della cartella (di solito root), i
possessori dei file o root. Quasi tutte le distribuzioni Linux abilitano il bit
sticky su /tmp di base, ma è possibile accorgersi che il bit sticky
divente utile anche in altre situazioni.
La prima cifra elusiva
Per concludere la sezione, infine verrà discussa la prima cifra elusiva del modo
numerico. Come si può notare, la prima cifra è usata per impostare i bit sticky,
suid e sgid:
| suid |
sgid |
sticky |
cifra del modo |
| on |
on |
on |
7 |
| on |
on |
off |
6 |
| on |
off |
on |
5 |
| on |
off |
off |
4 |
| off |
on |
on |
3 |
| off |
on |
off |
2 |
| off |
off |
on |
1 |
| off |
off |
off |
0 |
Di seguito un esempio su come usare un modo numerico a 4 cifre per impostare i
permessi per una cartella che sarà usata da un gruppo di lavoro:
Codice 3.25: Impostare i permessi numericamente |
# chmod 1775 /home/groupfiles
|
Come compito per casa, il lettore è invitato a capire il significato della
impostazione numerica 1755 per i permessi.
4.
Gestione degli account in Linux
Introduzione a /etc/passwd
In questa sezione, verrà data un'occhiata al meccanismo di gestione degli
account in Linux, iniziando con il file /etc/passwd, che definisce
tutti gli utenti esistenti su un sistema Linux. È possibile vedere il proprio
file /etc/passwd digitano less /etc/passwd.
Ogni linea in /etc/passwd definisce un account utente. Di seguito
un esempio di linea dal file /etc/passwd dell'autore:
Codice 4.1: /etc/passwd |
drobbins:x:1000:1000:Daniel Robbins:/home/drobbins:/bin/bash
|
Come si può notare, ci sono abbastanza informazioni su questa linea. In effetti,
ogni linea di /etc/passwd consiste di più campi, ognuno separato
da :.
Il primo campo indica il nome utente (drobbins) e il secondo campo contiene una
x. Sui vecchi sistemi Linux, questo campo conteneva una password cifrata da
usare per l'autenticazione, ma quasi tutti i sistemi Linux di oggi immagazzinano
questa informazione sulla password in un altro file.
Il terzo campo (1000) specifica l'id utente numerico associato con questo
particolare utente e il quarto campo (1000) associa il dato utente ad un
particolare gruppo; entro pochi paragrafi, sarà mostrato dove viene definito il
gruppo 1000.
Il quinto campo contiene una descrizione testuale dell'account -- in questo
caso, il nome dell'utente. Il sesto campo definisce la cartella di home
dell'utente (ovvero, la sua cartella principale) e il settimo campo specifica la
shell predefinita dell'utente -- quella che sarà avviata automaticamente quando
l'utente accederà al sistema.
Suggerimenti e trucchi per /etc/passwd
Probabilmente qualcuno avrà notato che ci sono molti più account utente definiti
in /etc/passwd di quanti effettivamente utilizzabili per accedere
al sistema. Questo perché varie componenti di Linux usano account utente per
aumentare la sicurezza. Di solito, questi account utente hanno un id utente
("uid") minore di 100 e molti di questi hanno qualcosa del tipo /bin/false
elencato come shell predefinita. Dato che il programma /bin/false
non fa niente ma esce senza un codice di errore, questo effettivamente previene
l'utilizzo di questi account come validi per accedere al sistema -- sono
solamente per uso interno.
/etc/shadow
Quindi, gli account utente sono definiti in /etc/passwd. I sistemi
Linux contengono un file di accompagnamento per /etc/passwd che è
chiamato /etc/shadow. Questo file, a differenza di
/etc/passwd, è leggibile solamente da root e contiene le
informazioni sulle password cifrate. Ecco un esempio di una semplice linea presa
da /etc/shadow:
Codice 4.2: /etc/shadow |
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
|
Ogni linea definisce informazioni sulla password per un particolare account e,
ancora, ogni campo è separato da :. Il primo campo indica il particolare account
utente a cui questa voce nascosta è associata. Il secondo campo contiene una
password cifrate. I campi rimanenti sono descritti nella seguente tabella:
| campo 3 |
# di giorni trascorsi dal 1/1/1970 all'ultima modifica della password |
| campo 4 |
# numero di giorni rimanenti prima che la password sia abilitata a subire
modifiche (0 per "cambiare ogni volta")
|
| campo 5 |
# di giorni rimanenti prima che il sistema forzi l'utente a cambiare la
password con una nuova (-1 per "mai")
|
| campo 6 |
# di giorni rimanenti prima che l'utente venga avvertito sulla imminente
scadenza della propria password (-1 per "nessun avvertimento")
|
| campo 7 |
# di giorni rimanenti alla disabilitazione dell'account da parte del sistema
dopo l'avvenuta scadenza della password (-1 per "mai disabilitato")
|
| campo 8 |
# di giorni trascorsi dalla disabilitazione dell'account (-1 per "questo
account è attivo")
|
| campo 9 |
Riservato per usi futuri |
/etc/group
Proseguendo, bisogna parlare del file /etc/group, che definisce
tutti i gruppi su un sistema Linux. Di seguito una linea di esempio:
Codice 4.3: /etc/group |
drobbins:x:1000:
|
Il formato dei campi per /etc/group è il seguente. Il primo campo
definisce il nome del gruppo; il secondo campo contiene la traccia di una
password che adesso contiene semplicemente una x e il terzo campo definisce l'id
numerico di gruppo per questo particolare gruppo. Il quarto campo (vuoto
nell'esempio precedente) indica ogni utente che è membro di questo gruppo.
Bisogna ricordare che la linea di esempio per /etc/passwd si
riferiva ad un id di gruppo 1000. Questo ha l'effetto di piazzare l'utente
drobbins nel gruppo drobbins, anche se il nome utente drobbins non è elencato
nel quarto campo di /etc/group.
Note sui gruppi
Una nota sull'associazione fra utenti e gruppi: su alcuni sistemi si riscontrerà
che ogni nuovo account utente per il login viene associato con un gruppo dello
stesso nome (e spesso anche stesso numero). Su altri sistemi, tutti gli account
utente per il login apparterranno ad un singolo gruppo users. L'approccio che il
lettore usa sul proprio sistema amministrato (o sui propri sistemi amministrati)
è una sua decisione. Creare gruppi corrispondenti per ogni utente ha il
vantaggio di permettere agli utenti un più facile controllo sull'accesso ai loro
file inserendo amici fidati nel loro gruppo personale.
Aggiungere un utente ed un gruppo a mano
Adesso, verrà mostrato come creare il proprio account utente e relativo gruppo.
Il modo migliore per imparare come fare questo è aggiungere un nuovo utente al
sistema manualmente. Per iniziare, assicurarsi per prima cosa che la propria
variabile d'ambiente EDITOR sia impostata con il proprio editor di testi
preferito:
Codice 4.4: Controllare la variabile relativa al proprio editor di testi preferito |
# echo $EDITOR
vim
|
Se così non fosse, è possibile impostarla digitando qualcosa di simile a quanto
segue:
Codice 4.5: Impostare la variabile EDITOR |
# export EDITOR=/usr/bin/emacs
# vipw
|
Si dovrebbe ora trovarsi nel proprio editor di testi preferito con il file
/etc/passwd caricato sullo schermo. Quando si modificano i file di
sistema passwd e group, è molto importante usare i
comandi vipw e vigr. Questi prendono precauzioni ulteriori per
assicurare che i propri file critici passwd e group
siano bloccati correttamente così che questi non risultino corrotti alla fine.
Modificare /etc/passwd
Adesso che il file /etc/passwd è stato caricato, si può andare
avanti e aggiungere la seguente linea:
Codice 4.6: /etc/passwd |
testuser:x:3000:3000:LPI tutorial test user:/home/testuser:/bin/false
|
Così è stato appena aggiunto un utente "testuser" con un UID uguale a 3000.
Questo è stato aggiunto ad un gruppo con GID 3000, che non è stato ancora
creato. In alternativa, sarebbe possibile assegnare questo utente al GID del
gruppo users se lo si desidera. Questo nuovo utente ha un commento che recita
LPI tutorial test user; la cartella home dell'utente è impostata a
/home/testuser e la shell dell'utente è impostata a
/bin/false per ragioni di sicurezza. Se si sta creando un account
non di test, la shell potrebbe essere impostata a /bin/bash. Adesso
bisogna procedere salvando le modifiche ed uscendo.
Modificare /etc/shadow
Ora, c'è bisogno di aggiungere una voce in /etc/shadow per questo
particolare utente. Per farlo, digitare vipw -s. L'utente sarà accolto
dal proprio editor di testi favorito, che ora contiene il file
/etc/shadow. Adesso, andando avanti basta copiare la linea di un
account esistente (uno che ha una password ed è più lunga delle voci degli
account di base del sistema):
Codice 4.7: /etc/shadow |
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
|
A questo punto, cambiare il nome utente sulla linea copiata col nome del proprio
nuovo utente e assicurarsi che tutti i campi (in particolare la durata della
password) siano impostati secondo le proprie preferenze:
Codice 4.8: Modificare /etc/shadow |
testuser:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
|
Infine, salvare ed uscire.
Impostare una password
Il prompt sarà di nuovo lì. Adesso, è il momento di impostare una password per
il proprio utente nuovo:
Codice 4.9: Impostare password per un nuovo utente |
# passwd testuser
Enter new UNIX password:
Retype new UNIX password:
|
Modificare /etc/group
Ora che /etc/passwd e /etc/shadow sono a posto, è
l'ora di configurare correttamente /etc/group. Per farlo, digitare:
Codice 4.10: Configurare /etc/group |
# vigr
|
Apparirà il proprio file /etc/group, pronto per le modifiche.
Adesso, se si sceglie di assegnare il gruppo predefinito users al proprio
particolare utente di test, non c'è bisogno di aggiungere alcun gruppo a
/etc/groups. Comunque, se si sceglie di creare un nuovo gruppo per
questo utente, andando avanti basta aggiungere la seguente linea:
Codice 4.11: Aggiungere un nuovo gruppo manualmente |
testuser:x:3000:
|
Ora salvare ed uscire.
Creare una cartella home
La fine è vicina. Digitando il seguente comando verrà creata una cartella home
per l'utente testuser:
Codice 4.12: Creare una cartella home |
# cd /home
# mkdir testuser
# chown testuser.testuser testuser
# chmod o-rwx testuser
|
La cartella home dell'utente creato è al suo posto e l'account è pronto per
l'uso. O meglio, quasi pronto. Se si desidera usare questo account, è necessario
usare vipw per cambiare la shell predefinita dell'utente testuser in
/bin/bash così che l'utente possa accedere al sistema.
Strumenti di amministrazione per gli account
Ora che è stato illustrato come aggiungere un nuovo account a gruppo a mano,
bisogna dare un'occhiata ai vari strumenti salva tempo disponibili sotto Linux
per la gestione degli account. A causa di vincoli di spazio, non saranno coperti
molti dettagli nella descrizione di questi comandi. Ricordarsi che è possibile
sempre avere più informazioni su un comando leggendo la pagina di manuale
relativa. Se si sta pianificando di sostenere l'esame 101 del LPIC, bisognerebbe
spendere un po' di tempo per prendere familiarità con ognuno di questi comandi.
newgrp
Di base, ogni file che un utente crea è assegnato al gruppo dell'utente stesso
specificato in /etc/passwd. Se l'utente appartiene ad altri gruppi,
egli o ella può digitare newgrp questo_gruppo per impostare la proprietà di
gruppo predefinita al gruppo questo_gruppo. Quindi, ogni nuovo file creato
erediterà l'appartenenza al gruppo questo_gruppo.
| chage |
Il comando chage è usato per vedere e cambiare le impostazioni sulla
durata della password memorizzate in /etc/shadow.
|
| gpasswd |
Uno strumento di amministrazione del gruppo multiuso. |
|
groupadd/groupdel/groupmod
|
Usati per aggiungere/cancellare/modificare gruppi in /etc/group
|
|
useradd/userdel/usermod
|
Usati per aggiungere/cancellare/modificare utenti in
/etc/passwd. Questi comandi effettuano anche varie altre
funzioni comode. Vedere la pagina di manuale per maggiori informazioni.
|
|
pwconv/grpconv
|
Usato per convertire i file passwd e group nella
"nuova forma" di password oscurate (o shadow password). Teoricamente tutti i
sistemi Linux usano già le shadow password, quindi non dovrebbe esserci
bisogno di usare questi comandi.
|
5.
Raffinare l'ambiente utente
Introduzione a "fortune"
La propria shell ha molte utili opzioni che si possono impostare per venire
incontro alla preferenze personali. Fin'ora, comunque, non è stata discussa
alcuna via per avere queste impostazioni impostate automaticamente ogni volta
che si accede al sistema, a parte se non digitando nuovamente ogni volta il
comando. In questa sezione verrà mostrato come raffinare il proprio ambiente di
login modificando i file di avvio.
Prima di tutto, verrà aggiunto un messaggio amichevole al primo accesso al
sistema. Per vedere un esempio di messaggio, lanciare fortune:
Codice 5.1: Eseguire il comando fortune |
$ fortune
No amount of careful planning will ever replace dumb luck.
|
.bash_profile
Adesso, configuriamo fortune così che venga eseguito ad ogni login.
Usando il proprio editor di testi preferito bisogna modificare un file chiamato
.bash_profile nella propria cartella home. Se il file non esiste
già, si vada avanti creandolo. Inserire una linea in cima:
Codice 5.2: ~/.bash_profile |
fortune
|
Provare ad uscire e rientrare nel sistema. A meno che non si stia eseguendo un
gestore di login come xdm, gdm o kdm, dovrebbe apparire un'accoglienza
divertente accedendo al sistema:
Codice 5.3: Risultato del comando fortune nel file .bash_profile |
mycroft.flatmonk.org login: chouser
Password:
Freedom from incrustations of grime is contiguous to rectitude.
$
|
La shell di login
Quando bash si avvia, attraversa il file .bash_profile nelle
propria home directory, eseguendo ogni riga così come se questa fosse digitata
dal prompt di bash. Questa azione è chiamata "sourcing del file" (letteralmente,
tirare fuori il file).
Bash opera in modo diverso in relazione a come viene avviato. Se è lanciato come
shell di login, opera come sopra accennato -- prima fa il sourcing del file
valido per l'intero sistema /etc/profile e quindi del proprio
personale ~/.bash_profile.
Ci sono due modi per dire a bash di eseguire come shell di login. Un modo è
usato quando si effettua il primo accesso al sistema: bash è avviato con un nome
di processo di -bash. È possibile vederlo nel listato dei processi:
Codice 5.4: Lista dei processi |
$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chouser 404 0.0 0.0 2508 156 tty2 S 2001 0:00 -bash
|
Probabilmente sarà presente un più lunga lista, ma dovrebbe esserci almeno una
voce in COMMAND con un trattino prima del nome della propria shell, come -bash
in questo esempio. Questo trattino è usato dalla shell per determinare se deve
eseguire come una shell di login.
Capire --login
Il secondo modo per dire a bash di eseguire come shell di login è con l'opzione
a riga di comando --login. Questa viene usata talvolta dagli emulatori di
terminale (come xterm) per rendere la loro sessione bash simile ad una sessione
di login iniziale.
Dopo l'accesso al sistema, più copie della propria shell saranno eseguite. A
meno che non vengano lanciate con --login o abbiano una trattino nel nome
del processo, queste sessioni non saranno shell di login. Se presentano
all'utente un prompt, comunque, queste vengono chiamate shell interattive. Se
bash è avviata come interattiva, ma non di login, ignorerà
/etc/profile e ~/.bash_profile e si rivolgerà invece a
~/.bashrc.
| interattiva |
login |
profile |
rc |
| si |
si |
usato |
ignorato |
| si |
no |
ignorato |
usato |
| no |
si |
usato |
ignorato |
| no |
no |
ignorato |
ignorato |
Provare l'interattività
Talvolta bash fa il sourcing del proprio file ~/.bashrc, anche se
questa non è davvero interattiva, come quando si usano comandi del tipo rsh e
scp. Questo è bene ricordarlo perché stampare del testo, come è stato fatto con
il comando fortune in precedenza, può davvero confondere queste sessioni non
interattive di bash. È una buona idea usare la variabile PS1 per rilevare quando
la shell attuale è veramente interattiva prima di stampare del testo da un file
d'avvio:
Codice 5.5: Testare la variabile PS1 |
if [ -n "$PS1" ]; then
fortune
fi
|
/etc/profile e /etc/skel
Come amministratore di sistema, si ha a carico il file
/etc/profile. Dato che questo viene analizzato da chiunque quando
si effettua un primo accesso al sistema, è importante tenerlo in ordine e
funzionante. È anche uno strumento potente per rendere operative le cose in modo
corretto per i nuovi utenti non appena questi accedono al sistema nei loro nuovi
account.
Comunque, ci sono alcune impostazioni che si potrebbe volere mettere a
disposizione come base per i nuovi utenti, ma anche permettere loro di cambiarle
facilmente. Qui è dove viene in aiuto la cartella /etc/skel. Quando
si usa il comando useradd per creare un nuovo account utente, si copiano
tutti i file da /etc/skel nella nuova cartella home dell'utente
stesso. Ciò significa che si possono mettere utili file
.bash_profile e .bashrc in /etc/skel per
mettere a disposizione dei nuovi utenti un buon avvio
export
Le variabili in bash possono essere marcate così che risultino impostate in ogni
nuova shell che viene avviata; questa è chiamata marchiatura per esportazione
(export). Si può avere una lista delle variabili attualmente marcate per
l'esportazione nella propria sessione di shell con bash:
Codice 5.6: risultati del comando export |
$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"
|
Marcare le variabile per l'esportazione
Se una variabile non è marcate per l'esportazione, ogni nuova shell che viene
avviata non avrà questa variabile impostata. Comunque, è possibile marcare una
variabile per l'esportazione passandola al comando interno export:
Codice 5.7: Marcare una variabile per l'esportazione |
$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$ bash
$ echo $FOO $BAR
bar
|
In questo esempio, le variabile FOO e BAR sono entrambe impostate, ma solo BAR è
marcata per l'esportazione. Quando bash è avviato nuovamente, ha perso il valore
di FOO. Se si esce dal nuovo bash, è possibile vedere che l'originale ha ancora
il proprio valore sia per FOO che per BAR:
Codice 5.8: Controllare le impostazione nella shell bash originale |
$ exit
$ echo $FOO $BAR
foo bar
|
Export e set -x
Dato questo comportamento, le variabili possono essere impostate in
~/.bash_profile o /etc/profile e marcate per
l'esportazione, quindi non si avrà più bisogno di impostarle ancora. Ci sono
alcune opzioni che non possono essere esportate, comunque, e quindi queste
devono essere messe nei propri file ~/.bashrc e profile in
modo da essere impostate coerentemente. Queste opzioni sono regolate con il
comando interno set:
Codice 5.9: Usare il comando set |
$ set -x
|
L'opzione -x comporta la stampa da parte di bash di ogni comando che sta
per eseguire:
Codice 5.10: Controllare i risultati dell'opzione -x |
$ echo $FOO
$ echo foo
foo
|
Questo può essere davvero utile per capire il comportamento inaspettato delle
virgolette o stranezze simili. Per togliere l'opzione -x, dare set
+x. Dare un'occhiata alla pagina di manuale per tutte le opzioni del comando
interno set.
Impostare le variabili con "set"
Il comando interno set può anche essere usato per impostare variabili, ma
quando è usato in questo modo è opzionale. Il comando bash set FOO=foo
significa esattamente la stessa cosa di FOO=foo. Per togliere
l'impostazione di una variabile si usa il comando interno unset:
Codice 5.11: Togliere l'impostazione ad una variabile |
$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO
|
Unset vs. FOO=
Questa non è la stessa cosa che impostare una varibile al valore nullo,
anche se è talvolta difficile spiegare la differenza. Un modo per farlo è usare
il comando interno set senza parametri per avere una lista delle
variabili correnti:
Codice 5.12: Confronto fra unset e FOO= |
$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO
|
Usare set senza parametri è simile ad usare il comando interno
export, ad eccezione del fatto che set fornisce una lista di tutte
le variabili invece che solamente quelle marcate per l'esportazione.
Esportare per cambiare il comportamento di un comando
Spesso, il comportamento dei comandi può essere alterato impostando variabili
d'ambiente. Così come con le nuove sessioni bash, altri programmi che vengono
avviati dal proprio prompt bash saranno capaci solo di vedere le variabili che
sono state marcate per l'esportazione. Per esempio, il comando man
controlla la variabile PAGER per scoprire quale programma usare per avanzare
attraverso il testo una pagina alla volta.
Codice 5.13: Esportare la variabile PAGER |
$ PAGER=less
$ export PAGER
$ man man
|
Con PAGER impostato su less, sarà mostrata una pagina alla volta
scorrendo alla pagina seguente a seguito di una pressione della barra
spaziatrice. Se si cambia il valore di PAGER in cat, il testo sarà
mostrato tutto in una volta, senza pause.
Codice 5.14: Impostare la variabile PAGER su cat |
$ PAGER=cat
$ man man
|
Usare "env"
Sfortunatamente, se ci si dimentica di impostare la variabile PAGER nuovamente
su less, man (così come alcuni altri programmi) continueranno a
mostrare tutto il loro testo senza fermarsi. Se si desidera impostare PAGER su
cat per una sola volta, è possibile usare il comando env:
Codice 5.15: Usare il comando env per impostare una variabile |
$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less
|
Questa volta, PAGER è stato esportato per man con il valore cat,
ma la variabile PAGER stessa è rimasta intatta nella sessione bash.
6.
Sommario e risorse
Sommario
Congratulazione per la fine della Parte 3 di questa serie di brevi guide. A
questo punto, si dovrebbe sapere come localizzare informazioni nella
documentazione di sistema e su Internet e si dovrebbe avere una buona
infarinatura sul modello dei permessi in Linux, la gestione degli account e il
raffinamento dell'ambiente di login.
Risorse
Assicurarsi di dare un'occhiata alle varie risorse sulla documentazione in Linux
coperte in questa breve guida -- in particolare al Linux Documentation Project. Ci si accorgerà
che l'insieme di guide, HOWTO, FAQ e pagine di manuale presenti ha un valore
inestimabile. Assicurarsi di controllare inoltre la Linux Gazette e LinuxFocus.
La Linux System Administrators
guide (Guida per Amministratori di Sistema Linux, disponibile sotto nella
sezione "Guides" su www.tlpd.org) è un buon complemento a questa serie di brevi
guide -- si consiglia di dargli una lettura. Forse potrebbe essere utile anche
il Unix and
Internet Fundamentals HOWTO (HOWTO sui Fondamenti di Unix e Internet) di
Eric S. Raymond.
È possibile leggere la documentazione dello GNU Project sulla rete per il
sistema GNU info (anche chiamato "texinfo") sulla pagina di documentazione di
GNU texinfo.
Si consiglia di fare un giro sulla Linux newsgroup list sul sito del LDP
e nell'archivio di newsgroup su Deja
News.
Nella serie di articoli Bash by example (Bash tramite esempi) su developerWorks,
Daniel mostra al lettore come usare i costrutti della programmazione bash per
scrivere i propri script in bash. Questa serie su bash (in particolare Parti 1
e 2) rappresenta una buona preparazione per l'esame LPIC di Livello 1 e rinforza
i concetti coperti nella sezione "Raffinare l'ambiente utente" di questa breve
guida:
È fortemente raccomandato Technical FAQ
by Linux Users (FAQ tecniche per Utenti Linux) di Mark Chapman, una lista
di 50 pagine approfondite riguardo domande frequenti su Linux, insieme a
risposte dettagliate. Le FAQ stesse sono in formato PDF (Adobe Acrobat). Se chi
legge è un utente Linux novizio o intermedio, dovrebbe preoccuparsi di imporre a
se stesso una lettura di queste FAQ. È anche raccomandato il
Linux glossary for Linux users (Glossario Linux per utenti Linux), ancora
da parte di Mark.
Per chi non fosse familiare con l'editor vi, si faccia riferimento al testo di
Daniel Vi intro
-- the cheat sheet method tutorial (Introduzione a VI -- bignami). Questa
breve guida fornisce al lettore una leggera ma veloce introduzione a questo
potente editor di testi. Bisogna considerare questo materiale come obbligatorio
se non si sa come usare vi.
Per una introduzione all'editor Emacs, si veda la breve guida su developerWorks,
Living
in Emacs (Vivere con Emacs).
Commenti
Si incoraggiano i lettori a far sapere agli scrittori dove questa breve guida è
stata utile e come potrebbe essere migliorata. Gli autori di questa guida
incoraggiano i lettori a fornire un proprio riscontro sull'utilità di questa
guida e su eventuali migliorie. Avrebbero piacere anche di conoscere altri
argomenti di cui sarebbe gradita la presenza fra le guide brevi su
developerWorks.
Per domande sui contenuti di questa breve guida, contattare gli autori:
|