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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (→‎Apt System: mancate virgolette (errore su zsh o con impostazione non default di bash))
 
(12 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
== Introduzione ==
== 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.


Questo how-to spiegher� come installare i driver proprietari forniti da ATI per generare il modulo fglrx necessario al funzionamento del motore 3d delle schede grafiche.
In questa breve guida vedremo come controllare i servizi attivi, come eliminare quelli non necessari e come rendere più sicuri quelli che intendiamo utilizzare.


Come � noto i driver ATI soffrono di una difficile installazione e configurazione. Sfortunatamente (o forse no) esistono molteplici configurazioni hardware che ostacolano l'installazione dei driver. Spesso, anche seguendo un guida perfetta, non si riesce ad attivare l'accelerazione 3D al primo colpo (molto raramente si hanno anche problemi di visualizzazione nel desktop). Solamente con i successivi tentativi (variando anche il metodo, o la guida) solitamente si raggiunge lo scopo prefisso. Il modesto consiglio � di non disperarsi, magari tirare cazzotti pesanti al case, ma provare finch� non si riesce.
Buona lettura & happy Debian!


== Software richiesto ==
== Concetti di base ==
=== Servizi & Demoni ===
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.


Sebbene i pacchetti per la generazione del modulo fglrx siano disponibili nel repository di Debian SID, il consiglio � quello di utilizzare l'installer fornito da ATI in quanto pi� aggiornato.
== Strumenti ==
Oltre a questo, nel caso in cui si voglia compilare il modulo senza sfruttare l'installer, sar� necessario disporre dei sorgenti del kernel (o degli header), quindi del pacchetto linux-source e di tutti i pacchetti correlati a questo e necessari per la compilazione (<tt>build-essential</tt>).
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.


{{ Warningbox | Prima di far partire l'installazione di nuovi driver:
=== netstat ===


*Salvate una copia di <tt>/etc/X11/xorg.conf</tt> , che in caso di problemi andra' sostituita a quella nuova (creata dal configurer).
''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.  
* Verificate che non sia presente la cartella <tt>/usr/share/fglrx/</tt>. Se � presente, significa che sono installati dei vecchi driver fglrx. Per rimuoverli:
 
<pre># cd /usr/share/fglrx/
Ora cerchiamo tutte le connessioni di rete in ascolto (stato <code>LISTEN</code>) sul nostro sistema.
# sh ./fglrx-uninstall.sh</pre>
 
e seguite le istruzioni.
<pre># netstat -l |grep tcp
* Fate un '''<tt>aptitude purge</tt>''' di vecchi pacchetti di vecchi driver, se sono installati. Per esempio (i nomi dei pacchetti potrebbero essere diversi):
tcp        0      0 *:netbios-ssn          *:*                    LISTEN
<pre># aptitude purge fglrx-driver fglrx-kernel-src fglrx-control fglrx-kernel-2.6.17-2-686</pre>
tcp        0      0 *:5900                  *:*                    LISTEN
}}
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>
 
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.
 
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.
 
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>.


== Metodologie di installazione ==
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:


Per quanto riguarda l'intallazione di quelli nuovi, esistono essenzialmente 2 metodi <u>alternativi</u>:
<pre>$ cat /etc/hosts |grep localhost.localdomain
# usare l'eseguibile Ati (indipendente dalla release di Debian)
127.0.0.1 localhost.localdomain localhost debby</pre>
# creare i pacchetti .deb partenddo dal eseguibile Ati (indipendente dalla release di Debian)
# ''Installare i driver dai repository. Valido solo per Etch e Sid. Driver meno aggiornati di quelli dal sito Ati''.


=== Intallazione attraverso l'installer ATI ===
È interessante notare come per alcune porte venga riportato un valore numerico, mentre per altre un valore alfanumerico.


Da un terminale spostatevi nella cartella dove avete scaricato il file e date i permessi di esecuzione:
Valore numerico:
<pre>$ chmod +x ati-driver-installer-8.26.18-x86.run</pre> quindi, da root:
<pre>tcp        0      0 *:5900                  *:*                    LISTEN</pre>
<pre># sh ./ati-driver-installer-8.26.18.x86.run</pre>
Valore alfanumerico:
e seguite le istruzioni.
<pre>tcp        0      0 *:netbios-ssn          *:*                    LISTEN</pre>
Poi, sempre con i permessi di root, aggiornate il file di configurazione <tt>xorg.conf</tt>:
<pre># cd /etc/X11/
# aticonfig --initial
# aticonfig --overlay-type=Xv</pre>
e se volete settare meglio la configurazione:
<pre># aticonfig</pre>
il quale ci dar� un lungo output con la descrizione di tutte le opzioni che possiamo usare con <tt>aticonfig</tt>.


Riavviamo '''X'''.
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>.


Tutto dovrebbe essere a posto.
Il file <code>/etc/services</code> è un file testuale che associa un numero di porta numerico alla descrizione alfanumerica del servizio associato alla stessa.


===Installazione manuale con generazione pacchetti specifici per Debian===
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>:


Con i privilegi di root, rimuoviamo i vecchi pacchetti del modulo <tt>fglrx</tt>, se presenti:
<pre>$ cat /etc/services |grep netbios-ssn
<pre># rm /usr/src/fglrx-kernel*.deb</pre>
netbios-ssn    139/tcp                        # NETBIOS session service
E' necessario installare i seguenti pacchetti:
netbios-ssn    139/udp</pre>
<pre># apt-get install module-assistant build-essential fakeroot dh-make debconf libstdc++5 gcc-3.4-base</pre>
Spostiamoci nella cartella dove abbiamo scaricato l'eseguibile Ati e diamogli i permessi di esecuzione:
<pre>$ chmod +x ati-driver-installer-8.26.18-x86.run</pre>
Poi, per creare i 5 pacchetti .deb:
<pre>$ sh ./ati-driver-installer-8.26.18-x86.run --buildpkg Debian/[release]</pre>
Ad esempio:
<pre>$ sh ./ati-driver-installer-8.26.18-x86.run --buildpkg Debian/testing</pre>
Per installarli (installiamo solo quelli fondamentali):
<pre>$ su
Password:
# dpkg -i fglrx-driver_8.26.18-1_i386.deb
# dpkg -i fglrx-kernel-src_8.26.18-1_i386.deb
# dpkg -i fglrx-control_8.26.18-1_i386.deb</pre>


====Compilazione del modulo <tt>fglrx</tt>====
Nel nostro esempio, dato che la porta era di tipo TCP, il valore cercato è il primo ottenuto.


Adesso va compilato il modulo <tt>fglrx</tt>, con <tt>module-assistant</tt> (m-a):
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).
<pre># m-a prepare
# m-a update
# m-a build fglrx
# m-a install fglrx
# depmod -a</pre>
Quindi muoviamoci in <tt>/etc/X11/</tt>:
<pre># cd /etc/X11/</pre>
e aggiorniamo il file di configurazione di X:
<pre># aticonfig --initial
# aticonfig --overlay-type=Xv</pre>
Naturalmemte � possibile modificare <tt>etc/X11/xorg.conf</tt> anche a manina (per fare questo consultate...uhm, forse c'� qualche cosa in <tt>man xorg.conf</tt>) oppure consultando e usando <tt>aticonfig</tt>.


Riavviamo '''X'''.
Sarà quindi sufficiente editare il file <code>/etc/services</code> ed aggiungere la linea:


{{ Warningbox | Ad ogni aggiornamento del kernel bisogna ricompilare il modulo <tt>fglrx</tt>. }}
<pre>vnc-server      5900/tcp        vnc-server      # TightVNC Server</pre>


===Installazione dei driver dai repository===
A questo punto avremo realizzato l'associazione porta/descrizione:


'''Attenzione''': Questo metodo � valido solo per chi possiede Debian Etch o Sid.
<pre># netstat -l |grep tcp
[...]
tcp        0      0 *:vnc-server            *:*                    LISTEN
[...]</pre>


Innanzi tutto installiamo i pacchetti necessari:
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.
<pre># apt-get install fglrx-control fglrx-driver fglrx-driver-dev fglrx-kernel-src</pre>
Siccome il modulo di cui abbiamo bisogno (<tt>fglrx</tt>) � sotto forma di sorgenti (<tt>fglrx-kernel-src</tt>), lo compiliamo e lo installiamo utilizzando <tt>module-assistant</tt>, come descritto [[#Compilazione del modulo fglrx|qui]].


In teoria abbiamo finito, bisogna solamente configurare [[#Struttura del file xorg.conf|<tt>/etc/X11/xorg.conf</tt>]] e riavviare '''X'''.
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).


'''Nota:''' Consultate anche il manuale di <tt>fglrx</tt> . ( <tt>man fglrx</tt> ).
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.


== Struttura del file xorg.conf ==
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>.


Un esempio di <tt>/etc/X11/xorg.conf</tt>
=== lsof ===


<pre>
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.


### /etc/X11/xorg.conf ###
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).


Section "ServerLayout"
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.
Identifier    "Default Layout"
Screen      0  "aticonfig-Screen[0]" 0 0
InputDevice    "Keyboard"
InputDevice    "Mouse"
InputDevice    "Touchpad"
EndSection


Section "Files"
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).
# path to defoma fonts
FontPath    "/usr/share/fonts/X11/misc"
FontPath    "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath    "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath    "/usr/share/fonts/X11/Type1"
FontPath    "/usr/share/fonts/X11/100dpi"
FontPath    "/usr/share/fonts/X11/75dpi"
FontPath    "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection


Section "Module"
Dato che le connessioni di rete sono rappresentate da veri e propri file, possiamo usare ''lsof'' per ottenere informazioni su di esse.
Load  "synaptics"
Load  "bitmap"
Load  "ddc"
Load  "dri"
Load  "extmod"
Load  "freetype"
Load  "glx"
Load  "int10"
Load  "type1"
Load  "vbe"
#      Load  "GLcore"
EndSection


Section "InputDevice"
Poniamo il caso di voler ottenere informazioni sul servizio:
Identifier  "Keyboard"
Driver      "kbd"
Option     "CoreKeyboard"
Option     "XkbRules" "xorg"
Option     "XkbModel" "pc105"
Option     "XkbLayout" "it"
EndSection


Section "InputDevice"
<pre>tcp        0     0 *:netbios-ssn          *:*                    LISTEN</pre>
Identifier  "Mouse"
Driver     "mouse"
Option     "CorePointer"
Option     "Device" "/dev/input/mice"
Option     "Protocol" "ExplorerPS/2"
Option     "Emulate3Buttons" "true"
EndSection


Section "InputDevice"
Sarà sufficiente utilizzare ''lsof'':
Identifier  "Touchpad"
Driver      "synaptics"
Option     "Device" "/dev/psaux"
Option     "Protocol" "auto-dev"
Option     "LeftEdge" "1700"
Option     "RightEdge" "5300"
Option     "TopEdge" "1700"
Option     "BottomEdge" "4200"
Option     "FingerLow" "25"
Option     "FingerHigh" "30"
Option     "MaxTapTime" "180"
Option     "MaxTapMove" "220"
Option     "VertScrollDelta" "100"
Option     "MinSpeed" "0.10"
Option     "MaxSpeed" "0.30"
Option     "AccelFactor" "0.0150"
Option     "SHMConfig" "on"
        Option      "AlwaysCore" "true"
EndSection


Section "Monitor"
<pre># lsof -i |grep netbios-ssn
Identifier  "aticonfig-Monitor[0]"
smbd      4089        root  21u IPv4  8082      TCP *:netbios-ssn (LISTEN)</pre>
HorizSync    30.0 - 70.0
VertRefresh 50.0 - 100.0
Option     "VendorName" "ATI Proprietary Driver"
Option     "ModelName" "Generic Autodetecting Monitor"
Option     "DPMS" "true"
EndSection


Section "Monitor"
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>.
Identifier  "aticonfig-Monitor[1]"
Option     "DPMS" "true"
EndSection


Section "Device"
Allo stesso modo possiamo fare con <code>'''www'''</code> e <code>'''smtp'''</code>, ecc...
Identifier  "aticonfig-Device[0]"
Driver      "fglrx"
Option     "VideoOverlay" "on"
Option     "OpenGLOverlay" "off"
Option     "DesktopSetup" "horizontal,reverse"
BusID      "PCI:1:0:0"
EndSection


Section "Screen"
<pre># lsof -i |grep www
Identifier "aticonfig-Screen[0]"
apache    4342        root  16u  IPv4  8423      TCP *:www (LISTEN)
Device    "aticonfig-Device[0]"
apache   4349    www-data  16u  IPv4   8423      TCP *:www (LISTEN)
Monitor   "aticonfig-Monitor[0]"
DefaultDepth    24
SubSection "Display"
Viewport   0 0
Depth    24
Modes    "1280x800" "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
EndSection


Section "DRI"
# lsof -i |grep smtp
Mode        0666
exim4    3901 Debian-exim    3u  IPv4  7625      TCP localhost.localdomain:smtp (LISTEN)</pre>
EndSection


### End Of File ###
=== Apt System ===
</pre>


== Alcuni Test ==
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.


Per verificare se abbiamo installato tutto correttamente:
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.
<pre>$ fglrxinfo</pre>
dovrebbe dare un output simile a questo:
<pre>display: :0.0  screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: MOBILITY RADEON 9700 Generic
OpenGL version string: 2.0.5879 (8.26.18)</pre>
Se al posto di ATI compare Mesa, c'� qualcosa che non va. L'installazione non � andata a buon fine.


Per testare l'accelerazione:
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.
<pre>$ fgl_glxgears</pre>
Dovrebbe comparire un cubo rotante con sulle sei faccie degli ingranaggi rotanti e, sul terminale la conta dei frame:
<pre>Using GLX_SGIX_pbuffer
1610 frames in 5.0 seconds = 322.000 FPS
1640 frames in 5.0 seconds = 328.000 FPS
2093 frames in 5.0 seconds = 418.600 FPS</pre>
Se invece compaiono 4-5 righe di errori, c'� qualcosa che non va. L'installazione non � andata a buon fine. Ritenta, forse sarai pi� fortunat*.


Per testare l'accelerazione � possibile utilizzare anche i tools di Mesa:
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>.
<pre># apt-get install mesa-utils
$ glxgears -printfps</pre>
Appaiono tre ingranaggi rotanti e la conta dei fotogrammi:
<pre>14045 frames in 5.0 seconds = 2808.862 FPS
14115 frames in 5.0 seconds = 2822.858 FPS
14196 frames in 5.0 seconds = 2839.177 FPS</pre>


==File di log==
Ora vedremo cosa sia <code>'''smbd'''</code>. Prima di tutto verifichiamo quale script o programma si preoccupa di lanciare smbd


l file di log principale � '''<tt>/var/log/Xorg.0.log</tt>''' e seguenti. Da spulciare, analizare, bruciare, supplicare. Insomma qui c'� di tutto di pi�. Ma a volte si pu� anche non trovare nulla di anomalo e magari <tt>fgl_glxgears</tt> non funziona lo stesso. 8�(
<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>


Se abbiamo installato i driver con l'installer Ati, esiste anche questo piccolo log:  <tt>/usr/share/fglrx/fglrx-install.log</tt>


== Tips and Tricks ==
Ora vediamo quale pacchetto contiene <code>/usr/sbin/smbd</code>:


* Una cosa importante, ma che resta comunque strana, � scrivere, in <tt>/etc/X11/xorg.conf</tt>, i moduli <tt>dri</tt>, <tt>glx</tt> e <tt>GLcore</tt>, in questo ordine. Se ad esempio si mette <tt>GLcore</tt> per primo, l'accelerazione non andr� e il log <tt>/var/log/Xorg.0.log</tt> riporter� una serie di errori, tra cui warning sulla libreria <tt>/usr/lib/xorg/modules/extensions/libGLcore.so</tt> e  un errore verso la fine, tristemente incorniciato. Questo errore non so se sia circoscritto alla mia configurazione o se sia un cosa generale. L'unica cosa � fare un po' di test.
<pre># apt-file search /usr/sbin/smbd
* A volte si ottengono risultati migliori installando i driver con '''X non avviato'''.
samba: usr/sbin/smbd
* Se i driver sono molto recenti il modulo <tt>GLcore</tt> non bisognerebbe inserirlo in <tt>/etc/X11/xorg.conf</tt> : viene caricato automaticamente.
samba-dbg: usr/lib/debug/usr/sbin/smbd</pre>
* Aggiornando le librerie Mesa (<tt>libgl1-mesa-dri</tt> oppure <tt>libgl1-mesa-glx</tt> ad esempio), ahim�, pu� capitare che l'accelerazione sparisca all'improvviso. L'unica cosa da fare probabilmente � disinstallare i driver e installarli di nuovo.
* Per quanto riguarda le trasparenze di KDE, credo non siano supportate a livello hardware. Io non sono riuscito ad attivarle, infatti se aggiungo a <tt>/etc/X11/xorg.conf</tt> la sezione:
<pre>Section "Extensions"
Option "Composite" "Enable"
EndSection</pre>
l'accelerazione 3D non viene caricata.


----
Controlliamo quale di essi sia presente nel nostro sistema:


Autore: [[User:rasca|rasca]] 09:04, 17 July 2006 (CEST)
<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>


Ampliato da: [[Utente:Superflieriam|Superflieriam]]
{{Autori
|Autore = [[Utente:Keltik|Keltik]] 05:26, Giu 23, 2005 (EDT)
}}


[[Categoria:Kernel]]
[[Categoria:Ottimizzazione del sistema]]
[[Categoria:Apt]]
[[Categoria:Monitoraggio]]

Versione attuale delle 14:22, 2 apr 2015

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

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.

In questa breve guida vedremo come controllare i servizi attivi, come eliminare quelli non necessari e come rendere più sicuri quelli che intendiamo utilizzare.

Buona lettura & happy Debian!

Concetti di base

Servizi & Demoni

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.

Strumenti

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.

netstat

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.

Ora cerchiamo tutte le connessioni di rete in ascolto (stato LISTEN) sul nostro sistema.

# netstat -l |grep tcp
tcp        0      0 *:netbios-ssn           *:*                     LISTEN
tcp        0      0 *:5900                  *:*                     LISTEN
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

Ho scelto di limitare l'output alle sole connessioni in attesa di connessione. Potete anche provare ad utilizzare i comandi netstat -a, netstat -l, netstat -l |grep tcp, ecc.

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.

Se osserviamo la prima linea dell'output, la terza colonna indica come coppia indirizzo+porta il testo *:netbios-ssn: questo significa che è attivo un servizio in ascolto per qualsiasi (*) indirizzo di rete configurato sulla macchina e che questo servizio è associato alla porta netbios-ssn.

Nelle altre righe possiamo notare che, nella colonna degli indirizzi, oltre al * (che indica qualsiasi indirizzo) compare anche localhost.localdomain. Netstat tenta di risolvere gli indirizzi IP e reperisce questo hostname dal file /etc/hosts, per cui localhost.localdomain corrisponde (nel mio esempio) all'indirizzo dell'interfaccia di loopback (127.0.0.1), come possiamo verificare con un semplice:

$ cat /etc/hosts |grep localhost.localdomain
127.0.0.1 localhost.localdomain localhost debby

È interessante notare come per alcune porte venga riportato un valore numerico, mentre per altre un valore alfanumerico.

Valore numerico:

tcp        0      0 *:5900                  *:*                     LISTEN

Valore alfanumerico:

tcp        0      0 *:netbios-ssn           *:*                     LISTEN

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 /etc/services.

Il file /etc/services è 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 netbios-ssn dell'esempio precedente, è sufficiente cercarlo all'interno del file /etc/services:

$ cat /etc/services |grep netbios-ssn
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp

Nel nostro esempio, dato che la porta era di tipo TCP, il valore cercato è il primo ottenuto.

Agendo sul file /etc/services 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 /etc/services ed aggiungere la linea:

vnc-server      5900/tcp        vnc-server      # TightVNC Server

A questo punto avremo realizzato l'associazione porta/descrizione:

# netstat -l |grep tcp
[...]
tcp        0      0 *:vnc-server            *:*                     LISTEN
[...]

Per quanto riguarda la quarta colonna, nell'esempio precedente possiamo vedere che il valore è identico per tutti i servizi e cioè *:*. 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 (*), mentre alcuni sono legati (si dice anche binding) all'indirizzo localhost.localdomain 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 smtp e 8118. Come impareremo a verificare più tardi, si tratta rispettivamente del server di posta exim e del proxy privoxy.

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.: pippo.txt), abbiamo dispositivi hardware (si trovano in /dev 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 Open Files, cioè LiSt Open Files (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:

tcp        0      0 *:netbios-ssn           *:*                     LISTEN

Sarà sufficiente utilizzare lsof:

# lsof -i |grep netbios-ssn
smbd      4089        root   21u  IPv4   8082       TCP *:netbios-ssn (LISTEN)

In questo modo possiamo vedere che il servizio in ascolto sulla porta associata a netbios-ssn (la porta 139) è controllato dal programma smbd.

Allo stesso modo possiamo fare con www e smtp, ecc...

# 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)

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 netbios-ssn. Per adesso siamo riusciti a risalire al fatto che il servizio netbios-ssn corrisponde alla porta 139 e che è controllato da smbd.

Ora vedremo cosa sia smbd. Prima di tutto verifichiamo quale script o programma si preoccupa di lanciare smbd

# 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


Ora vediamo quale pacchetto contiene /usr/sbin/smbd:

# apt-file search /usr/sbin/smbd
samba: usr/sbin/smbd
samba-dbg: usr/lib/debug/usr/sbin/smbd

Controlliamo quale di essi sia presente nel nostro sistema:

# 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)




Guida scritta da: Keltik 05:26, Giu 23, 2005 (EDT) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized