[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
695.1.1) Come si imposta un dominio virtuale?
Per impostare un dominio virtuale, si deve modificare il file httpd.conf
che generalmente è presente nella directory /etc/apache/
o in /etc/
. Oltre a questa modifica si deve predisporre un servizio di risoluzione dei nomi. Quest'ultimo può essere fatto mediante pacchetti appositi che gestiscono il DNS (BIND) oppure modificando il file /etc/hosts
.(1)
Le modifiche da apportare al file httpd.conf
sono le seguenti:
|
ip_macchina è l'indirizzo IP della macchina che ospita il server HTTP;
dominio_virtuale è il nome che si intende conferire al dominio virtuale;
amministratore è l'amministratore della macchina macchina;
/usr/local/httpd/dominiovirtuale/htdocs
è la directory principale del dominio virtuale.
Se l'indirizzo della macchina è 127.0.0.1 ed il suo nome è localhost, il file /etc/hosts
si presenterà circa così:
|
Si dovrà semplicemente aggiungere un'altra riga relativa al dominio virtuale:
|
Potrebbe essere necessario permettere l'accesso alla directory contenente i file del dominio virtuale. In tal caso si dovrà modificare il file access.conf
che generalmente è presente nella directory /etc/apache/
o in /etc/
. La modifica consisterà nell'aggiunta delle seguenti righe al file:
|
Per rendere effettive tutte le modifiche apportate, sarà necessario rilanciare il demone apache con:
#
apache restart
[Invio](2)
695.1.2) Come si può controllare il traffico giornaliero del sistema?
Per poter visualizzare il traffico giornaliero dei servizi HTTP, SMTP, POP3, si potrà utilizzare il seguente script: (3) 2.2.x, con le opzioni CONFIG_FIREWALL e CONFIG_IP_FIREWALL abilitate.
|
Dopo averlo lanciato, con i privilegi dell'utente root, per visualizzare il traffico giornaliero si dovrà impartire il comando:
#
ipchains -L -n -v
[Invio]
Ecco l'output di una condizione neutra:
Chain input (policy ACCEPT: 23 packets, 6746 bytes): pkts bytes target prot opt tosa tosx ifname mark 0 0 SMTP-IN tcp ------ 0xFF 0x00 * Chain forward (policy ACCEPT: 0 packets, 0 bytes): Chain output (policy ACCEPT: 23 packets, 6746 bytes): pkts bytes target prot opt tosa tosx ifname mark 0 0 SMTP-OUT tcp ------ 0xFF 0x00 * 0 0 POP3 tcp ------ 0xFF 0x00 * 0 0 IMAP tcp ------ 0xFF 0x00 * 0 0 HTTP tcp ------ 0xFF 0x00 * Chain HTTP (1 references): Chain IMAP (1 references): Chain POP3 (1 references): Chain SMTP-OUT (1 references): Chain SMTP-IN (1 references): outsize source destination ports 0.0.0.0/0 0.0.0.0/0 * -> 25 outsize source destination ports 0.0.0.0/0 0.0.0.0/0 25 -> * 0.0.0.0/0 0.0.0.0/0 110 -> * 0.0.0.0/0 0.0.0.0/0 143 -> * 0.0.0.0/0 0.0.0.0/0 80 -> * |
695.1.3) Come si abilita il masquerading in una rete locale?
Qualora si voglia mascherare dietro un firewall le macchine di una rete 192.168.1.0, si dovrà innanzitutto ricompilare il kernel con le seguenti opzioni abilitate:(4)
|
Dopo aver caricato la nuova immagine del kernel, si dovrà lanciare questo script (e eventualmente provvedere ad automatizzarne l'esecuzione):
|
La prima riga dello script abilita la possibilità di instradamento dei pacchetti attraverso la macchina router;
la terza indica la politica predefinita che in questo caso è quella di impedire il transito di qualsiasi pacchetto;
l'ultima riga consente la possibilità di transito esclusivamente alle macchine della rete 192.168.1.0/24.
695.1.4) Come si predispone un firewall?
Per impostare un firewall, occorre che la macchina sia dotata di due schede di rete (una che sia collegata con la rete interna e una con la rete esterna. Quest'ultima scheda di rete può anche consistere in un modem). Si deve innanzitutto attivare l'instradamento della rete interna:
#
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
[Invio]
Deve essere ora definito l'instradamento predefinito attraverso il router 192.168.1.254:
#
route add default gw 192.168.1.254 dev eth0
[Invio](5)
Utilizzando un kernel di versione 2.2.x o superiori dovrà essere abilitato l'instradamento dei pacchetti attraverso il router:
#
echo 1 > /proc/sys/net/ipv4/ip_forward
[Invio]
Utilizzando il kernel 2.2.x o superiore, l'opzione Always Defrag (un tempo #define attivabile e disattivabile in fase di compilazione), è divenuta una chiamata di sistema. Dato che questa opzione è molto importante, ed è disabilitata in maniera predefinita, è consigliabile eseguire tale comando:
#
echo 1 > /proc/sys/net/ipv4/ip_always_defrag
[Invio]
Questa opzione si preoccupa di riassemblare i pacchetti IP entranti prima che questi possano essere elaborati dal firewall o reindirizzati altrove.
Per impostare le regole che consentono o impediscono il transito dei pacchetti si dovrà utilizzare il comando ipchains con le opzioni relative. Ammettiamo ora che si debbano costituire le seguenti regole:
bloccare tutti i pacchetti con indirizzo 127.x.x.x che non provengono dalla interfaccia di loopback;(6)
bloccare tutti i pacchetti di controllo (ICMP) entranti(7);
accettare i pacchetti della rete locale 192.168.1.0 diretti verso le porte FTP del server il cui indirizzo IP è 345.125.6.121;
accettare tutti i pacchetti diretti verso la porta WWW del server;
impedire l'accesso a tutti i pacchetti diretti verso altre porte.
Le regole sopra esposte si traducono nei seguenti comandi:
#
ipchains -A input --interface ! lo -s 127.0.0.0/8 -j DENY
[Invio]
#
ipchains -A input -p icmp --icmp-type echo-request -j DENY
[Invio]
#
ipchains -A input -s 192.168.1.0/24 -d 345.125.6.121 21
\
\-p TCP -j ACCEPT
[Invio]
#
ipchains -A input -s 192.168.1.0/24 -d 345.125.6.121 20
\
\-p TCP -j ACCEPT
[Invio]
#
ipchains -A input -d 345.125.6.121 80 -p TCP -j ACCEPT
[Invio]
#
ipchains -A input -d 345.125.6.121 0:1023 -p TCP -j DENY
[Invio]
695.1.5) Perché non riesco ad uscire dalla rete locale attraverso il gateway? Ho configurato tutto con attenzione ma non ci riesco. Perché?
Se si sono seguite attentamente le regole per impostare correttamente il firewall, occorrerà modificare un parametro del file system /proc
. Il file in questione è /proc/sys/net/ipv4/ip_forward
. Impartendo il comando cat su questo file presumibilmente si otterrà uno zero:
#
cat /proc/sys/net/ipv4/ip_forward
[Invio]
Per permettere il transito dei pacchetti attraverso il firewall, occorrerà impostare tale valore ad 1:
#
echo 1 > /proc/sys/net/ipv4/ip_forward
[Invio]
Ovviamente questa operazione va ripetuta ad ogni avvio del sistema. Qualora si utilizzi una distribuzione GNU/Linux Red Hat sarà sufficiente rendere vera l'opzione «FORWARD_IPV4» presente nel file /etc/sysconfig/network
.
695.2.1) Come si può fornire agli utenti solamente l'accesso FTP al sistema ma non un accesso Telnet?
Per impedire l'accesso Telnet agli utenti si dovrà impartire il seguente comando dopo avere assunto l'identità dell'utente root:
#
usermod -s /bin/false nome_utente
[Invio]
In questo modo l'utente non potrà più fare il login.
Allo stesso modo, si potrà impostare la shell dell'utente cui si vuole negare l'accesso Telnet mediante la modifica del file /etc/passwd
sostituendo la shell con /bin/false.
695.2.2) Come si può impedire l'accesso tramite FTP ad alcuni utenti?
Nel file /etc/ftpusers
sono elencati gli utenti che non possono accedere al servizio FTP.
695.2.3) Dopo essersi connessi ad un sistema remoto, come si fa a mantenere attivo un comando FTP una volta disconnessi dal sistema stesso?
Dopo essersi collegati al server FTP, si potrà interrompere l'operazione che si sta effettuando mediante la combinazione di tasti [Ctrl z]. Questa combinazione provoca l'interruzione del processo. Occorre quindi riattivarlo ma sarà neccessario inviarlo sullo sfondo (background). A questo punto sarà possibile scollegarsi dal server FTP mediante il comando exit.
695.2.4) Come si può realizzare un comando che invii ogni minuto un file via FTP?
Ecco uno script adatto a questo scopo:
|
Occorre definire le variabili nella parte superiore dello script con i valori desiderati. Non si deve dimenticare di fornire i permessi di esecuzione allo script e di inserirlo nelle pianificazioni di lavoro ( crontab) dell'utente desiderato. Ad esempio il comando:
$
crontab -e tizio
[Invio]
aprirà per la modifica il file di configurazione della pianificazione dei lavori dell'utente tizio. Ammettendo che lo script di nome invia_file
sia stato copiato nella directory /bin/
, la riga da inserire sarà
|
695.2.5) Come si concede il permesso di caricare file durante una sessione FTP?
Per permettere ad un utente di poter caricare (upload) un file in una directory del server FTP, si deve creare una directory con il permesso di scrittura abilitato. Occorre inoltre ricordare che il proprietario di tale directory deve essere ftp.
695.2.6) Descrizione di uno script che permette di automatizzare diverse operazioni FTP.
Automatizzare comandi FTP risulta possibile mediante script. Se ad esempio si volessero automatizzare questi comandi:
scaricare nella directory da cui lo script viene lanciato tutti i file contenuti in una directory remota;
copiare questi file in una directory remota di un altro server FTP.
si dovrà utilizzare uno script simile al seguente:
|
L'opzione -n evita il procedimento di auto-login(8) mentre l'opzione -i disattiva la modalità interattiva consentendo la possibilità di trasferire più file(9).
695.3.1) Come si può visualizzare cosa digita un utente collegato in Telnet?
Per vedere cosa digita un utente in una shell Bash, bisogna innanzitutto individuare il PID della shell Bash; a questo punto è possibile impartire questo comando:
$
strace -p numero_pid -etrace=read
[Invio](10)
L'output può risultare inizialmente caotico. Se nella shell che si sta analizzando è stato digitato il comando ls, strace restituirà quanto segue:
read(0, "l", 1) =1 read(0, "s", 1) =1 read(0, "\r", 1) =1 --- SIGCHLD (Child exited) --- |
695.3.2) Si può permettere l'accesso Telnet al proprio sistema anche mediante un'altra porta?
Per far sì che il demone telnetd resti in ascolto su un'altra porta mantenendo attiva anche quella predefinita, si devono operare alcune modifiche. Telnet viene predisposto attraverso la combinazione di 2 file: /etc/inetd.conf
e /etc/services
.
Per il Telnet sulla porta 23, che è la porta predefinita, si riscontreranno queste impostazioni nel file services
:
|
e queste altre nel file inetd.conf
:
|
Sarà quindi necessario modificare esclusivamente il file services
aggiungendo:
|
se si desidera che telnetd accetti le richieste di Telnet sulla porta 8888.
A questo punto occorrerà riavviare il demone inetd per costringerlo a rileggere i file di configurazione.
#
killall -HUP inetd
[Invio]
Si potrà ora digitare sul client:
$
telnet indirizzo 8888
[Invio]
695.3.3) Si può accedere ad una macchina solo da un terminale remoto?
Anche se sarebbe consigliato mantenere almeno una possibilità di accedere localmente al sistema in oggetto, per ottenere un accesso esclusivamente in remoto al sistema si dovrà modificare il file /etc/inittab
commentando (apponendo un # all'inizio delle righe) le righe:
|
695.3.4) Ci si può collegare attraverso Telnet a una macchina remota accedendo come utente root?
Se si è ben coscienti di ciò che si sta facendo e dei rischi che si corrono, si deve rimuovere il file /etc/securetty
. Se non si ha una reale necessità di questa operazione, conviene creare un utente ed accedere al sistema da quello acquisendo i privilegi dell'utente root con:
$
su -
[Invio]
695.3.5) C'è un'alternativa più sicura a Telnet?
In una grande percentuale di casi, non si utilizza più Telnet ma SSH (Secure Shell). Se si deve fornire la possibilità di accesso, andrà installato il demone sshd sulla macchina server. Per accedere invece da remoto ad un server SSH, si dovrà installare il client SSH. Per collegarsi in SSH al server server_remoto si dovrà impartire il seguente comando:
$
ssh -l utente server_remoto
[Invio]
Il pacchetto SSH di una distribuzione Debian GNU/Linux si trova nella sezione non-US (nei CD-ROM o presso gli appositi server come ad esempio <ftp://ftp.non-us.debian.org/debian/dists/stable/>).
Si ricorda che esiste anche un client per MS-Windows, chiamato putty reperibile presso <http://www.chiark.greenend.org.uk/~sgtatham/putty/>.
695.3.6) Perché alcuni servizi di rete (Telnet, FTP, ecc.) sono molto lenti?
Qualora all'interno di una rete casalinga, i servizi di rete (Telnet, FTP, ecc.) risultino lenti, si può provare ad inserire nel file /etc/hosts
della macchina da cui ci si collega, una riga indicante l'IP ed il nome della macchina cui ci si vuole collegare. Ad esempio:
|
In genere il rallentamento di questi servizi avvengono perché il server cui ci si collega tenta per un po' di autentificare la macchina richiedente.
695.3.7) Si possono automatizzare dei comandi da eseguire su un sistema remoto cui si abbia accesso attraverso Telnet?
Il seguente script apre una sessione Telnet, esegue dei comandi associati allo script stesso e infine e chiude la sessione:
|
Si noti la presenza dell'opzione -h di send: essa, a causa del buffer di lettura di login, fa in modo che l'invio dei caratteri avvenga a velocità umana, secondo quanto impostato nella variabile send_human. A volte si utilizza direttamente l'opzione -s (send slow).
Per maggiori informazioni sulle opzioni di send, si dovrà consultare la relativa pagina di manuale expect(1).
Un altro esempio di script, che in questo caso utilizza un ciclo while è il seguente:
|
695.3.8) Come funziona la registrazione degli accessi avvenuti tramite Telnet alle macchine?
Se si esegue una connessione Telnet ad una macchina, ed è attivo il demone syslog essa viene registrata nel file /var/log/daemon.log
con una riga simile alla seguente:
|
La registrazione avviene perché nel file /etc/syslog.conf
esiste una riga che determina la registrazione di tutti gli eventi dei demoni del sistema nel file /var/log/daemon.log
:
|
695.3.9) Come si impedisce l'accesso al sistema tramite Telnet?
Per evitare gli accessi al sistema occorre modificare i file /etc/hosts.allow
e /etc/hosts.deny
. Di questi due file viene letto prima il primo e poi il secondo. La politica predefinita consiste nel negare qualsiasi accesso:
|
in /etc/host.deny
. I nodi autorizzati sono indicati invece nel file /etc/host.allow
:
|
La prima regola concede l'accesso ai nodi del dominio locale e ai membri della rete some_netgroup. La seconda regola permette l'accesso da parte di tutti i nodi del dominio foobar_edu tranne che per il dominio terminalserver_foobar_edu.
695.4.1) Come si copiano i file con SSH?
Per copiare tutti i file della directory corrente in una directory che si trova su una macchina remota accessibile via SSH si deve impartire il comando:
$
scp * utente@server:/ directory/destinazione/
[Invio](11)
695.4.2) Come si copiano intere porzioni di file system (directory) con SSH?
Per copiare una directory e le eventuali directory in essa contenute si deve utilizzare il comando scp:
#
scp -r directory utente@server:/ directory/destinazione/
[Invio](12)
Per copiare ad esempio la directory /home/utente/prova
all'interno della directory /tmp/
della macchina fulmine1 si da il comando:
#
scp -r /home/utente/prova/ tizio@fulmine1:/tmp/
[Invio]
dove «tizio» è il nome dell'utente della macchina fulmine1.
695.5.1) Cosa è e a cosa serve il CVS?
Il CVS (Concurrent Version System) è un sistema che serve a tener traccia delle versioni di uno o più file. Il CVS permette di poter lavorare in gruppo su un unico progetto evitando di sovrascrivere il lavoro degli altri ed evitando di creare conflitti. È possibile inoltre tener traccia delle modifiche di un file al fine di recuperare vecchie versioni o allo scopo di visualizzarne l'evoluzione nel corso del tempo. Tramite questo sistema è anche possibile dividere le strade di un progetto per poterle eventualmente un giorno ricongiungerle.
695.5.2) Su cosa si basa il funzionamento del CVS?
Il CVS si basa su un repository (una porzione di file system su un server) sui cui i client invocano dei comandi. Il repository non è altro che un deposito comune del progetto da cui si prelevano i dati aggiornati e cui si inviano le modifiche.
La macchina server può avere uno o più repository. Se infatti ci sono più progetti ogni progetto avrà il suo repository. Non si lavora direttamente sui file di un repository: si deve creare una copia locale sulla nostra macchina dei file del nostro progetto. Una volta fatta questa operazione in buona sostanza le operazioni che andranno effettuate saranno:
ricevere gli aggiornamenti delle propria copia locale
Nelle sezioni seguenti vedremo come questo non sia sempre così immediato.
695.5.3) Come specificare dove risiede il repository: il metodo pserver ed il metodo ext.
Ogni volta che lavoriamo con il CVS, dobbiamo dichiarare dove risiede il repository, chi è l'utente che utilizziamo, e la metodica di accesso. Per quanto rigarda quest'ultima, si deve ricordare che esiste il metodo pserver ed il metodo ext. L'amministratore del sistema dove risiede il repository o in genere il responsabile del progetto cui si partecipa indicherà la metodica da utilizzare.
Il metodo pserver utilizza la seguente sintassi:
cvs -d :pserver:nomeutente@uri.server.cvs:/percorso/repository comando |
In pratica l'opzione -d serve ad indicare dove risiede il repository. In questo caso risiede sulla macchina (su cui si ha un'utenza nomeutente) uri.server.cvs nella directory /percorso/repository. La prima volta (e solamente in quella occasione), prima di dare i comandi CVS classici, si dovrà dare effettuare il login:
bigpaul@monique:[~]
\
\cvs -d :pserver:nomeutente@uri.server.cvs:/percorso/repository login
[Invio]
Questo comando provocherà la richiesta della password dell'utenza nomeutente sulla macchina uri.server.cvs. Questa operazione (login) andrà effettuata una sola volta dal momento che la password verrà memorizzata nel file ~/.cvspass
. Rimane sottinteso che il login dovrà essere ripetuto su un'altra macchina o in caso di cancellazione del file ~/.cvspass
. I comandi CVS dovranno essere sempre posti come indicato nella sintassi sopra esposta:
cvs -d :pserver:nomeutente@uri.server.cvs:/percorso/repository comando |
Nel metodo ext, si utilizza rsh o ssh per connettersi. Occorrerà infatti dichiarare la metodica utilizzata tramite il seguente comando:
bigpaul@monique:[~]
\
\CVS_RSH=ssh ; export CVS_RSH
[Invio]
I comandi saranno inviati con la stessa modalità del metodo pserver solo che verrà indicato ext al posto di pserver:
cvs -d :ext:nomeutente@uri.server.cvs:/percorso/repository comando |
695.5.4) Ma si deve obbligatoriamente indicare ad ogni comando la posizione del repository?
Se si utilizza solamente un repository è possibile specificarne l'indirizzo all'interno della variabile CVSROOT:
bigpaul@monique:[~]
\
\export CVSROOT=":ext:bigpaul@www.linuxfaq.it:/var/cvs"
[Invio]
In tal modo invece che dare il comando:
bigpaul@monique:[~]
\
\cvs -d :ext:bigpaul@www.linuxfaq.it:/var/cvs update
[Invio]
si potrà utilizzare:
bigpaul@monique:[~]
cvs update
[Invio]
695.5.5) Come si crea un nuovo progetto?
Se si ha intenzione di iniziare un nuovo progetto e di utilizzare il CVS per gestirlo, si dovranno importare i file iniziali nel repository. Per fare questo è necessario collocarsi all'interno della directory principale della struttura da importare. A questo punto si dovrà dare il seguente comando (dopo avere eventualmente esportato i valori della variavile CVSROOT):
bigpaul@monique:[~]
\
\cvs import -m "Creazione del progetto
\
\calcolatrice." calcolatrice jrandom start
[Invio]
Questo comando crea il progetto (repository) calcolatrice sulla macchina su cui gira il server CVS indicato nei parametri della variabile CVSROOT assegnando un messaggio iniziale a tale operazione.
695.5.6) Come si crea una copia locale?
Per poter partecipare allo sviluppo di un progetto che utilizza il CVS si deve creare una copia locale di tale progetto e si utilizza il comando checkout (o per abbreviazione co).(13):
bigpaul@monique:[~]
cvs co calcolatrice
[Invio]
cvs checkout: Updating calcolatrice U calcolatrice/calc.c U calclatrice/leggimi cvs checkout: Updating calcolatrice/temp U calcolatrice/temp/calc.c.old |
Questo comando creerà una copia locale del progetto calcolatrice tramite la creazione della directory calcolatrice
e di una sua sottodirectory.
Attenzione: non si può usare la directory utilizzata per la fase di import come copia locale. Si deve necessariamente creare una nuova copia locale per poter lavorare. |
695.5.7) Come si aggiorna una copia locale?
Per poter ricevere gli aggiornamenti delle modifiche che gli altri utenti hanno apportato al progetto si dovrà dare il comando update. A quel punto la copia locale sarà una copia esatta del repository. Il comando da invocare (dopo essersi posizionati nella directory radice della copia locale) è:
bigpaul@monique:[~]
cvs update
[Invio]
Questo comando produrrà qualcosa di simile:
cvs update: Updating . M calc.c cvs update: Updating temp |
Questo comando, oltra ad aggiornare la copia locale informerà l'utente che dall'ultima operazione di aggiornamento, il file calc.c
è stato modificato. Questa informazione la si ricava dal fatto che è presente la M vicino al file.
695.5.8) Perché il CVS non mi scarica le nuove directory?
Se siamo a conoscenza del fatto che è stata aggiunta al progetto una nuova directory ma che non riusciamo a ricevere tramite il comando update, dovremo ricordarci di aggiungere l'opzione -d(14):
bigpaul@monique:[~/PRJ/calcolatrice/]
cvs update -d
[Invio]
695.5.9) Come si ottiene un rapporto delle differenze tra la copia locale ed il repository?
Per poter visualizzare le differenze intercorrenti tra copia locale e repository si utilizza il comando diff:
bigpaul@monique:[~]
cvs diff
[Invio]
Questo comando produrrà qualcosa di simile:
cvs diff: Diffing . Index: calc.c ============================================== RCS file: /var/cvs/calcolatrice/calc.c,v retrieving revision 1.1.1.1 diff -r1.1.1.1 calc.c 2a3 > printf ("Calculate\n"); cvs diff: Diffing temp |
695.5.10) Come si inviano le modifiche effettuate ad una copia locale?
Per poter inviare le modifiche effettuate alla propria copia locale, si dovrà utilizzare il comando commit (o per abbreviazione ci):
bigpaul@monique:[~]
cvs commit -m "aggiunta la radice
\
\quadrata ed i logaritmi" calc.c
[Invio]
Checking in calc.c; /var/cvs/calcolatrice/calc.c,v <-- calc.c new revision: 1.2; previous revision: 1.1 done |
Tramite questo comando verrà aggiornato il repository del progetto. La versione 1.2 sarà infatti la più recente e tutti gli altri utenti dovranno aggiornare le rispettive copie locali.
695.5.11) Cosa succede se due utenti modificano una stessa parte di codice?
Ammettiamo che un file (esempio.txt
) di un progetto sia il seguente:
|
L'utente tizio e l'utente caio hanno entrambi una copia locale aggiornata. L'utente tizio decide di aggiornare il file modificandolo come segue:
|
L'utente tizio invia le modifiche (cvs commit). L'utente caio, ignaro del lavoro svolto da tizio, apporta invece queste modifiche:
|
All'atto del commit l'utente caio riceve una segnalazione di errore di conflitto per cui impartisce il comando di aggiornameto della propria copia locale:
bigpaul@monique:[~]
cvs update
[Invio]
Il comando genererà un messaggio simile al seguente:
RCS file: /var/cvs/prova/esempio.txt,v retrieving revision 1.12 retrieving revision 1.13 Merging differences between 1.12 and 1.13 into esempio.txt rcsmerge: warning: conflicts during merge cvs update: conflicts found in esempio.txt C esempio.txt |
Il file esempio.txt
assomiglierà a quanto segue:
|
L'utente caio si troverà a dover scegliere quali delle due porzioni di codice mantenere (o magari integrandole), per poi effettuare nuovamente il commit, risolvendo così il conflitto e creando la versione 1.14 del file:
bigpaul@monique:[~]
cvs commit -m "Versione aggiornata del
\
\file esempio.txt" esempio.txt
[Invio]
695.5.12) Come si cancella un file con il CVS?
Per poter cancellare un file da un progetto, si dovrà utilizzare il comando commit del CVS . Innanzitutto però, il file andrà rimosso in maniera convenzionale dalla directory di lavoro:
bigpaul@monique:[~/PRJ/calcolatrice]
rm calc.c.old
[Invio]
A questo punto pero' il file esiste ancora nel repository per cui si darà il seguente comando:
bigpaul@monique:[~/PRJ/calcolatrice]
cvs remove calc.c.old
[Invio]
Il comando genererà il seguente risultato:
cvs remove: scheduling 'calc.c.old' for removal cvs remove: use 'cvs commit' to remove this file permanently |
A questo punto si dovrà effettuare un commit:
bigpaul@monique:[~/PRJ/calcolatrice]
cvs ci -m "rimuovo il
\
\file calc.c.old perché inutilizzato"
[Invio]
Ecco il risultato:
Removing calc.c.old; /var/cvs/calcolatrice/calc.c.old,v <- calc.c.old new revision: delete; previous revision: 1.8 done |
A questo punto il file sarà stato rimosso dal repository e al prossimo aggiornamento gli altri utenti ne riceveranno notizia.
695.5.13) Come si cancella una directory con il CVS?
La cancellazione delle directory con il CVS è un po' particolare. Innanzitutto si dovranno cancellare tutti i file presenti nella directory in questione:
bigpaul@monique:[~/PRJ/calcolatrice/directory_da_cancellare]
\
\rm *
[Invio](15)
A questo punto dalla directory precedente a quella che si vuole cancellare si darà il comando:
bigpaul@monique:[~/PRJ/calcolatrice]
cvs update -P
[Invio]
L'opzione -p (prune) serve a ripulire la directory di lavoro dalle directory vuote.
695.5.14) Come si ripristina una versione precedente di un file con il CVS?
Per ripristinare una versione precedente di un file ci sono vari metodi. Il più semplice consiste nell'utilizzo dell'opzione -j(16). Questa opzione si utilizza davanti le due versioni del file (quella attuale e quella da modificare).
Attenzione: il comando di seguito elencato funziona tramite l'applicazione di patch (17). Risulta quindi molto importante l'ordine dei due file. |
bigpaul@monique:[~/PRJ/calcolatrice/]
\
\cvs update -j 1.9 -j 1.6 calc.c
[Invio]
RCS file: /var/cvs/calcolatrice/calc.c.,v retrieving revision 1.9 retrieving revision 1.6 Merging differences between 1.9 and 1.3 |
A questo punto si dovrà fare l'aggiornamento della copia locale. La cosa potrà sembrare strana ma in realtà , dopo il comando sopra esposto, il file presente nella nostra directory di lavoro contiene già la "vecchia versione" e infatti al comando:
bigpaul@monique:[~/PRJ/calcolatrice]
cvs update
[Invio]
Restituirà :
cvs update: Updating . M calc.c |
indicando che il file è stato modificato.(18) È quindi ora di inviare queste (in realtà false) modifiche al repository:
bigpaul@monique:[~/PRJ/calcolatrice]
\
\cvs ci -m "la nuova funzione è sbagliata.
\
\Ripartiamo dai contenuti della versione 1.6"
[Invio]
Checking in calc.c; /var/cvs/calcolatrice/calc.c.,v <-- calc.c new revision: 1.10; previous revision: 1.9 done |
Naturalmente la versione del file con i contenuti della versione 1.6 sarà la 1.10.
695.5.15) Come si ripristina la versione precedente di tutti i ifile di un determinato progetto?
È possibile ripristinare una versione precedente di un intero progetto. Questa evenienza può rendersi necessaria allorché un determinato sviluppo abbia portato ad un vicolo cieco, insomma alla necessità di ripartire da un determinato punto. Qualsiasi modifica vorrebbe dire perdere inevitabilmente tempo. Eventualmente potrebbe anche servire una versione funzionante di un programma che si sta sviluppando mentre il CVS sta gestendo gli ultimi aggiornamenti che rendono la versione inutilizzabile. Ecco allora che è utilie la funzione di istantanea (snapshot). Questa funzione permette di accedere ai contenuti di un progetto di una determinata data oppure precedentemente contrassegnati da un marcatore (tag).
Per ripristinare nella copia locale lo stato del progetto ad esempio del 19 settembre 2003, si dovrà impartire il seguente comando:
bigpaul@monique:[~/PRJ/calcolatrice/]
\
\cvs -q update -Q "2003-09-19"
[Invio]
esso restituirà :
U calc.c |
Attenzione: indicando semplicemente la data e non l'ora, si fa riferimento all'ora 00:00 del giorno indicato per cui ci si riferisce all'inizio del giorno. Se si vogliono ripristinare anche le versioni dei file modificati durante il giorno indicato occorrerà indicare anche l'ora: |
bigpaul@monique:[~/PRJ/calcolatrice]
\
\cvs -q update -Q "2003-09-19 23:59:59 GMT"
(19)[Invio]
Per quanto riguarda il ripristino di una versione del progetto precedentemente marcata con:
bigpaul@monique:[~/PRJ/calcolatrice]
\
\cvs -q tag Versione_Funzionante_19_09_2003
[Invio]
che restituirà :
T calc.c |
si dovrà invocare il comando:
bigpaul@monique:[~/PRJ/calcolatrice]
cvs update -r
\
\Versione_Funzionante_19_09_2003
(20)[Invio]
bigpaul@monique:[~/PRJ/calcolatrice]
cvs -q update -A
[Invio]
A questo punto è possibile inviare le modifiche che assumeranno l'ultimo numero di versione non contenendo nessun riferimento al passato.
695.5.16) Come si crea un ramo di sviluppo branch?
È possibile creare un ramo di sviluppo parallelo di un progetto. Questa necessità si ha quando ad esempio si vuole risolvere un malfunzionamento partendo da una versione passata ma lasciando nel repository i file di versione più recente. Per far questo si può aggiornare la copia locale con i contenuti di una versione passata:
bigpaul@monique:[~/PRJ/calcolatrice/]
cvs update -r Versione_Funzionante_19_09_2003
[Invio]
o meglio creare una nuova directory di lavoro:
bigpaul@monique:[~/PRJ/calcolatrice/]
cvs -q checkout -d ramo_parallelo -r Versione_Funzionante_19_09_2003
[Invio]
esso restituirà :
U ramo_parallelo/calc.c |
A questo punto si dovrà marcare come branch:
bigpaul@monique:[~/PRJ/calcolatrice/]
cd ramo_parallelo
[Invio]
bigpaul@monique:[~/PRJ/calcolatrice/ramo_parallelo/]
\
\cvs -q tag -b Versione_del_19_09_2003_da correggere
[Invio]
esso restituirà :
T calc.c |
Dopo aver modificato il sorgente ed aver inviato (commit) gli aggiornamenti arriverà il momento di volere fondere (merge) il lavoro svolto con il ramo principale. Si dovrà eleminare i riferimenti temporali e di versione (rimuovere le sticky properties) e applicare le differenze al ramo principale. Si darà infatti inizialmente il comando:
bigpaul@monique:[~/PRJ/calcolatrice/ramo_parallelo/]
\
\cvs -q update -d -A
[Invio]
e poi:
bigpaul@monique:[~/PRJ/calcolatrice/ramo_parallelo/]
\
\cvs -q diff -c -r Versione_del_19_09_2003_da correggere
[Invio]
visualizzate le differenze le si applicheranno con l'aggiornamento (update):
bigpaul@monique:[~/PRJ/calcolatrice/ramo_parallelo/]
\
\cvs -q update -d -j Versione_del_19_09_2003_da correggere
[Invio]
per poi inviarle(21) definitivamente:
bigpaul@monique:[~/PRJ/calcolatrice/ramo_parallelo/]
\
\cvs -q ci -m "fusione del ramo parallelo sul
\
\troncone principale"
[Invio]
Con la risoluzione degli eventuali conflitti occorsi, si pone termine all'operazione di fusione di un ramo parallelo di sviluppo sul troncone principale di sviluppo.
695.5.17) Ha senso trattare un file binario con il CVS?
Può sembrare inutile e potenzialmente dannoso utilizzare il CVS per gestire file come immagini o eseguibili. Non essendo file testuali, risulterebbe difficile poterne gestire le differenze. Ma spesso un progetto si compone anche di tali file. Per ovviare al problema si dovrà utilizzare l'opzione -kb(22):
bigpaul@monique:[~/PRJ/calcolatrice/]
cvs add -kb calc.jpg
[Invio]
695.6.1) Perché non riesco a montare i file system delle macchine di una rete locale?
Qualora venga visualizzato un messaggio di errore simile a mount: RPC: Program not registerd e risulti impossibile condividere le directory all'interno della propria rete, occorre assicurarsi che /sbin/rpc.portmap
, /usr/sbin/rpc.mountd
e /usr/sbin/rpc.nfsd
vengano avviati all'avvio del sistema(23).
Qualora i suddetti script non siano stati avviati automaticamente si tenti di avviarli manualmente riprovando le operazioni di condivisione. Si deve ricordare infine che le directory da condividere vanno definite in /etc/exports
. exports(5)
695.6.2) Come si fa ad utilizzare un'applicazione grafica (che giri sotto il server X) presente su una macchina della rete cui è collegata la propria macchina?
Se macchina_a è la macchina su cui si sta lavorando e macchina_b è la macchina cui ci si collega e che contiene l'applicazione che vogliamo visualizzare sulla macchina_a si deve precedere nel modo seguente. Innanzitutto su macchina_a si deve concedere l'autorizzazione alle richieste del client di macchina_b:
macchina_a:~$
xhost +macchina_b
[Invio]
Fatto ciò, dalla macchina_a occorre collegarsi in telnet alla macchina_b:
macchina_a:~$
telnet macchina_b
[Invio]
Dopo avere effettuato il login, occorrerà dare il comando:
macchina_b:~$
export DISPLAY=macchina_a:0
[Invio](24)
Oppure:
macchina_b:~$
setenv DISPLAY macchina_a:0
[Invio](25)
Ciò serve ad esportare la variabile DISPLAY verso l'elaboratore macchina_a.
A questo punto lanciando l'applicazione grafica dalla macchina_b, la si vedrà sul monitor della macchina_a.
695.6.3) Come si può utilizzare il display di un utente su quello di un altro?
Se lavorando all'interno di un ambiente grafico (X), si volesse mediante un terminale grafico assumere l'identità di un altro utente e lanciare dal terminale stesso un'applicazione grafica, verrà restituito un errore del tipo:
|
Per potere quindi essere in grado di lanciare applicazioni grafiche in qualità di altro utente, si dovrà dare il comando:
$
xhost +localhost
[Invio](26)
In seguito, dopo avere assunto l'identità dell'utente desiderato, si dovrà impartire il comando:
$
export DISPLAY=localhost:0.0
[Invio](27)
oppure:
#
setenv DISPLAY localhost:0.0
[Invio](28)
allo scopo di reindirizzare il display del'utente di cui si è assunta l'identità verso il server grafico dell'utente originario. Questo procedimento è identico a quello descritto nella LDR 695.6.2 solo che in quel caso si trattava di due macchine collegate e non di due utenti sulla stessa macchina.
695.6.4) Come si copiano i file tra le macchine di una rete locale?
Per copiare i file da una macchina all'altra in rete si possono utilizzare i comandi r. Questi comandi permettono di utilizzare shell e comandi in remoto.
Occorre creare nella directory principale (/
) delle due macchine (o nella directory $HOME
dell'utente) il file .rhosts
, nel quale dovranno essere elencati i sistemi al quale si permette l'accesso e gli utenti abilitati a farlo. Se si volesse consentire l'accesso a tutti basterà impartire il seguente comando:
#
echo "+ +" > .rhosts
[Invio]
su entrambe le macchine.
A questo sarà possibile impartire il seguente comando:
#
rlogin macchina_remota
[Invio]
per poter accedere all'altra macchina senza richiesta di login e password. Sarà inoltre possibile copiare file da una macchina all'altra senza FTP mediante il comando rcp:
#
rcp macchina_remota:/percorso /* .
[Invio]
Questo comando copierà tutti i file presenti nella directory remota indicata in percorso nella directory corrente.
#
rcp * macchina_remota:/percorso
[Invio]
Questo comando copierà invece tutti i file presenti nella directory corrente nella directory remota indicata in percorso.
695.7.1) Come si possono simulare dei terminali sulla propria macchina?
Si possono simulare fino a 6 console virtuali attraverso la combinazione [Alt Fn] dove n è un numero che va da 1 a 6. Questi terminali virtuali sono impostati nel file /etc/inittab
:
|
Essi possono essere sia rimossi che aggiunti, eliminando o aggiungendo le righe atte a definirli.
695.7.2)
terminal type not supported
Se durante un collegamento Telnet alcuni programmi mostrano un messaggio del tipo: terminal type not supported, occorre modificare il contenuto della variabile TERM:
Sulla console remota si darà quindi il comando:
#
export TERM=vt100
[Invio](29)
Oppure:
#
setenv TERM vt100
[Invio](30)
Oppure:
#
export TERM=ansi
[Invio](31)
Oppure:
#
$ setenv TERM ansi
[Invio](32)
695.8.1) Perché il mio navigatore non interpreta affatto i tag (marcatori) HTML dei file presenti nel mio server?
Qualora i file .html
inseriti nell'albero delle directory del proprio server web, non vengano interpretati correttamente e vengano visualizzati come file testuali, si dovrà modificare il file /etc/mime.types
. Probabilmente sarà presente una riga in cui è specificato il formato .htm
. Basterà aggiungere un'altra riga identica sostituendo .htm
con .html
.
695.8.2) Come vengono gestite le variabili tra due pagine PHP?
Se in un form viene definita una variabile, ad esempio prova nella pagina PHP che il form richiama, tale variabile sarà identificata apponendo $ davanti la variabile. ($prova)
695.8.3) Come si configura il server Apache per gestire le pagine scritte in PHP?
Per configurare Apache per fare in modo che gestisca pagine PHP, è necessario far caricare ad Apache i moduli relativi a PHP. I file /etc/httpd/conf/httpd.conf
(33) e /etc/httpd/conf/srm.conf
(34) sono i file di configurazione che vanno modificati. A volte essi contengono le linee necessarie (di solito sono commentate: basta eliminare il carattere # presente all'inizio delle righe che devono essere «attivate».):
In httpd.conf
sono due i punti da modificare, entrambi nella sezione Dynamic Shared Object(DSO) Support:
Nella parte relativa al caricamento dei moduli, in «extra modules», vanno aggiunte (o vanno tolti i commenti se già esistono) le righe seguenti:
|
Nella parte di aggiunta dei moduli (dopo la riga «ClearModuleList»), sempre in «extra modules», vanno aggiunte (o vanno tolti i commenti se già esistono) le righe seguenti:
|
All'interno del file srm.conf
, vanno aggiunte (o vanno tolti i commenti se già esistono) le righe seguenti, che permettono di associare PHP ai file con estensione .php3
:
|
Per rendere effettive le modifiche, si deve riavviare Apache:
#
apache restart
[Invio]
695.8.4) Come si configura il server Apache per gestire le pagine scritte in ASP?
Per fare in modo che Apache utilizzi l'ASP, si devono installare e configurare le opportune librerie:
libapache-asp-perl(35)
695.8.5) Esiste un modo per convertire le pagine scritte in ASP in PHP?
Per convertire gli script ASP in PHP, si può utilizzare asp2php (<http://home.i1.net/~naken/asp2php/>).
695.8.6) Come si fa a proteggere alcune pagine HTML da una password?
Per permettere l'accesso ad alcune pagine HTML solo a chi ha la password occorre inserire le seguenti direttive nel file /etc/apache/access.conf
:(36)
|
695.9.1) Quale password deve essere inserita se si accede attraverso Samba da una macchina MS-Windows a una GNU/Linux?
Qualora, interrogando la rete da Risorse di Rete di MS-Windows, si tenti di accedere ad una macchina GNU/Linux ricevendo la richiesta della password, si dovranno apportare alcune modifiche. Innanzitutto, nella sezione global di smb.conf
, dovrà essere inserita la seguente riga:
|
Bisogna comunque tenere presenti alcuni punti importanti. Innanzitutto dalle ultime versioni di MS-Windows 95 in poi le password risultano essere criptate. A questo punto ci sono due soluzioni:
Abilitare la criptazione delle password in Samba. Questo si può fare modificando il file /etc/smb.conf
e utilizzando smbpasswd per creare le password per ogni utente che andranno inserite in un file che deve a sua volta essere indicato all'interno di /etc/smb.conf
;
modificare i registri di MS-Windows con regedit, in questo modo:
Trovare la chiave /HKEY_LOCAL_MACHINE/System/ CurrentControlSet/Services/VxD/VNETSUP;
selezionare Modifica/Nuovo/Valore DWORD;
rinominare l'etichetta da Nuovo Valore #1 a EnablePlainTextPassword;
premere [Invio] sopra la voce e inserire il numero 1 nella finestra che si apre.
Si può in ogni caso utilizzare anche il file Win98_PlainPassword.reg
presente nel pacchetto Samba.
695.9.2)
Qual è un esempio di smb.conf
ben configurato?
Il seguente file smb.conf
imposta la condivisione delle directory /home/utente/
, /tmp/
e /publicfiles/
e della stampante lp.
|
695.9.3) Come si ricevono i messaggi di WinPopUp con LinPopUp?
Per ricevere i messaggi di WinPopUp con LinPopUp, è necessario, dopo aver installato Samba e LinPopUp inserire in /etc/smb.conf
nella sezione [global] le seguenti righe:
|
Occorre ricordarsi ovviamente di modificare opportunamente il percorso di LinPopUp.
695.9.4) Perché non si vedono le icone delle macchine GNU/Linux in Risorse di Rete di MS-Windows?
Qualora non si vedano le icone delle macchine GNU/Linux connesse alla macchina MS-Windows in Risorse di Rete, occorre mettere la seguente riga nella sezione [global] del file /etc/smb.conf
:
|
Ad esempio:
|
695.9.5) Come si copiano i file tra una macchina GNU/Linux e una MS-Windows collegate attraverso Samba?
Per poter copiare file da una macchina MS-Windows ad una GNU/Linux, è possibile accedere a quest'ultima mediante Risorse di Rete o attraverso il protocollo FTP. Per poter invece copiare file da una macchina GNU/Linux a una MS-Windows, si dovrà procedere a montare le directory condivise mediante smbmount:
#
smbmount //macchina_MS-Windows/directory /punto_di_montaggio
[Invio]
695.9.6) Come si fa a stampare da una macchina GNU/Linux collegata ad una rete MS-Windows tramite Samba?
Per stampare un file da una macchina GNU/Linux collegata ad una macchina MS-Windows mediante Samba, occorrerà dare un comando simile al seguente:
$
cat file | nome_filtro | smbclient "\\\\SERVER\\STAMPANTE"
\
\PASSWORD -U UTENTE -P -c 'print -'
[Invio]
695.9.7) Se ci si collega da una macchina MS-Windows ad una GNU/Linux, vorrei che venisse chiesta la password solo per le directory degli utenti e non per la directory indicata in [public]. Come si fa?
Ecco un esempio di smb.conf
adatto a questo scopo:
|
695.9.8)
Come si deve configurare il file smb.conf
per dare un nome mediante il name server NetBIOS alla macchina Linux collegata ad una rete servita da un server DHCP?
Per ottenere questo risultato, occorre aggiungere alla sezione global di /etc/smb.conf
la seguente riga:
|
dove nome è il nome della macchina NetBIOS.
695.10.1) Come si imposta il MTU (Max Transfer Unit ) di una connessione tramite protocollo PLIP?
Occorre definirlo al momento della dichiarazione dell'interfaccia mediante ifconfig:
#
ifconfig plip0 mtu 512 10.0.0.1 pointopoint 20.0.0.2 up
[Invio]
695.11.1) Esiste un programma che faciliti la connessione al provider in una distribuzione GNU/Linux Debian?
Debian GNU/Linux è una distribuzione generalmente accompagnata da pppconfig(37) che è un programma di utilità interattivo creato appunto con lo scopo di stabilire una connessione al proprio provider.
695.11.2) Come si può verificare se nel sistema è stato installato il protocollo PPP?
Per verificare se il protocollo PPP è stato caricato nel sistema, si procede con i seguenti comandi:
#
cat /usr/include/linux/autoconf.h | grep PPP
[Invio]
o con:
#
lsmod | grep ppp
[Invio]
per verificare se è compilato come modulo o se è stato incluso all'interno dell'immagine del kernel.
Qualora i sopra indicati comandi non restituiscano nulla relativo al protocollo PPP, allora si dovrà procedere alla ricompilazione del kernel includendone il supporto o in modalità monolitica o in modalità modulare.
695.11.3) Come si possono visualizzare in tempo reale i processi di connessione al provider?
Impartendo il comando ifconfig dopo avere avviato la connessione ad Internet permetterà di sapere se è stata attivata l'interfaccia di rete ppp.
Qualora infatti la connessione avesse avuto successo, con il comando ifconfig si vedrà visualizzata, oltre alla interfaccia di loopback lo (e eventualmente quella o quelle di rete, eth0 ad esempio) l'interfaccia ppp:
|
Un metodo più comodo è sicuramente quello di vedere in tempo reale gli aggiornamenti del file /var/log/messages
. Questo può essere fatto con:
#
tail -d /var/log/messages
[Invio]
Potrebbe risultare utile inserire tale comando in uno script. Ad es.:
|
695.11.4)
pppd: The remote system is required to authenticate itself but...
Qualora, nel corso di un tentativo di connessione, si riscontri questo tipo di errore: «pppd: The remote system is required to authenticate itself but I couldn't find any secret (password) which would let it use an IP address.» occorrerà mettere la riga noauth nel file /etc/ppp/options
, per risolvere il problema.
695.11.5) Si possono ottenere dei dati sulla connessione ad Internet?
Per poter visualizzare alcuni dati concernenti una connessione PPP si utilizza il comando pppstat.
695.11.6) Perché durante l'avvio di kppp ( KDE 2.x) viene visualizzato un errore relativo al timeout?
Occorre verificare i seguenti punti per risolvere il problema:
controllare se è presente il collegamento simbolico del modem a /dev/modem
;
eliminare o commentare la riga lock presente nel file /etc/ppp/options
;
impostare il timeout a 50-60 secondi nella scheda Modem del kppp;
tentare di diminuire la velocità di connessione.
695.11.7) Perché kppp (KDE 2.x ) non riesce a creare il file di lock?
Il file di blocco (lock) ha lo scopo di permettere un utilizzo esclusivo di una determinata risorsa. In pratica, in questo caso, serve per impedire agli altri utenti di utilizzare il modem visto che adesso è impegnato da un altro utente.
Se si vuole disabilitare questa opzione, la si deve deselezionare in kppp oppure si deve commentare(38) l'apposita riga (lock) presente nel file /etc/ppp/option
.
695.11.8) Perché lanciando da utente kppp (KDE 2.x), viene chiesta la password di root?
In genere questo accade perché il file kppp
presente in /usr/bin
è un collegamento simbolico al programma consolehelper che impedisce l'esecuzione diretta del programma in questione (kppp in questo caso) se non avviene l'autenticazione (mediante la password) di un determinato utente (quasi sempre root).
Per ovviare a questo problema occorre aprire il programma di modifica del menù e cambiare il nome dell'eseguibile in kppp.kdelnk
da «kppp» a «/usr/sbin/kppp». Analogamente si può eliminare kppp in /usr/bin
e ricrearlo facendolo puntare a /usr/sbin/kppp
. Fatto questo basta impostare il bit del set user ID (in qualità di utente root) a /usr/sbin/kppp
e i corretti permessi di esecuzione dello stesso file.
695.11.9) Come può un utente qualsiasi utilizzare kppp (KDE 2.x)?
Dopo aver letto la LDR 695.11.8, e aver provato con le indicazioni in essa presenti, si dovrà modificare il file kppp
presente in /etc/security/console.apps/
. La riga:
|
andrà modificata in:
|
In seguito occorre impostare il bit del set user ID (in qualità di utente root) del file kppp
presente in /usr/bin/
:
#
chmod u+s kppp
[Invio]
695.11.10) Come si visualizza il proprio indirizzo IP?
Per visualizzare l'indirizzo IP della propria macchina si deve utilizzare il comando ifconfig:
#
ifconfig
[Invio]
L'indirizzo IP è il numero che segue inet addr nell'interfaccia ppp.
695.11.11) Si può estrapolare solamente l'indirizzo IP da ifconfig?
Il comando da utilizzare è il seguente:
#
/sbin/ifconfig | head -9 | tail -1 | cut -d\ -f12 | cut -d\: -f2
[Invio]
ma occorre accertarsi che, impartendo il comando ifconfig, l'interfaccia ppp sia la seconda in ordine di apparizione. In caso non fosse così si deve adattare questo comando alle proprie esigenze. Se infatti è presente una scheda di rete (che pone l'interfaccia ppp in «terza» posizione) al posto di «head -9» si deve mettere «head -17» e così via aggiungendo 8 per ogni dispositivo di rete che precede l'interfaccia ppp.
695.11.12) Come si ottengono gli indirizzi DNS dei provider?
Per risalire ai DNS dei provider, si deve utilizzare il comando nslookup:
#
nslookup
[Invio]
>
server dns2.nic.it
[Invio]
>
set query=any
[Invio]
>
pluto.linux.it
[Invio]
Con questi comandi si otterrà una risposta simile alla seguente:
|
Indicando invece geocities.com:
>
geocities.com
[Invio]
si otterrà:
|
Lo stesso discorso vale per tiscalinet.it:
>
tiscalinet.it
[Invio]
che restituirà:
|
In ogni caso lo stesso risultato si può ottenere con il comando host e il comando ping:
#
host -t ns provider
[Invio]
Ad esempio se si volessero sapere i DNS di flashnet.it, si darà il comando:
[bigpaul@linuxfaq.it]:[Fri May 5]:[22:25:41]:[~]:
\
\host -t ns flashnet.it
[Invio]
Che restituirà il seguente risultato:
flashnet.it NS dns2.flashnet.it flashnet.it NS dns.flashnet.it |
Ora, con il comando ping, si sarà in grado di ottenere gli indirizzi desiderati:
[bigpaul@linuxfaq.it]:[Fri May 5]:[22:25:41]:[~]:
\
\ping dns2.flashnet.it
[Invio]
PING dns2.flashnet.it (194.247.160.8): 56 data bytes 64 bytes from 194.247.160.8: icmp_seq=0 ttl=252 time=178.5 ms --- dns2.flashnet.it ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 150.0/163.7/178.5 ms |
[bigpaul@linuxfaq.it]:[Fri May 5]:[22:25:41]:[~]:
\
\ping dns.flashnet.it
[Invio]
PING dns.flashnet.it (194.247.160.1): 56 data bytes 64 bytes from 194.247.160.1: icmp_seq=0 ttl=252 time=165.5 ms --- dns.flashnet.it ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 150.0/157.7/165.5 ms |
695.11.13)
Se ci si connette ad Internet con più di un provider, occorre cambiare ogni volta gli indirizzi DNS nel file /etc/resolv.conf
?
Se si volesse accedere ad Internet, con più provider, non sarà necessario cambiare ogni volta il contenuto del file /etc/resolv.conf
ma basterà lasciare gli indirizzi DNS di un provider che sembrano più veloci e affidabili. Le richieste generalmente sono permesse a tutte le macchine, non ha importanza quindi il provider con cui si è collegati.
695.11.14) Cosa si deve fare se il provider assegna automaticamente gli indirizzi DNS?
Se le connessioni ad Internet avvengono mediante provider, che assegnano automaticamente i DNS agli utenti, occorrerà utilizzare l'opzione «usepeerdns» di pppd. Utilizzando questo metodo non sarà possibile dichiarare i DNS delle macchine che non hanno il modem e che sfruttano, attraverso una rete, il collegamento della macchina che lo ha. In ogni caso, bisogna ricordare però, che è sempre possibile leggere gli indirizzi DNS di questi provider dal file di log delle connessioni che in genere è /var/log/messages
.
695.11.15) Perché pur essendo connessi a Internet il navigatore non riesce a connettersi ai siti?
Occorre ricordare che si devono indicare gli indirizzi DNS del provider cui ci si connette nel file /etc/resolv.conf
. Questi indirizzi servono per tradurre gli indirizzi mnemonici in indirizzi IP numerici. Presumibilmente infatti se si inserissero nel navigatore gli indirizzi numerici, si avrebbe esito positivo. Il file /etc/resolv.conf
è costituito da una o più righe del tipo:
|
dove indirizzo è l'indirizzo DNS del provider.
Questo messaggio di errore, viene visualizzato qualora si ometta la stringa di inizializzazione per linee italiane: X3. Se infatti si era tentato il collegamento con:
|
si dovrà eseguire invece:
|
695.11.17) Come si possono automatizzare alcune operazioni da effettuare durante la connessione ad Internet?
Si prenda come esempio uno script che possa effettuare rispettivamente:
Lo script sarà simile al seguente:
|
695.11.18) Come ci si connette ad Internet con gli script?
La connessione tramite script è il metodo più classico per connettersi ad un provider Internet. Molti programmi di utilità che facilitano la connessione non fanno altro che andare a scrivere degli script.
In GNU/Linux si utilizzano due programmi essenzialmente: chat che invia i comandi al modem e pppd il demone che instaura il dialogo secondo il protocollo PPP con il server del provider.
I file che vanno modificati sono sostanzialmente 5:
/etc/ppp/pap-secrets
/etc/resolv.conf
/etc/host.conf
/bin/ispup
/bin/ispdown
Innanzitutto si dovrà inserire il nome utente e la password, nel primo di questi file, in questo modo:
|
In seguito si dovrà modificare il secondo file, che indica al sistema gli indirizzi DNS da utilizzare durante la connessione:
|
dove ovviamente dovremo inserire i dati del provider.
Bisogna poi comunicare al sistema in che modo essa debba risolvere i nomi dei computer nella rete Per fare questo bisogna modificare /etc/host.conf
.
|
Fatto ciò si dovranno realizzare i veri e propri script di connessione, cioè quelli da invocare per effettuare la connessione.
Lo script per la connessione sarà simile al seguente(39):
|
Il seguente script servirà invece per disconnettersi:
|
Per effettuare la connessione, a questo punto, occorrerà digitare al prompt:
$
ispup &
[Invio](40)
Si dovrà digitare invece:
$
ispdown
[Invio]
per terminare la connessione.
695.11.19) Esempio degli script per la connessione ad un provider
Ecco uno script da lanciare per effettuare la connessione ad Internet (41):
|
Il file /etc/ppp/resolv.conf
conterrà i seguenti dati:
|
Il file /etc/ppp/options
conterrà le seguenti righe:
|
Il file /etc/ppp/dialup
conterrà invece:
|
Il file etc/ppp/pap-secrets
conterrà il nome dell'utente e la password:
|
695.11.20) Perché in Red Hat viene composto due volte il numero telefonico del provider?
La causa di questo problema è un baco (bug). Presso il sito di Red Hat (<http://www.redhat.com>) è disponibile la versione corretta.
695.11.21) Perché utilizzando ppp per il collegamento ad Internet, compare una casella di dialogo che avverte che il demone pppd non è installato con il set user ID? Che vuol dire?
Normalmente l'uso del ppp è riservato all'utente root. Per permetterne l'uso anche agli altri utenti, si fa in modo che quando questo viene eseguito, il sistema pensi che sia root a farlo. Per fare ciò, esiste un bit speciale da attivare (il bit del set user ID). Questo bit si attiva mediante il comando:
#
cd /usr/sbin
[Invio]
#
chmod u+s pppd
[Invio]
695.11.22) Perché il collegamento ad Internet con diald fallisce per problemi di autentificazione?
Occorre comunicare al sistema l'utente che si connette. Innanzitutto occorre inserire nel file /etc/ppp/pap-secret
il nome dell'utente e la password. Dopo aver fatto questo, si deve ricordare che:
nel file /etc/ppp/options
andrà inserita la riga:
|
si potrà specificare il nome dell'utente direttamente all'interno dello script invece che nel file /etc/ppp/options
, ma, alla luce del fatto che la connessione dovrà essere invocata da un utente comune, si consiglia di dichiarare tale utente nel file /etc/ppp/options
;
in ogni caso il modo migliore consiste nell'inserire in /etc/diald.conf
la riga:
|
695.11.23) Una volta essere riusciti ad aver stabilito un collegamento funzionante ad Internet, quali sono i file di configurazione e gli script che conviene conservare?
Si consiglia di copiare al sicuro i file e gli script che vengono utilizzati per la connessione ad Internet. In qualsiasi occasione, sarà sufficiente ricopiare gli script al loro posto e si potrà velocemente ristabilire la configurazione esatta.
Oltre ad i singoli file eseguibili attivanti la connessione (quelli creati dall'utente ad esempio), si dovranno salvare i seguenti file:
/etc/ppp/options
/etc/ppp/pap-secrets
/etc/ppp/chat-script
/etc/resolv.conf
695.11.24) Perché utilizzando il dialup configuration tool della Red Hat 6.1 il sistema si blocca?
Dopo aver lanciato netcfg mediante:
#
netcfg
[Invio]
si dovrà evidenziare interfaces e si rileverà che una delle due interfaccie è priva del nome e non attiva. Sarà sufficiente cancellarla per rimuovere il problema.
695.11.25) Se si utilizzano diversi provider per connettersi ad Internet, come si possono invertire rapidamente gli script di connessione in una distribuzione Red Hat?
Per ottenere questo risultato occorre uno script che sostituisca i file:
/etc/ppp/options
/etc/ppp/pap-secrets
/etc/ppp/chat-script
/etc/resolv.conf
quindi prima di tutto occorre copiare questi file al sicuro. Dal momento che la distribuzione è Red Hat, si potrà ricorrere all'utilizzo di pacchetti RPM. In relazione a questo, sarà necessario creare tanti pacchetti RPM quanti sono i provider cui si intende connettersi. Per fare questo, si dovranno creare i file .spec
che servono appunto a creare i pacchetti RPM.
Segue un esempio di file .spec
che chiameremo providerA.spec:
|
Si passerà quindi alla creazione del pacchetto RPM:
#
rpm -bb providerA.spec
[Invio]
A questo punto verrà creato un pacchetto RPM il cui nome dovrebbe somigliare a Connessione_providerA-1.0-1.rpm
. Dopo aver creato il primo pacchetto, si dovranno sostituire manualmente gli script in questione per ottenere il collegamento al providerB. Una volta certi di essere riusciti a stabilire la connessione con providerB, si creerà il pacchetto RPM per questo fornitore di accesso ad Internet partendo dal file providerB.spec
:
#
rpm -bb providerB.spec
[Invio]
L'operazione va ripetuta per tutti i fornitori di accesso ad Internet di cui disponiamo.
Fatti tutti i pacchetti RPM, si dovranno creare script che servono ad attivarli. Ad esempio, si potrà creare lo script attiva_providerA
che conterrà la riga:
#
rpm -Uvh Connessione_providerA-1.0-1.rpm
[Invio]
e così per tutti gli altri fornitori di accesso ad Internet. Una volta creati tutti gli script, occorrerà conferire loro il permesso di esecuzione e copiarli in una directory di percorso (path).
Ora basterà digitare il nome dello script per cambiare tutti i file di configurazione e permettere quindi il collegamento al fornitore di accesso ad Internet desiderato.
695.11.26) Se si utilizzano diversi provider per connettersi ad Internet, come si possono gestire gli script di connessione?
Se si utilizza più di un provider per la connessione ad Internet, sarà necessario modificare o aggiungere alcuni file contenuti nella directory /etc/ppp
.
Occorrerà innanzitutto cancellare il contenuto di chap-secrets
. Dovranno poi essere creati i file:
dial-providerA
dial-providerB
...
ciascuno con un contenuto simile al seguente:
|
Si dovrà poi creare il file options
contenente le opzioni generiche di tutti i provider) cui ci si intende connettere. Un esempio potrebbe essere il seguente:
|
In seguito si dovrà modificare il file pap-secrets
nel seguente modo:
|
oppure si dovrà creare uno script che inverta i seguenti due pap-secrets
(ammesso che i provider siano due):
|
|
Per caricare le opzioni corrette, occorrerà creare uno script per ciascun provider. Ecco un esempio di tali script (42):
|
In seguito occorrerà creare la directory /etc/ppp/peers/
e inserirvi i file (options-providerA
, options-providerB
, ecc.) contenenti le opzioni specifiche di ogni provider:
|
Volendo, si potranno aggiungere le altre opzioni come ad esempio la grandezza dei pacchetti in transito:
|
e altro ancora.
A questo punto occorrerà modificare il file /etc/resolv.conf
inserendo gli indirizzi DNS dei provider e modificare il file /etc/hosts
in modo che contenga gli indirizzi IP dei server di posta. Questo serve per evitare che la connessione con uno dei provider impedisca il prelievo della posta presso i server degli altri.
695.12.1) Come si predispone un accesso da linea commutata a una macchina GNU/Linux?
Per accedere ad una macchina GNU/Linux con modem, occorre installare Mgetty+Sendfax, PAM, e avere il supporto per il PPP.
Nel file /etc/mgetty/login.config
va abilitata l'opzione AutoPPP:
|
dove /dev/ttySn
è la porta utilizzata dal modem. Nel file /etc/mgetty/mgetty.config
non occorre inserire alcuna opzione particolare, se non la velocità della porta.
Nel file /etc/ppp/options
vanno abilitate le opzioni valide per le connessioni entranti (in conflitto con eventuali connessioni uscenti):
|
Nel file /etc/ppp/options.ttySx
(ttySx
è sempre la porta del modem) vanno inseriti l'indirizzo della macchina che fa da server e l'indirizzo di quella client:
|
Nel file /etc/ppp/pap-secrets
va inserita una riga per permettere l'accesso al PPP a tutti gli utenti:
|
al posto di pc.server si dovrà inserire il nome della macchina che fa da server. Nel file /etc/hosts
, vanno inseriti i nomi e gli indirizzi utilizzati:
|
Nel file /etc/networks
vanno inserite le informazioni relative alla rete che si crea durante la connessione oltre alla rete virtuale locale:
|
Nel file /etc/inittab
va inserito naturalmente mgetty sulla porta usata dal modem (in modalità respawn), quindi occorre che ci sia una riga simile alla seguente:
|
Da notare che 57 600 può essere aumentato a velocità superiori, e che ttySx dovrà essere sostituito (ttyS1, 2, ecc.).
A questo punto, all'avvio, mgetty attende una chiamata sulla sua porta e con l'opzione AutoPPP fa partire il ppp non appena la connessione è andata in porto. Il ppp negozia il login e la password (opzione +pap) automaticamente andando a controllare direttamente il file delle password.
695.12.2) Come ci si sconnette da un sistema remoto lasciando attivi alcuni processi?
Lasciare attivo un processo su una macchina da cui ci si è scollegati, è possibile mediante il comando nohup:
$
nohup ftp -n < ftp-file &
[Invio]
In ftp-file
dovranno essere inseriti i comandi FTP da eseguire. In ogni caso è possibile lanciare il comando:
$
tail -f nohup.out &
[Invio]
che permetterà di seguire l'andamento delle operazioni sulla console.
695.13.1) Come si configura il sistema per poter scaricare e smistare i messaggi di posta elettronica?
Per poter scaricare e smistare i messaggi di posta elettronica, si utilizzano i programmi Fetchmail e procmail. I seguenti file di configurazione si riferiscono ad un utente singolo che scarica da più server di posta messaggi di posta, alcuni dei quali appartengono a liste di discussione (mailing list).
Lo script da invocare per scaricare la posta verrà chiamato MAIL
e conterrà quanto segue:
|
Dopo avere azzerato i contatori che calcoleranno i messaggi scaricati, lo script si occuperà di pulire lo schermo e di iniziare a scaricare la posta dai server di posta. Alla fine del processo di scaricamento della posta, verrà visualizzato un riepilogo dei messaggi scaricati.
Il file ~/.fetchmailrc
presente nella directory /home/utente/
contiene le informazioni di cui Fetchmail si serve per scaricare la posta. Eccone un esempio:
|
Questo file permetterà a Fetchmail di scaricare la posta da serverA presso cui si dispone di un account bigpaul e da serverB presso cui si dispone di un account gaetano. I messaggi scaricati faranno riferimento all'utente locale bigpaul. Oltre a ~/.fetchmailrc
esiste il file .procmailrc
sempre nella directory /home/utente/
. Questo file contiene le regole per smistare i messaggi in arrivo. Eccone un esempio:
|
A questo punto basterà dare i permessi di esecuzione al file MAIL
, ed invocarlo per scaricare la posta e per verificare lo smistamento di procmail.
695.13.2) Come si configura Fetchmail?
Come faccio a configurare Fetchmail in modo che scarichi anche la posta di altri utenti e la ridistribuisca (agli altri utenti)?
Segue un esempio del file di configurazione di Fetchmail (~/.fetchmailrc
) che permette di scaricare la posta da due server di posta (mail.serverA.it e mail.serverB.it) presso cui l'utente che impartisce il comando fetchmail possiede due utenze (bigpaul e gaetano) con le rispettive password (vocabolario e dizionario).
|
Si consiglia di provare a commentare la riga>
|
se dovessero riscontrarsi problemi.
Quello che segue è invece un esempio del file di configurazione di Fetchmail (~/.fetchmailrc
) che permette di scaricare la posta da due server di posta (mail.serverA.it e mail.serverB.it). La posta scaricata da mail.serverA.it sarà indirizzata nella casella di posta dell'utente bigpaul mentre quella scaricata da mail.serverB.it sarà indirizzata nella casella di posta dell'utente gaetano.
|
695.13.3) Come si possono spedire messaggi all'interno di una rete locale facendo risultare un indirizzo esterno?
Occorre modificare il file sendmail.cf
in modo che includa la caratteristica use_cw. Nel file sendmail.cw
occorrerà indicare quindi i domini da trattare come locali. Per fare questo, si dovrà però avere configurato anche un name server locale che gestisca per finta il dominio dell'indirizzo di posta con il Mail eXchanger (l'host dedicato alla gestione della posta per un dominio indicato nei file di zona del BIND con MX) che punta all'host del server di posta locale e gli altri server che puntano ai loro effettivi IP Internet. Poiché inoltre l'indirizzo di posta non corrisponderà all'utente locale, si dovrà impostare anche la virtusertable del Sendmail (con la caratteristica omonima nel sendmail.cf
) che permette di associare gli indirizzi virtuali a quelli locali esistenti. Il file sendmail.cf
possiede la seguente struttura:
|
in cui i due campi sono separati da un carattere di tabulazione.
695.13.4) Come si indirizzano correttamente i messaggi scaricati con Procmail in una directory ben precisa?
Il file di configurazione di procmail, è .procmailrc
e in questo file è possibile indicare quale è la directory corrispondente alla casella di posta predefinita. Quest'ultima viene dichiarata mediante la variabile MAILDIR nel seguente modo:
|
Dove maildir indica la directory (discendente da quella personale dell'utente) contenente la casella di posta.
695.13.5) Come si installa e come si configura Postfix?
Qualora non si utilizzino le soluzioni sotto forma di pacchetto, i sorgenti di Postfix si troveranno in due versioni: una del formato postfix-xyz.tar.gz
che rappresenta l'attuale versione stabile e l'altra snapshot-jwy.tar.gz
che è una versione su cui si sta ancora lavorando. Una volta scaricato, il sorgente va decompresso:
#
tar -zxvf sorgente.tar.gz
[Invio]
Si entrerà nella directory creata dal processo di decompressione e si impartirà il comando:
#
make
[Invio]
Dopo aver fatto questo, occorrerà rinominare alcuni file:
#
mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
[Invio]
#
mv /usr/bin/newaliases /usr/bin/newaliases.OFF
[Invio]
#
mv /usr/bin/mailq /usr/bin/mailq.OFF
[Invio]
#
chmod 755 /usr/sbin/sendmail.OFF
[Invio]
Poi si dovrà impartire il comando:
#
useradd postfix
[Invio]
Nel file /etc/passwd
si dovrà avere qualcosa del genere:
|
Si aggiungerà in /etc/aliases
quanto segue:
|
In seguito, dalla directory dove è stato decompresso il pacchetto, si digiterà:
#
sh INSTALL.sh
[Invio]
rispondendo alle domande poste. Occorrerà mettere poi in /etc/postfix/main.cf
le seguenti righe:
|
Poi occorrerà creare /etc/postfix/sender_canonical
nel seguente modo:
|
e /etc/postfix/virtual
così:
|
Poi si darà il comando:
#
postmap hash:/etc/postfix/sender_canonical
[Invio]
e:
#
postmap hash:/etc/postfix/virtual
[Invio]
Infine occorrerà dare il comando per inizializzare la base di dati degli alias:
#
newaliases
[Invio]
A questo punto si dovrà avviare postfix:
#
postfix start
[Invio]
Occorre ricordare poi, i seguenti comandi:
|
Il messaggio You have new mail, sta ad indicare che nella casella di posta ci sono nuovi messaggi. Per poterli leggere, è necessario avviare il proprio client di posta. Ad esempio, se è stato installato il pacchetto Mailx si potranno leggere i messaggi mediante il comando mail.
Una altro metodo è leggere direttamente il file contenente i messaggi presente nella propria casella di posta mediante il comando less:
#
less /var/spool/mail/utente
[Invio]
Oppure:
#
less /home/utente/directory/file_con_messaggi
[Invio](43)
695.13.7) Perché la macchina esita a lungo su Sendmail all'avvio?
Occorre modificare il file /etc/hosts
affinché contenga:
|
695.13.8) Qual è l'indirizzo cui fare telnet per verificare la configurazione di Sendmail nei confronti dello spam?
L'indirizzo cui fare telnet per verificare la configurazione di Sendmail relativamente alla gestione dello spam è mail-abuse.org:
#
telnet mail-abuse.org
[Invio]
695.13.9) Come si può inviare un file di testo compresso in allegato con un unico comando?
Questo risultato si può ottenere non con un unico comando ma utilizzando diversi comandi (tar, uuencode e mail) sulla stessa riga mediante le pipeline (|):
$
tar czf - nomefile.txt | uuencode prova.tgz
\
\| mail -s "Oggetto della mail"
[Invio]
695.13.10) Come si può associare un file di testo ad un messaggio da riga di comando?
Per associare ad un messaggio di posta elettronica un file, sarà necessario inviare al comando mail (tramite il reindirizzamento dello standard input) il file da includere nel corpo del messaggio. I seguenti comandi sono infatti equivalenti:
$
mail utente@server -s "Oggetto del messaggio" < file.txt
[Invio]
oppure:
$
cat file.txt | mail -s "Oggetto del messaggio" utente@server
[Invio](44)
695.13.11) Come si possono inviare messaggi ad intervalli di tempo regolare?
Per spedire ad esempio lo stesso messaggio allo stesso indirizzo ogni 3 minuti per un periodo indeterminato di tempo, si potrà utilizzare lo script seguente (shell Tc):
|
Questo script continuerà a spedire il messaggio contenuto nel file file.in
fino a quando il file a
non verrà cancellato.
695.13.12) Come si possono eliminare i duplicati di posta elettronica?
Occorrerà utilizzare l'eseguibile formail per ottenere questo risultato. Il seguente script (cui si darà ad esempio il nome depup) permetterà di eliminare i messaggi doppi:
|
Lo script dovrà essere eseguito nella directory dove sono presenti le cartelle di posta; generalmente queste si trovano in ~/Mail
. Le cartelle di posta dovranno essere indicate come argomento dello script una alla volta. (45)
Nel caso esistessero più cartelle di posta , si dovrà utilizzare uno script simile al seguente(46):
|
Lo script, prima prepara la lista delle cartelle di posta, poi con AWK crea a sua volta uno script che richiama lo script mostrato in precedenza per ogni cartella da analizzare. Alla fine dell'elaborazione, oltre alle cartelle risultanti, si avranno a disposizione per sicurezza anche le cartelle originali. Queste ultime, archiviate con il suffisso .original
, potranno essere cancellate dopo avere verificato il buon esito dell'operazione.
695.13.13)
Cosa è il file ~/.forward
?
Il file ~/.forward
si trova generalmente all'interno della directory principale dell'utente (/home/utente/
), e consente di poter reindirizzare i messaggi entranti verso uno o più indirizzi di posta elettronica.
La sintassi di tale file è molto semplice; vanno infatti indicati gli indirizzi di destinazione separati da una virgola. Se ad esempio si volessero reindirizzare i messaggi dell'utente locale tizio verso gli indirizzi caio@server1.it e sempronio@server2.it, il /home/tizio/.forward
dovrà contenere quanto segue:
|
695.13.14) Si può scegliere la firma (signature) in modo casuale?
Si può utilizzare l'applicativo sig_rotate.pl (reperibile da <http://freshmeat.net>) (47)
695.13.15) Perché i client di posta delle macchine di una rete locale non riescono ad inviare i messaggi al di fuori della rete stessa?
Per risolvere questo problema occorre abilitare il relay per le macchine in questione. Nel file /etc/mail/relay-domains
di Sendmail, sono memorizzati gli indirizzi IP delle macchine abilitate a poter inviare i messaggi fuori della rete locale attraverso il server di posta. Se tale file non esiste, occorrerà crearlo.
Segue un ipotetico esempio di tale file:
|
695.13.16) Come si scarica la posta con Mutt?
Se si intende scaricare la posta mediante un MUA come Mutt evitando di utilizzare un MTA (come fetchmail) occorrerà ricompilare lo stesso Mutt ricordando di includere il supporto POP. Una volta ricompilato, ~/.muttrc
dovrà contenere quanto segue:
|
La prima riga serve per cancellare i messaggi dal server di posta, la seconda indica l'indirizzo del server di posta stesso, la terza indica la porta, la quarta e la quinta indicano i dati dell'account dell'utente.
695.13.17) Come si spedisce con Mutt un file allegato da riga di comando?
Si deve utilizzare l'opzione -a di Mutt. Ecco un esempio di una riga che permette di specificare contemporaneamente oggetto, corpo, allegato e destinatario del messaggio:
$
echo "testo messaggio" | mutt -a "file_allegato"
\
\-s "oggetto" destinatario@dominio.it
[Invio]
695.13.18) Come si personalizza in Mutt, la stringa che introduce il messaggio riportato?
In Mutt questa stringa prende il nome di attribution. Se ad esempio si vuole avere un risultato simile a:
|
si dovrà inserire nel file ~/.muttrc
la seguente riga:
|
695.13.19) Come si configura in Mutt, la stringa che indica il vecchio oggetto del messaggio in caso di sostituzione dello stesso?
Quando si risponde ad un messaggio, si può cambiare l'oggetto dello stesso mediante il tasto [s]. Per fare in modo che l'oggetto sostituito rimanga e compaia come:
|
si dovrà inserire nel file ~/.muttrc
la seguente riga:
|
695.13.20) Come si può automatizzare lo scaricamento della posta?
Si potrebbe utilizzare la funzione di pianificazione dei comandi del sistema (Cron). Una voce nel file crontab chiamerebbe uno script simile al seguente:
|
dove pon è lo script che avvia il collegamento, e poff quello che lo chiude. Lo script non fa altro che aspettare che il collegamento sia stabilito, scaricare la posta e chiudere il collegamento. Se non ci dovesse essere posta da scaricare, il collegamento verrebbe chiuso subito, e se ci fossero problemi tecnici, Fetchmail andrebbe in timeout dopo circa un minuto, tempo dopo il quale il collegamento sarebbe comunque chiuso.
695.14.1) Come si imposta lo sfondo di Lynx?
Lynx mantiene le sue configurazioni all'interno del file /etc/lynx.cfg
. In ogni caso è possibile avviare il navigatore all'interno di un terminale grafico di cui è possibile stabilire il colore di fondo. Il comando per ottenere questo risultato è il seguente:
|
Di questo comando(48) sarà possibile eventualmente creare un alias:
|
La dichiarazione di tale alias potrà eventualmente essere inserita nei file letti all'avvio della shell.
695.14.2) Come si ricarica una pagina (reload) con Lynx?
La combinazione di tasti [Ctrl-L] effettuerà una nuova visualizzazione del navigatore e del suo contenuto. [Ctrl-R] servirà a ricaricare invece il file (la pagina) visualizzata.
695.15.1) Leafnode - Come si possono leggere i messaggi dei gruppi di discussione una volta scollegati?
Per leggere i messaggi dei gruppi di discussione una volta sconnessi da Internet occorre utilizzare Leafnode per scaricare i messaggi. Leafnode è un server NNTP concepito per soddisfare un traffico molto ridotto e ben si adatta a leggere e ad inviare messaggi per i gruppi di discussione anche se non si è collegati ad Internet.
Una volta installato, il pacchetto è gestito da inetd. Quest'ultimo resta in ascolto di richieste sulla porta 119. Per impostarlo, basta assicurarsi che nel file /etc/inetd.conf
sia presente la seguente riga:
|
Il percorso dell'eseguibile leafnode potrebbe essere diverso, anche se solitamente si trova nel percorso riportato.
Bisogna poi effettuare la configurazione del server. Occorrerà modificare infatti il file config
presente, in /etc/leafnode/
o in /usr/local/lib/leafnode/
a seconda delle distribuzioni. Il file solitamente è commentato e presenta alcuni esempi. Bisognerà stabilire da quale server recuperare i messaggi, con la riga:
|
Si stabilisce poi dopo quanti giorni gli articoli dovranno essere considerati ormai obsoleti, con la riga:
|
In questo modo gli articoli più vecchi di una settimana potranno essere eliminati. Questa operazione garantisce di non riempire la directory /var/spool/news
di migliaia di messaggi già letti che potrebbero rallentare il server e che comunque non sono di alcuna utilità. È bene quindi di tanto in tanto lanciare (in qualità di utente root) il comando texpire che provvede a eliminare i messaggi datati.
Se il provider richiedesse l'autenticazione per accedere al server dei gruppi di discussione, si potranno aggiungere (o togliere il commento) le righe:
|
È possibile specificare un altro server alternativo ad esempio per i gruppi non presenti nel primo:
|
e gli eventuali:
|
Se si sono sottoscritti gruppi particolarmente interessanti di cui si vuole mantenere i messaggi più a lungo, Leafnode permette di specificare tempi diversi per i vari gruppi:
|
ed è possibile anche usare gli asterischi (*) per indicare più gruppi della stessa famiglia ad es.:
|
Quanto poi al numero massimo di nuovi messaggi recuperati ogni volta, se ne imposta il valore con:
|
Se invece si vuole impostare il numero di articoli da scaricare dai gruppi appena sottoscritti, si utilizza:
|
Per evitare di recuperare messaggi recanti messaggi pubblicitari indesiderati (spam), è possibile utilizzare un trucco, che però aggira solamente il problema e non lo risolve veramente. Si tratta di fare un controllo su eventuali messaggi inviati a più gruppi di discussione:
|
Attenzione: spesso molti messaggi vengono inviati a più gruppi di discussione per cercare di ottenere più risposte ai propri quesiti per cui si potrebbero perdere articoli che non erano vero spam! |
Leafnode permette anche di impostare un'età massima per gli articoli recuperati, evitando di scaricare articoli ormai vecchi ma ancora presenti sul server del provider:
|
Vi sono poi una serie di altre opzioni di controllo meno usate ma che si possono rivelare utili in alcuni casi:
Tabella 695.137. Leafnode: le opzioni aggiuntive.
|
Terminata la configurazione di base, leafnode è pronto per entrare in azione. Lancia la connessione ad Internet, si lancerà, in qualità di utente root, il comando fetch (o fetch-news o ancora fetchnews, a seconda della versione di Leafnode di cui si dispone).
A questo punto, la prima volta, leafnode inizierà a recuperare la lista completa dei gruppi presenti sul server del provider.
N.B.: questa operazione può richiedere svariati minuti e potrà rimanere silente. |
Quando si ripresenterà la shell dei comandi, vorrà dire che fetch avrà terminato di scaricare la lista dei gruppi. A questo punto si dovrà lanciare il programma che si intende utilizzare per leggere i messaggi, e, dopo aver impostato come server NNTP «localhost» (o il nome che si è dato alla propria macchina), si dovrà effettuare l'iscrizione ai gruppi desiderati.
Non basterà però la semplice iscrizione, bisognerà anche entrarci come se si dovessero leggerne gli articoli (seppur non ancora presenti). All'interno dei gruppi si troverà un messaggio fantoccio che informa che sul server (cioè la propria macchina) sta girando leafnode e che il gruppo è stato marcato per il recupero degli articoli la prossima volta che si lancerà fetch (o i comandi descritti sopra). Si dovrà a questo punto uscire dal programma e lanciare di nuovo, sempre in qualità di utente root, fetch per scaricare i messaggi dei gruppi che si sono appena sottoscritti e visitati.
Bisogna notare che il comando di recupero dei messaggi va lanciato come utente root o come utente news.
Una volta ritornati alla shell, leafnode avrà scaricato i messaggi dei gruppi sottoscritti, e sarà possibile chiudere la connessione con il provider.
Qualora la sottoscrizione di alcuni gruppi risulti vana se eseguita dal programma adibito alla lettura dei messaggi, occorrerà provare a sottoscriversi a tali gruppi mediante la creazione di file vuoti (di nome uguale al gruppo cui si vuole iscriversi) con i seguenti comandi:
#
touch /var/spool/news/interesting.groups/nome_gruppo
[Invio]
ad esempio:
#
touch /var/spool/news/interesting.groups/it.comp.os.linux.annunci
[Invio]
695.15.2)
skipping it.xxx.yyy from now on
A volte accade che, passato un po' di tempo dall'iscrizione ad un gruppo di discussione, leafnode smetta di scaricare i messaggi di questo gruppo presentando un messaggio simile al seguente:
skipping xxx.yyy.zzz from now on.(49)
Si può superare questo inconveniente ricreando, ad ogni utilizzo i file presenti in /var/spool/news/interesting.groups/
.Sarà quindi possibile automatizzare il tutto con uno script simile al seguente:
|
695.16.1) Come si possono controllare le intrusioni al sistema che possono verificarsi con frequenza durante l'utilizzo di programmi per IRC?
Per verificare in tempo reale gli eventi principali del sistema tra cui quindi anche gli accessi al sistema si utilizza l'applicativo xconsole che ad esempio può essere avviato in una piccola finestra con il seguente comando:
$
xconsole -fn 6x10 -geometry 485x100+470+0 -file /dev/xconsole &
[Invio](50)
695.17.1) Quali sono i programmi per GNU/Linux che si devono utilizzare per scaricare i file ad intervalli?
Per poter scaricare file di grosse dimensioni a più riprese, si utilizzano programmi ed applicativi appositi. Ecco una lista di quelli più frequentemente utilizzati:
wget per riga di comando;
GTransferManager (reperibile presso <http://gtm.sourceforge.net>); (51)
Figura 695.139. GTransferManager.
|
Caitoo (KDE 2.x) (reperibile presso <http://devel-home.kde.org/~caitoo/>); (52)
Figura 695.140. Caitoo.
|
695.17.2) Come si riprende con Wget uno scaricamento interrotto?
La sintassi corretta di wget per riprendere lo scaricamento interrotto di un file è:
$
wget -c http://server/ percorso/file
[Invio]
L'opzione -c funziona solo se non c'è un server proxy (fare riferimento anche alla LDR 695.17.6) e se la funzione che rende possibile riprendere gli scaricamenti interrotti (reget) è abilitata.
695.17.3) Come si riprende uno scaricamento interrotto da un sito FTP?
Per riprendere lo scaricamento di un file da un sito FTP qualora se ne fosse scaricata solamente una parte, si deve utilizzare il comando reget di ftp. Se fosse possibile, è bene provare ad utilizzare wget con l'opzione -c, come indicato nella LDR 695.17.2.
695.17.4) Come si crea una riproduzione speculare (mirror) di un sito?
Per effettuare una riproduzione speculare (mirror) di un sito si dovrà utilizzare Wget, con l'opzione -m:
$
wget -m http://www.sito.it
[Invio]
Questo comando produrrà una riproduzione completa di http://www.sito.com.
695.17.5) Come si fornisce utente e password a Wget per scaricare un file da un sito FTP?
La pagina di manuale di Wget riporta a questo riguardo quanto segue:
|
Per indicare quindi a Wget il nome utente e la password da utilizzare per scaricare un file da un sito FTP si dovrà utilizzare il seguente comando:
$
wget ftp://utente:password @ftp.linuxfaq.it/packages/file
[Invio]
695.17.6) Si può utilizzare Wget con i proxy?
Per ciò che riguarda i proxy, è possibile dichiararne gli indirizzi mediante alcune variabili:
$
export ftp_proxy=proxy.domain.com :8080
[Invio](53)
o, nel caso di un server proxy HTTP:
$
export http_proxy=proxy.domain.com :8080
[Invio](54)
Una volta effettuata questa dichiarazione, sarà possibile attivare o meno i proxy mediante l'opzione -Y di wget:
$
wget -Y on http://server/ percorso/file
[Invio]
In questo caso (utilizzando i server proxy) non funziona l'opzione -c che è quella che permette di riprendere gli scaricamenti interrotti.
695.17.7) Come si può automatizzare lo scaricamento di file in orari particolari?
Per poter scaricare alcuni file, magari di grosse dimensioni, è preferibile farlo in orari particolari, quando si suppone che il traffico della Rete sia limitato. Si dovrà scrivere un piccolo script che, richiamato da Cron ad una certa ora, si colleghi ad Internet, lanci Wget e al termine dello scaricamento dei file interrompa la connessione e spenga la macchina.
Lo script, (invocato da Cron), potrà essere simile al seguente:
|
LDR Copyright © Gaetano Paolone bigpaul @ linuxfaq.it
1) Quest'ultima soluzione è la più indicata per server di dimensioni limitate.
2) Questo comando equivale a apache stop e apache start.
3) ipchains si può utilizzare almeno con versioni del kernel
4) ci si riferisce a kernel di versione 2.2.x o superiori.
5) 192.168.1.1 è l'indirizzo IP del router
6) Questa regola tenta di impedire lo spoofing
7) in questo modo il comando ping diretto verso il server fallirà.
8) che legge il file .netrc
locale o avvia il procedimento di identificazione da parte del server FTP remoto.
9) modalità che si disattiva normalmente attraverso il comando prompt.
10) dove numero_pid è il PID della shell Bash.
11) dove utente è il nome dell'utente sulla macchina remota chiamata server.
12) dove directory è la porzione di file system che si intende copiare sulla macchina remota
13) dopo aver preventivamente esportato i valori della variabile CVSROOT
14) Questo comando andrebbe in ogni caso invocato abbastanza spesso.
15) Si assume che la directory in questione non contenga sottodirectory. Utilizzare invece rm -rf * (prestando molta attenzione) in presenza di sottodirectory.
16) join
17) infatti -j è un'opzione del comando update del CVS
18) L'applicazione della patch non fa risultare il file come una vecchia versione, esso infatti sembra un file normalmente modificato.
19) l'opzione GMT serve ad evitare conflitti tra l'ora universale e l'ora locale
20) utilizzare checkout al posto di update per creare una nuova directory di lavoro con i contenuti del progetto al tempo della marcatura.
21) con il comando commit
22) Questa opzione disabilita l'espansione delle parole chiave e la conversione dei fine riga.
23) controllare le LDR 694.9.7 e 694.9.9 per la gestione dei servizi e dei programmi da eseguire all'avvio del sistema.
24) shell Bash
25) shell C
26) ammesso che il nome della macchina sia localhost.
27) shell Bash
28) shell C
29) shell Bash
30) shell C
31) shell Bash
32) shell C
33) o /etc/httpd.conf
o /etc/httpd/httpd.conf
o /etc/apache/httpd.conf
34) o /etc/srm.conf
o /etc/httpd/srm.conf
o /etc/apache/srm.conf
35) per una distribuzione GNU/Linux Debian
36) o /etc/access.conf
o /etc/httpd/access.conf
.
37) <ftp://ftp.it.debian.org/debian/dists/stable/main/binary-i386/base/pppconfig_1.1.deb>
38) (premettendo un #)
39) occorrerà ovviamente inserire i dati relativi al proprio caso
40) la & serve a mandare il processo in secondo piano (background).
41) Controllare anche lo script presente nella LDR 695.11.18
42) che potranno essere chiamati ad esempio connetti-providerA
, connetti-providerB
, ecc.
43) insomma il file contenente i messaggi di posta.
44) dove utente@server è l'indirizzo di posta elettronica del destinatario.
45) Il valore dopo -D rappresenta la dimensione massima (modificabile a piacere) che deve avere il file temporaneo.
46) modificando ovviamente i valori delle directory indicate con i propri.
47) sig_rotate.pl GPL
48) dove bg è il colore di sfondo con valore x, fg è quello del testo con valore y, fn indica il carattere e geometry la dimensione del terminale grafico.
49) dove xxx.yyy.zzz rappresenta il nome del gruppo di discussione
50) /dev/xconsole
deve avere il permesso di lettura
51) GTransferManager GPL
53) dove proxy.domain.com è l'indirizzo del server proxy HTTP e 8 080 l'indirizzo della porta.
54) dove proxy.domain.com è l'indirizzo del server proxy HTTP e 8 080 l'indirizzo della porta.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome reti_e_rete_internet.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]