Category Archives: Linux

Schedulare un comando in Linux con Cron

Utilizzando cron è possibile schedulare l’esecuzione di comandi in Linux.
Ogni comando schedulato in questo modo viene chiamato cron job e la lista delle schedulazioni viene archiviata in un file chiamato crontab.

Questo file contiene un cron job per riga e utilizza il seguente formato
minuto ora giorno del mese mese giorno della settimana comando

I campi possono contenere il simbolo * che indica tutti i valori possibili del campo.

0 12 * * * test
In questo esempio il comando test è schedulato per essere eseguito tutti i giorni di tutti i mesi alle ore 12.

Le ore e le date possono anche contenere un intervallo
0 14,15 1-14 * Mon-Wed prova
In questo esempio il comando prova viene eseguito i primi 14 giorni del mese di tutti i mesi nei giorni della settimana che vanno dal Lunedi al Mercoledi alle ore 14:00 e 15:00.

Per aggiungere una schedulazione o modificare quelle presenti è necessario utilizzare il comando
# crontab -e

La rimozione di tutte le schedulazioni può essere effettuata con
# crontab -r

Mentre per vedere i cron job è possibile utilizzare
# crontab -l

Installare Drop Bear in un ambiente chroot

Drop Bear è un server SSH 2 piuttosto leggero e rappresenta un’alternativa a openssh per i server in cui le risorse sono particolarmente limitate.

Howtoforge propone un’interessante guida per l’installazione di Drop Bear in un ambiente chroot.

Installazione
La prima cosa da fare è scariacare l’archivio dal sito ufficiale.
wget -c http://matt.ucc.asn.au/dropbear/releases/dropbear-0.52.tar.bz2

L’archivio può poi essere estratto.
tar jxf dropbear-0.52.tar.bz2

In questo esempio si è deciso di utilizzare /chroot/dropbear come root dell’ambiente chroot.
cd dropbear-0.52
./configure –prefix=/chroot/dropbear

Terminata la configurazione è possibile compilare l’applicazione e installarla
make
make install

Configurazione
Una volta installata l’applicazione, è necessario creare le chiavi dss e rsa per il server ssh.
La prima cosa da fare è creare una cartella per le chiavi.
mkdir -pv /chroot/dropbear/etc/dropbear

/chroot/dropbear/bin/dropbearkey -t dss -f /chroot/dropbear/etc/dropbear/dropbear.dss
/chroot/dropbear/bin/dropbearkey -t rsa -s 4096 -f /chroot/dropbear/etc/dropbear/dropbear.rsa

La fase successiva consiste nel verificare le librerie necessarie per eseguire Drop Bear all’interno dell’ambiente chroot.
ldd /chroot/dropbear/sbin/dropbear

Con i seguenti comandi è possibile creare la struttura dell’ambiente chroot per Drop Bear.
cd /chroot/dropbear/
mkdir -pv dev/pts proc etc lib usr/lib var/run var/log

A questo punto le librerie necessarie vengono copiate nella struttura creata.
cp /lib/libutil.so.1 lib/
cp /usr/lib/libz.so.1 usr/lib/
cp /lib/libcrypt.so.1 lib
cp /lib/libc.so.6 lib/
cp /lib/ld-linux.so.2 lib/
cp /lib/libnss_dns.so.2 lib/
cp /lib/libnss_files.so.2 lib/

Oltre alle librerie, è necessario copiare anche i seguenti file nell’ambiente chroot.
cp /etc/localtime etc/
cp /etc/nsswitch.conf etc/
cp /etc/resolv.conf etc/
cp /etc/host.conf etc/
cp /etc/hosts etc/
touch var/log/lastlog
touch var/run/utmp
touch var/log/wtmp

Terminata la copia, è possibile creare nell’ambiente chroot le periferiche richiese da Drop Bear
cd /chroot/dropbear
mknod dev/urandom c 1 9
chmod 0666 dev/urandom
mknod dev/ptmx c 5 2
chmod 0666 dev/ptmx
mknod dev/tty c 5 0
chmod 0666 dev/tty

La fase successiva consiste nell’aggiungere gli utenti all’ambiente chroot.
In besto esempio viene aggiunto un utente esistente chiamato user1.
grep ^user1 /etc/passwd > etc/passwd
grep ^user1 /etc/group > etc/group
grep ^user1 /etc/shadow > etc/shadow
mkdir home/user1
chown user1.user1 !$

Gli utenti hanno bisogno di una shell e in qusto caso viene utilizzato busybox
cp /etc/shells etc/
sed -i ‘s/bash/sh/’ etc/passwd
cd bin
wget -c http://busybox.net/downloads/binaries/1.16.0/busybox-i686
mv busybox-i686 busybox
chmod 0755 busybox
ln -s busybox sh
cd ../

A questo punto è necessario creare i mount point per permettere all’ambiente chroot di accedere al terminale e al filesystem proc.
mount -o bind /dev/pts dev/pts/
mount -o bind /proc proc/

Terminata questa operazione è possibile eseguire Drop Bear nell’ambiente chroot
chroot /chroot/dropbear/
/sbin/dropbear
-b /etc/dropbear/dropbear.banner
-d /etc/dropbear/dropbear.dss
-r /etc/dropbear/dropbear.rsa
-m -w -g

Configurare Lighttpd per l’utilizzo di Php

In questa breve guida vediamo come configurare Lighttpd per l’utilizzo di Php, il presupposto è quindi un server su cui Lighttpd è già stato installato.

-Installare lighttpd-fastcgi e php-cli

yum install lighttpd-fastcgi php-cli

-Modificare il file /etc/php.ini inserendo la seguente riga alla fine del file.
cgi.fix_pathinfo = 1

-Modificare il file di configurazione di Lighttpd, /etc/lighttpd/lighttpd.conf, togliendo il commento dalla riga mod_fastcgi
server.modules              = (
#                               “mod_rewrite”,
“mod_fastcgi”,

-Abilitare fastcgi nel file lighttpd togliendo il commento dalla sezione fastcgi.module
#### fastcgi module
## read fastcgi.txt for more info
## for PHP don’t forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server             = ( “.php” =>
( “localhost” =>
(
“socket” => “/var/run/lighttpd/php-fastcgi.socket”,
“bin-path” => “/usr/bin/php-cgi”
)
)
)

-Verificare la sintassi del file di configurazione
lighttpd -t -f /etc/lighttpd/lighttpd.conf

-Avviare Lighttpd
service lighttpd restart

Creare una certification authority in Linux

Per utilizzare SSL su un sistema Linux è possibile implementare OpenSSL.

Una volta scaricati e scompattati i sorgenti bisogna portarsi nella directory e eseguire

./config –prefix=/usr -openssldir=/usr/share/ssl shared

L’opzione shared indica a OpenSSL di creare sia le shared libraries che le static libraries
Una volta effettuata la configurazione è possibile procedere con l’installazione

make
make test
make install

A questo punto è possibile procedere con la creazione della CA.
Bisogna spostarsi nella directory in cui si vogliono tenere i certificati

cd /etc/ssl/certs

e poi avviare la creazione

/usr/share/ssl/misc/CA -newca
CA certificate filename (or enter to create)
Making CA certificate …
Generating a 1024 bit RSA private key
….++++++
…………………….++++++
writing new private key to ‘./demoCA/private/./cakey.pem’
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:IT
State or Province Name (full name) [Berkshire]:Torino
Locality Name (eg, city) [Newbury]:Torino
Organization Name (eg, company) [My Company Ltd]:prova.test
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:server
E-mail Address []:admin@prova.test

Dopo questo è necessario creare un file di configurazione per la nuva CA

cp /usr/share/ssl/openssl.cnf /etc/ssl/certs/demoCA/openssl.cnf

con questo comando si copia il file di esempio nella directory generata dalla creazione della nuova CA.
Nel file che si è copiato è necessario verificare che siano corretti i parametri relativi alla directory in cui si trova la CA
Quindi in questo esempio bisognerà modificare la linea

dir            =./demoCA

in

dir            =/etc/ssl/certs/demoCA

In questo file inoltre è possibile modificare i dati relativi alla nazione.

Nella stessa directory bisogna creare il file relativo al certificato della CA eseguendo il seguente comando

openssl genrsa -out server.pem -des3 1024

A questo punto è possibile iniziare a creare e firmare i propri cerificati.
Per creare un certificato bisogna prima creare una richiesta che verrà poi passata alla CA.

openssl req -config /etc/ssl/certs/demoCA/openssl.cnf -new -keyout server.prova.test.pem -out server.prova.test.csr

Durante la creazione del certificato vengono richieste una serie di informazioni tra le quali la più importante è quella relativa al common name.
Il common name deve corrispondere all’hostname per cui viene creato il certificato.
Al termine dell’operazione vengono creati due file che consistono nella chiave e nella richiesta di certificato per il sistema.
A questo punto la richiesta di certificato deve essere inviata alla CA creata.

openssl ca -config /etc/ssl/certs/demoCA/openssl.conf -policy policy_anything -out server.prova.test.cert.pem -infiles server.prova.test.csr

In questo modo viene generato il file server.prova.test.cert.pem che rappresenta il certificato e si può eliminare il filre .csr realativo alla richiesta

Integrare ClamAV e PureFTPd in Debian

Se si mette a disposizione un servizio ftp, può essere utile controllare i file che vengono caricati con un antivirus.

In questo articolo viene descritto come integrare ClamAV e PureFTPd in modo che quando un file viene caricato attraverso il servizio ftp, l’antivirus esegue un controllo relativo alla presenza di virus.

Il presupposto della guida è che PureFTPd sia già installato e configurato sul proprio server.
L’installazione di ClamAV può essere eseguita con il seguente comando
aptitude install clamav clamav-daemon

A questo punto viene creato il file /etc/pure-ftpd/conf/CallUploadScript in cui è contenuta la stringa yes.
echo “yes” > /etc/pure-ftpd/conf/CallUploadScript

La fase successiva consiste nel creare lo script /etc/pure-ftpd/clamav_check.sh attraverso il quale viene eseguito clamdscan quando viene fatto l’upload di un file.
Il contenuto dello script è il seguente
#!/bin/sh
/usr/bin/clamdscan –remove –quiet –no-summary “$1″

Ovviamente devono essere assegnati i permessi corretti per permettere l’esecuzione

chmod 755 /etc/pure-ftpd/clamav_check.sh

A questo punto è possibile modificare il file /etc/default/pure-ftpd-common
vi /etc/default/pure-ftpd-common

All’interno di questo file bisogna individuare la riga UPLOADSCRIPT e modificarla nel modo seguente
# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl
UPLOADSCRIPT=/etc/pure-ftpd/clamav_check.sh

Una volta effettuata la modifica, è possibile riavviare PureFTPd
/etc/init.d/pure-ftpd-mysql restart

Quando viene effettuato l’upload di un file, l’antivirus controllerà se questo contiene un virus.

Installare Cassandra su un server Debian

Cassandra è un tipo di database sviluppato per permettere la gestione di un numero elevato di dati presenti su più server.
Si tratta di un database che può essere classificato tra quelli NOSQL, Not Only SQL, una categoria che include database non relazionali.

Cassandra è stato sviluppato inizialmente dagli sviluppatori di Facebook, il progetto è poi passato alla Apache Software Foundation, che attualmente lo gestisce.

Si tratta di un database che si sta diffondendo piuttosto rapidamente e che attualmente è utilizzato da grandi siti come Facebook, Twitter, Digg e OpenX.

In questa breve guida vediamo come installare Cassandra su un server Debian.
-Modificare la lista dei repository aggiungendo le seguenti righe.
sudo vi /etc/apt/sources.list

deb http://www.apache.org/dist/cassandra/debian unstable main
deb-src http://www.apache.org/dist/cassandra/debian unstable m
ain

-Eseguire update
sudo apt-get update 
A questo punto viene visualizzato un errore simile al seguente
GPG error: http://www.apache.org unstable Release: The following signatures couldn’t be verified because the public key is not available NO_PUBKEY F758CE318D77295D

Questo significa che è necessario aggiungere la Public Key utilizzando i seguenti comandi
gpg –keyserver wwwkeys.eu.pgp.net –recv-keys F758CE318D77295D
gpg –export –armor F758CE318D77295D | sudo apt-key add –

-Eseguire update e installare Cassandra.
sudo apt-get update
sudo apt-get install cassandra

-Avviare Cassandra
sudo /etc/init.d/cassandra start

L’installazione a questo punto è terminata.
I file di configurazione si trovano nella cartella /etc/cassandra.
Il file /etc/cassandra/storage-conf.xml permette di configurare i parametri di configurazione principali.

Installare Nagios 3 su CentOS

Nagios non si trova nei repository ufficiali di Red Hat e CentOS per cui se si vuole utilizzare yum per l’installazione è necessario prima installare il repository RPMForge nella propria configurazione.

Per fare questo è necessario acedere al sito http://dag.wieers.com/rpm/FAQ.php#B e trovare il comando da eseguire per l’installazione del repository

# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

A questo punto è necessario installare Yum priorities in modo da evitore che i pacchetti provenienti da RPMForge abbiano la precedenza sul quelli ufficiali

# yum install yum-priorities

La configurazione di yum-prioriries viene effettuata modificando il file /etc/yum.repos.d/CentOS-Base.repo o il file equivalente su un’altra distribuzione.
In questo file è necessario aggiungere la riga

priority=1

nelle sezioni
base
addons
updates
extras

Nelle sezioni centoplus e contrib deve essere aggiunta la riga

priority=2

Terminata questa operazione è necessario modificare il file /etc/yum.repos.d/rpmforge.repo.file aggiungendo la seguente riga

priority=11

A questo punto è possibile installare Nagios
# yum install nagios nagios-plugins

Terminata l’installazione è possibile creare l’utente per l’accesso al sito web in /etc/nagios
htpasswd -c htpasswd.users nagios

Dopo il riavvio di apache nagios sarà raggiungibile all’indirizzo http//nomeserver/nagios e sarà possibile iniziare la configurazione.

Installare Lighttpd su CentOs

Lighttpd è un server web che si caratterizza per le prestazioni elevate e il consumo limitato di risorse.

In questa breve guida vediamo come installare Lighttpd in CentOS

-Lighttpd è disponibile nei repository di RPMForge, come prima cosa bisogna quindi installare RMPForge
rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

-A questo punto è possibile installare Lighttpd attraverso Yum
yum install lighttpd

-Una volta terminata l’installazione è necessario creare la directory per Lighttpd nella cartella run e assegnare i permessi corretti.
mkdir -p /var/run/lighttpd
chown lighttpd /var/run/lighttpd

-Avviare il server web
service lighttpd start

A questo punto l’installazione è completata e Lighttpd è in esecuzione, per personalizzare la configurazione è necessario modificare il file /etc/lighttpd/lighttpd.conf.

Installare e configurare Monit

Monit è uno strumento che permette di gestire e controllare processi, file e directory su un server Linux.
L’applicazione può essere configurata per eseguire determinate azioni quando rileva un problema, un esempio è l’esecuzione di un processo quando questo risulta non attivo.

Per installare Monit, è necessario scaricare i file di installazione dal sito ufficiale all’indirizzo http://mmonit.com/download

cd /usr/local/src
wget http://mmonit.com/monit/dist/monit-5.1.1.tar.gz
tar -zxvf monit-5.1.1.tar.gz
cd monit-5.1.1
./configure –sysconfdir=/etc/monit/
make && make install

Al termine dell’operazione è possibile eliminare i file sorgente.
rm -Rf /usr/local/src/monit* && cd

La fase successiva consiste nel creare il file di configurazione.
mkdir /etc/monit/
mkdir /etc/monit/cfg
cd /etc/monit/
nano -w /etc/monit/monitrc

Il contenuto del file sarà simile al seguente
set daemon  60
set logfile /var/log/monit.log
set mailserver localhost
set alert change@me.net

# Set mail notification options:
set mail-format {
from: monit@changeme.net
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST,

Yours sincerely,
AI
}

## Inbuilt httpd
## Disabled the httpd for extra security. Use it at your own risk.
#set httpd port 3500 and
## Change the username and password if you activate the inbuild httpd solution
#allow admin:monit

## httpd access control
#allow localhost
#allow 10.0.0.10

Vediamo ora più nel dettaglio il significato dei parametri presenti all’interno del file di configurazione.
set daemon  60 – Specifica ogni quanti secondi deve essere effettuato il controllo.
set logfile /var/log/monit.log – Specifica il file di log di Monit. In questo caso si utilizza un file ma potrebbe anche essere utilizzato syslog modificando il parametro in set logfile syslog facility log_daemon.
set mailserver localhost – Specifica il server di posta da utilizzare per inviare le mail di segnalazione. In questo caso viene utilizzato il server di posta installato localmente, nel caso si volesse utilizzare gmail, il parametro da usare sarebbe set mailserver smtp.gmail.com port 587 username “myemail@gmail.com” password “password” using tlsv1 with timeout 30 seconds.
set alert – Specifica l’indirizzo mail a cui devono essere inviate le segnalazioni.
set mail-format – Definisce il formato delle notifiche che vengono inviate tramite mail.

Nella sezione successiva del file viene definita l’interfaccia web dell’applicazione, in questo caso i parametri sono commentati perchè si è preferito disabilitarla.

Dopo che è stato creato il file, è necessario modificare i permessi in modo che sia accessibile solo da root.
chmod 700 /etc/monit/monitrc

Risulta inoltre importante creare il file di log specificato nel file di configurazione.
touch /var/log/monit.log

Se si vuole eseguire monit come servizio, è necessario creare uno script all’interno di /etc/init.d

cd /etc/init.d/
nano monit

#!/bin/bash
#
# Init file for Monit process monitor.
#
# Written by Dag Wieers <dag@wieers.com>.
#
# chkconfig: – 98 02
# description: Monit Process Monitor
#
# processname: monit
# config: /etc/monit.conf
# pidfile: /var/run/monit

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

MONIT=/usr/local/bin/monit

# Source monit configuration.
if [ -f /etc/sysconfig/monit ] ; then
. /etc/sysconfig/monit
fi

[ -f $MONIT ] || exit 0

RETVAL=0

# See how we were called.
case “$1″ in
start)
echo -n “Starting monit: ”
daemon $NICELEVEL $MONIT
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/monit
;;
stop)
echo -n “Stopping monit: ”
killproc monit
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/monit
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
condrestart)
[ -e /var/lock/subsys/monit ] && $0 restart
;;
status)
status monit
RETVAL=$?
;;
*)
echo “Usage: $0 {start|stop|restart|condrestart|status}”
exit 1
esac

exit $RETVAL

chmod +x /etc/init.d/monit
chkconfig –levels 235 monit on

A questo punto monit è configurato per essere eseguito all’avvio del sistema, non sono però ancora stati definiti i controlli che l’appplicazione deve effettuare.
Per fare questo è necessario modificare il file di configurazione di monit.

Controllo di sistema
check system CHANGEHOSTNAME
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert

Aggiungendo questo contenuto al file di configurazione di Monit, l’applicazione controllerà l’utilizzo della memoria e del processore.
Quando i limite vengono superati, Monit invia una mail di avviso.

Controllo SSHD
check process sshd with pidfile /var/run/sshd.pid
start program  “/etc/init.d/sshd start”
stop program  “/etc/init.d/sshd stop”
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

Il processo sshd viede avviato se risulta non in esecuzione.

Controllo Apache
check process httpd with pidfile /var/run/httpd.pid
group apache
start program  “/etc/init.d/httpd start”
stop program  “/etc/init.d/httpd stop”
if failed host localhost port 80 protocol http
and request “/” then alert
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then alert
if 3 restarts within 5 cycles then timeout

Controllo MySQL
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = “/etc/init.d/mysql start”
stop program = “/etc/init.d/mysql stop”
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql then alert

Come è possibile vedere da questi esempi, Monit permette di personalizzare i controlli da effettuare in modo piuttosto semplice.

Sul sito ufficiale è disponibile documentazione molto dettagliata per approfondire la conoscenza relativa al funzionamento dell’applicazione.

Installare Aide in CentOS

Aide è un intrusion detection system, un’applicazione che permette di individuare accessi non autorizzati al proprio sistema.
In questa breve guida vediamo come installare e configurare Aide in CentOS.

L’installazione è molto semplice visto che può essere eseguita attraverso yum con il seguente comando.

yum install aide

Generalmente la configurazione di default non richiede particolari modifiche, a meno che non si siano spostati file rispetto alla posizione originale nella distribuzione.
La configurazione può essere verificata e modificata accedendo al file /etc/aide.conf.

Terminata l’installazione e la configurazione iniziale, è possibile inizializzare il database di Aide.
/usr/sbin/aide –init

L’applicazione analizzerà il sistema e la situazione attuale, l’operazione può quindi richiedere alcuni minuti.

Al termine è possibile verificare il corretto funzionamento di Aide.
cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
/usr/sbin/aide –check

In questo modo copiamo il database iniziale all’interno di quello attuale e li confrontiamo, teoricamente non dovrebbero essere rilevate differenze.

Risulta quindi possibile schedulare un controllo periodico attraverso cron.
Una soluzione consiste nel creare un file aide.cron all’interno della cartella /etc/cron.weekly con il seguente contenuto.

!/bin/bash
/usr/sbin/aide –check | /bin/mail -s “Weekly Aide Data” email@host.com

In questo modo sarà eseguito un controllo ogni settimana.