Gentoo Logo

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

Indice:

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: (enter a password for testuser)
Retype new UNIX password: (enter testuser's new password again)

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:



Stampa

Aggiornato il 20 giugno 2007

Oggetto: In questa breve guidata sarà data una introduzione alla documentazione di sistema Linux. Verrà spiegato come cambiare permessi e come gestire gli account in Linux. Alla fine il lettore avrà imparato come raffinare il proprio sistema.

Daniel Robbins
Autore

Chris Houser
Autore

Aron Griffis
Autore

Michele Caini
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.