[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
10. Sicurezza per i servizi
Indice:
10.a. Apache
Apache ha un buon file di configurazione, ma si devono migliorare alcune cose,
come legare Apache a un indirizzo e prevenire l'uscita di informazioni. Sotto ci
sono le opzioni che si dovrebbero applicare al file di configurazione.
Se non si è disabilitato ssl nel /etc/make.conf quando è
stato installato Apache, si dovrebbe avere l'accesso a un server abilitato ssl.
All'interno di /etc/apache2/vhosts.d si possono trovare dei file di
configurazione d'esempio. Ci sono degli esempi funzionanti ed è sicuramente
meglio verificare quelli o disabilitarli.
È importante definire la/le propria/e configurazione/i in modo che ascolti(no)
su un particolare indirizzo IP (piuttosto che su tutti gli indirizzi IP
disponibili sul proprio sistema). Per esempio, per il file
00_default_vhost.conf:
Codice 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf |
Listen 127.0.0.1
|
Si raccomanda inoltre di disabilitare la visualizzazione al mondo intero di
qualsiasi informazione riguardante la propria installazione di Apache. Come
impostazione predefinita, la configurazione aggiungerà la versione del server
ed il nome dell'host virtuale alle pagine generate lato server. Per disabilitare
questo comportamento, cambiare la variabile ServerSignature in
Off:
Codice 1.2: /etc/apache2/modules.d/00_default_settings.conf |
ServerSignature Off
|
Apache è compilato con --enable-shared=max e --enable-module=all.
Ciò abilita in modo predefinito tutti i moduli, pertanto si dovrebbero
commentare, nel file di configurazioe principale
/etc/apache2/httpd.conf, tutti i moduli nella sezione
LoadModule (LoadModule e AddModule) che non si usano.
Riavviare il servizio con /etc/init.d/apache2 restart.
La documentazione è disponibile nel sito http://www.apache.org.
10.b. Bind
Si può trovare la documentazione in Internet Software
Consortium. Il BIND 9 Administrator Reference Manual è anche in
doc/arm.
I nuovi ebuild BIND supportano il chroot fuori dalla macchina. Emergere
bind e seguire queste istruzioni:
Codice 2.1: Chroot BIND |
# emerge --config bind
|
10.c. Djbdns
Djbdns è una implementazione DNS sulla sicurezza il cui autore sta
scommettendo soldi.
Funziona in modo molto differente rispetto a Bind 9, ma vale la pena provarlo.
Sono disponibili altre informazioni sul sito http://www.djbdns.org.
10.d. FTP
Generalmente, usare FTP (File Transfer Protocol) è una cattiva idea. Usa dati
non criptati (es. le password sono trasmesse in chiaro), resta in ascolto su 2
porte (20 e 21), e gli attaccanti cercano login anonimi per scambiare warez.
Poichè il protocollo FTP contiene molti problemi di sicurezza, si dovrebbe usare
sftp o HTTP. Se questo non è possibile, rendere sicuri i servizi il più
possibile e prepararsi ad eventuali problemi con la sicurezza.
10.e. Mysql
Se si ha bisogno solo di applicazioni locali per accedere al database
mysql, non commentare le seguenti righe in
/etc/mysql/my.cnf.
Codice 5.1: Disabilitare l'accesso alla rete |
skip-networking
|
Disabilitare l'uso del comando LOAD DATA LOCAL INFILE. Serve per prevenire
letture non autorizzate da file locali. È rilevante quando sono trovate nuove
vulnerabilità SQL Injection nelle applicazioni PHP.
Codice 5.2: Disabilitare LOAD DATA LOCAL INFILE nella [mysqld] sezione |
set-variable=local-infile=0
|
Si deve rimuovere il database di esempio (test) e tutti gli account tranne il
root locale.
Codice 5.3: Rimuovere il database di esempio e tutti gli utenti non necessari |
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;
|
Avvertenza:
Attenzione con i comandi sopra se si sono già configurati account utente.
|
Nota:
Se sono state cambiate le password dal prompt MySQL, si dovrebbe sempre
pulire ~/.mysql_history e /var/log/mysql/mysql.log,
poichè immagazzinano i comandi eseguiti SQL con password in chiaro.
|
10.f. Proftpd
Proftpd ha avuto molti problemi di sicurezza, ma la maggior parte di questi
sembra sia stata riparata. È una buona idea applicare alcuni miglioramenti:
Codice 6.1: /etc/proftpd/proftpd.conf |
ServerName "My ftp daemon"
#Don't show the ident of the server
ServerIdent on "Go away"
#Makes it easier to create virtual users
RequireValidShell off
#Use alternative password and group file (passwd uses crypt format)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"
# Permissions
Umask 077
# Timeouts and limitations
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20
#Chroot everyone
DefaultRoot ~
#don't run as root
User nobody
Group nogroup
#Log every transfer
TransferLog /var/log/transferlog
#Problems with globbing
DenyFilter \*.*/
|
Si può trovare la documentazione in http://www.proftpd.org.
10.g. Pure-ftpd
Pure-ftpd è una parte di trollftpd, modificato per ragioni di sicurezza e per
funzionalità da Frank Dennis.
Usare utenti virtuali (mai account di sistema) abilitando l'opzione AUTH.
Impostare questa a -lpuredb:/etc/pureftpd.pdb e creare gli utenti con
/usr/bin/pure-pw.
Codice 7.1: /etc/conf.d/pure-ftpd |
AUTH="-lpuredb:/etc/pureftpd.pdb"
## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"
|
Configurare MISC_OTHER per non permettere login anonimi (-E),
chroot per ognuno (-A), prevenire che utenti leggano o scrivano su file
che iniziano con un . (punto) (-X), massimo tempo di occupazione
(-I), ricorrenza di limite (-L), e ragionevole umask.
Avvertenza:
Non usare le opzioni -w o -W. Se si vuole avere un sito per
warez, non leggere questa guida.
|
Si può trovare la documentazione in http://www.pureftpd.org.
10.h. Vsftpd
Vsftpd (very secure ftp) è un piccolo demone che esegue una configurazione
predefinita. È semplice e non ha molte caratteristiche come pureftp e proftp.
Codice 8.1: /etc/vsftpd |
anonymous_enable=NO
local_enable=YES
#read only
write_enable=NO
#enable logging of transfers
xferlog_std_format=YES
idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist
ls_recurse_enable=NO
|
Come si può vedere, non c'è un modo per questo servizio di avere permessi
individuali, ma le impostazioni anonime sono buone. A volte può essere utile
avere un ftp server anonimo (per condividere open source), e vsftpd va bene.
10.i. Netqmail
Netqmail è spesso considerato un mail server molto sicuro. È scritto tenendo in
mente la sicurezza. Non permette come impostazione predefinita la trasmissione e
non ha avuto un problema di sicurezza dal 1996. Dare un emerge netqmail e
proseguire con la configurazione.
10.j. Samba
Samba è un protocollo per condividere file con le reti Microsoft/Novell e
non dovrebbe essere usato in Internet. Ha bisogno di alcune opzioni di
sicurezza.
Codice 10.1: /etc/samba/smb.conf |
[global]
#Bind to an interface
interfaces = eth0 10.0.0.1/32
#Make sure to use encrypted password
encrypt passwords = yes
directory security mask = 0700
#allow traffic from 10.0.0.*
hosts allow = 10.0.0.
#Enables user authentication
#(don't use the share mode)
security = user
#Disallow privileged accounts
invalid users = root @wheel
#Maximum size smb shows for a share (not a limit)
max disk size = 102400
#Uphold the password policy
min password length = 8
null passwords = no
#Use PAM (if added support)
obey pam restrictions = yes
pam password change = yes
|
Assicurarsi che i permessi siano corretti su ogni condivisione e ricordarsi
di leggere la documentazione.
Riavviare il server e aggiungere gli utenti che dovrebbero aver accesso a questo
servizio. Ciò viene fatto tramite il comando /usr/bin/smbpasswd ed
il parametro -a.
10.k. ssh
La sola sicurezza di cui OpenSSH ha bisogno è avere una autenticazione forte
basata sulla crittografia a chiave pubblica. Troppi siti (come
http://www.sourceforge.net, http://www.php.net e
http://www.apache.org) hanno sofferto di intrusioni non autorizzate
dovute a perdite di (o cattive) password.
Codice 11.1: /etc/ssh/sshd_config |
#Only enable version 2
Protocol 2
#Disable root login. Users have to su to root
PermitRootLogin no
#Turn on Public key authentication
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#Disable .rhost and normal password authentication
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
#Only allow userin the wheel or admin group to login
AllowGroups wheel admin
#In those groups only allow the following users
#The @<domainname> is optional but replaces the
#older AllowHosts directive
AllowUsers kn@gentoo.org bs@gentoo.org
#Logging
SyslogFacility AUTH
LogLevel INFO
ListenAddress 127.0.0.1
|
Verificare inoltre di non avere UsePAM yes nel file di configurazione
poichè esclude il meccanismo di autenticazione delle chiavi pubbliche, oppure
disabilitare una delle due voci PasswordAuthentication o
ChallengeResponseAuthentication. Si possono trovare maggiori informazioni
riguardo a queste opzioni nella pagina di manuale di sshd_config.
Tutti gli utenti devono creare una chiave (sulla macchina in cui vogliono
loggarsi) con il seguente comando:
Codice 11.2: Creare le chiavi DSA |
# /usr/bin/ssh-keygen -t dsa
|
E digitare la pass phrase.
Codice 11.3: Output di ssh-keygen |
Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Press enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Enter passphrase]
Enter same passphrase again: [Enter passphrase again]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen
|
Questo aggiungerà due file nella directory ~/.ssh/, chiamati
id_dsa e id_dsa.pub. Il file id_dsa è
la chiave privata e non dovrebbe essere vista da altri utenti. Il file
id_dsa.pub va distribuito a ogni server in cui si ha accesso.
Aggiungere la chiave nella directory home dell'utente in
~/.ssh/authorized_keys e l'utente dovrebbe poter loggarsi:
Codice 11.4: Aggiungere il file id_dsa.pub al file authorized_keys |
$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys
|
Gli utenti dovrebbero proteggere la chiave privata. Metterla in un
dispositivo che si porta sempre con sè o tenerla nella workstation (mettere
questo nella politica delle password).
Per altre informazioni andare nel sito web OpenSSH.
10.l. Usare xinetd
xinetd è un rifacimento di inetd (che Gentoo non ha), il demone di
servizi Internet. Supporta controllo di accesso basato sull'indirizzo dell'host
remoto e il tempo di accesso. Fornisce varie possibilità di login, incluso il
tempo di avvio del server, indirizzo dell'host remoto, il nome dell'utente
remoto, il tempo di esecuzione del server, e azioni richieste.
Come per tutti gli altri servizi è importante avere una buona configurazione
predefinita. Poichè xinetd è eseguito da root e supporta protocolli di
cui si potrebbe non conoscere il funzionamento, si raccomanda di non usarlo. Ma
se comunque lo si volesse provare, ecco alcune opzioni di sicurezza:
Codice 12.1: Installare xinetd |
# emerge xinetd tcp-wrappers
|
Modificare il file di configurazione:
Codice 12.2: /etc/xinetd.conf |
defaults
{
only_from = localhost
instances = 10
log_type = SYSLOG authpriv info
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
# This will setup pserver (cvs) via xinetd with the following settings:
# max 10 instances (10 connections at a time)
# limit the pserver to tcp only
# use the user cvs to run this service
# bind the interfaces to only 1 ip
# allow access from 10.0.0.*
# limit the time developers can use cvs from 8am to 5pm
# use tpcd wrappers (access control controlled in
# /etc/hosts.allow and /etc/hosts.deny)
# max_load on the machine set to 1.0
# The disable flag is per default set to no but I like having
# it in case of it should be disabled
service cvspserver
{
socket_type = stream
protocol = tcp
instances = 10
protocol = tcp
wait = no
user = cvs
bind = 10.0.0.2
only_from = 10.0.0.0
access_times = 8:00-17:00
server = /usr/sbin/tcpd
server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
max_load = 1.0
log_on_failure += RECORD
disable = no
}
|
Per altre informazioni leggere man 5 xinetd.conf.
10.m. X
Come impostazione predefinita Xorg è configurato per essere un Xserver. Può
essere pericoloso poichè X usa connessioni TCP non criptate e resta all'ascolto
di xclient.
Importante:
Se non serve questo servizio, disabilitarlo.
|
Ma se si usa la workstation come Xserver, usare il comando
/usr/X11R6/bin/xhost con cautela. Questo comando permette ai client di
altri host di connettersi e di usare il proprio display. Può essere di aiuto
se si fa uso di un'applicazione X da una macchina differente e il solo modo è
usare la rete, ma può anche essere sfruttato da un attaccante. La sintassi di
questo comando è /usr/X11R6/bin/xhost +hostname
Avvertenza:
Non usare la caratteristica xhost +. Questa permette a ogni client di
connettersi e prendere il controllo del proprio X. Se un attaccante ottiene
accesso a X, può risalire ai propri comandi e prendere il controllo del
desktop. Se si deve usarlo, ricordarsi sempre di specificare un host.
|
Una soluzione più sicura è disabilitare questa caratteristica avviando X con
startx -- -nolisten tcp o disabilitarla nella configurazione.
Codice 13.1: /usr/X11R6/bin/startx |
defaultserverargs="-nolisten tcp"
|
Per assicurarsi che startx non sia sovrascritto quando si emerge
una nuova versione di Xorg, si deve proteggerlo. Aggiungere la seguente riga
a /etc/make.conf:
Codice 13.2: /etc/make.conf |
CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"
|
Se si usa un login manager grafico, serve un metodo diverso.
Per gdm (Gnome Display Manager)
Codice 13.3: /etc/X11/gdm/gdm.conf |
[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp
|
Per xdm (X Display Manager) e kdm (Kde Display Manager)
Codice 13.4: /etc/X11/xdm/Xservers |
:0 local /usr/bin/X11/X -nolisten tcp
|
[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|