La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linux Red Hat La Sicurezza del sistemi Linux Relatore Michele Lasorsa –

Presentazioni simili


Presentazione sul tema: "Linux Red Hat La Sicurezza del sistemi Linux Relatore Michele Lasorsa –"— Transcript della presentazione:

1 Linux Red Hat La Sicurezza del sistemi Linux Relatore Michele Lasorsa – mail@michelelasorsa.it

2 Kernel Il Kernel moduli e varianti Il Filesystem /proc e comandi sysctl Accesso alle devices con udev Esplorazione hardware 2

3 kernel e Moduli

4 La conoscenza dei meccanismi legati alla gestione dei moduli del kernel è utile per sfruttare un sistema già ben organizzato dalla propria distribuzione GNU/Linux. Quando si installa GNU/Linux, potrebbe essere necessario conoscere l'uso dei parametri di alcuni moduli. NomeDescrizione insmodCarica manualmente i moduli del kernel. rmmodScarica manualmente i moduli del kernel. lsmodElenca i moduli caricati nel kernel. depmodRigenera il file delle dipendenze tra i moduli. modprobeCarica un modulo rispettando le dipendenze. /etc/conf.modulesConfigurazione dei moduli utilizzati. kerneld Programma demone per il carico e lo scarico automatico dei moduli.

5 I moduli del kernel sono porzioni di questo che possono essere caricate in memoria quando se ne presenta la necessità, e scaricate subito dopo. I moduli del kernel Linux sono quello che in altri sistemi viene definito driver. Se si dispone di una distribuzione GNU/Linux organizzata con un kernel modulare, è consigliabile sfruttare quel kernel già predisposto, assieme ai suoi moduli. Gestione dei moduli

6 Il minimo indispensabile per attivare e disattivare i moduli è costituito da due programmi di servizio specifici: insmod e rmmod. Il primo serve per caricare i moduli, il secondo per scaricarli. L'operazione di caricamento dei moduli deve essere fatta tenendo presente le eventuali dipendenze che ci possono essere. Per esempio, se il modulo «C» richiede la presenza del modulo «B», il quale a sua volta richiede la presenza del modulo «A», occorre caricare ordinatamente i moduli «A», «B» e «C». Nello stesso modo, lo scarico dei moduli può essere fatto solo se si rispettano le dipendenze. Nel caso appena descritto, per scaricare il modulo «A» occorre prima scaricare «C» e «B». Funzionamento in breve

7 I moduli sono generalmente file che terminano con l'estensione.o e si collocano al di sotto della directory /lib/modules/ versione /, dove la versione si riferisce al kernel per il quale sono stati predisposti. Per facilitare l'individuazione dei moduli, e quindi anche il loro caricamento, viene creato generalmente un file, modules.dep, nella directory iniziale di questi, attraverso il programma depmod. # depmod -a Aspetto e collocazione

8 Invece di caricare i moduli con il programma insmod, che richiede attenzione nella sequenza di caricamento a causa delle dipendenze, si può utilizzare modprobe che si avvale del file modules.dep e si arrangia a caricare tutto quello che serve nel modo corretto. Caricamento guidato

9 insmod [ opzioni ] file_oggetto [ simbolo = valore...] insmod permette di caricare un modulo nel kernel. Il nome del modulo può essere indicato specificando il nome del file completo di estensione ed eventualmente di percorso (path), oppure specificando semplicemente il nome del file del modulo senza l'estensione: in questo ultimo caso, insmod cerca il file (con la sua estensione naturale) all'interno delle directory standard per i moduli. # insmod

10 rmmod [ opzioni ] modulo... rmmod permette di scaricare uno o più moduli dal kernel, sempre che questi non siano in uso e non ci siano altri moduli caricati che vi fanno riferimento. Nella riga di comando vengono indicati i nomi dei moduli e non i nomi dei file dei moduli. Se vengono indicati più moduli, questi vengono scaricati nell'ordine in cui appaiono. # rmmod

11 lsmod permette di visualizzare la situazione sull'utilizzo dei moduli. Le stesse informazioni ottenibili da lsmod si possono avere dal contenuto del file /proc/modules. Utilizzando lsmod si ottiene una tabellina di tre colonne: Module -- rappresenta il nome del modulo; Pages -- rappresenta il numero di pagine di memoria utilizzate (una pagina è un blocco di 4 Kibyte); Used by -- rappresenta l'utilizzo da parte di altri moduli (lo zero indica che non è utilizzato). $ lsmod

12 depmod [ opzioni ] depmod serve a generare un file di dipendenze tra i moduli, che poi viene utilizzato da modprobe per caricarli rispettando le dipendenze. Precisamente, viene creato il file /lib/modules/ versione /modules.dep. # depmod

13 modprobe [ opzioni ] file_oggetto [ simbolo = valore...] modprobe è un programma fatto per agevolare il caricamento dei moduli del kernel. Quando viene usato senza l'indicazione di alcuna opzione, cioè solo con il nome del modulo e l'eventuale aggiunta dei parametri, modprobe carica prima i moduli necessari a soddisfare le dipendenze, e solo dopo provvede al caricamento del modulo richiesto. Se l'operazione fallisce, tutti i moduli superflui vengono scaricati nuovamente. # modprobe

14 kerneld [debug] [keep] [delay= secondi ] [type= numero_messaggio ] Nei kernel 2.0.*, kerneld è il demone che si occupa di gestire automaticamente i moduli, sempre che il kernel sia stato compilato in modo da includere questa possibilità di gestione automatizzata. kerneld viene attivato normalmente attraverso la procedura di inizializzazione del sistema, dopo che è stato rigenerato il file delle dipendenze tra i moduli. # kerneld

15 Aggiornamento del kernel

16 Il kernel fornito con Red Hat Linux è stato creato su misura dal team di esperti di Red Hat in modo da garantire la sua integrità e compatibilità con l'hardware supportato. Prima che venga lanciato da Red Hat, il kernel deve superare un insieme di test di qualità. I kernel ufficiali di Red Hat Linux sono disponibili nel formato RPM per facilitare aggiornamenti e verifiche. Se è installato GRUB oppure LILO, viene inoltre modificato il file di configurazione del boot loader per includere il nuovo kernel.

17 Il kernel 2.6 Supporto per il filesystem ext3 Supporto multi-processore (SMP) Supporto USB Supporto per lo standard IEEE 1394

18 Prima dell'aggiornamento Prima di migliorare il kernel, prendere delle precauzioni. Il primo step é di assicurarsi dell'esistenza di un dischetto di avvio per il sistema nel caso in cui si verifichi un problema. Per determinare quali pacchetti del kernel avete installato, digitate il seguente commando al prompt della shell: rpm -qa | grep kernel

19 Prima dell'aggiornamento L'output del comando contiene alcuni o tutti i seguenti pacchetti, in funzione del tipo di installazione eseguita (i numeri di versione e i pacchetti potrebbero essere diversi): kernel-2.4.20-2.47.1 kernel-debug-2.4.20-2.47.1 kernel-source-2.4.20-2.47.1 kernel-doc-2.4.20-2.47.1 kernel-pcmcia-cs-3.1.31-13 kernel-smp-2.4.20-2.47.1

20 Prima dell'aggiornamento L'unico pacchetto indispensabile è il pacchetto kernel. Se eseguite l'aggiornamento del kernel su un computer portatile o usate un dispositivo PCMCIA, dovete scaricare anche il pacchetto kernel-pcmcia-cs. kernel-pcmcia-cs.

21 Prima dell'aggiornamento Red Hat fornisce i kernel ottimizzati per diverse versioni x86. Potete scegliere athlon per sistemi AMD Athlon™ e AMD Duron™, i686 per Intel® Pentium® II, Intel® Pentium® III, Intel® Pentium® 4 e i586 per Intel® Pentium® e AMD K6™. Se non conoscete la versione del vostro sistema x86, usate il kernel fornito per la versione i386, compatibile con tutti i sistemi x86.

22 Download del kernel aggiornato Esistono diversi modi per stabilire se esiste un kernel aggiornato per il proprio sistema.

23 Download del kernel aggiornato 1° metodo Collegatevi al sito http://www.redhat.com/apps/support/errata/, scegliete la versione di Red Hat Linux che state usando e visualizzate l'aggiornamento corrispondente. Solitamente gli aggiornamenti del kernel sono contenuti nella sezione Security Advisories.http://www.redhat.com/apps/support/errata/ Per visualizzare il report degli aggiornamenti, fate clic sull'aggiornamento desiderato. Il report contiene un elenco dei pacchetti RPM richiesti e un link per scaricarli dal sito FTP di Red Hat.

24 Download del kernel aggiornato 2° metodo   Potete usare Red Hat Network per scaricare i pacchetti RPM del kernel e installare i pacchetti. Red Hat Network può, scaricare il kernel più recente, aggiornarlo sul vostro sistema, creare, se necessario, un RAM disk iniziale e configurare il boot loader perché avvii il nuovo kernel. Vi basterà poi avviare il sistema sul nuovo kernel.

25 Esecuzione dell'aggiornamento Adesso che avete i pacchetti RPM del kernel, potete procedere al miglioramento del kernel esistente. Collegatevi come root da una shell, entrate nella directory contenente i pacchetti RPM del kernel ed eseguite le operazioni seguenti.

26 Esecuzione dell'aggiornamento Utilizzate l'argomento -i con il comando rpm se desiderate conservare il vecchio kernel. Se utilizzate l'opzione -U per aggiornare il pacchetto kernel, verrà sovrascritta la versione del kernel correntemente installato (la versione del kernel e la versione x86 potrebbero variare): rpm -ivh kernel-2.4.20-2.47.1.i386.rpm

27 Esecuzione dell'aggiornamento Utilizzate l'argomento -i con il comando rpm se desiderate conservare il vecchio kernel. Se utilizzate l'opzione -U per aggiornare il pacchetto kernel, verrà sovrascritta la versione del kernel correntemente installato (la versione del kernel e la versione x86 potrebbero variare): rpm -ivh kernel-2.4.20-2.47.1.i386.rpm

28 I l Filesystem /proc 28

29 Il filesystem La sua funzione è quella di organizzare file e directory e di gestire le La sua funzione è quella di organizzare file e directory e di gestire le informazioni vitali per il sistema. Il filesystem, soprattutto in sistemi come GNU/Linux, assume un significato Il filesystem, soprattutto in sistemi come GNU/Linux, assume un significato ulteriore in quanto tutti i dispositivi sono visti dal sistema operativo come dei file: dischi fissi, stampanti, sono tutti file di dispositivo, ed anche il processore stesso e buona parte dei suoi processi sono visti come una directory /proc. GNU/Linux supporta una moltitudine di file-system, tra cui i file-system GNU/Linux supporta una moltitudine di file-system, tra cui i file-system Windows, sia localmente che in remoto tramite SAMBA. Per esaminare il contenuto dei singoli file, oltre a head e tail possiamo Per esaminare il contenuto dei singoli file, oltre a head e tail possiamo utilizzare cat, che ci permette, tra le altre cose, di visionare tutto il contenuto di un file. 29

30 /proc Utilizzando cat, less e more è possibile accedere direttamente a moltissime informazioni in merito al sistema. cat /proc/ Utilizzando cat, less e more è possibile accedere direttamente a moltissime informazioni in merito al sistema. cat /proc/ Il contenuto di /proc comprende sia file che directory che definiscono nei Il contenuto di /proc comprende sia file che directory che definiscono nei dettagli molti aspetti dei sistema. Le directory numeriche sono i singoli processi in esecuzione e sono visibili Le directory numeriche sono i singoli processi in esecuzione e sono visibili solo all’utente root. 30

31 Directory in /proc /proc/#PID/... - Visualizza per ogni processo in memoria (identificato dal suo PID) molte informazioni utili. /proc/cpuinfo - Informazioni sulla CPU /proc/ide/.../ - Informazioni sui dispositivi IDE /proc/interrupts - Gli IRQ del sistema /proc/iomem - La memoria I/O /proc/kcore - Il dump completo della memoria /proc/modules - I moduli del kernel /proc/partitions - TUTTE le partizioni degli HD 31

32 Directory in /proc /proc/pci - I dispositivi PCI /proc/version - La versione del kernel /proc/net/arp - La arp table /proc/net/dev - I byte trasferiti sui device di rete /proc/sys/net/ipv4/ - Directory fondamentale con molte informazioni sullo stack tcp/ip. 32

33 Directory in /proc /bus: contiene informazioni sui vari bus di sistema. /bus: contiene informazioni sui vari bus di sistema. /driver: fornisce informazioni su unità specifiche usate dal kernel, quali rtc. /driver: fornisce informazioni su unità specifiche usate dal kernel, quali rtc. /ide: informazioni sui dispositivi eide del sistema, al suo interno si possono /ide: informazioni sui dispositivi eide del sistema, al suo interno si possono trovare moltissime informazioni utili su tali dispositivi. /irq: serve per gestire l’affinità tra cpu ed irq. /irq: serve per gestire l’affinità tra cpu ed irq. 33

34 Directory in /proc /scsi: identica alla directory IDE ma dedicata ai sistemi SCSI. /scsi: identica alla directory IDE ma dedicata ai sistemi SCSI. /sys: oltre a fornire informazioni mette anche in condizione di modificare /sys: oltre a fornire informazioni mette anche in condizione di modificare alcuni parametri del kernel in esecuzione (i file con permessi in scrittura sono quelli modificabili): /dev: fornisce informazioni sui dispositivi del sistema. /dev: fornisce informazioni sui dispositivi del sistema. /fs: contiene molte informazioni sul filesystem e cache. /fs: contiene molte informazioni sul filesystem e cache. /kernel: contiene molti file di configurazione del kernel, tra cui domaniname, /kernel: contiene molti file di configurazione del kernel, tra cui domaniname, hostname, osrelease, ostype, version e molto altro. /net: sovraintende alla gestione del networking, sia per ipv4 che per ipv6: all’interno di ipv4 sono presenti molti file che possono permettere di effettuare un hardening dei sistemi di rete. /net: sovraintende alla gestione del networking, sia per ipv4 che per ipv6: all’interno di ipv4 sono presenti molti file che possono permettere di effettuare un hardening dei sistemi di rete. /vm: gestisce il sottosistema di vitual memory del kernel. /vm: gestisce il sottosistema di vitual memory del kernel. /tty: contiene informazioni sui dispositivi teletype (i terminali a carattere) /tty: contiene informazioni sui dispositivi teletype (i terminali a carattere) 34

35 /sysctl 35

36 Usando il comando sysctl Il /sbin/sysctl è utilizzato per visualizzare, impostare e automatizzare parametri speciali del kernel nella directory /proc/sys/. Se desiderate una rapida panoramica di tutte le impostazioni configurabili nella directory /proc/sys/, digitate il comando /sbin/sysctl-a come utente root. Questo rende possibile ottenere un elenco molto dettagliato, una piccola parte di tale elenco ha all'incirca il seguente aspetto: net.ipv4.route.min_delay = 2 kernel.sysrq = 0 kernel.sem = 250 32000 32 128 36

37 Usando il comando sysctl In questo modo si ottengono le stesse informazioni fornite dalla visualizzazione di un singolo file per volta. L'unica differenza è data dalla posizione del file. Per esempio, il file /proc/sys/net/ipv4/route/min_delay è elencato come net.ipv4.route.min_delay: gli slash della directory sono sostituiti da punti e la parte proc.sys sottointesa. 37

38 Usando il comando sysctl Il comando sysctl può essere utilizzato al posto di echo per assegnare dei valori ai file scrivibili nella directory /proc/sys/. Per esempio, invece di utilizzare questo comando echo 1 > /proc/sys/kernel/sysrq usare il comando sysctl equivalente in modo seguente sysctl -w kernel.sysrq="1" kernel.sysrq = 1 38

39 Usando il comando sysctl L'impostazione rapida di singoli valori come questo all'interno di /proc/sys risulta utile quando si sta effettuando una prova, ma non dà risultati altrettanto positivi su un sistema di produzione, in quanto le impostazioni speciali presenti in /proc/sys vanno perdute al riavvio della macchina. Per conservare le impostazioni personali, aggiungetele al file /etc/sysctl.conf. 39

40 /udev 40

41 /udev Red Hat Enterprise Linux è passato da una directory statica /dev/, ad una gestita dinamicamente tramite udev. Ciò permette di creare i nodi del dispositivo su richiesta, man mano che si caricano i driver. 41

42 /udev Nei kernel 2.4 l'interfaccia tra i driver e i programmi era fornita assieme a tutte le configurazioni del kernel stesso tramite il filesystem virtuale /proc, e i file di dispositivo erano creati staticamente: nella directory /dev erano presenti tutti i possibili device file. A partire dal kernel 2.6 devfs è stato progressivamente abbandonato e sostituito dal sysfs, ancora un filesystem virtuale, che adotta una nuova e unificata interfaccia verso i driver e che risulta migliore di tutte le implementazioni passate. 42

43 /udev Udev è un programma in user space in grado ricevere le notifiche del sottosistema hotplug dei kernel 2.6. A partire dalla versione 0.070 è in grado di fare tutto quello che faceva hotplug per i kernel 2.4, ma è molto più veloce e leggero (è scritto in C). In più udev è in grado di creare dinamicamente i device file (quelli in /dev) per ogni periferica che viene rilevata nel sistema. 43

44 /udev Udev si appoggia unicamente al sysfs. Questo fatto ha il grande vantaggio di poter usufruire appieno della nuova e potente interfaccia di cui è stato dotato il kernel 2.6 (il sysfs, appunto) per la comunicazione tra i programmi in user space e i driver delle periferiche in kernel space, includendo nuove funzionalità e migliore controllo sui driver stessi. L'unico svantaggio consiste nel fatto che non tutti i driver, al momento in cui si scrive, sono stati aggiornati per utilizzare il sysfs. 44

45 /udev Si può disabilitare udev aggiungendo al boot il parametro del kernel UDEV_DISABLED=yes in grub o lilo. Alternativamente si può configurare in /etc/udev/udev.conf una directory diversa da /dev per la creazione dei device file. 45

46 Come funziona udev Quando un driver viene caricato, rende disponibili delle informazioni in /sys e udev viene eseguito per leggerle e creare il device file appropriato. Quando si collega una nuova periferica viene generato un evento di hotplug che viene intercettato non più da /sbin/hotplug bensì da /sbin/udevsend (il gestore degli eventi hotplug è indicato in /proc/sys/kernel/hotplug). 46

47 Come funziona udev I file vengono letti e processati in ordine alfabetico, e le direttive contenute nelle regole vengono applicate in ordine Le regole aggiuntive per udev dovrebbero essere posizionate in un file separato all'interno della directory /etc/udev/rules.d/. Le regole aggiuntive sui permessi per udev dovrebbero essere posizionate in un file separato, all'interno della directory /etc/udev/permissions.d/. 47

48 Esplorazione Hardware 48

49 Esplorazione Hardware Usando i seguenti comandi: Usando i seguenti comandi:unamelspcilsmodlsofdmesgUsers e il filesystem virtuale /proc possiamo ricavare tutte le informazioni per descrivere il nostro sistema operativo e l'hardware su cui gira 49

50 uname Questo comando è utile se si desidera avere un quadro generale sulle caratteristiche del computer e conoscere alcune importanti informazioni di sistema. La forma rapida e comune di utilizzo è la seguente: $ uname -a Linux dada 2.2.14-5.0 #1 Tue Mar 7 21:07:54 EDT 2000 i686 unknown Dove l’opzione “-a” indica di rappresentare tutte le informazioni disponibili. 50

51 dmesg Il comando dmesg ripropone i messaggi visualizzati dal kernel durante l'avvio del sistema, consentendo di controllarli con tutta calma. In particolare, quando si chiede assistenza su una delle mailing list di NetBSD perché qualche periferica non funziona a dovere conviene sempre accludere al messaggio l'output di dmesg (o almeno la parte relativa alla periferica in questione). # dmesg | more 51

52 Reperimento di informazioni sul sistema

53 Prima di imparare a configurare il sistema, raccogliete le informazioni essenziali sul sistema. Per esempio dovete sapere come trovare la quantità di memoria libera e di spazio su disco fisso, come viene partizionato il disco fisso e quali processi sono in esecuzione.

54 Processi di sistema

55 Il comando ps ax visualizza l'elenco dei processi in esecuzione sul sistema, tra cui i processi eseguiti da altri utenti. Per visualizzare chi esegue gli altri processi, utilizzate il comando ps aux. Si tratta di un elenco statico, ovvero di una sorta di "fotografia" dei processi in esecuzione nel momento in cui avete lanciato il comando. Se desiderate un elenco costantemente aggiornato dei processi in esecuzione, utilizzate il comando top ps

56 L'output ps può essere lungo. Per evitare che esca dallo schermo, potete collegarlo mediante less: ps aux | less Per vedere se un processo è in esecuzione, potete usare il comando ps con il comando grep. Per esempio, per determinare se emacs è in esecuzione, digitate il comando: ps ax | grep emacs

57 kill Questo comando è utilizzato come ultima risorsa per distruggere un programma sospeso o che si desidera riavviare. kill -HUP id_processo Con l'opizone -HUP facciamo in modo che il processo venga riavviato appena dopo l'arresto forzato. kill -9 id_processo con -9 killiamo in maniera forzata e definitiva un processo senza possibilità di poter interrompere il segnale

58 oppure: La versione grafica di top, lanciare il comando gnome-system-monitor oppure: Pulsante del menu Principale => Sistema => Monitor di sistema

59 Uso della memoria, il comando in forma testuale corrisponde a free

60 Chkconfig Per configurare i servizi che vengono fatti partire per ogni run level è possibile utilizzare i comando: chkconfigEsempi: Lista di tutti i servizi per ogni run level chkconfig --list Configurazione di un servizio chkconfig --level 5 chkconfig --level 5

61 Servizi L’interfaccia grafica: Con essa è possibile configurare i servizi in /etc/rc.d/init.d salvando i cambiamenti i servizi non vengono avviati/disabilitati telinit telinit Start e Stop dalla interfaccia Start e Stop dalla interfaccia Reboot macchina Reboot macchina E quelli controllati da xinetd salvando i cambiamenti i servizi vengono avviati/disabilitati automaticamente

62 Daemons Sono dei processi in background che forniscono particolari servizi. All’inizio non vi era un superdaemon ma tutti i daemon partivano a boot time, con l’aumentare del numero dei daemon si iniziano ad accusare problemi di performance Alcuni di essi vengono gestiti ora da un superdaemon inetd o xinetd (dipende dalla scelte della distribuzione Red H) inetd (/etc/inetd.conf) inetd (/etc/inetd.conf) serve per la gestione di daemon per quei servizi di rete che rimangono in ascolto sulle porte tcp. Si pone in ascolto infatti al posto dei demoni e li richiama in caso di connessione di client. (questi servizi possono essere protetti tcpd che impostano delle access contro list basati ad esempio sugli ip address source) xinetd (/etc/xinetd.conf) xinetd (/etc/xinetd.conf) Una alternativa a inetd incorpora già i security wrappers Il service file /etc/services descrive le associazioni protocollo porta servizio per i servizi comuni

63 Configurazioni per red hat Molte delle configurazioni utilizzate durante il processo di boot si trovano nei file contenuti nella dir e sub dir: /etc/sysconfig /etc/sysconfig

64 Amministrazione utenti Modifica e cancellazione account Scadenza delle password Amministrazione gruppi Creazione di directory condivise Settaggio quote su disco 64

65 Creazione di un account utente

66 Esistono due modi per creare account utente nuovi e/o aggiuntivi: utilizzando Utente Manager oppure dal prompt della shell. Per creare un account utente dall'interfaccia grafica mediante Utente Manager: Menu’ Principale Impostazioni del sistema Utenti e Gruppi Potete anche avviare Utente Manager digitando il comando redhat-config-users al prompt della shell. Se non siete collegati come root, vi viene chiesta la password di root.

67 Configurazione di utenti e gruppi modalità testo

68 Per creare un account utente dal prompt della shell: Aprite il prompt della shell. Se non siete collegati come root, digitate il comando su - e inserite la password di root. Digitate useradd seguito da uno spazio e il nome utente per il nuovo account dalla linea di comando (per esempio, useradd rossi). Quindi premete [Invio].

69 Spesso i nomi utente sono delle variazioni del nome dell'utente, per esempio rossi sta per Rossi Bianchi. I nomi degli account utente possono riprendere il nome dell'utente, le iniziali o la data di nascita oppure qualcosa di più creativo. Ora digitate passwd seguito da uno spazio e ancora il nome utente (per esempio, passwd rossi). Al prompt New password: inserite la password per il nuovo utente e premete [Invio]. Al prompt Retype new password: inserite la stessa password per confermarla.

70 Per aggiungere un nuovo gruppo al sistema, utilizzate il comando groupadd: groupadd

71 Configurazione di utenti e gruppi modalità grafica

72 Per avviare Utente Manager dal desktop selezionate Pulsante del Menù principale (sul Pannello) => Impostazioni di sistema => Utenti e Gruppi oppure digitate il comando redhat-config-users al prompt della shell

73 Per visualizzare un elenco di tutti gli utenti locali sul sistema, fate clic sulla scheda Utenti. Per visualizzare un elenco di tutti i gruppi locali sul sistema, fate clic sulla scheda Gruppi. Se desiderate un utente o un gruppo specifico, digitate le prime lettere del nome nel campo del Filtro di Ricerca.

74 Red Hat Linux riserva gli ID degli utenti al di sopra di 500 per gli utenti di sistema. Per default, Utente Manager non visualizza gli utenti di sistema Per visualizzare tutti gli utenti, dunque anche quelli di sistema, togliete la spunta da Preferenze => Filtra utenti e gruppi di sistema dal menù a tendina.

75 Aggiunta di un nuovo utente

76 Digitate il nome utente e il nome completo del nuovo utente nei rispettivi campi. Digitate la password dell'utente nei campi Password e Confermare password e ricordatevi che deve contenere almeno sei caratteri.

77 Selezionate una shell di accesso. Se non sapete quale scegliere, accettate quella predefinita (/bin/bash). La directory home predefinita è /home/nomeutente.

78 Red Hat Linux utilizza uno schema di utente gruppo privato (UPG). Lo schema UPG non aggiunge né modifica nulla nella gestione standard dei gruppi di UNIX. Quando aggiungete un nuovo utente, per default viene creato un unico gruppo con lo stesso nome dell'utente. Se non desiderate creare questo gruppo, deselezionate l'opzione Creare un gruppo personale per l'utente.

79 Per specificare un ID utente, selezionate Specificare ID utente manualmente. Se questa opzione non è selezionata, al nuovo utente viene assegnato il primo ID utente disponibile iniziando dal numero 500. Red Hat Linux riserva gli ID utenti al di sotto di 500 per gli utenti del sistema.

80 Modifica delle proprietà dell'utente

81 Per visualizzare le proprietà di un utente già esistente, fate clic sulla scheda Utenti, selezionate l'utente interessato e Proprietà nel menù a pulsanti

82 Dati utente fornisce informazioni di base configurate al momento dell'aggiunta dell'utente. Utilizzate questa scheda per modificare il nome completo, la password, la directory home o la shell di accesso dell'utente.

83  Informazioni sull'account  selezionate l'opzione Abilitare scadenza account se desiderate che l'account abbia una determinata data di scadenza.  Inserite la data nei relativi campi.  Se selezionate Account utente bloccato, l'account viene bloccato e l'utente non è più in grado di accedere al sistema.

84  Informazioni sulla password  Questa tabella visualizza la data dell'ultima modifica della password effettuata dall'utente.  Per imporre la modifica della password dopo un determinato numero di giorni, selezionare Abilitare scadenza password.  Potete inoltre modifcare i giorni prima del permesso di modifica, i giorni prima di avviso di modifica e i giorni prima della disattivazione dell'account.

85  Gruppi  selezionate i gruppi a cui desiderate aggiungere l'utente e il suo gruppo primario.

86 Aggiunta di un nuovo gruppo

87  Per aggiungere un nuovo gruppo di utenti, fate clic sul pulsante Aggiungi gruppo.  Digitate il nome del gruppo che desiderate creare.  Per specificare un ID per il nuovo gruppo, selezionate Specificare ID gruppo manualmente e selezionate la GID.  Red Hat Linux riserva gli ID di gruppo inferiori a 500 per i gruppi di sistema.

88 Modifica delle proprietà del gruppo

89  Per visualizzare le proprietà di un gruppo esistente, selezionate il gruppo interessato e fate clic su Proprietà nel menù a pulsanti

90  Nella scheda Membri del gruppo vengono elencati gli utenti che appartengono al gruppo.  Selezionate altri utenti da aggiungere al gruppo e deselezionate gli utenti che invece desiderate rimuovere. Per applicare le modifiche, fate clic su OK oppure su Applica.

91 Alcuni utenti particolari

92 Alcuni gruppi particolari

93 Password Shadow ● Quando si parla di ambienti multiutente la sicurezza dei singoli account è molto importante: RedHat abilita di default l’opzione password shadow per la gestione dei file di autenticazione del sistema. /etc/passwd /etc/shadow ● La sicurezza è maggiore in quanto le password non vengono più memorizzate, seppur cifrate, in /etc/passwd, ovvero in un file leggibile da tutti gli utenti, ma in /etc/shadow, leggibile solo dal superutente root. ● Vengono tracciate poi altre informazioni, come la datazione delle password, ovvero il tempo trascorso dall’ultimo cambio di password. /etc/shadow ● La struttura di /etc/shadow è la seguente: : : : : : :

94 Password Shadow /etc/login.defs ● Con Password Shadow viene generato anche il file /etc/login.defs che permette di stabilire alcune caratteristiche predefinite delle utenze che utilizzano le password shadow. ● Il file /etc/loging.defs permette anche di configurare alcuni aspetti del programma di login stesso, come il numero di tentativi ammessi, il ritardo dopo un errore ed altre procedure di sicurezza. ● E’ comunque chiaro che un sistema accessibile fisicamente non è sicuro per definizione, in quanto sarà sempre possibile riavviare questo sistema con strumenti atti a modificare le impostazioni di sicurezza del sistema stesso. ● Quindi l’unico sistema sicuro a presindere è quello: “spento, scollegato della rete e chiuso a chiave”

95 /etc/passwd Il file /etc/passwd Questo file contiene la lista degli utenti ogni riga di questo file contiene 7 campi separati dai due punti. root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin Login (username univoco max 32 caratteri, potrebbero esserci lim per servizi) EncryptedPassword (se non è usato uno shadow file ) UID E’ un numero a 32 bit che rappresenta lo user name. DefaultGID indica il gruppo di default ed è importante solo per la creazione di nuovi file e directory sono infatti di proprietà del gruppo di default dello user GECOS information Full name (spesso l’unico utilizzato),Office Number,Office Phone Extension (chfn) Home Directory E’ la directory su cui si posiziona la shell dopo il login Login Shell E’ l’interprete di command line tipicamente bash. (Elenco shell /etc/shell

96 /etc/shadow user1:$1$P.0ShwH0$zHXSeIwfsYAi1hTYamfyS1:12192:0:99999:7:::user2:$1$ZADsAB/9$ivzkkniEdrm5gtdJ51nAB.:12192:0:99999:7:::Login Encrypted Password Data dell’ultimo cambio password Minimo numero di giorni tra un cambio password ed un altro Massiimo numero di giorni tra una due cambi password Numero di giorni di anticipo per la notifica della scadenza password Numero di giorni dopo la scadenza password dopo i quali l’account è disabilitato Data di scadenza del account Campo riservato che è vuoto. Le date sono espresse come numero di giorni dal 1 gennaio 1970

97 File di configurazione, sui Linux basati sulla distribuzione RedHat che contiene tutte le opzioni di default sugli utenti del sistema. # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. /etc/login.defs

98 /etc/group Il file /etc/group Ogni riga di questo file rappresenta un gruppo e contiene i seguenti campi: Groupname Encrypted password (raramente utilizzata) GID List dei membri separati da virgole Non c’ e’ limite alla lunghezza del nome del gruppo anche se per compatibilità si tende a non superare gli 8 caratteri. La password di gruppo serve per far si che utenti che non appartengono al gruppo possano diventare menbri utilizzando il comando newgrp

99 Il file /etc/shadow è il database delle password sui Unix più evoluti. In esso sono elencate per ogni utente la password (criptata) e vari parametri ad essa connessi (ultima modifica, durata massima e minima, ecc...). Ad esso fanno riferimento diversi files, fra cui /etc/passwd e tutti i comandi per la gestione degli utenti (useradd, userdel, usermod). Da ricordare

100 Selezionare questa opzione per memorizzare le password nel formato password shadow nel file /etc/shadow invece di /etc/passwd. Le password shadow sono abilitate per default durante l'installazione e sono fortemente consigliate per aumentare la sicurezza del sistema.

101 Implementazione del disk Quotas

102 In aggiunta al controllo dello spazio del disco usato su di un sistema, lo spazio del disco puó essere ristretto implementando il disco quotas, tale implementazione consente all'amministratore del sistema di essere allertato prima che un utente consumi troppo spazio o una partizione diventi piena. Il disk quotas puó essere configurato sia per utenti singoli che per gruppi di utenti. Questo tipo di flessibilitá rende possibile che un utente possa avere una piccola quota da gestire per un file "personal", permettendo ai progetti sui quali l'utente lavora, di avere piú quotas (assumendo che vengano assegnati ai progetti, i propri gruppi).

103 Configurazione del Disk Quotas

104 Per implementare il disk quotas, usare le seguenti fasi: 1.Abilitare quotas per ogni file system, modificando /etc/fstab 2.Rimontare il file system 3.Creare i file quotas e generate la tabella d'uso del disco 4.Assegnare quotas

105 Come root, usare l'editor di testo di vostra scelta, aggiungere l'opzione usrquota e/o grpquota ai file system che richiedono quotas: In questo esempio, il file system /home possiede sia l'utente che il gruppo quotas entrambi abilitati.

106 Dopo aver aggiunto le opzioni userquota e grpquota, rimontare ogni file system sul quale é stato modificato la entry fstab. Se il file system non é usato in alcun processo, usare il comando umount seguito da mount per rimontare il file system. Se invece esso é usato, il metodo piú facile per rimontare il file system é quello di riavviare il sistema.

107 Dopo che ogni file sistem "abilitato-quota" é stato rimontato, il sistema é capace di lavorare con il disk quotas. Tuttavia, il file system per se stesso, non é pronto per il supporto di quotas. La fase successiva é quella di eseguire il comando quotacheck. Il comando quotacheck esamina i file systema "abilitati-quota" e costruisce una tabella dell'uso del disco corrente per file system. La tabella viene usata per aggiornare la copia dell'uso del disco del sistema operativo. Per creare i file quota (aquota.user e aquota.group) sul file system, usare l'opzione -c del comando quotacheck. Per esempio, se l'utente o il gruppo quotas sono abilitati per la partizione /home, creare i file nella /home directory:

108 quotacheck -avug /home Dopo che vengono creati i file, eseguite il seguente comando per generare la tabella dell'uso corrente del disco, per file system ai quali é abilitato il quotas: quotacheck -avug Le opzioni usate sono le seguenti: a — Controllare tutti i file system abilitati-quota montati in modo locale. v — Mostrate le informazioni sulla stato verbose, durante la prosecuzione del controllo quota u — Controllare le informazioni dell'utente del disk quota g — Controllare le informazioni del gruppo del disk quota

109 L'ultima fase é quella di assegnare il disk quotas con il comando edquota. Per configurare il quota per un utente, come utente root in un prompt della shell, eseguire il comando: edquota username Effettuare questa fase per ogni utente sul quale volete implementare il quota. Per esempio, se il quota é abilitato in /etc/fstab per la partizione /home (/dev/hda3) e il comando edquota testuser é eseguito, viene mostrato quanto segue nell'editor configurato come il default per il sistema:

110 La prima colonna é il nome del file system che ha abilitato un quota. La seconda colonna mostra il numero di blocchi l'utente stá usando. Le successive due colonne sono usate per impostare i limiti soft e hard del blocco per l'utente sul file system. La colonna inodes mostra il numero di inodes che l'utente stá utilizzando. Le ultime due colonne sono usate per impostare i limiti inode soft e hard, per l'utente sul file system.

111 Un limite hard é l'ammontare massimo di spazio del disco che un utente o un gruppo puó utilizzare. Una volta raggiunto questo limite, non si puó utilizzare nessun altro spazio. Il limite soft definisce l'ammontare massimo di spazio che puó essere usato. Tuttavia, a differenza del limite hard, il limite soft puó essere superato per un certo limite di tempo. Quel periodo é chiamato periodo di grazia. Tale periodo puó essere espresso in secondi, minuti, ore, settimane e mesi.

112 Se uno dei valori é impostato su zero, quel limite non é impostato. Cambiare i limiti desiderati, nell'editor di testo. Per esempio: Per verificare che il quota per un utente sia stato impostato, usare il comnado: quota testuser

113 Assegnare quota ad un gruppo

114 Quotas puó anche essere assegnato ad un gruppo. Per esempio, per assegnare un quota per il gruppo devel, usare il comando (il gruppo deve esistere prima di impostare il quota): edquota -g devel Questo comando mostra il quota esistente per il gruppo in un editor di testo: Modificare i limiti, salvare il file, e configurare poi il quota. Per verificare che il gruppo del quota é stato impostato, usare il comando: quota -g devel

115 Gestione del Disk Quotas

116 Se vengono implementati i quota, essi necessitano di manutenzione, e cioé controllando se si eccede i quota e assicurarsi che gli stessi siano accurati. Naturalmente, se gli utenti eccedono sistematicamente i loro quota o raggiungono i loro limiti soft, esso non dipende dall'amministratore del sistema. Per visualizzare l'uso del disco per tutti i file system abilitati- quota, usare il comando: repquota -a

117 É possibile disabilitare quota senza impostarli a zero. Per eseguire tale compito, usare il seguente comando: quotaoff –vaug Se non vengono specificate le opzioni -u o -g, vengono disabilitati solo i quota dell'utente. Se viene specificato solo -g, vengono disabilitati solo i quota del gruppo.

118 Per abilitare quota, usare il comando quotaon con le stesse opzioni. Per esempio, abilitare i quota dell'utente e del gruppo per tutti i file system: quotaon –vaug Per abilitare i quota per un file system specifico, come ad esempio /home: quotaon -vug /home

119 Sicurezza locale Gestione suid e sgid Utilizzo di sudo NMAPProcMail 119

120 120 SUID e SGID SUID (Set User ID) (identificatore di utente effettivo) Si applica a un file di programma eseguibile solamente Se vale 1, fa sì che l'utente che sta eseguendo quel programma venga considerato il proprietario di quel file (solo per la durata della esecuzione) È necessario per consentire operazioni di lettura/scrittura su file di sistema, che l'utente non avrebbe il diritto di leggere/ modificare. : mkdir crea un direttorio, ma per farlo deve anche – Esempio: mkdir crea un direttorio, ma per farlo deve anche modificare alcune aree di sistema (file di proprietà di root), che non potrebbero essere modificate da un utente. Solo SUID lo rende possibile SGID bit: come SUID bit, per il gruppo

121 121 SUID e SGID Protezione e diritti su file Per variare i bit di protezione: chmod [u g o] [+ -] [rwx] I permessi possono essere concessi o negati dal solo proprietario del file Esempi di variazione dei bit di protezione: chmod 0755 /usr/dir/file chmod u-w fileimportante Altri comandi: chown chgrp

122 Sudo 122

123 Sudo Perchè dovrei aver bisogno di sudo ? Per dare ad un utente una parte dei privilegi di root per user/machine/command? Per non dare la password di root Per loggare le i comandi come root e poter sapere quale utente li ha eseguiti. Alternativa a su o su Alternativa a su o su

124 /etc/sudoers Questo file contiene la lista degli utenti autorizzati ad utilizzare sudo e i comandi che possono eseguire e gli host dove è possibile lanciare il comando (uno stesso file vale per più macchine) #define aliases for machines Host_alias LAB=pclab1,pclab2,pclab3 Host_alias MATH=pc1,pc2,pc3 #define collection of command Cmnd_Alias DUMP=/sbin/dump,/sbin/restore #permissions user1,user2LAB=ALL user3LAB=/usr/local/tcpdump:MATH (operator) DUMP %MathAdminGrpMATH=ALL user1 e user2 possono eseguire tutti i comandi sule macchine LAB user3 puo eseguire /usr/local/tcpdump sulle macchine LAB mentre puo eseguire i comandi di tipologia DUMP sulle macchine MATH ma solo come operatori Gli utenti del gruppo MathAdminGroup possono eseguire qualsiasi comando sulle macchine MATH

125 /etc/sudoers L’utilizzatore deve digitare sudo sudo Se il comando è permesso viene richiesta la password dell’utente e quindi eseguito. L’utente può eseguire altri comandi sudo senza dover digitare la password a meno che non siano passati 5 minuti (configurabile) di inattività sudo

126 126 Proteggere le directory temporanee di Linux

127 In un tipico sistema Linux ci saranno almeno due, se non di più, directory o partizioni dove tenere i file temporanei, c’è sempre la directory /tmp, e spesso la /var/tmp La maggior parte delle distribuzioni Linux imposta lo sticky bit sulle directory destinate a contenere file temporanei - questo significa che un utente A non può rimuovere un file di utenti appartenenti a B, e viceversa, a seconda dei permessi del file stesso, un utente però è in grado di visualizzare e/o modificare il contenuto di quei file, comunque

128 Una tipica installazione di Linux creerà /tmp in modalità 1777, il che significa che ha lo sticky bit impostato, quindi il contenuto sarà leggibile, scrivibile ed eseguibile da tutti gli utenti, per molti, questo comportamento è sicuro, ma può essere migliorato. La directory /tmp viene montata sulla partizione / e, come tale, deve rispettare le sue opzioni di mount.

129 Una soluzione più sicura sarebbe quella di impostare /tmp su una partizione creata ad hoc, in modo che possa essere montata indipendentemente dalla partizione /, e quindi impostare opzioni più restrittive. Un esempio di /etc/fstab potrebbe apparire come: /dev/sda8 /tmp ext3 nosuid,noexec,nodev,rw 0 0

130 In questo caso, la directory /tmp risiede su di una partizione creata solo per essa, e sono impostati il nosuid, noexec, nodev, il che significa che non sono ammessi i programmi suid, nulla può essere eseguito da tale partizione, e non possono esistere file di device. Si può quindi rimuovere la directory /var/tmp e creare un link simbolico che punta a /tmp in modo che i file temporanei inviati in /var/tmp vengono dirottati in /tmp che utilizza opzioni di mount più restrittive.

131 NMAP

132 Un tool chiamato nmap è considerato il modo migliore per eseguire la scansione di un host alla ricerca dei servizi disponibili. Dopo aver ottenuto l'elenco dei servizi disponibili sulla macchina target, l'attacker deve trovare un modo per infiltrarsi e ottenere un accesso privilegiato al sistema. Generalmente, ciò avviene con un programma chiamato "exploit" (sfruttamento).

133 Nmap E’ un programma open source per l'esplorazione delle reti e gli esami di sicurezza. Nmap utilizza dei semplici pacchetti IP per determinare quali hosts remoti sono in linea, quali servizi sono aperti (porte), quale sistema operativo (e quale versione), che tipi di filtri e firewalls sono operativi, e una dozzina di altre. Nmap é un programma libero coperto dalla licensa GNU GPL. GNUGPL

134 Nmap

135 Verica delle porte in ascolto Il seguente comando emesso dalla console, determina quali sono le porte in ascolto dalla rete per collegamenti TCP: nmap -sT -O localhost

136 L'output di questo comando è simile al seguente: Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT Interesting ports on localhost.localdomain (127.0.0.1): (The 1653 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 111/tcp open rpcbind 113/tcp open auth 631/tcp open ipp 834/tcp open unknown 2601/tcp open zebra 32774/tcp open sometimes-rpc11 Device type: general purpose Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7) Uptime 12.857 days (since Sat Sep 11 17:16:20 2004) Nmap run completed -- 1 IP address (1 host up) scanned in 5.190 seconds

137 un servizio misterioso sulla porta 834. Per controllare se la porta è associata con l'elenco ufciale dei servizi conosciuti, inserire: cat /etc/services | grep 834 Questo comando non fornisce alcun output. Ciò indica che mentre la porta rientra nella portata riservata (da 0 a 1023) e richiede un accesso root per essere aperta, essa non è associata con un servizio conosciuto. Successivamente, potete controllare le informazioni inerenti la porta, utilizzando netstat Successivamente, potete controllare le informazioni inerenti la porta, utilizzando netstat netstat -anp | grep 834 Il comando ritorna il seguente output: tcp 0 0 0.0.0.0:834 0.0.0.0:* LISTEN 653/ypbind

138 La presenza di una porta aperta in netstat è rassicurante, in quanto mostra che il sistema non è stato aggredito da un cracker. Inoltre, l'opzione [p] rivela il processo id (PID) del servizio che ha aperto la porta. In questo caso la porta aperta appartiene a ypbind (NIS), il quale è un servizio RPC gestito insieme con il servizio portmap. Il comando lsof rivela simili informazioni in quanto è capace di collegare le porte aperte ai servizi: lsof -i | grep 834 Di seguito viene riportato la parte più importante dell'output per questo comando: ypbind 653 0 7u IPv4 1319 TCP *:834 (LISTEN) ypbind 655 0 7u IPv4 1319 TCP *:834 (LISTEN) ypbind 656 0 7u IPv4 1319 TCP *:834 (LISTEN) ypbind 657 0 7u IPv4 1319 TCP *:834 (LISTEN)

139 Come potete notare, questi tool sono in grado di rivelare molte informazioni sullo stato dei servizi eseguiti su di una macchina. Questi tool sono molto fessibili e possono fornire delle informazioni importanti sui servizi di rete e sulla congurazione lsof netstat nmap services.

140 Configurare PROCMAIL

141 Bisogna creare procmailrc nella directory home. Digitate quanto segue, sostituendo spammailer con l'indirizzo e-mail che vi sta bombardando. Procmail ricerca la riga From all'inizio di ciascuna e­mail per vedere se include la stringa spammailer. Se è così, il messaggio viene inviato a /dev/null (che lo elimina). # Delete mail from spammailer :0 * ^From.*spammailer /dev/null

142 Relay di spam

143 Un altro modo per usare impropriamente i vostri servizi di posta consiste nell'usare il vostro sistema come relay di spam. Per spam s'intende la posta spazzatura indesiderata. Gli spammer spesso diffondono i loro fastidiosi messaggi da un normale account dial-up Internet. Necessitano di un server di posta ad alta capacità che accetti e bufferizzi il carico dei messaggi. Inviano posta spazzatura al server in un unico grande batch e poi si disconnettono, lasciando che il server smisti i messaggi alle varie vittime.

144 Per far sì che host o domini specifici distribuiscano la posta attraverso il vostro sistema, aggiungeteli al vostro file /etc/mail/access con la parola chiave RELAY. Di default, il relay è consentito solo dall'host locale. Uno dei pacchetti che potete usare per filtrare la posta spazzatura sul mail server è spamassassin. Spamassassin esamina il testo dei messaggi di posta in entrata e scarta i messaggi che sono identificati come posta spazzatura.

145 Ecco un file /etc/mail/access di esempio # Check the /usr/share/doc/sendmail/README. cf file for a description # of the format of this file. (search for access_db in that file) # The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc package. # by default we allow relaying from localhost... localhost.localdomainRELAY localhostRELAY 127.0.0.1RELAY # Senders we want to block spam@cracker.comREJECT 192.168.0.30 ERROR:"550 Spamming!"

146 Valutazione dell'accesso ai servizi di rete

147 Generalmente un sistema Linux presenta numerosi servizi di rete che, se sono configurati in modo errato o se non sono necessari, aumentano i rischi di vulnerabilità del sistema. Quindi per rendere più sicuro un sistema, bisogna ridurre al minimo i servizi di rete che offre eliminando quelli inutili e configurare al meglio quelli che effettivamente servono.

148 II vostro Linux può fornire migliaia di servizi, molti dei quali sono elencati nel file /etc/services.

149 # /etc/services: # $Id: services,v 1.32 2003/01/09 17:56:30 dwalsh Exp $ # # Network services, Internet style # Note that it is presently the policy of #IANA to assign a single well-known # port number for both TCP and UDP; hence, most entries here have two entries # even if the protocol doesn't support UDP #operations. # Updated from RFC 1700, " Assigned # Numbers" (October 1994). Not all ports # are included, only the more common ones. # # The latest LANA port assignments can be # gotten from # http://www.iana.org/assignments/port-numbershttp://www.iana.org/assignments/port-numbers #The WellKnownPortsarethosefrom0#through1023.#The RegisteredPortsarethosefrom1024through 49151 # The Dynamic and/or Private Ports are those from 49152 through 65535 # # Each line describes one service, and is # of the form: # # service-name port/protocol [aliases... ][# comment] tcpmux 1/tcp # TCP port service multiplexer tcpmux 1/udp # TCP port service multiplexer rje5/tcp # Remote Job Entry rje5/udp # Remote Job Entry echo7/tcp echo7/udp discard9/tcpsink null discard9/udpsink null systat11/tcpusers systat11/udpusers daytime13/tcp daytime13/udp qotd17/tcpquote qotd17/udpquote msp18/tcp # message send protocol msp18/udp # message send protocol chargen19/tcpttytst source chargen19/udpttytst source smtp25/tcpmail smtp25/udpmail

150 Dopo le righe di commenti, potrete notare tre colonne di informazioni. Quella di sinistra contiene il nome di ciascun servizio, quella centrale definisce il numero della porta e il tipo di protocollo usato per il servizio. Infine la colonna più a destra contiene un alias opzionale o un elenco di alias per il servizio in questione.

151 Sicurezza della rete Utilizzo dei TCP Wrappers Utilizzo dei TCP Wrappers Configurazione di un Firewall con IPTABLES Configurazione di un Firewall con IPTABLES 151

152 Wrapper TCP

153 Usato per gestire l'accesso a certi servizi di rete. Infatti, qualsiasi servizio di rete gestito da xinetd è in grado di utilizzare i wrapper TCP per gestire l'accesso. xinetd utilizza i file /etc/hosts.allow e /etc/hosts.deny per configurare l'accesso ai servizi di sistema.

154 Come è intuibile dal nome, hosts.allow contiene un elenco di regole per consentire l'accesso dei client ai servizi di rete controllati da xinetd, mentre hosts.deny contiene le regole per negarlo. Il file hosts.allow ha la precedenza su hosts.deny. Il file hosts.allow ha la precedenza su hosts.deny. I permessi per garantire o negare l'accesso possono basarsi su indirizzi IP individuali (o nomi di host) oppure su una tipologia di client. I permessi per garantire o negare l'accesso possono basarsi su indirizzi IP individuali (o nomi di host) oppure su una tipologia di client.

155 I due file possono essere costituiti da zero, una o più righe con il seguente formato: daemon_list : client_list [ : shell_command ] daemon_list : client_list [ : shell_command ]dove daemon_list è una lista di uno o più nomi di processi, separati da uno spazio o una virgola; daemon_list è una lista di uno o più nomi di processi, separati da uno spazio o una virgola; client_list è una lista di uno o più nomi o indirizzi di host, separati da uno spazio o una virgola; shell_command dai due è un comando di shell (è opzionale, viene eseguito se la condizione impostata parametri precedenti è valida).

156 Se, ad esempio, il file /etc/hosts.allow è composto dalle seguenti righe in.ftpd in.telnetd : 131.114.200. in.ftpd in.telnetd : 131.114.200. in.fingerd : 131.114.200.2 in.fingerd : 131.114.200.2 e il file /etc/hosts.deny dalla seguente riga ALL : ALL ALL : ALL l’accesso ai servizi ftp e telnet è consentito solo dagli host con indirizzo 131.114.200.x, che corrispondono a tutte le macchine del dominio iei.pi.cnr.it, l’accesso al servizio finger è possibile solo dall’host con indirizzo 131.114.200.2. Ogni altro accesso è negato.

157 alcuni esempi di client_list: 131.114.200.7 galileo.iei.pi.cnr.it # due macchine.iei.pi.cnr.it # le macchine del dominio iei.pi.cnr.it 131.114. # le macchine con indirizzo compreso tra # 131.114.0.0 e 131.114.255.255 131.114.200.0/255.255.254.0 # 255.255.254.0 rappresenta la netmask # quindi tutte le macchine # con indirizzo compreso # tra 131.114.200.0 e 131.114.201.255 ALL EXCEPT 131.114.216. # tutte le macchine eccetto quelle di # indirizzo compreso # tra 131.114.216.0 e 131.114.216.255

158 In assenza di regole o dei file /etc/hosts.allow e /etc/hosts.deny l’accesso è sempre consentito. TCP Wrapper consulta prima il file /etc/hosts.allow poi /etc/hosts.deny, non appena verifica una regola valida la consultazione termina. E’ possibile regolare l’accesso ai servizi con il solo file /etc/hosts.allow, utilizzando le parole chiave ALLOW e DENY. Se impostiamo le seguenti regole ALL : 131.114.200. : ALLOW ALL : ALL : DENY ALL : 131.114.200. : ALLOW ALL : ALL : DENY l’accesso ai servizi è possibile solo dalle macchine con indirizzo 131.114.200.x Nell’esempio successivo viene negato l’accesso dalle macchine appartenenti al dominio bad.domain e accettato l’accesso da tutte le altre macchine: ALL : bad.domain : DENY ALL : ALL : ALLOW ALL : bad.domain : DENY ALL : ALL : ALLOW

159 xinetd

160 Il demone xinetd preserva le risorse di sistema, assicura il controllo sull'accesso e la registrazione e può essere utilizzato per avviare i server con scopi particolari. Il demone xinetd preserva le risorse di sistema, assicura il controllo sull'accesso e la registrazione e può essere utilizzato per avviare i server con scopi particolari. xinetd può anche essere usato per disporre dell'accesso di host particolari, per consentire l'accesso a un servizio in un momento specifico, per negarlo a host specifici, per limitare la frequenza di connessioni in entrata e/o il carico determinato dalle connessioni stesse e altro ancora.

161 xinetd è in costante esecuzione e si pone in ascolto su tutte le porte per i servizi che controlla. xinetd è in costante esecuzione e si pone in ascolto su tutte le porte per i servizi che controlla. Quando arriva una richiesta di connessione per uno dei servizi che gestisce, xinetd avvia il server appropriato per quel servizio.

162 Il file di configurazione per xinetd è /etc/xinetd.conf, ma, esaminando il file, noterete che contiene solo un numero limitato di valori di default e un'istruzione per inserire la directory /etc/xinetd.d. Il file di configurazione per xinetd è /etc/xinetd.conf, ma, esaminando il file, noterete che contiene solo un numero limitato di valori di default e un'istruzione per inserire la directory /etc/xinetd.d. Per abilitare o disabilitare un servizio xinetd, modificate il file di configurazione nella directory /etc/xinetd.d. Se l'attributo disable è impostato su yes, allora il servizio non è attivato. Se l'attributo disable è impostato su yes, allora il servizio non è attivato.

163 Potete modificate uno qualsiasi dei file di configurazione xinetd, o ne modificate lo stato di attivazione mediante Strumento di configurazione dei servizi, ntsysv, oppure chkconfig, dovrete riavviare xinetd con il comando service xinetd restart, prima che i cambiamenti diventino effettivi. Usate ls /etc/xinetd.d per ottenere un elenco dei servizi di rete controllati dall'elenco dei contenuti xinetd della directory /etc/xinetd.d.

164 Esempio di file xinetd.d

165 Presente nella directory /etc/init.d, l'eseguibile Xinetd è utilizzato per la gestione di servizi di rete; in sostanza è un demone che gestisce altri demoni. Presente nella directory /etc/init.d, l'eseguibile Xinetd è utilizzato per la gestione di servizi di rete; in sostanza è un demone che gestisce altri demoni. Le sue funzioni sono molteplici: controllo sull'accesso, funzionalità di log, possibilità di associare un servizio a specifiche interfacce di rete, limitazione di possibili attacchi Denial of Service. Dopo aver letto il suo file di configurazione (/etc/xinetd.conf), Xinetd si mette in ascolto sulle porte indicate avviando il servizio richiesto, se vengono superati i controlli. Il file /etc/xinetd.conf contiene solo alcuni valori di default che si applicano a tutti i servizi e un'istruzione che rimanda alla directory /etc/xinetd.d, che contiene i file di configurazione di ogni singolo servizio. Vediamo un semplice esempio:

166 Prendiamo un file di esempio di configurazione di un singolo servizio: /etc/xinetd.d/wu-ftp Prendiamo un file di esempio di configurazione di un singolo servizio: /etc/xinetd.d/wu-ftp Definisce il servizio, associa la relativa porta tramite il file /etc/services service ftp { Indica se disattivarlo o farlo funzionare, in questo caso il servizio è attivo disable = no L'utente con cui viene lanciato il server user = root Il path completo del comando per lanciare il server server = /usr/sbin/in.ftpd Limita l'accesso al servizio solo dagli IP o reti indicati (Alcune notazioni valide: 10.0.0.0/24, 10.0.0.1, 0.0.0.0 (tutti gli IP) only_from = 192.168.0.0/24 Esclude l'accesso dagli IP o reti indicati. Insieme a only_from gestire le access list di xinetd no_access = 192.168.4.0/24 }

167 I Firewall

168 I firewall cerca di impedire a utenti non autorizzati di accedere al vostro computer. Il firewall si colloca tra il computer e la rete e determina i servizi del computer ai quali gli utenti remoti possono accedere tramite la rete. Un firewall configurato correttamente può potenziare la sicurezza del vostro sistema.

169 Strumento di configurazione del livello di sicurezza

170 Nella schermata di Configurazione del firewall dell'installazione di Red Hat Linux, avete la possibilità di scegliere il livello di sicurezza (alto, medio, basso), nonché di abilitare dispositivi specifici, servizi in entrata e porte. A installazione avvenuta, potete cambiare il livello di sicurezza del vostro sistema utilizzando

171 Per avviare l'applicazione, selezionate Pulsante: Desktop Impostazioni del sistema Livello di sicurezza Selezionate il livello di sicurezza desiderato dal menu a tendina

172 Iptables

173 IPTABLES e' un potentissimo tool di amministrazione usato dai system administrator per il filtraggio, il nat (Network Address Traslation) e l'alterazione dei pacchetti IP. Esso si serve di apposite tabelle di filtraggio controllate dal framework Netfilter, per ispezionare nel kernel i pacchetti IP durante il transito e decidere quale politica di filtraggio applicare sul pacchetto. IPTABLES utilizza tre tipologie di tabelle, una per il filtraggio detta filter, una per la network address traslation detta nat e l'ultima per le alterazioni specializzate dei pacchetti detta mangle.

174 /etc/sysconfig/iptables.

175 Tabella di Filter INPUT - tale catena gestisce i pacchetti destinati ai servizi del firewall.

176 Tabella di Filter OUTPUT - tale catena gestisce i pacchetti originati dallo stesso firewall. Un esempio di pacchetto che attraversa la catena di OUTPUT potrebbe essere il tentativo di pingare dal firewall un client interno della rete lan.

177 Tabella di Filter FORWARD - tale catena gestisce i pacchetti che transitano dal sistema, rispettivamente da un'interfaccia di rete all'altra e che non sono ne originati ne destinati allo stesso firewall. Un esempio di pacchetto elaborato dalla suddetta catena, potrebbe essere la richiesta effettuata da un client della rete lan, che desidera scaricare un messaggio di posta elettronica dalla rete internet.

178

179

180 ll comando IPTABLES -A aggiunge nuove regole in append alla catena, esempio: iptables -t filter -A INPUT -p icmp -j ACCEPT -I inserisce una regola nella catena nella posizione indicata da numero, esempio: iptables -t filter -I INPUT 1 -p udp --dport 22 -j ACCEPT -R sostituisce una regola con un'altra indicata da numero, esempio: iptables -t filter -R INPUT 1 -p udp --dport 22 -j DROP

181 ll comando IPTABLES -D cancella le regole di una catena, esempio: iptables -t filter -D INPUT -p icmp -j ACCEPT esempio: iptables -t filter -D INPUT 1 -F rimuove le regole di una catena se specificata o di tutte le catene, esempio: iptables -t filter -F INPUT esempio: iptables -t filter -F -L elenca in maniera dettagliata le regole di una catena se spe cificata o di tutte le catene, esempio: iptables -t filter -L INPUT -vn esempio: iptables -t filter -L -vn

182 ll comando IPTABLES -Z azzera i contatori di una catena se specificata o di tutte le catene, esempio: iptables -t filter -Z INPUT esempio: iptables -t filter –Z -N crea una nuova catena definita dall'utente, esempio: iptables -t filter -N LANtoWAN -X cancella una catena definita dall'utente, esempio: iptables -t filter -X LANtoWAN

183 ll comando IPTABLES -E rinomina una catena, esempio: iptables -t filter -R LANtoWAN LAN2WAN -P imposta la policy implicita da applicare ai pacchetti che non matchano le regole esempio: iptables -t filter -P INPUT DROP

184 Attivazione del servizio iptables

185 Le regole del firewall sono attive solo se il servizio iptables è in esecuzione. Per attivare manualmente il servizio, usate il comando: /sbin/service iptables restart Per assicurarvi che venga eseguito all'avvio del sistema, digitate il comando: /sbin/chkconfig --level 345 iptables on Il servizio ipchains non puó essere eseguito con il servizio iptables. Per assicurarsi che il servizio ipchains é disabilitato, eseguire il comando: /sbin/chkconfig --level 345 ipchains off

186 Sicurezza di base

187 Restringere l’accesso alle utility per l’amministrazione Si seguiranno grosso modo i passi seguiti da Bastille Se su una applicazione è impostato il bit SUID (-rwsr-xr-x) o SGID (-r-xr-sr-x ) quando questa verrà eseguita avrà i privilegi del proprietario del file eseguibile invece di quelli dell’utente che l’ha lanciata. Quindi se l’applicazione è proprietà di root quando viene eseguita da un normale utente questa girerà come se fosse root in persona ad eseguirla. Una vulnerabilità di sicurezza in un programma con SUID root permette quindi ad un attaccante di guadagnare i permessi di root a partire da un qualsiasi account.

188 Disabilitare i SUID superflui /1 [root@mypc /]# chmod a-s /usr/bin/chage [root@mypc /]# chmod a-s /usr/bin/gpasswd [root@mypc /]# chmod a-s /usr/bin/wall [root@mypc /]# chmod a-s /usr/bin/chfn [root@mypc /]# chmod a-s /usr/bin/chsh [root@mypc /]# chmod a-s /usr/bin/newgrp [root@mypc /]# chmod a-s /usr/bin/at [root@mypc /]# chmod a-s /usr/bin/write [root@mypc /]# chmod a-s /usr/sbin/usernetctl [root@mypc /]# chmod a-s /usr/sbin/ping6 [root@mypc /]# chmod a-s /usr/sbin/traceroute [root@mypc /]# chmod a-s /usr/sbin/traceroute6 [root@mypc /]# chmod a-s /bin/ping [root@mypc /]# chmod a-s /bin/mount [root@mypc /]# chmod a-s /bin/umount [root@mypc /]# chmod a-s /sbin/netreport

189 Disabilitare i SUID superflui /2 Per sapere di quali programmi si tratta usare man. Ad esempio:  [root@mypc /]# man chage Prima di disabilitare un programma è necessario capire bene quali saranno le conseguenze, leggendo con attenzione il manuale. Per localizzare un programma sul file system della distribuzione usare whereis :  [root@mypc /]# whereis chage Per trovare tutti i file con il bit SUID attivo:  [root@mypc /]# find / \( ! -fstype nfs \) -type f \( - perm -04000 -o -perm -02000 \) -exec ls -l {} \;

190 Disabilitare i protocolli di comunicazione remoti in chiaro /1 I “BSD r-tools” sono utility di comunicazione che basano l’autenticazione sull’IP: è possibile permettere a chi ha la password di root sull’host A di accedere come root all’host B senza ridigitare la password. Il file.rhosts contiene i nomi degli account e delle macchine che sono considerate “trusted”. Il problema è che fare “spoofing” non è così difficile, ed inoltre la comunicazione avviene in chiaro. E’ quindi il caso di disabilitare l’uso di questi tool, e di tutti i tool di comunicazione in chiaro, dalla propria macchina verso l’esterno e viceversa.

191 Disabilitare i protocolli di comunicazione remoti in chiaro /2 [root@mypc /]# chmod 0 /usr/bin/rcp [root@mypc /]# chmod 0 /usr/bin/rlogin [root@mypc /]# chmod 0 /usr/bin/rsh [root@mypc /]# find /home -name.rhosts –exec rm –i {} \; [root@mypc /]# chmod 0 /usr/bin/telnet [root@mypc /]# rpm –e telnet-server [root@mypc /]# chmod 0 /usr/bin/ftp [root@mypc /]# mount /dev/cdrom /mnt/cdrom [root@mypc /]# rpm –ivh /mnt/cdrom/RedHat/RPMS/openssh*.rpm

192 Qualche osservazione su ssh Usare solo il protocollo 2 di ssh, disabilitando il primo: nel file /etc/ssh/sshd_config e /etc/ssh/ssh_config eliminare il commento davanti alla riga Protocol 2, 1 e modificarla in Protocol 2 Si possono scegliere gli utenti a cui permettere l'accesso modificando il file /etc/ssh/sshd_config: AllowUser [@host] (o DenyUser ) AllowGroups Si possono scegliere gli utenti a cui permettere l'accesso modificando il file /etc/ssh/sshd_config: AllowUser [@host] (o DenyUser ) AllowGroups E’ possibile usare certificati per l'autenticazione, criptati su hard disk tramite password, per autenticarsi senza digitare la password sul pc remoto server: [user@mypc ~/.ssh]# ssh-keygen -t rsa [user@mypc ~/.ssh]# scp./id_rsa.pub user@server:~/.ssh/authorized_keys2

193 Impedire l’accesso alla console Nel BIOS del PC impostare come primo device di boot l’hard disk: in questo modo non è possibile far partire la macchina con un CD o un floppy Impostare una password per l’accesso al BIOS In LILO e GRUB è possibile impedire ad un utente non autorizzato di cambiare le impostazioni del kernel, prendendo il controllo della macchina. Per farlo bisogna aggiungere in /etc/lilo.conf, prima della definizione delle immagini, le righe: restricted password= oppure in /boot/grub/grub.conf la riga password = In LILO e GRUB è possibile impedire ad un utente non autorizzato di cambiare le impostazioni del kernel, prendendo il controllo della macchina. Per farlo bisogna aggiungere in /etc/lilo.conf, prima della definizione delle immagini, le righe: restricted password= oppure in /boot/grub/grub.conf la riga password = Evitare che i due file di configurazione siano leggibili e modificabili da tutti gli utenti: [root@mypc /]# chmod 600 /etc/lilo.conf

194 False sicurezze… Password di root per il single user: in /etc/inittab si aggiunge la riga: ~~:S:wait:/sbin/sulogin Stacco la spina… init=/bin/bash Disabilitare Ctrl*Alt*Del : si commenta la riga a::ctrlaltdel:/sbin/shutdown -t3 -r now nel file /etc/inittab

195 Scadenza delle password E’ opportuno limitare il periodo di validità in modo da diminuire i rischi di intercettazione. Modificare il file /etc/login.defs: PASS_MAX_DAYS 180 PASS_WARN_AGE 14 Queste informazioni vengono usate da adduser nella creazione degli utenti. Per utenti già esistenti usare: [root@mypc /]# chage –l [root@mypc /]# chage –M 180 –W 14

196 Limitare l’uso delle risorse Serve per rendere più difficoltosi gli attacchi DoS. In particolare si suggerisce di evitare l’uso dei core dump e limitare il numero di processi a disposizione di ciascun utente. Modificare il file /etc/security/limits.conf : *hardcore0 *softnproc200 *hardnproc250

197 Loggare il loggabile! /1 Registrare su file i messaggi del kernel  Aggiungere al file /etc/syslog.conf le seguenti istruzioni: #Log warning and errors to the new file /var/log/syslog *.warn;*.err/var/log/syslog #Log all kernel messages to the new file /var/log/kernel kern.* /var/log/kernel #Log all logins to /var/log/loginlog auth.*;user.*;daemon.none/var/log/loginlog #Additional data to Alt-F7 and Alt-F8 (Pseudo TTY 7 and 8) *.info;mail.none;authpriv.none/dev/tty7 authpriv.*/dev/tty7 *.warn;*.err/dev/tty7 kern.*/dev/tty7 mail.*/dev/tty8 *.*/dev/tty12

198 Loggare il loggabile! /2  Creare i tre file /var/log/syslog /var/log/kernel /var/log/loginlog  Aggiungere le righe seguenti al file /etc/logrotate.d/syslog /var/log/kernel { postrotate /usr/bin/killall –HUP syslogd endscript } più le analoghe per /var/log/syslog e /var/log/loginlog  Far ripartire il servizio con: [root@mypc /]# /etc/init.d/syslogd restart Logrotate viene lanciato periodicamente da crond nei comandi eseguiti in /etc/cron.weekly o /etc/cron.daily

199 Altre precauzioni Disabilitare il compilatore gcc, permettendo l’accesso solo a root Se non si usa il sistema come server mail, spegnere il demone sendmail [root@mypc /]# chmod 700 /usr/bin/gcc [root@mypc /]# chkconfig sendmail off

200 Super User Limitare il numero di utenti che possono diventare root. Modificare il file /etc/pam.d/su e scommentare la linea seguente: auth required /lib/security/pam_wheel.so use_uid Aggiungere al gruppo wheel gli account autorizzati [root@mypc /]# usermod -G10 admin Modificare il file /etc/securetty commentando con # tutte le righe tranne la: tty1

201 Monitorare le connessioni degli utenti [root@mypc /]# who File: /var/log/utmp [root@mypc /]# last File: /var/log/wtmp [root@mypc /]# lastb File: /var/log/btmp [root@mypc /]# lastlog File: /var/log/lastlog Se i files wtmp e btmp non sono presenti il log non funziona. La situazione può essere risolta creandoli con il comando touch. Ad esempio: [root@mypc /]# touch /var/log/wtmp

202 Termine Modulo


Scaricare ppt "Linux Red Hat La Sicurezza del sistemi Linux Relatore Michele Lasorsa –"

Presentazioni simili


Annunci Google