Category: linux

solve letsencrypt erros in a debian 7

solve letsencrypt erros in a debian 7


I was following the official guide at https://certbot.eff.org/#debianwheezy-apache
Is soon as I launched ./certbot-auto –apache I’ got:

Backports saved me!

Et voilà!

vsftpd con utenti mysql e custom chrooted homedir

vsftpd con utenti mysql e custom chrooted homedir

I motivi per i quali possiamo voler scegliere vsftpd come server ftp, sono innumerevoli e non saranno oggetto di questo articolo.
Mi limito a dire che personalmente, l’ho scelto per la sua sicurezza, snellezza, prestazioni.
Del resto, si tratta di una soluzione scelta da redhat e consigliata da ibm.
Come al solito, tutto parte dalle mie esigenze per cui descriverò la mia soluzione e non tutte le possibilità che questo magnifico strumento offre.

La prima caratteristica desiderata è una gestione degli users tramite mysql e questo tramite pam è abbastanza semplice.
Leggermente più complicato è stato far si che più utenti potessero condividere la stessa homedir (immaginate 3 sviluppatori diversi che lavorano sullo stesso sito e di cui si vogliono tracciare gli accessi con differenti login)
Tutti gli accessi saranno chroot ossia gli utenti non potranno navigare l’intero filesystem.

La difficoltà principale è che non si può scrivere la homedir chroot in uno dei campi del db e sperare che vsftpd legga quel valore.
Questo limita di fatto, la possibilità di avere una gestione centralizzata degli accessi (in maniera nativa), per esempio tramite un front-end web, ecco come ho deciso di procedere e soprattutto di aggirare tale limitazione:

Settings

Sulla debian wheezy usata, avendo già installato e configurato mysql, è bastato un:

Le libpam-mysql sono fondamentali per permettere a vsftpd di leggere gli utenti presenti su mysql.

Aggiungere l’utente di sistema vsftpd:

Loggarsi come amministratore su mysql e creare database, utente e tabella.

Dentro /etc/pam.d/vsftpd commentare tutto e lasciare le seguenti righe che specificano a vsftpd come e dove cercare gli utenti su database

chiaramente è possibile cambiare i valori di crypt, debug e verbose a piacimento, tuttavia inizialmente è preferibile avere dei log prolissi.

L’ultimo file di configurazione è quello fondamentale per vsftpd ovvero /etc/vsftpd.conf
Per il significato di ognuna delle seguenti direttive vi rimando alla guida ufficiale.

Una delle direttive specificate in vsftpd.conf è la “user_config_dir”
che abbiamo settato a /etc/vsftpd/user_conf
Questa dice vsftpd dove cercare i settaggi specifici per ogni utente ed è il modo più semplice per avere una home diversa per ognuno di loro ma anche per poter avere più users con la stessa home.

Prima di tutto assicuriamoci di creare la directory che conterrà le configurazioni specifiche:

Il formato è molto semplice, basta creare un file con il nome utente presente nel db e mettere dentro poche righe di testo:

Non dimenticatevi di riavviare il servizio

Adesso tutto è funzionante ma è certamente scomodo dover inserire a mano gli utenti nel db e poi creare il relativo file di configurazione dentro /etc/vsftpd/user_conf
Per rendere tutto molto semplice ho creato un piccolo script perl che fa tutto il lavoro sporco per noi.
Lo script essenzialmente permette di aggiungere ed eliminare utenti in maniera velocissima, si preoccuperà lui di inserire o eliminare la voce del db e di conseguenza il file di configurazione necessario.
Lo script crea automaticamente la homeDir specificata e imposta i permessi corretti per poter lavorare in chroot.
Per un corretto chroot infatti è necessario che la directory specificata, non abbia i permessi di scrittura e che contenga all’interno una seconda directory con tali permessi, questa seconda directory sarà l’unico punto in cui l’utente potrà effettivamente scrivere.
Se non si rispettà questo schema, vsftpd non funzionerà correttamente e sui nostri client ftp leggeremo un laconico:

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

Entrambe le directory, devono poi appartenere a vsftpd e gruppo nogroup.
Lo script permette anche di vedere la lista di utenti presenti, modificare la password o la homeDir e di copiare automaticamente un file dentro la directory con i permessi di scrittura.
Quest’ultima caratteristica risulta utile nel caso si voglia lasciare all’utente un readme oppure nel caso si tratti di un sito web, creare una index di default.

Per aggiungere un utente basta digitare:

Tutte le modifiche saranno attive in tempo reale senza la necessità di riavviare il server.
L’unico “sforzo” richiesto è editare lo script per aggiungere i propri parametri di configurazione
del db, la directory dove vengono scritte le configurazioni degli utenti, uid e gid di vsftpd.
Insomma operazione da pochi minuti.

Lo script lo trovi su github:
https://github.com/bogomips/syncFtp.pl

Buon divertimento con vsftpd !

PS
Questa guida è stata utilizzata come base per un’altra guida su debianizzati.org dove è anche stata integrata una sezione relativa a TLS:
http://guide.debianizzati.org/index.php/Installare_un_server_vsFTPd_con_utenti_virtuali_su_MySQL

colword : A command line word highlighter

colword : A command line word highlighter


I often prefer just to hilight some words rather than grep them, it’s good not to loose the contexst.
colword is a very basic version of grep but it does not suppress any line, it just colors the matched word.

It’s super easy to use:

colworld’s source code

 

Bash scripting: Apply a firewall rule dynamically by reading a log file

Bash scripting: Apply a firewall rule dynamically by reading a log file

Some years ago, I needed to apply hundreds of firewall rules dynamically by reading a log file.
It was basically a DDos attack and the requests were easily identifyable since the attacker’s software was using the protocol HTTP/1.0.
I solved by pipeing some unix standard commands:  tail, grep, awk, iptables

Recap:

  • tail -f continuously reads  the log file
  • grep filters the rows containing  HTTP/1.0
  • awk extracts the attacker ip address and pass it to the firewall rule by the variable $1