Debian e il controllo di servizi e demoni: differenze tra le versioni

m
→‎Apt System: mancate virgolette (errore su zsh o con impostazione non default di bash)
(→‎netstat: completamento)
m (→‎Apt System: mancate virgolette (errore su zsh o con impostazione non default di bash))
 
(25 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
[[immagine:Hp-compaq-nx6110.jpg|frame|right|HP Compaq nx6110]]
{{Versioni compatibili}}
Il portatile HP Compaq NX 6110 viene certificato da HP come compatibile al 100% con GNU/Linux. HP distribuisce opzionalmente (almeno ufficialmente, io non ne ho trovati disponibili) questi portatili senza alcun sistema operativo ed ha lavorato con Ubuntu per utilizzare hardware pienamente funzionante anche con GNU/Linux.  
== Introduzione ==
Uno dei primi passi da affrontare subito dopo l'installazione della nostra Debian dovrebbe essere quello di accertarsi quali sono i servizi e i demoni che vengono lanciati dal sistema. Questa operazione permette un controllo migliore della sicurezza della nostra macchina ed una minore esposizione a rischi legati ad intrusioni.


''Guida segnalata su [http://tuxmobil.org/hp_compaq.html TuxMobil] e [http://www.linux-on-laptops.com/hp.html Linux On Laptops]''
In questa breve guida vedremo come controllare i servizi attivi, come eliminare quelli non necessari e come rendere più sicuri quelli che intendiamo utilizzare.


=Hardware=
Buona lettura & happy Debian!
* Processore: Intel(R) Pentium(R) M processor 1.50GHz
* Memoria RAM: 512Mb
* Scheda Video: Intel 915GM
* Scheda Audio: Intel AC'97 (modem)
* Scheda Ethernet: Broadcom BCM 4401 100 Base TX
* Scheda Wireless: Intel PRO/Wireless LAN 2200 BG mini PCI


=Output di lspci=
== Concetti di base ==
<pre>Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
=== Servizi & Demoni ===
VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
In un sistema operativo si definisce "servizio" (o anche "demone") un processo in background che gira autonomamente, senza intervento da parte dell'utente, o comunque con una interazione ridotta al minimo. Un esempio di servizio è il server web Apache: il server viene controllato dal demone "httpd" che gira in background, resta in ascolto sulla porta indicata e serve le pagine richieste.
Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03)
USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03)
USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03)
USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCIController (rev 03)
PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3)
Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03)
ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03)
IDE interface: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller (rev 03)
Network controller: Intel Corporation PRO/Wireless 2200BG (rev 05)
CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller
FireWire (IEEE 1394): Texas Instruments OHCI Compliant IEEE 1394 Host Controller
Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)</pre>


=Configurazione=
== Strumenti ==
==Kernel vanilla 2.6.12 - 2.6.13==
GNU/Linux fornisce una nutrita schiera di programmi che ci permettono di interagire con i servizi attivi sulla nostra macchina. Di seguito riporto quelli più usati nell'amministrazione di un sistema Debian.
Metto a disposizione degli interessati il file di configurazione per i kernel [[Kernel config per HP Compaq NX 6110| 2.6.12 e 2.6.13]] (dovrebbe funzionare anche con altre versioni comunque). Andate al link, copiate il testo e incollatelo in un file sul vostro PC e quindi spostatelo nella directory dove risiedono i sorgenti del kernel che volete compilare (normalmente /usr/src/linux/) rinominandolo in ''.config''.
{{box|Nota Bene: Filesystems|Il kernel � configurato per fornire supporto ai filesystems ext2 e reiserFS (oltre a VFAT, NTFSrw e NCPFS). Se la vostra installazione prevede l' uso di altri filesystems, '''� necessario''' abilitarli prima di ricompilare il kernel.}}


==Processore, frequency scaling e ACPI==
=== netstat ===
Il kernel cos� configurato supporta le tecnologie di scaling per la frequenza della CPU. Dato che il supporto � compilato come modulo, � necessario che esso venga caricato prima di poter essere disponibile (modulo '''speedstep-centrino'''. Offre inoltre il supporto per il demone '''cpufreqd'''. Per installare questo demone � sufficiente:
<pre># apt-get install cpufreqd</pre>
E' abilitato anche il supporto per l' ACPI (battery, button, fan, ecc...)
==Server grafico (Xfree86 e Xorg) e accellerazione 3D==
Il supporto alla scheda grafica ed all' accellerazione 3D sono compilati nel kernel di cui sopra.
Il file [[Configurazione di Xorg per HP Compaq NX 6110 | xorg.conf]] rappresenta la configurazione per Xorg e prevede l' abilitazione per il DRI (accellerazione 3D) e l' uso simultaneo del touchpad e del mouse.
Il file di configurazione � perfettamente funzionante anche per Xfree86 (� sufficiente rinominarlo)


==Scheda Audio e ALSA==
''Netstat'' è uno dei programmi più utili ed utilizzati: permette di elencare tutta una serie di informazioni utili (socket aperti, routing tables, processi, ecc...). Per il nostro scopo utilizzeremo ''netstat'' per ottenere un elenco di tutte le connessioni di rete aperte sulla nostra macchina. Ottenere queste informazioni è il primo passo per conoscere nel dettaglio cosa succede all'interno del nostro sistema operativo.  
La scheda audio funziona perfettamente con ALSA.
Tutto quello che dobbiamo fare consiste in:
<pre># apt-get install alsa-base alsa-source alsa-utils
# alsaconf</pre>
Scegliamo la nostra scheda da quelle disponibili ed il gioco � fatto.
==Modem==
Il modem � uno SmartLink, supportato da GNU/Linux senza eccessivi patemi. Assicuriamoci che il modulo '''snd_intel8x0m''' venga caricato dal kernel e procediamo a scaricare il software necessario.


Debian mette a disposizione il pacchetto ''slmodem'', che fornisce le utilities e il demone necessari al controllo del modem. Installiamolo con il comando:
Ora cerchiamo tutte le connessioni di rete in ascolto (stato <code>LISTEN</code>) sul nostro sistema.
<pre># apt-get install sl-modem-daemon</pre>


==Scheda Ethernet Broadcom BCM 4401==
<pre># netstat -l |grep tcp
Il supporto alla scheda ethernet � fornito nel kernel. Funziona anche con le immagini del kernel 2.6.8 installate da Debian per default.
tcp        0      0 *:netbios-ssn          *:*                    LISTEN
==Scheda wireless Intel PRO/Wireless LAN 2200 BG mini PCI==
tcp        0      0 *:5900                  *:*                    LISTEN
Per la configurazione di questa scheda, vi rimando alla guida [[Intel_PRO/Wireless_2200BG| Intel PRO Wireless 2200BG]].
tcp        0      0 *:www                  *:*                    LISTEN
tcp        0      0 *:sieve                *:*                    LISTEN
tcp        0      0 *:ssh                  *:*                    LISTEN
tcp        0      0 localhost.localdom:8118 *:*                    LISTEN
tcp        0      0 *:ipp                  *:*                    LISTEN
tcp        0      0 localhost.localdom:smtp *:*                    LISTEN
tcp        0      0 *:microsoft-ds          *:*                    LISTEN</pre>


Per abilitare la bella luce blu che segnala il link wireless dobbiamo impostare il parametro "led" per il modulo ipw2200.
Ho scelto di limitare l'output alle sole connessioni in attesa di connessione. Potete anche provare ad utilizzare i comandi <code>'''netstat -a'''</code>, <code>'''netstat -l'''</code>, <code>'''netstat -l |grep tcp'''</code>, ecc.


Operiamo come segue:
Le colonne da prendere in esame sono (in questo esempio) la terza e la quarta. La terza colonna riporta l'accoppiata indirizzo+porta su cui è in ascolto il servizio.  
<pre># touch /etc/modprobe.d/ipw2200
# echo "options ipw2200 led=1" > /etc/modprobe.d/ipw2200</pre>


=Abilitare il reboot=
Se osserviamo la prima linea dell'output, la terza colonna indica come coppia indirizzo+porta il testo <code>'''*:netbios-ssn'''</code>: questo significa che è attivo un servizio in ascolto per qualsiasi (<code>*</code>) indirizzo di rete configurato sulla macchina e che questo servizio è associato alla porta <code>'''netbios-ssn'''</code>.
La configurazione standard di Grub, non permette al sistema di riavviarsi. &Egrave; quindi necessario aggiungere il paramentro ''reboot=b'' alla direttiva ''kernel'' nel nostro file menu.lst.


----
Nelle altre righe possiamo notare che, nella colonna degli indirizzi, oltre al <code>*</code> (che indica ''qualsiasi indirizzo'') compare anche <code>''localhost.localdomain''</code>. ''Netstat'' tenta di risolvere gli indirizzi IP e reperisce questo hostname dal file <code>/etc/hosts</code>, per cui <code>''localhost.localdomain''</code> corrisponde (nel mio esempio) all'indirizzo dell'interfaccia di loopback (127.0.0.1), come possiamo verificare con un semplice:
autore: [[Utente:Keltik|keltik]] 07:47, Set 17, 2005 (EDT)
 
<pre>$ cat /etc/hosts |grep localhost.localdomain
127.0.0.1 localhost.localdomain localhost debby</pre>
 
È interessante notare come per alcune porte venga riportato un valore numerico, mentre per altre un valore alfanumerico.
 
Valore numerico:
<pre>tcp        0      0 *:5900                  *:*                    LISTEN</pre>
Valore alfanumerico:
<pre>tcp        0      0 *:netbios-ssn          *:*                    LISTEN</pre>
 
Questo comportamento di ''netstat'' è presto spiegato: quando il programma rileva un servizio in ascolto su una porta (ad esempio la porta 5900), cerca una corrispondenza con la stessa all'interno del file <code>/etc/services</code>.
 
Il file <code>/etc/services</code> è un file testuale che associa un numero di porta numerico alla descrizione alfanumerica del servizio associato alla stessa.
 
Se vogliamo vedere a quale porta corrisponda il dato <code>''netbios-ssn''</code> dell'esempio precedente, è sufficiente cercarlo all'interno del file <code>/etc/services</code>:
 
<pre>$ cat /etc/services |grep netbios-ssn
netbios-ssn    139/tcp                        # NETBIOS session service
netbios-ssn    139/udp</pre>
 
Nel nostro esempio, dato che la porta era di tipo TCP, il valore cercato è il primo ottenuto.
 
Agendo sul file <code>/etc/services</code> possiamo quindi assegnare un valore descrittivo alle porte riportate solo con il valore numerico. Ad esempio tornando alla porta 5900, probabilmente vorremo associarla al servizio ad essa associata (vnc).
 
Sarà quindi sufficiente editare il file <code>/etc/services</code> ed aggiungere la linea:
 
<pre>vnc-server      5900/tcp        vnc-server      # TightVNC Server</pre>
 
A questo punto avremo realizzato l'associazione porta/descrizione:
 
<pre># netstat -l |grep tcp
[...]
tcp        0      0 *:vnc-server            *:*                    LISTEN
[...]</pre>
 
Per quanto riguarda la quarta colonna, nell'esempio precedente possiamo vedere che il valore è identico per tutti i servizi e cioè <code>'''*:*'''</code>. Questo significa che il servizio è pronto a ricevere connessioni da qualsiasi indirizzo IP e da qualsiasi porta ad esso associata.
 
Notiamo a questo punto che alcuni dei servizi avviati sono in ascolto su qualsiasi indirizzo IP configurato sulla nostra macchina (<code>*</code>), mentre alcuni sono legati (si dice anche ''binding'') all'indirizzo <code>''localhost.localdomain''</code> che abbiamo visto prima corrispondere all'indirizzo di loopback (127.0.0.1).
 
Quando un servizio è in ascolto unicamente sull'interfaccia di loopback significa che sarà raggiungibile unicamente attraverso quell'interfaccia. Questo ci garantisce che l'unico host in grado di contattare il servizio è la stessa macchina che lo ha in esecuzione.
 
Nell'esempio di prima, i servizi raggiungibili unicamente dall'interfaccia di loopback sono <code>'''smtp'''</code> e <code>'''8118'''</code>. Come impareremo a verificare più tardi, si tratta rispettivamente del server di posta <code>'''exim'''</code> e del proxy <code>'''privoxy'''</code>.
 
=== lsof ===
 
Se con '''netstat''' siamo in grado di monitorare quali servizi sono in ascolto sulla nostra macchina, è anche indispensabile sapere quale programma abbia lanciato e controlli ogni singolo servizio.
 
Una caratteristica peculiare dei sistemi operativi derivati da Unix (tra i quali appunto GNU/Linux) è che qualsiasi elemento del sistema viene visto come se fosse un file. Abbiamo file veri e propri (ad es.: <code>pippo.txt</code>), abbiamo dispositivi hardware (si trovano in <code>/dev</code> e sono rappresentati da file veri e propri) ed abbiamo le connessioni di rete (anche queste sono veri e propri file).
 
Approfittando di questa caratteristica di GNU/Linux, possiamo investigare in maniera approfondita sui nostri servizi: se per il sistema operativo si tratta di file allora possiamo sapere chi li ha creati e chi li ha aperti.
 
Lo strumento principe per questo scopo è '''lsof'''. Come per la maggior parte dei comandi GNU, ''lsof'' è una abbreviazione della descrizione del comando: lsof = '''LS O'''pen '''F'''iles, cioè '''L'''i'''S'''t '''O'''pen '''F'''iles (elenca i file aperti).
 
Dato che le connessioni di rete sono rappresentate da veri e propri file, possiamo usare ''lsof'' per ottenere informazioni su di esse.
 
Poniamo il caso di voler ottenere informazioni sul servizio:
 
<pre>tcp        0      0 *:netbios-ssn          *:*                    LISTEN</pre>
 
Sarà sufficiente utilizzare ''lsof'':
 
<pre># lsof -i |grep netbios-ssn
smbd      4089        root  21u  IPv4  8082      TCP *:netbios-ssn (LISTEN)</pre>
 
In questo modo possiamo vedere che il servizio in ascolto sulla porta associata a <code>'''netbios-ssn'''</code> (la porta 139) è controllato dal programma <code>'''smbd'''</code>.
 
Allo stesso modo possiamo fare con <code>'''www'''</code> e <code>'''smtp'''</code>, ecc...
 
<pre># lsof -i |grep www
apache    4342        root  16u  IPv4  8423      TCP *:www (LISTEN)
apache    4349    www-data  16u  IPv4  8423      TCP *:www (LISTEN)
 
# lsof -i |grep smtp
exim4    3901 Debian-exim    3u  IPv4  7625      TCP localhost.localdomain:smtp (LISTEN)</pre>
 
=== Apt System ===
 
Ora che sappiamo quale programma controlla un determinato servizio, abbiamo la possibilità di risalire a quale pacchetto Debian lo contiene per - eventualmente - rimuoverlo, oppure ottenere versioni più aggiornate, ricompilarlo con patch specifiche, ecc.
 
Il sistema più semplice ed allo stesso più potente per individuare quale pacchetto Debian contiene un file, consiste nell'utilizzare il programma '''apt-file'''. Per l' installazione e l' utilizzo di ''apt-file'', vi rimando all'ottima guida [[Apt-file: ricerca all'interno dei pacchetti]], scritta da MaXeR.
 
Nel contesto a noi necessario, utilizzeremo la funzione di ricerca di ''apt-file'' per risalire a quale pacchetto contiene il programma che lancia un particolare demone.
 
Continuiamo ad utilizzare come esempio il servizio in ascolto sulla porta <code>'''netbios-ssn'''</code>. Per adesso siamo riusciti a risalire al fatto che il servizio <code>''netbios-ssn''</code> corrisponde alla porta 139 e che è controllato da <code>'''smbd'''</code>.
 
Ora vedremo cosa sia <code>'''smbd'''</code>. Prima di tutto verifichiamo quale script o programma si preoccupa di lanciare smbd
 
<pre># lsof |grep smbd |grep txt
smbd      4089        root  txt      REG        3,3  2805852      34840 /usr/sbin/smbd
smbd      4094        root  txt      REG        3,3  2805852      34840 /usr/sbin/smbd</pre>
 
 
Ora vediamo quale pacchetto contiene <code>/usr/sbin/smbd</code>:
 
<pre># apt-file search /usr/sbin/smbd
samba: usr/sbin/smbd
samba-dbg: usr/lib/debug/usr/sbin/smbd</pre>
 
Controlliamo quale di essi sia presente nel nostro sistema:
 
<pre># dpkg -l "samba*"
Desiderato=sconosciUto/Installato/Rimosso/P:eliminato/H:bloccato
| Stato=Non/Installato/file Config./U:spacchett./conf. Fallita/H:inst.parzial.
|/ Err?=(nessuno)/H:bloc./necess.Reinst./X=entrambi (Stato,Err: maiusc.=grave)
||/ Nome          Versione      Descrizione
+++-==============-==============-============================================
ii  samba          3.0.14a-6      a LanManager-like file and printer server fo
un  samba-client  <non definita> (descrizione non disponibile)
ii  samba-common  3.0.14a-6      Samba common files used by both the server a
un  samba-doc      <non definita> (descrizione non disponibile)</pre>
 
{{Autori
|Autore = [[Utente:Keltik|Keltik]] 05:26, Giu 23, 2005 (EDT)
}}
 
[[Categoria:Ottimizzazione del sistema]]
[[Categoria:Apt]]
[[Categoria:Monitoraggio]]
3 581

contributi