Archivi tag: ftp

Creare uno spazio FTP condiviso tra due utenti

Qualche giorno fa ho dovuto creare una directory FTP condivisa tra me ed un mio collega, da utilizzare come punto di riferimento per l’upload/download delle pagine Web che stiamo realizzando.

 

ftp_icon.png

Ecco la procedura:

per prima cosa occorre creare un gruppo, denominato gruppoweb, in cui inserire il nostro nome utente e quello utilizzato dal nostro collega.

Nella fattispecie, il comando da lanciare è il seguente:

nightfly@nightbox:~$ sudo groupadd gruppoweb

Successivamente è necessario aprire in scrittura il file /etc/group aggiungendo la seguente entry:

gruppoweb:x:1006:vostroutente,utentecollega

Dopodichè si devono apportare delle piccole modifiche al file di configurazione del demone FTP attivo sulla nostra Linux box (assumendo che si tratti di vsftpd). Tali modifiche riguardano il parametro umask e l’aggiunta della direttiva file_open_mode (il cui valore di default è 0666):

file_open_mode=0777
local_umask=0002

Così facendo tutti i file caricati mediante FTP avranno come permessi di default 775.

A modifica completata riavviamo il demone vsftpd:

nightfly@nightbox:~$ sudo service vsftpd restart

Infine, occorre scaricare un piccolo applicativo in grado di lanciare un determinato comando al verificarsi di un evento (trigger) nella directory da esso monitorata. Tale software prende il nome di incrond:

nightfly@nightbox:~$ sudo apt-get install incrond

Ad installazione avvenuta si dovrà rimuovere il file /etc/incron.allow (poichè insicuro, dato che per default tutti gli utenti possono utilizzare incrond):

nightfly@nightbox:~$ sudo rm /etc/incron.allow

e successivamente tale file dovrà essere ricreato con privilegi di root:

nightfly@nightbox:~$ su root
Password:
root@nightbox:/home/nightfly# nano /etc/incrond

aggiungendo la direttiva:

root

A modifica completata soltanto root potrà utilizzare incrond.

Ora dobbiamo fare in modo che ad ogni modifica di una pagina preesistente oppure ad ogni upload di un nuovo file, venga lanciato il comando chown per definire il gruppo proprietario, ovvero gruppoweb.

Configuriamo dunque tale regola su incrond, lanciando il comando:

root@nightbox:/home/nightfly# incrontab -e

e successivamente modificando il file appena aperto nel seguente modo:

/var/www/dirshared/ IN_MODIFY,IN_CREATE chown :gruppoweb -R $@

dove la wildcard $@ rappresenta la directory monitorata (ovvero /var/www/dirshared).

Verifichiamo che la configurazione sia stata aggiornata digitando:

root@nightbox:/home/nightfly# incrontab -l

ed abbiamo finito.

A presto.

PS: sicuramente vi starete chiedendo perchè non ho creato un unico utente per accedere allo spazio FTP condiviso… bhè la risposta è semplice: perchè voglio controllare (e loggare) le operazioni effettuate da ciascun utente.

Swatch: configurazione per il monitoraggio dei server FTP (vsftpd)

Ecco la configurazione di swatch che sto utilizzando sui miei server per tenere d’occhio il demone vsftpd:

ignore /127.0.0.1/

#FTP File Status OK
watchfor  /150 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP File Status OK

#FTP Command Not Implemented
watchfor  /202 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Command Not Implemented

#FTP User Logged Out
watchfor  /221 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP User Logged Out

#FTP Directory Send OK
watchfor  /226 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Directory Send OK

#FTP User Logged In
watchfor  /230 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP User Logged In

#FTP Requested File Action Ok
watchfor  /250 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Requested File Action Ok

#FTP Service Not Avaliable
watchfor  /421 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Service Not Available

#FTP Can't Open Data Connection
watchfor  /425 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Can't Open Data Connection

#FTP Transfer Aborted
watchfor  /426 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Transfer Aborted

#FTP File Unvailable
watchfor  /450 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP File Unvailable

#FTP Command Unrecognized
watchfor  /500 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Command Unrecognized

#FTP Syntax Error
watchfor  /501 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Syntax Error

#FTP Command Not Implemented
watchfor  /502 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Command Not Implemented

#FTP Bad Sequence Of Commands
watchfor  /503 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Bad Sequence Of Commands

#FTP Login Incorrect
watchfor  /530 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Login Incorrect

#FTP Illegal File Name
watchfor  /553 /
     echo
     mail addresses=vostro.indirizzo@email.it,subject=SWATCH HOME: FTP Illegal File Name

 

ftp,vsftpd,simple watchdog,status code,logging,swatch,rc.local

Come potete notare, le espressioni regolari verificano che all’interno del file /var/log/vsftpd.log siano presenti gli status code tipici del protocollo FTP.

Occorre precisare, però, che per default vsftpd non prevede il logging degli status code. Per abilitare tale funzione occorre modificare il file /etc/vsftpd.conf nel modo seguente:

xferlog_enable=YES

log_ftp_protocol=YES

xferlog_std_format=NO

A modifica completata riavviamo il demone in questione:

nightfly@nightbox:~$ sudo service vsftpd restart

ed infine inseriamo una entry nel file /etc/rc.local in modo da rendere automatica l’esecuzione di swatch per il monitoraggio di vsftpd ad ogni avvio del sistema:

swatch -c /etc/swatchftp.conf -t /var/log/vsftpd.log

Ora anche vsftpd può definirsi “sotto controllo”.

Alla prossima.

PS: per una lista (semi)completa degli status code relativi al protocollo FTP, potete consultare questo link.

Backup di un sito Web mediante wget

Qualche giorno fa mi è capitato di dover effettuare il backup di un sito Web senza conoscere le credenziali FTP. Fortunatamente si trattava di un sito sprovvisto di codice lato server, quindi per me è stato piuttosto semplice salvarne una copia in locale.

wget,web,dump,backup,client web,server web,ftp

Per fare tale operazione ho utilizzato il mitico wget, ed in particolare il comando:

nightfly@nightbox:~$ wget -r www.siteexample.it

Tutto il contenuto del sito è stato automaticamente salvato nella directory www.siteexample.it.

Devo ammettere però che ho avuto un po’ di fortuna. Infatti, non tutti i server Web consentono liberamente il dump dei loro siti (il termine phishing vi dice qualcosa?). Proprio per impedire tale pratica, molto spesso viene implementato un meccanismo di protezione basato sul riconoscimento del client Web: nel caso in cui il server si accorgesse che è wget a richiedere le pagine del sito, risponderà picche.

Tale controllo risulta comunque facilmente aggirabile. Infatti wget consente lo spoofing del client, che può essere impostato manualmente digitando:

nightfly@nightbox:~$ wget -r -U "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.siteexample.it

Invece, nel caso in cui i controlli si basassero anche sui tempi che intercorrono tra la visualizzazione di una pagina e quella successiva, oppure sulla velocità di download delle stesse, basterà utilizzare correttamente le flag –wait e –limit-rate:

nightfly@nightbox:~$ wget --wait=30 --limit-rate=10K -r -U "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.siteexample.it

Ed il backup del sito è pronto.

A presto.

Gabbie chroot per gli utenti FTP mediante vsftpd.conf

Recentemente mi è capitato di dover creare un nuovo account utente per l’accesso sul mio server FTP. Fin qui nulla di strano, è stato sufficiente digitare:

nightfly@nightbox:~$ useradd <nomeutente>

e successivamente:

nightfly@nightbox:~$ sudo passwd <password> <nomeutente>

 

vsftpd

A questo punto si è reso necessario ingabbiare l’utente nella sua home. Per fare ciò ho editato il file vsftpd.conf, che si trova nella directory /etc:

nightfly@nightbox:~$ sudo nano /etc/vsftpd.conf

decommentando (e dunque abilitando) la seguente opzione:

chroot_local_user=YES

Infine ho effettuato uno stop/start del demone vsftpd, digitando:

nightfly@nightbox:~$ sudo service vsftpd stop

nightfly@nightbox:~$ sudo service vsftpd start

e fine dei giochi.

PS: se volete cambiare la home directory dell’utente (che per default è /home/nomeutente), facendolo atterrare, ad esempio, in una sottodirectory di /var/www (per l’upload/download di pagine Web), vi basterà lanciare il comando:

nightfly@nightbox:~$ sudo usermod -d /var/www/nomecartella nomeutente

Se la directory /var/www/nomecartella esiste già, sarà necessario modificare il suo owner, partendo dal presupposto che essa abbia i permessi settati su 755:

nightfly@nightbox:~$ sudo chwon nomeutente:nomeutente /var/www/nomecartella

In alternativa, si potrebbe creare un gruppo ad hoc, chiamato ad esempio web, al quale associare i vari utenti che possono eseguire operazioni di lettura e scrittura su una data directory.

Per creare il gruppo occorre digitare:

nightfly@nightbox:~$ sudo groupadd nomegruppo

Successivamente aggiungiamo i vari utenti al gruppo, mediante il comando:

nightfly@nightbox:~$ sudo usermod -g web nomeutente

A procedura terminata, verifichiamo che gli utenti siano stati effettivamente aggiunti al gruppo, listandone il contenuto:

nightfly@nightbox:~$ sudo groups nomegruppo

Infine, possiamo modificare solo il gruppo proprietario della directory /var/www/nomecartella, digitando:

nightfly@nightbox:~$ sudo usermod :web /var/www/nomecartella

e cambiamo i permessi della directory, settandoli su 775:

nightfly@nightbox:~$ sudo chmod 775 /var/www/nomecartella

PPS: questa configurazione del file vsftpd.conf ingabbierà nella loro home tutti gli utenti di sistema che si collegheranno al server FTP. Se volete fare una selezione degli utenti che saranno ingabbiati e di quelli che non lo saranno, disabilitare l’opzione:

chroot_local_user=YES

commentandola o settandone il valore a NO:

#chroot_local_user=YES

In seguito abilitate l’opzione:

chroot_list_enable=YES

e specificate il file in cui è contenuta la lista degli utenti da ingabbiare, che per default è vsftpd.chroot_list:

chroot_list_file=/etc/vsftpd.chroot_list

Infine, inserite in questo file i nomi utente da chrootare (uno per riga).

A presto.

Script *.bat per il backup automatico via FTP della directory “Documenti”

Chi è del mestiere sa che i backup sono di fondamentale importanza, soprattutto quando riguardano dati piuttosto sensibili. Affidare tale operazione agli utenti (anche se si tratta di piccoli ambienti) è sconsigliabile. Ho dunque pensato di creare il seguente scrip (per reti SOHO) che “zippa” la directory Documenti e la invia, tramite FTP, ad un server interno.

batch

Ovviamente tale scrip può essere ulteriormente migliorato, se avete dei suggerimenti contattatemi.

Ecco il codice:

set mese=%DATE:~3,2%
set giorno=%DATE:~0,2%
set anno=%DATE:~-4%
set comfile="com.txt"

zip Documenti_PC1_%giorno%_%mese%_%anno% "C:UsersnomeutenteDocuments"
cd "C:Usersvostroutente"

echo username> %comfile%
echo password>> %comfile%
echo put Documenti_PC1_%giorno%_%mese%_%anno%.zip>> %comfile%
echo quit>> %comfile%

ftp -i -s:"com.txt" <indirizzo IP server>

Lo scrip, da posizionare nella directory di ciascun utente, scrive i dati per la connessione al server FTP ed i relativi comandi su un file, che ho chiamato com.txt. Tale informazioni vengono infine date in pasto al comando ftp, da utilizzarsi con le flag -i (per non visualizzare i prompt interattivi) e -s (che consente di specificare il file sorgente dei comandi). Ovviamente anche il file com.txt deve trovarsi all’interno della directory utente.

Per la precisione, il file com.txt ci apparirà nel modo seguente:

username
password
put Documenti_PC1_29_09_2011.zip
quit

Ora, la realtà nella quale tale scrip dovrà lavorare è caratterizzata dalla presenza di un solo utente per PC, quindi è stato piuttosto semplice gestire i vari backup. Per ambienti un pò più complessi dovranno essere apportate sicuramente delle modifiche al codice.

Fatene buon uso.

A presto.

PS: per “zippare” la directory ho utilizzato la suite gratuita Info-ZIP, il cui file zip.exe è stato copiato nella dir di ciascun utente.

Installare vsftpd 2.3.4 su *buntu

Dopo aver scoperto che tutte le versioni di vsftpd precedenti alla 2.3.4 (ovvero l’ultima release) sono vulnerabili ad attacchi di tipo DoS (Denial of Service), ho deciso di effettuare un upgrade del demone in questione.

vsftpd

 

Prima, però, mi sono sincerato che vsftpd non fosse già aggiornato, lanciando il comando:

nightfly@nightbox:~$ vsftpd -v

il cui output è stato il seguente:

vsftpd: version 2.2.2

Bene, come sospettavo, il demone non era aggiornato. Ho provato quindi un aggiornamento tramite aptitude:

nightfly@nightbox:~$ sudo apt-get update

nightfly@nightbox:~$ sudo apt-get upgrade

Lettura elenco dei pacchetti... Fatto
Generazione albero delle dipendenze
Lettura informazioni sullo stato... Fatto
0 aggiornati, 0 installati, 0 da rimuovere e 0 non aggiornati.

Niente da fare, secondo aptitude, vsftpd è all’ultima versione.

Alla luce di ciò, ho proceduto con un’installazione manuale dello stesso.

Per prima cosa ho scaricato la tarball con i sorgenti puntando alla URL ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz

nightfly@nightbox:~$ wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz

Successivamente ho scompattato la tarball:

nightfly@nightbox:~$ tar -xzvf vsftpd-2.3.4.tar.gz

Mi sono quindi posizionato nella directory di riferimento:

nightfly@nightbox:~$ cd vsftpd-2.3.4

ed ho lanciato il comando:

nightfly@nightbox:~/vsftpd-2.3.4$ make

A questo punto, lanciando un ls ho notato la presenza del binario di vsftpd all’interno della directory.

Ho dunque proceduto con la sostituzione della versione precedente del demone, presente in /etc/init.d, con questa versione appena compilata, previo backup:

nightfly@nightbox:~/vsftpd-2.3.4$ cd /etc/init.d

nightfly@nightbox:/etc/init.d$ sudo mv vsftpd vsftpd.bak

Poi ho effettuato la sostituzione vera e propria:

nightfly@nightbox:/etc/init.d$ cd /home/nightfly/vsftpd-2.3.4

nightfly@nightbox:~/vsftpd-2.3.4$ sudo cp vsftpd /etc/init.d

Dopo aver fatto ciò, ho verificato che la versione di vsftpd fosse quella giusta:

nightfly@nightbox:~$ vsftpd -v

ricevendo come output:

vsftpd: version 2.2.4

Infine ho proceduto con il riavvio del servizio:

nightfly@nightbox:~$ service vsftpd restart

Ed ecco che il mio server FTP risultava finalmente patchato.

Alla prossima.

Attacco bruteforce sul server FTP casalingo

Allora, diciamo che è dalle 8:26 di questa mattina che ricevo attacchi bruteforce sulle credenziali di accesso del mio server FTP casalingo da parte dell’IP 124.205.181.87:

Hi,

The IP 124.205.181.87 has just been banned by Fail2Ban after
6 attempts against vsftpd.

Here are more information about 124.205.181.87:

% [whois.apnic.net node-4]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

inetnum:        124.205.0.0 - 124.205.255.255
netname:        DXTNET
descr:          Beijing Teletron Telecom Engineering Co., Ltd.
descr:          Jian Guo Road, Chaoyang District, Beijing, PR.China
country:        CN
admin-c:        PP40-AP
tech-c:         PP40-AP
status:         ALLOCATED NON-PORTABLE
changed:        ipas@cnnic.net.cn 20080927
mnt-by:         MAINT-CNNIC-AP
mnt-lower:      MAINT-CNNIC-AP
mnt-routes:     MAINT-CNCGROUP-RR
source:         APNIC

person:         Pang Patrick
nic-hdl:        PP40-AP
e-mail:         bill.pang@bj.datadragon.net
address:        Fl./8, South Building, Bridge Mansion, No. 53
phone:          +86-10-63181513
fax-no:         +86-10-63181597
country:        CN
changed:        ipas@cnnic.net.cn 20030304
mnt-by:         MAINT-CNNIC-AP
source:         APNIC

Regards,

Fail2Ban

Premesso che non ho niente contro gli smanettoni cinesi… però qui ci vorrebbe un minimo di raziocinio, ossia: cosa mi bombardi il server FTP con il bruteforce quando mi pare CHIARO che non uso password semplici o di default? Bah, mi sa che imposterò una piccola ACL direttamente sul router.

Bye.

Creazione di un utente FTP ed assegnazione di una directory

Gestendo un piccolo server Web casalingo (rigorosamente su piattaforma Linux), ho avuto la necessità di creare un utente apposito, in modo da poter effettuare da rete esterna l’upload via FTP delle pagine aggiornate. Quindi, per prima cosa ho creato l’utente mediante il comando useradd:

nightfly@nightbox:~$ sudo useradd userupload

Successivamente, all’utente appena creato ho assegnato una password attraverso il comando passwd:

nightfly@nightbox:~$ passwd userupload

Dopo aver fatto ciò, ho modificato la directory di default relativa a tale utente:

nightfly@nightbox:~$ usermod -d /var/www/sito userupload

ed infine ho cambiato la ownership di tale cartella:

nightfly@nightbox:~$ chown userupload:userupload /var/www/sito

Ecco fatto, ora siamo pronti a caricare le pagine aggiornate sul nostro sito web.

PS: Ovviamente, affinchè l’upload vada a buon fine è necessaria una corretta configurazione del firewall della vostra rete (sempre se ne avete uno) e del router, mettendo in forwarding la porta 21, protocollo TCP (supponendo che usiate FTP solo in modalità passiva).

Ci aggiorniamo, bye.