Archivio della categoria 'Sistema'

Cambiare i permessi di una directory ricorsivamente

Open Source, Shell, Sistema, Tips & tricks 2 commenti »

Pubblico qui una tip di poche, pochissime parole per una persona che mi ha chiesto come si possano cambiare ricorsivamente i permessi di tutto il contenuto di una directory in maniera corretta e - soprattutto - indolore. Posto che vogliamo assegnare ai file permessi 644 e alle directory 755 - come sempre andrebbe fatto - è sufficiente spostarsi nella directory in questione e lanciare i comandi che seguono:

find . -type f -print0 | xargs -0 chmod 644

find . -type d -print0 | xargs -0 chmod 755

Altro non serve…

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Monitoraggio delle code di posta con Postfix

Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Postfix è considerato da tempo uno tra i migliori MTA in circolazione. Scritto inizialmente da Wietse Zweitze Venema e rilasciato sotto IBM Public License, Postfix può vantare una solidità ed una facilità di interazione introvabili in altri demoni di posta SMTP.

La scelta di distribuire le sue funzionalità su diversi demoni - ognuno dei quali svolge una funzione specifica - e l’attribuzione di diritti minimi di esecuzione ad ognuno di essi, garantisce che un eventuale bug o exploit non possa compromettere l’intero MTA. Un solo processo deve essere eseguito con privilegi di root, tutti gli altri hanno diritti minimi e spesso un file di configurazione proprio.

Questa distribuzione di compiti si traduce anche nella disponibilità di diversi strumenti specificamente dedicati a svolgere funzioni di monitoraggio e di amministrazione dei processi generati da Postfix. Alcuni di questi strumenti sono parte integrante di Postfix, mentre altri costituiscono elementi accessori - spesso sviluppati da terze parti - che interagiscono con esso a vari livelli.

Il monitoraggio delle code di posta, ad esempio, può avvenire mediante il programma `mailq`:

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
6CC39230001* 1389 Wed Jun 25 01:17:51 5tanya.wuhc@msa.hinet.net
test@dominio.it

Rimando i newbie al solito `man mailq` per le informazioni principali su come funziona il programma. Quello che segue è invece un esempio di come si possa utilizzare al meglio `mailq` per rimuovere la posta bloccata dallo spool locale:

# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`

Il normale utilizzo di `mailq` può essere ostacolato dalla presenza di code di posta molto voluminose. In questi casi è bene ricorrere allo script `qshape` per avere una quadro chiaro su cosa abbia determinato l’accumulo di messaggi e quando sia accaduto:

$ qshape -s deferred | head
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 1250 0 1 2 4 5 22 34 118 242 822
spammer123.com 462 0 1 0 1 1 3 7 15 53 381
zzfinder.com 64 0 0 0 0 0 1 0 0 4 59
socket4you.biz 53 0 0 0 0 0 0 0 0 0 53
junglex.com 36 0 0 0 0 0 1 3 7 15 10
myemessage.com 36 0 0 0 0 0 0 0 0 0 36
stock911.us 35 0 0 0 0 0 0 0 0 0 35
linuxassistance.it 33 0 0 0 0 0 0 0 0 0 33
agliardi.biz 29 0 0 0 0 0 0 0 0 3 26

Qui si vede come ci siano 1250 messaggi in coda per i quali è stato fatto almeno un tentativo di spedizione (deferred), di cui 462 sono indirizzati al dominio spammer123.com. Delle email inviate a questo dominio 1 è in coda per un periodo di tempo compreso fra 5 e 10 minuti, mentre 381 sono in attesa da più di 1280 minuti.

Il comando che segue serve invece per visualizzare le statistiche legate al numero di destinatari delle mail presenti nella coda “active” di Postfix:

qshape active | less

In questo modo siamo in grado di individuare in ogni momento eventuali “colli di bottiglia”, ovvero invii di posta elettronica anomali che si accumulano nella coda di Postfix degradandone nettamente le prestazioni. Una volta individuati simili processi, li si può debellare con l’ausilio del comando `postsuper`:

postsuper [-psv] [-c directory_file_conf] [-d][-h][-H][-r] [id_coda] [directory_coda]

Per eliminare, ad esempio, il messaggio con ID di coda 6CC39230001 (ovvero quello riportato nell’esempio fatto sopra) è sufficiente lanciare il comando:

# postsuper -d 6CC39230001

Se invece, a vostro rischio e pericolo, volete svuotare completamente le code di posta, potete sempre ricorrere al seguente comando:

# postsuper -d ALL deferred

Ma se mai doveste perdere messaggi di posta elettronica a causa dell’utilizzo di questo secondo esempio, non ve la prendete con me.

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Analizzare i transfer log (xferlog) di proftpd

Debian, Open Source, Shell, Sistema, Tips & tricks 2 commenti »

Proftpd traccia qualsiasi operazione nel file di log denominato xferlog. In effetti molti altri demoni FTP scrivono i log in un file con lo stesso nome e adottando lo stesso formato, quindi questa tip può interessare anche chi utilizza, ad esempio, Wu-Ftpd o altri FTP standard BSD.

Il file xferlog si trova di solito in una delle seguenti directory:

/var/log
/var/log/proftpd/xferlog
/var/www/vhosts/{DOMAIN}/statistics/logs/xferlog_regular*

L’ultimo caso particolare riguarda solo i server amministrati con Plesk.

L’ultimo carattere riportato in ogni riga del xferlog mostra il modo in cui si è completato il trasferimento. Se il carattere è “c” significa che l’operazione si è completata con successo; se il carattere è “i” significa - al constrario - che l’operazione non è stata copmpletata e il trasferimento ha avuto pertanto esito negativo.

Questo comando restituisce tutti i trasferimenti incompleti:

egrep "i$" /path/to/xferlog

I tre caratteri che seguono il nome del file rappresentano nell’ordine:

  1. il tipo di trasferimento (a=ascii, b=binary)
  2. ogni eventuale azione particolare intrapresa (di norma viene riportato il carattere “_” che corrisponde a “nessuna azione”)
  3. la direzione del trasferimento (o=outgoing, i=incoming, d=deleted)

Per estrarre - ad esempio - una lista di tutti i file uploadati con successo:

awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog

Al contrario, per estrarre una lista di tutti i file il cui upload è fallito:

awk '($12 ~ /^i$/ && $NF ~ /^i$/){print $9}' /var/log/proftpd/xferlog

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Eliminare i vecchi messaggi di posta con uno script (python)

Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Mi è capitato in questi giorni di dover ripulire le mailbox di alcuni clienti svuotandole di tutti i messaggi più vecchi di un certo numero di giorni. Volendo automatizzare questa operazione piuttosto noiosa, ho spulciato fra le mie vecchie cose ed ho ritrovato uno script che assolve egregiamente il compito. Si tratta del programma cleanup-maildir scritto nel linguaggio di programmazione Python e dotato di una serie di funzionalità avanzate per la manipolazione delle Maildir.

Senza entrare troppo nel dettaglio (chi vuole può lanciare il programma con il consueto parametro “-h”) ecco il comando con cui si possono cancellare definitivamente tutti i messaggi più vecchi di 90 giorni:

./cleanup-maildir --age=90 --maildir-root='/home/nomeutente/Maildir' delete ''

Più semplice di così… Di seguito metto a disposizione lo script originale, anche se suggerisco di tenere d’occhio questo link per una versione sempre aggiornata:

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Mamma, ho scordato la password di root!

Debian, Shell, Sistema, Tips & tricks Nessun commento »

Per la serie RTFM, riporto di seguito le istruzioni in italiano riportate sulla documentazione ufficiale di Debian per il recupero della password di root. Lo faccio ad uso e consumo di una persona molto pigra che me lo ha chiesto.

8.1.1 “Ho scordato la password di root!” (1)

E’ possibile fare il boot del sistema ed accedere all’account di root, anche se non se ne conosce la password, basta avere accesso alla tastiera. (Premesso che che non esistono altre password richieste dal BIOS, o dal boot-loader tipo lilo che possono impedirvi l’accesso al sistema).

Questa procedura non richiede alcun disco di boot, nè cambiamenti al BIOS. In questo contesto, “Linux” è l’etichetta per lanciare il kernel in una installazione Debian standard.

Alla schermata di boot di lilo, non appena appare boot: (in alcuni sistemi si deve premere il tasto maiuscolo per prevenire il boot automatico) e se lilo usa il framebuffer dovete premere TAB per vedere le opzioni che digitate), date:

boot: Linux init=/bin/sh

Il sistema avvia il kernel ed esegue /bin/sh invece dello standard init. A questo punto avete ottenuto i privilegi di root e la shell di root. Siccome, però / è montata in sola lettura e molte altre partizioni non sono state ancora montate, avete bisogno di eseguire quanto segue per avere un sistema ragionevolmente funzionante.

init-2.03# mount -n -o remount,rw /
init-2.03# mount -avt nonfs,noproc,nosmbfs
init-2.03# cd /etc
init-2.03# vi passwd
init-2.03# vi shadow

(Se il secondo campo di dati all’interno di /etc/passwd è “x” per ogni username, il vostro sistema usa le shadow password, per cui dovrete modificare /etc/shadow.) Per disabilitare la password di root, modificate il secondo campo nel file password in maniera che risulti vuoto. Ora potete fare il reboot ed il log in come root senza una password. Quando fa il boot nel runlevel 1, Debian (almeno dopo Potato) richiede una password, mentre alcune distribuzioni più vecchie no.

E’ buona cosa avere un piccolo editor in /bin nel caso in cui /usr non fosse accessibile (vedere Editor di salvataggio, Sezione 11.2).

Considerate anche l’installazione del pacchetto sash. Se il sistema diventa non più avviabile, eseguite:

boot: Linux init=/bin/sash

sash funziona come sostituto interattivo di sh persino quando /bin/sh è inutilizzabile. Ha un collegamento statico ed include molte utilità di base al suo interno (digitate “help” al prompt per una lista di riferimento).

8.1.2 “Ho scordato la password di root!” (2)

Fate il boot da qualunque set di dischi di emergenza boot/root. Se, per esempio, /dev/hda3 è la partizione di root originale, i seguenti comandi permetteranno di aprire il file password facilmente come sopra.

# mkdir fixit
# mount /dev/hda3 fixit
# cd fixit/etc
# vi shadow
# vi passwd

Il vantaggio di questo approccio rispetto al metodo precedente è che non richiede la conoscenza della password di lilo (se esiste). Però, bisogna essere in grado di impostare il BIOS, se non lo è già, in modo che il boot del sistema sia da floppy o da CD.

Fonte: http://www.debian.org/doc/manuals/reference/ch-tips.it.html

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

ext3birra e recupero di file cancellati su Linux

Backup, Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Non dovrebbe. Ma può senz’altro succedere che si cancelli un file per errore e lo si voglia recuperare. Ci sono svariati tool a pagamento per effettuare questo tipo di operazione su filesystem FAT32 e NTFS sotto Windows. Anche il nostro pinguino offre più di uno strumento simile per recuperare file cancellati su filesystem EXT3. Uno fra questi è ext3birra, un programma per Linux il cui nome inconfondibilmente italico deriva dal nickname del programmatore che l’ha ideato.

Da quanto si legge sul sito ufficiale del progetto, questo utilissimo programma è stato scritto in soli 5 giorni e permette di recuperare solo file eliminati recentemente (entro le 24 ore).

Ecco come utilizzare il s/w:

  • scaricare il programma da questo indirizzo
  • estrarre i file con il consueto comando:
    tar -jxvf ext3birra*.tar.bz2
  • spostarsi nella cartella così creata e lanciare il comando:
    make && make install
  • terminata la compilazione, per usare ext3birra è sufficiente lanciare il comando:
    ext3birra [device] [output directory]

Ecco ad esempio come si possono recuperare i files precedentemente eliminati dalla partizione sda1, ripristinandoli nella directory temporanea /tmp/recupero_dati/:

ext3birra /dev/sda1 /tmp/recupero_dati/

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Ancora Debian: scadenza di default dei certificati SSL

Debian, Sistema, Tips & tricks Nessun commento »

Capita quasi ogni giorno di dover generare nuovi certificati per un server di posta elettronica o per un sito Internet che gira sotto https. Con Debian si possono effettuare entrambe le operazioni da linea di comando, aiutati anche dall’ambiente pseudografico (ncurses) di make-ssl-cert:

La durata standard del certificato è però di soli 365 giorni, il che costringe ad intervenire sul server ogni volta che il certificato scade. Un intervento di questo tipo può avere senso in alcune particolari situazioni, ma non ne ha affatto quando il certificato serve solo ed esclusivamente a proteggere la connessione tra client e server.

Modificare la scadenza di default dei certificati SSL è però semplicissimo, basta aggiornare il valore del parametro default_days nei file seguente:

/etc/ssl/openssl.cnf

Nei casi in cui lo si ritenga utile, consiglio di portare il valore di default_days a 3650 (=10 anni).

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Sincronizzazione mediante `lftp`

Backup, Open Source, Shell, Sistema, Tips & tricks 2 commenti »

Questa è stata una settimana molto, molto dura… ma non posso certo permettere che si concluda senza avere messo online almeno una piccola, miserabile, insignificante tip! Quindi, per fare le cose al volo, vi dico come effettuo la sincronizzazione di un sito Internet che ho elaborato in locale con la copia che è pubblicata nella directory di un certo spazio FTP.

Premetto che questo non è il modo in cui lavoro normalmente: da buon figlio degli anni ‘70 io modifico il codice direttamente online, non in produzione, ma online (bash). Questa settimana mi è capitato però di dover mettere mano al sito Internet di un cliente che ha messo a mia disposizione solo ed esclusivamente il suo account FTP. Quindi ho cominciato a sviluppare una copia locale del suo sito internet e tengo sincronizzata la versione online con un solo, semplice, meraviglioso comando:

lftp -u 'username,passwordftp.mydomain.com -e “set ftp:ssl-protect-data true;mirror –reverse /home/ivan/test test; exit

In altre parole:

  • username: il nome utente dell’account FTP
  • password: la password associata al nome utente dell’account FTP
  • ftp.mydomain.com: la host dell’account FTP
  • /home/ivan/test: la cartella locale (senza slash finale)
  • test: la cartella remota (ovvero quella dove si trova pubblicato il sito Internet)

Da notare l’opzione “set ftp:ssl-protect-data true” che protegge l’autenticazione FTP mediante ssl e l’opzione “mirror –reverse” che permette di sincronizzare in upload anziché in download.

Inutile dire che con lo stesso comando si può mantenere un backup remoto di una directory locale, anche se per cose di questo tipo è consigliabile l’utilizzo di `rsync` che fa tutto attraverso una connessione `ssh`.

Niente di più, niente di meno. Buon week end!

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Spostamento in massa di file in una directory

Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Mi capita spesso di dover spostare in massa una grande quantità di file accomunati da una porzione del nome (quasi sempre l’estensione). Ecco la riga di codice che utilizzo in bash per ottenere - ad esempio - lo spostamento di tutti i file con estensione .gz contenuti nella directory corrente (comprese tutte le subdirectory in essa contenute) nella directory target che si chiama /tmp/prova:

find . -type f -name "*.gz" -exec mv {} /tmp/prova \;

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace

Gestire l’ora del server con NTP su Debian

Debian, Shell, Sistema, Tips & tricks Nessun commento »

Ecco come installare `ntpd` su Debian GNU/Linux in 3 semplici mosse:

  1. installare `ntp` e `ntpdate`:
    apt-get install ntp ntpdate
  2. aggiungere in /etc/ntp.conf i server NTP di riferimento:
    # You do need to talk to an NTP server or two (or three).
    #server ntp.your-provider.example
    server ntp1.ien.it
    server ntp2.ien.it
  3. riavviare il servizio ntpd:
    /etc/init.d/ntp restart

Il comando seguente mostra la situazione dei server NTP configurati in/etc/ntp.conf:
ntpq -pIl comando seguente setta l’ora di sistema collegandosi a un server NTP:
ntpdateSe l’orario automaticamente settato non coincide con l’ora corrente della vostra zona è possibile che sia errata la timezone del vostro sistema.

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace