Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita...

63
Web Server 1

Transcript of Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita...

Page 1: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

1

Page 2: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Centos FTP Server

2

Page 3: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

3

Page 4: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Indice

Prefazione...................................................................................................................pag. 6

Caratteristiche del Server..........................................................................................pag. 7

Installazione del server Vsftpd...................................................................................pag. 8

Configurare Vsftpd con credenziali utente e accesso condiviso................................pag. 10

Configurare vsftpd con home directory utente...........................................................pag. 14

Creare utenti virtuali con PAM..................................................................................pag. 18

Creare utenti virtuali con DB MySQL........................................................................pag. 25

Vsftpd con certificato SSL..........................................................................................pag. 39

Creare un applicazione in PHP per gestire gli utenti virtuali...................................pag. 41

Installare Clamav antivirus e tools contro i rootkit...................................................pag. 62

Installare Clamav antivirus........................................................................................pag. 62

Installare Rkhunter.....................................................................................................pag. 64

Installare Chrootkit....................................................................................................pag. 65

Installare server ssmtp per invio delle mail...............................................................pag. 66

4

Page 5: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

5

Page 6: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

6

Page 7: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Prefazione

Perchè un server FTP? L'FTP server è ancora oggi uno strumento molto utilizzato, non solo presso iservizi web, infatti che gestisce un sito internet sa che questo è il modo più veloce per potertrasferire file all'interno del proprio sito. Il servizio FTP viene usato anche come un grande disco perla condivisione dei file questo permette agli utenti interni ed esterni di poter condividere con altriutenti.

In questa guida vedremo come mettere in piedi un servizio FTP utilizzando vari metodi, come l'FTPAnonymous, ovvero dove non viene richiesta alcuna autenticazione, questo può essere utile quandovogliamo condividere file con tutti, oppure utilizzando il servizio in modo tradizionale conautenticazione, anche qui vedremo tre tipi di autenticazione, la prima sarà quella locale, ovverol'utente dovrà essere creato localmente sul server ftp poi vedremo due autenticazioni con utentivirtuali, con metodo pam e mysql, qui gli utenti saranno inseriti o in una lista nel primo caso oall'interno di un database.

L'FTP in se è un servizio poco sicuro e le sue informazioni viaggiano in chiaro sulla rete e sul web,oltre al suo normale funzionamento sulla porta TCP 21, vederemo anche come realizzare unaconnessione sicura tramite ssl in modo da avere una comunicazione dei dati criptata.

Un'ultima cosa sulla sicurezza, se pensate di mettere un servizio FTP in produzione, ricordatelo diporlo nella rete DMZ.

7

Page 8: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Caratteristiche del server

Le caratteristiche date al nostro server FTP sono identiche a quelle utilizzate per il web serverApache, il server si chiama srvftp, il suo indirizzo IP è 172.16.200.170. Anche qui per motivi ditesting iniziamo come abbiamo già visto in precedenza ad disabilitare il firewall e SELinux, inmodo da non evidenziare inutili problemi di funzionamento durante il setup del server.

# nano /etc/selinux/config

# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted

Impostiamo accanto a SELINUX la parola disabled al posto di enforcing, disabilitiamo anche ilfirewall con il comando:

# system-config-firewall-tui

Togliamo il simbolo * da firewall [] Abilitato, diamo ok, selezioniamo si e premiamo invio

8

Page 9: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Installazione del server vsftpd

Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,utilizza come server predefinito vsftpd, (acronimo di Very Secure FTP Daemon), uno deiprogrammi più usati e sicuri per l'implementazione di questo servizio. L'installazione è semplice,visto che si trova già nei repository del sistema, pertanto da terminale ci basterà digitare:

# yum install vsftpd

--> Running transaction check ---> Package vsftpd.i686 0:2.2.2-11.el6_4.1 will be installed --> Finished Dependency Resolution

Dependencies Resolved

================================================================================ Package Arch Version Repository Size ================================================================================ Installing: vsftpd i686 2.2.2-11.el6_4.1 base 157 k

Transaction Summary ================================================================================ Install 1 Package(s)

Total download size: 157 k Installed size: 344 k Is this ok [y/N]: y

Downloading Packages: vsftpd-2.2.2-11.el6_4.1.i686.rpm | 157 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : vsftpd-2.2.2-11.el6_4.1.i686 1/1 Verifying : vsftpd-2.2.2-11.el6_4.1.i686 1/1

Installed: vsftpd.i686 0:2.2.2-11.el6_4.1

Complete! You have new mail in /var/spool/mail/root

E diamo y per iniziare il download e l'installazione, ad installazione conclusa facciamo si che il

9

Page 10: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

server FTP si avvia automaticamente ad ogni avvio della macchina, poi successivamente avviamoneil servizio:

# chkconfig vsftpd on# service vsftpd start

Avvio di vsftpd per vsftpd: [ OK ]

Bene il nostro server è già pronto per l'uso ed in ascolto sulla porta di base TCP 21. Vsftpd, èimpostato per default a funzionare come server anonymous, ovvero fa in modo che gli utentipossano visualizzarne il contenuto senza eseguire un login, visualizzando ed eseguendo il downloadsolo dei documenti presenti, ma non gli è concesso effettuare l'upload dei file, ecco come si presentase lo visualizziamo dal browser, (Attenzioni ogni browser visualizza a suo modo i file), pertantodigitiamo sulla barra degli indirizzi l'IP del server ponendo a monte di quest'ultimo la sigla ftp://, inquesto modo ftp://172.16.200.170, ecco cosa dovremmo visualizzare utilizzando Firefox:

La cartella pub che vediamo la troviamo nel seguente percorso o path /var/ftp, se dobbiamo inseriredel materiale è qui che dobbiamo andare:

# cd /vat/ftp/pub

Se provate a cliccare più volte sulla voce “vai alla cartella superiore” noterete che non è possibilevisualizzare le altre folder del file system del server, questo perché la cartella pub si trova all'internodi una gabbia chroot. Abbiamo visto come sia semplice mettere in piedi un ftp anonimo orapassiamo a configurare un ftp che chieda le credenziali d'accesso.

10

Page 11: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Configurare VSFTP per accesso con credenziali utente a cartellacondivisa

Per poter permettere agli utenti di accedere al server ftp tramite credenziali di accesso, dobbiamomettere mano al file di configurazione che troviamo in /etc/vsftpd, comunque prima di apportaremodiche eseguiamo una copia del file originale, pertanto digitiamo:

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig# cd /etc/vsftpd# lsftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vsftpd.conf.orig

Bene ora possiamo procedere con le modifiche del file di configurazione che si presenta così:

# nano /etc/vsftpd/vsftpd.conf

# Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES # # Uncomment this to allow local users to log in. local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022 # # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. #anon_upload_enable=YES # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES #

11

Page 12: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES # # The target log file can be vsftpd_log_file or xferlog_file. # This depends on setting xferlog_std_format parameter xferlog_enable=YES # # Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES # # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! #chown_uploads=YES #chown_username=whoever # # The name of log file when xferlog_enable=YES and xferlog_std_format=YES # WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log #xferlog_file=/var/log/xferlog # # Switches between logging into vsftpd_log_file and xferlog_file files. # NO writes to vsftpd_log_file, YES to xferlog_file xferlog_std_format=YES # # You may change the default value for timing out an idle session. #idle_session_timeout=600 # # You may change the default value for timing out a data connection. #data_connection_timeout=120 # # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #nopriv_user=ftpsecure # # Enable this and the server will recognise asynchronous ABOR requests. Not # recommended for security (the code is non-trivial). Not enabling it, # however, may confuse older FTP clients. #async_abor_enable=YES # # By default the server will pretend to allow ASCII mode but in fact ignore # the request. Turn on the below options to have the server actually do ASCII # mangling on files when in ASCII mode. # Beware that on some FTP servers, ASCII support allows a denial of service # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd # predicted this attack and has always been safe, reporting the size of the # raw file. # ASCII mangling is a horrible feature of the protocol.

12

Page 13: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

#ascii_upload_enable=YES #ascii_download_enable=YES # # You may fully customise the login banner string: #ftpd_banner=Welcome to blah FTP service. # # You may specify a file of disallowed anonymous e-mail addresses. Apparently # useful for combatting certain DoS attacks. #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd/banned_emails # # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list # # You may activate the "-R" option to the builtin ls. This is disabled by # default to avoid remote users being able to cause excessive I/O on large # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume # the presence of the "-R" option, so there is a strong case for enabling it. #ls_recurse_enable=YES # # When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=YES # # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 # sockets, you must run two copies of vsftpd with two configuration files. # Make sure, that one of the listen options is commented !! #listen_ipv6=YES

pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES

Iniziamo ad apportare alcune semplici modifiche, per fare in modo di creare un utente, o più utentiche si colleghino alla cartella pub dell'FTP, questa sarà una cartella di condivisione. Iniziamo conl'apportare alcune piccole modifiche al file di configurazione, entriamo in /etc/vsftpd/vsftpd.conf einiziamo a modificare queste voci

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).

13

Page 14: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

anonymous_enable=NO (qui indichiamo che l'utente dovrà loggarsi)# Uncomment this to allow local users to log in. local_enable=YES (indichiamo che gli utenti locali sono abilitati)

# You may fully customise the login banner string: ftpd_banner=Benvenuti in questo servizio FTP. (personalizziamo il banner)

Salviamo il file e usciamo, andiamo a creare ora l'utente test che si connetterà alla cartella ftp/pub

# useradd -d /var/ftp/pub test

La lettera -d indica che l'utente dovrà utilizzare questo percorso come propria home, creiamo ora la password per l'utente test nel esempio ho dato la password “1234” senza virgolette:

# passwd testCambio password per l'utente test. Nuova password: PASSWORD ERRATA: E' troppo breve PASSWORD ERRATA: è troppo semplice Reimmettere la nuova password: passwd: tutti gli authentication token sono stati aggiornati con successo.

Creiamo ora un file di testo nella cartella pub

# cat > /var/ftp/pub/test.txt

Riavviamo il server e poi testiamo:

# service vsftpd restart

Dovremmo vedere la richiesta di password:

14

Page 15: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

loghiamoci e dovremo vedere il file in esso contenuto

Possiamo ora creare altri utenti che avranno accesso per condividere i dati.

Creare un FTP server con cartelle utente

Visto che precedentemente abbiamo eseguito una copia di backup del file vsftpd.conf, è ora diriprenderla ed iniziare una nuova configurazione, prima però eseguiamo un backup della nostraconfigurazione, chissà magari ci servirà un giorno.

# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-ftpCondiv

Ora riportiamoci il file originale tenendo sempre disponibile una copia originale

# cp /etc/vsftpd/vsftpd.conf.orig /etc/vsftpd/vsftpd.conf

Iniziamo ora con l'editare il file vsftpd.conf ed apportare alcuni cambiamenti, del tipo:• Impostiamo anonymous_enable=NO• de commentiamo le voci ascii_upload_enable=YES e ascii_download_enable=YES• de commentiamo ftpd_banner=(scriviamo al posto di Welcome quello che vogliamo)• de commentiamo la voce chroot_local_enable=YES (questo permetterà agli utenti di vedere

solo la loro cartelle FTP.• de-commentiamo la voce ls_recurse_enable=YES

15

Page 16: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

• aggiungiamo in fondo la voce use_localtime=YES

anonymous_enable=NO

ascii_upload_enable=YES

ascii_download_enable=YES

ftpd_banner=Welcome to FTP service

chroot_local_enable=YES

ls_recurse_enable=YES

use_localtime=YES

apportate le modifiche salviamo e usciamo dal file di configurazione. Ora andiamo a gli utentilocali, nel nostro esempio l'utente si chiameranno utente1 e utente2.

# adduser utente1# adduser utente2

Specifichiamo le password per i due utenti per utente1 ho dato una password semplice “12345” senza virgolette e per l'utente2 diamo la password “password”

# passwd utente1Cambio password per l'utente utente1. Nuova password: PASSWORD ERRATA: E' troppo breve PASSWORD ERRATA: è troppo semplice Reimmettere la nuova password: passwd: tutti gli authentication token sono stati aggiornati con successo.

# passwd utente2Cambio password per l'utente utente2. Nuova password: PASSWORD ERRATA: E' troppo breve PASSWORD ERRATA: è troppo semplice Reimmettere la nuova password: passwd: tutti gli authentication token sono stati aggiornati con successo.

Creiamo all'interno di ogni utente un file di riconoscimento esempio utente1.txt e utente2.txt

# cd /home/utente1# echo > utente1.txt# cd ..

16

Page 17: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# cd utente2# echo > utente2.txt

Riavviamo il server vsftpd con il solito comando:

# service vsftpd restart

Per testare la connettività in locale scarichiamo l'utility ftp

# yum install ftp

Dopo di che eseguiamo il test in locale primo con un utente e poi per sicurezza con il secondo

# ftp 127.0.0.1Connected to 127.0.0.1 (127.0.0.1). 220 Benvenuti in questo servizio FTP. Name (127.0.0.1:root): utente1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp> exit 221 Goodbye.

Se durante la procedura di autenticazione è questo che vedete allora significa che la configurazioneeffettuata è corretta, se cosi non fosse è probabile che abbiate saltato qualche passaggio.

Ora possiamo controllare anche tramite browser, digitando sulla barra degli indirizzi ftp://ip_server,alla richiesta delle credenziali, digitante e dovreste entrare nella cartella dell'utente con la quale visiete loggati, questo è quanto si vede:

17

Page 18: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Per permettere agli utenti di inserire o scaricare file dal ftp, possiamo utilizzare, un client ftpcompletamente opensource come Filezilla che è possibile scaricare da questo url(http://sourceforge.net/projects/filezilla/files/FileZilla_Client/). Una volta terminato il download ,installate il client e apritelo, Filezilla vi mostrerà la sua semplice e chiara interfaccia, come vediamonell'immagine qui sotto:

L'uso del programma è alquanto semplice, dove vedete host, inserite l'IP del server, nel nostro caso172.16.200.170, dove trovate nome utente inserite utente1, e poi chiaramente alla voce passowrd

18

Page 19: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

inserite la password dell'utente1 nel nostro caso 12345, lasciate pure vuota la casella dove è indicatala porta visto che quella di default è la 21, dopo di che premete sul tasto connessione rapida ed eccoche siamo all'interno del nostro ftp. Le due grandi finestre che vediamo, indicano quella di destra ilnostro computer locale e quella di sinistra il nostro server, ora non dobbiamo far altro che muoverciall'interno delle nostre cartelle dalla finestra destra e quando troviamo il file o la cartella daimportare sul server ftp non facciamo altro che trascinarla verso la finestra a sinistra. Tutto qua.

Vediamo ora come creare un'altra categoria di utenti, questa volta non fisici ma virtuali.

Creare utenti virtuali con PAM

Partiamo nuovamente da una situazione nuova, pertanto anche qui eseguiamo rinominiamo il filevsftpd.con in vsftpd.conf-locUser e rinominamo nuovamente il file vsftpd.con.orig in vsftpd.conf.

# mv vsftpd.conf vsftpd.conf-locUser# cp vsftpd.conf.orig vsftpd.conf

Eliminiamo ora gli utenti creati precedentemente con le loro home

# userdel -f -r utente1# userdel -f -r utente2# cd /home# ls

19

Page 20: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Ora che la home è vuota dagli utenti creati precedentemente, possiamo iniziare la nuovaconfigurazione, ma prima scarichiamo il Barkeley databse(db4(version4), se questo non è giàinstallato.

# yum install db4-utilis db4

Creiamo ora il file databse per gli utenti virtuali, prima creeremo un file di testo che chiameremo virtual_uesr.txt all'interno della directory /home e poi in un secondo momento lo trasformeremo in un database criptato.

# nano virtual_users.txt

Creiamo ora al suo interno un utente virtuale che sarà utente0 con password centos, gli utenti vannocreati singolarmente uno per uno, ora ne abbiamo creato uno solo , ma se ne dobbiamo creare di piùricordiamoci di creare la nostra lista prima di creare il db, se dobbiamo aggiungerne uno in unsecondo momento, ci basta aggiungerlo nel file txt e poi ricreare il db.

utente0 centos

Salviamo e usciamo, trasformiamo ora il file txt nel database criptato

# db_load -T -t hash -f /home/virtual_users.txt /etc/vsftpd/virtual_users.db

Creiamo ora un PAM file, questo consente l'uso degli utenti virtuali nel file db appena creato.

# nano /etc/pam.d/vsftpd_virtual

E aggiungiamo le seguenti linee

#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/virtual_users account required pam_userdb.so db=/etc/vsftpd/virtual_users session required pam_loginuid.so

Salviamo e usciamo.

Configuriamo ora il file vsftpd.conf

# nano /etc/pam.d/vsftpd_virtual

Apportando le seguente modifiche:

• anonymous_enable=NO• aggiungiamo la voce guest_enable=YES

20

Page 21: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

• de commentiamo le voci ascii_upload_enable=YES e ascii_download_enable=YES• de commentiamo ftpd_banner=Welcome to blah FTP service.• De commentiamo chroot_local_user=YES• de commentiamo ls_recurse_enable=YES• aggiungiamo la voce virtual_use_local_privs=YES• modifichaimo la voce pam_service_name=vsftpd con il file creato precedentemente

vsftpd_virtual• aggiungiamo le seguenti voci per la home directory degli utenti virtuali

user_sub_token=$USER e local_root=/home/virtual/$USER • aggiungiamo per ultimo la voce hide_ids=YES

anonymous_enable=NOguest_enable=YESascii_upload_enable=YESascii_download_enable=YESftpd_banner=Welcome to blah FTP servicechroot_local_user=YESls_recurse_enable=YESvirtual_use_local_privs=YESpam_service_name=vsftpd_virtualuser_sub_token=$USERlocal_root=/home/virtual/$USERhide_ids=YES

Questo è il file vsftpd che dovremo avere:

Example config file /etc/vsftpd/vsftpd.conf## The default compiled in settings are fairly paranoid. This sample file# loosens things up a bit, to make the ftp daemon more usable.# Please see vsftpd.conf.5 for all compiled in defaults.## READ THIS: This example file is NOT an exhaustive list of vsftpd options.# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's# capabilities.## Allow anonymous FTP? (Beware - allowed by default if you comment this out).anonymous_enable=NO## Uncomment this to allow local users to log in.local_enable=YES### Enable virtual usersguest_enable=YES### Virtual users will use the same permissions as anonymousvirtual_use_local_privs=YES

21

Page 22: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

#

# Uncomment this to enable any form of FTP write command.write_enable=YES### PAM file namepam_service_name=vsftpd_virtual### Home Directory for virtual usersuser_sub_token=$USERlocal_root=/home/virtual/$USER## Default umask for local users is 077. You may wish to change this to 022,# if your users expect that (022 is used by most other ftpd's)local_umask=022## Uncomment this to allow the anonymous FTP user to upload files. This only# has an effect if the above global write enable is activated. Also, you will# obviously need to create a directory writable by the FTP user.#anon_upload_enable=YES## Uncomment this if you want the anonymous FTP user to be able to create# new directories.#anon_mkdir_write_enable=YES## Activate directory messages - messages given to remote users when they# go into a certain directory.dirmessage_enable=YES## The target log file can be vsftpd_log_file or xferlog_file.# This depends on setting xferlog_std_format parameterxferlog_enable=YES## Make sure PORT transfer connections originate from port 20 (ftp-data).connect_from_port_20=YES## If you want, you can arrange for uploaded anonymous files to be owned by# a different user. Note! Using "root" for uploaded files is not# recommended!#chown_uploads=YES#chown_username=whoever## The name of log file when xferlog_enable=YES and xferlog_std_format=YES# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log#xferlog_file=/var/log/xferlog## Switches between logging into vsftpd_log_file and xferlog_file files.# NO writes to vsftpd_log_file, YES to xferlog_file

22

Page 23: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

xferlog_std_format=YES## You may change the default value for timing out an idle session.#idle_session_timeout=600## You may change the default value for timing out a data connection.#data_connection_timeout=120## It is recommended that you define on your system a unique user which the# ftp server can use as a totally isolated and unprivileged user.#nopriv_user=ftpsecure## Enable this and the server will recognise asynchronous ABOR requests. Not# recommended for security (the code is non-trivial). Not enabling it,# however, may confuse older FTP clients.#async_abor_enable=YES## By default the server will pretend to allow ASCII mode but in fact ignore# the request. Turn on the below options to have the server actually do ASCII# mangling on files when in ASCII mode.# Beware that on some FTP servers, ASCII support allows a denial of service# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd# predicted this attack and has always been safe, reporting the size of the# raw file.# ASCII mangling is a horrible feature of the protocol.ascii_upload_enable=YESascii_download_enable=YES## You may fully customise the login banner string:ftpd_banner=Welcome to blah FTP service.## You may specify a file of disallowed anonymous e-mail addresses. Apparently# useful for combatting certain DoS attacks.#deny_email_enable=YES# (default follows)#banned_email_file=/etc/vsftpd/banned_emails## You may specify an explicit list of local users to chroot() to their home# directory. If chroot_local_user is YES, then this list becomes a list of# users to NOT chroot().chroot_local_user=YES#chroot_list_enable=YES# (default follows)#chroot_list_file=/etc/vsftpd/chroot_list## You may activate the "-R" option to the builtin ls. This is disabled by# default to avoid remote users being able to cause excessive I/O on large# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume

23

Page 24: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# the presence of the "-R" option, so there is a strong case for enabling it.ls_recurse_enable=YES## When "listen" directive is enabled, vsftpd runs in standalone mode and# listens on IPv4 sockets. This directive cannot be used in conjunction# with the listen_ipv6 directive.listen=YES## This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6# sockets, you must run two copies of vsftpd with two configuration files.# Make sure, that one of the listen options is commented !!#listen_ipv6=YES

#pam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES

# Hide ids from userhide_ids=YES

max_clients=10

salviamo e usciamo. Creiamo ora la home dell'utente virtuale

# mkdir -p /home/virtual/utente0 E diamo alla cartelle utente e gruppo corretto per il suo funzionamento, in questo caso è ftp:

# chown -R ftp:ftp /home/virtual/utente0

Anche qui creiamo un file che ci conferma la connessione.

# cd /home/virtual/utente0# echo > utente0.txt

Riavviamo il server e proviamo il collegamento con utility ftp

# service vsftpd restart

# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 Welcome to blah FTP service. Name (127.0.0.1:root): utente0 331 Please specify the password. Password:

24

Page 25: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/"

Bene ci siamo connessi, proviamo da browser ora:

Accesso con Filezilla:

25

Page 26: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

anche con il client è riuscito. Vediamo ora un ultimo metodo per creare utenti virtuali, questa bolta gli utenti verranno inseriti un un database mysql.

Utenti virtuali con MySQL

In quest'ultimo esempio di configurazione degli utenti per un server ftp, vediamo la creazione di quest'ultimi basata su MySQL, iniziamo con l'installare mysql server

# yum install mysql-server

configuriamo il database, iniziamo ora con l'impostazione del server MySQL, impostiamo la password di root, digitiamo il comando:

# mysqladmin -u root password tuapassword

Nel nostro caso saraà,123456.

Se questo non dovesse bastare allora usiamo quest'altro metodo per configurare mysql.

# mysql_secure_installation

Se il comando dovesse darvi errore avviate prima mysql e ripetete il comando

# service mysqld start

Seguiamo ora i passi di configurazione, la prima richiesta ci indica se vogliamo creare unapassword per l'utente root, premiamo invio per accettare

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDEDFOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEPCAREFULLY!

In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here.

Enter current password for root (enter for none):

Ci viene ora richiesto se vogliamo settare la password per root, ovviamente rispondiamo si einseriamo una password forte per l'utente root di mysql

26

Page 27: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Set root password? [Y/n] <-- ENTERNew password: <-- digirare la vostra password di rootRe-enter new password: <-- digitate nuovamente la passwordPassword updated successfully!Reloading privilege tables.. ... Success!

Per default Mysql ha abilitato all'accesso l'utente anonynous, qui di seguito dopo aver inserito lapassword di root ci viene chiesto se vogliamo disabilitare l'utente anonynous, ovviamenterispondiamo con un Y

By default, a MySQL installation has an anonymous user, allowing anyoneto log into MySQL without having to have a user account created forthem. This is intended only for testing, and to make the installationgo a bit smoother. You should remove them before moving into aproduction environment.

Remove anonymous users? [Y/n] <-- ENTER ... Success!

Normalmente root deve essere impostato solo come utente locale e non deve essere abilitato comeutente d'accesso remoto

Normally, root should only be allowed to connect from 'localhost'. Thisensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] <-- ENTER ... Success!

Alla domanda rispondiamo con Y.

Come tutti i database anche Mysql possiede un database chiamato test, da qui può accederechiunque pertanto è buona norma rimuoverlo.

By default, MySQL comes with a database named 'test' that anyone canaccess. This is also intended only for testing, and should be removedbefore moving into a production environment.

Remove test database and access to it? [Y/n] <-- ENTER - Dropping test database... ... Success! - Removing privileges on test database... ... Success!

Riavviamo ora i privilegi delle tabelle

Reloading the privilege tables will ensure that all changes made so far

27

Page 28: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

will take effect immediately.

Reload privilege tables now? [Y/n] <-- ENTER ... Success!

Cleaning up...

Con mysql abbiamo terminato ora la configurazione di base è sicura e non ci resta che usarlo.

Configuriamo ora l'interfaccia grafica di Mysql ovvero PhpMyAdmin in modo che ci permettà unaccesso remoto per poter lavorare sul server, prima di tutto accediamo a questo path:

# yum install phpmyadmin# nano /etc/httpd/conf.d/phpmyadmin.conf

Dovremo visualizzare una situazione simile a questa:

## Web application to manage MySQL#

<Directory "/usr/share/phpmyadmin"> Order Deny,Allow Deny from all Allow from 127.0.0.1</Directory>Alias /phpmyadmin /usr/share/phpmyadminAlias /phpMyAdmin /usr/share/phpmyadminAlias /mysqladmin /usr/share/phpmyadmin

Apportiamo le modifiche che vediamo qui sotto:

## Web application to manage MySQL#

#<Directory "/usr/share/phpmyadmin"># Order Deny,Allow# Deny from all# Allow from 127.0.0.1#</Directory>

Alias /phpmyadmin /usr/share/phpmyadminAlias /phpMyAdmin /usr/share/phpmyadminAlias /mysqladmin /usr/share/phpmyadmin

Salviamo e usciamo.

28

Page 29: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Cambiamo ora la tipologia di autenticazione di PhpMyAdmin da cookie a http:

# nano /usr/share/phpmyadmin/config.inc.php

Cambiamo in questo modo:

[...]/* Authentication type */$cfg['Servers'][$i]['auth_type'] = 'http';[...]

Salviamo, A. questo punto non ci resta che provare la connesione verso PhpMyAdmin inserendo nelborwser la stringa: Ipserver o nomeserver/phpmyadmin, dovremmo visualizzare la richiesta diutente e password da parte di quest'ultimo.

Accediamo al database e creiamo la nostra tabella per gli utenti,

# mysql -u root -p

Digitare la password creata precedentemente, ovvero “123456”, inizimao con la creazione del database vsftpd, l'utente si chiamerà vsftpd e la password sarà genius

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

29

Page 30: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE vsftpd; Query OK, 1 row affected (0.01 sec)

mysql> GRANT SELECT ON vsftpd. * TO 'vsftpd'@'localhost'IDENTIFIED BY 'genius'; Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec)

Cambiamo ora il database e costruiamo la tabella degli utenti

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE vsftpd; Query OK, 1 row affected (0.01 sec)

mysql> GRANT SELECT ON vsftpd. * TO 'vsftpd'@'localhost'IDENTIFIED BY 'genius'; Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec)

USE vsftpd;Database changed

mysql> CREATE TABLE `accounts` ( -> `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , -> `username` VARCHAR( 30 ) NOT NULL , -> `pass` VARCHAR( 50 ) NOT NULL ,

30

Page 31: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

-> UNIQUE ( `username` ) -> ) ENGINE = MYISAM ; Query OK, 0 rows affected (0.10 sec)

mysql> exit;

Creato un database senza privilegi, andiamo a definire la home root degli utenti virtuali, nel nostroesempio sarà /home/virtual appartenente al gruppo users. Vsftpd viene eseguito con i privilegi diquesto utente così rischio per il sistema è ridotto al minimo e le directory FTP dei nostri utentivirtuali sarà /home/virtual, per esempio “home/virtual/utente1, /home/virtual/utente2 ecc..)

# useradd -G users -s /sbin/nologin -d /home/virtual vsftpd

Ora possiamo configurare il file vsftpd.conf, anche qui partiamo da una situazione nuova, ed è opportuno eseguire una copia del file originale.

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-orig

Svuotiamo ora il file originale

# cat /dev/null > /etc/vsftpd/vsftpd.conf

Apriamo il file ed editiamolo in questo modo

# No ANONYMOUS users allowed

anonymous_enable=NO

# Allow 'local' users with WRITE permissions (0755)

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

# if you want to LOG vsftpd activity then uncomment this log_ftp_protocol

# log_ftp_protocol=YES

connect_from_port_20=YES

# uncomment xferlog_file and xferlog_std_format if you DIDN'T use the line above

# with log_ftp_protocol - it must be excluding each other

# The name of log file when xferlog_enable=YES and xferlog_std_format=YES

# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log

#xferlog_file=/var/log/xferlog

#

31

Page 32: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# xferlog_std_format Switches between logging into vsftpd_log_file and xferlog_file files.

# NO writes to vsftpd_log_file, YES to xferlog_file

# xferlog_std_format=YES

#

# You may change the default value for timing out an idle session (in seconds).

#idle_session_timeout=600

#

# You may change the default value for timing out a data connection (in seconds).

#data_connection_timeout=120

#

# define a unique user on your system which the

# ftp server can use as a totally isolated and unprivileged user.

nopriv_user=vsftpd

chroot_local_user=YES

listen=YES

# here we use the authentication module for vsftpd to check users name and passw

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

# If userlist_deny=YES (default), never allow users in this file

# /etc/vsftpd/user_list , and do not even prompt for a password.

# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers

# for users that are denied.

userlist_deny=yes

# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory

guest_enable=YES

guest_username=vsftpd

local_root=/home/virtual/$USER

user_sub_token=$USER

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

force_local_data_ssl=NO

force_local_logins_ssl=NO

# PASV - passive ports for FTP (range 44000 - 44100 ; 100 PASV ports,

32

Page 33: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# REMEMBER to OPEN FIREWALL FOR ALLOWING FTP Passive CONNECTIONS

# check "how to enable Passive FTP in IPTABLES"

pasv_enable=YES

pasv_min_port=44000

pasv_max_port=44100

# No ANONYMOUS users allowed anonymous_enable=NO # Allow 'local' users with WRITE permissions (0755) local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES

# if you want to LOG vsftpd activity then uncomment this log_ftp_protocol # log_ftp_protocol=YES

connect_from_port_20=YES

# uncomment xferlog_file and xferlog_std_format if you DIDN'T use the line above # with log_ftp_protocol - it must be excluding each other # The name of log file when xferlog_enable=YES and xferlog_std_format=YES # WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log #xferlog_file=/var/log/xferlog # # xferlog_std_format Switches between logging into vsftpd_log_file and xferlog_file files. # NO writes to vsftpd_log_file, YES to xferlog_file # xferlog_std_format=YES

# # You may change the default value for timing out an idle session (in seconds). #idle_session_timeout=600 # # You may change the default value for timing out a data connection (in seconds). #data_connection_timeout=120 # # define a unique user on your system which the # ftp server can use as a totally isolated and unprivileged user. nopriv_user=vsftpd

chroot_local_user=YES

listen=YES

# here we use the authentication module for vsftpd to check users name and passw

33

Page 34: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES

# If userlist_deny=YES (default), never allow users in this file # /etc/vsftpd/user_list , and do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied. userlist_deny=yes

# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory guest_enable=YES guest_username=vsftpd local_root=/home/virtual/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/vsftpd_user_conf

force_local_data_ssl=NO force_local_logins_ssl=NO

# PASV - passive ports for FTP (range 44000 - 44100 ; 100 PASV ports, # REMEMBER to OPEN FIREWALL FOR ALLOWING FTP Passive CONNECTIONS # check "how to enable Passive FTP in IPTABLES": here or here

pasv_enable=YES pasv_min_port=44000 pasv_max_port=44100

con le voci pasv_enable e la configurazione delle porte , indichiamo al server ftp che l'accesso èpossibile anche in passive mod, se siamo dietro ad un firewall.

Con l'opzione user_config_dir è possibile specificare una directory per i file di configurazione per-utente che sostituiscono parti delle impostazioni globali. Questo è totalmente opzionale siete voi adecidere se utilizzare questa funzione.

Creiamo questa directory

# mkdir /etc/vsftpd/vsftpd_user_conf

Anche in questa configurazione vogliamo che ogni utente abbia la suo home, ma se vogliamo qualcosa di diverso come impostazione, diciamo per l'”utente1” andiamo a crearla in questo modo:

# nano /etc/vsftpd/vsftpd_user_conf/utente1

Al suo interno editeremo quanto segue:

34

Page 35: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

dirlist_enable=YESdownload_enable=YES# full path della directory usata dall' 'utente1' local_root=/home/users/utente1write_enable=YES

Creiamo la directory per l'utente user1 se vogliamo che questo acceda.

# mkdir /home/users/utente1

Diamo ora i permessi alla cartella

# chmod 700 /home/users/utente1# chown vsftpd:users /home/users/utente1

Così ora utente ha 'dir home' in '/ home/users/utente1' invece di '/ home/virtual/utente1' il file diconfigurazione dell'utente può essere cambiato come più vi aggrada.

Configuriamo ora il file PAM (password Authentication) per gli utenti del database MySQL, il filePAM di configurazione lo posizioneremo in /etc/pam.d/vsftpd.

Anche qui come sempre effetuiamo una copia di backup del file già esistente:

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd-orig

Anche in questo file cancelliamo le impostazioni scritte e poi editiamolo con le nuove impostazioni

# cat /dev/null > /etc/pam.d/vsftpd# nano /etc/pam.d/vsftpd

E inseriamo queste righe, facendo attenzione ad inserire l'utente e password che abbiamo creato per il database vsftpd, ovvero utente vsftpd e password genius

#%PAM-1.0session optional pam_keyinit.so force revokeauth required pam_mysql.so user=vsftpd passwd=genius host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3account required pam_mysql.so user=vsftpd passwd=genius host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3

Per poter lavorare PAM e Mysql, abbiamo bisogno di scaricare il pacchetto pam_mysqlper farlo dobbiamo abilitare i repository EPEL

35

Page 36: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# yum install pam_mysqlRunning transaction check ---> Package pam_mysql.i686 1:0.7-0.12.rc1.el6 will be installed --> Finished Dependency Resolution

Dependencies Resolved

================================================================================ Package Arch Version Repository Size ================================================================================ Installing: pam_mysql i686 1:0.7-0.12.rc1.el6 epel 38 k

Transaction Summary ================================================================================ Install 1 Package(s)

Total download size: 38 k Installed size: 85 k Is this ok [y/N]: y Downloading Packages: pam_mysql-0.7-0.12.rc1.el6.i686.rpm | 38 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 1:pam_mysql-0.7-0.12.rc1.el6.i686 1/1 Verifying : 1:pam_mysql-0.7-0.12.rc1.el6.i686 1/1

Installed: pam_mysql.i686 1:0.7-0.12.rc1.el6

Complete!

Se il pacchetto è installato correttamente dovremmo vedere quanto segue al suo interno

# ls -la /lib/security/pam_m*

-rwxr-xr-x. 1 root root 13668 22 nov 15:02 /lib/security/pam_mail.so -rwxr-xr-x. 1 root root 9568 22 nov 15:02 /lib/security/pam_mkhomedir.so -rwxr-xr-x. 1 root root 5488 22 nov 15:02 /lib/security/pam_motd.so -rwxr-xr-x 1 root root 39604 14 ago 2011 /lib/security/pam_mysql.so

36

Page 37: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Finalmente, possiamo creare il nostro primo utente virtuale:

mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE vsftpd;

Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

Database changed mysql> INSERT INTO accounts (username, pass) VALUES('utente1',md5('segreto')); Query OK, 1 row affected (0.00 sec)

mysql>

L'utente che abbiamo creato l'abbiamo chiamato utente1 e la password impostata con crittografia md5 è segreto, vediamo come si presenta la tabella utenti del database vsftpd.

mysql> select * from accounts; +----+----------+----------------------------------+ | id | username | pass | +----+----------+----------------------------------+ | 1 | utente1 | 525d5d4f0cfb94d045c48971aa1aa974 | +----+----------+----------------------------------+ 1 row in set (0.00 sec)

exit;

Creiamo ora un secondo utente, ma questa volta nella local root di defaul ovvero /home/virtual, viricordo che per l'utente1 è stato creato un apposito file e filesystem che non sfruttavano la local rootdi base ma una preferenziale, accediamo al database

mysql -u root -p Enter password:

37

Page 38: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE vsftpd;

Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

Database changed mysql> INSERT INTO accounts (username, pass) VALUES('utente2',md5('segreto12')); Query OK, 1 row affected (0.00 sec)

mysql> exit;

L'utente creato si chiama utente2 con password segreto12, visto che l'utenza virtuale non creadirettamente le direcoty, dobbiamo farlo noi manualmente:

# mkdir /home/virtual/utente2

Diamo i permessi alla cartella

# chmod 700 /home/users/utente2# chown vsftpd:users /home/virtual/utente2

Creiamo ora due file per distingure gli accessi, uno da mettere nella home dell'utente1 e l'altro per l'utente2

# cd /home/users/utente1# echo utente1nellacartellapreferenziale.txt# cd ../../..# cd /home/virtual/utente2# echo utente2_homedir_base.txt

Creati i file proviamoli via browser, prima accediamo come utente1

38

Page 39: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

bene accediamo tranquillamente, e ora proviamo l'utente2

anche qui abbiamo ottenuto l'accesso desiderato. Ora con Filezilla è possibile eseguire l'upload e ildownload dei file.

39

Page 40: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Fino ad ora abbiamo visto vari metodi di configurazione degli utenti e abbiamo visto come siasemplice spostare il path delle cartelle in cui gli utenti possono accedere alle loro cartelle, il servizioFTP è uno servizio essenziale nelle aziende, ma la sua vulnerabilità è che tutto viene trasmesso inchiaro, fino ad ora abbiamo lavorato sulla porta di default del server ovvero la TCP 21, nell'ultimocapitolo vedremo come creare una connessione criptata tramite ssl ed avere un ftps sicuro.

VSFTP con certificato SSL

Per fare in modo che il nostro server FTP diventi un FTPS, ovvero un server protetto da criptatura, dobbiamo creare prima di tutto un certificato, oppure meglio ancora acquistarne uno valido, per il momento vediamo come crearne uno auto firmato.

Iniziamo con il creare la folder che conterrà il certificato:

# mkdir /etc/vsftpd/ssl

Creiamo ora il certificato, sarà un certificato a 128bit della durata di un anno, (nessuno ci impediscedi creare un certificato con criptatura più alta.

# openssl req -x509 -nodes -days 365 -newkey rsa:1024-keyout /etc/vsftpd/ssl/vsftpd.pem -out/etc/vsftpd/ssl/vsftpd.pem

Una volta creato il certificato, vediamo di apportare le dovute modifiche al file vsftpd.conf

# nano /etc/vsftpd/vsftpd.conf

Spostiamoci in fondo al file e inseriamo il path dei certificati

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pemrsa_private_key_file=/etc/vsftpd/ssl/vsftpd.pem

Dopodiché abilitiamo vsftpd al collegamento ssl, sempre in fondo a file di configurazionevsftpd.conf inseriamo queste voci:

ssl_enable=YESforce_local_data_ssl=YESforce_local_logins_ssl=YES

Successivamente, limiteremo il tipo di connessione TLS, che è più sicuro di SSL. Lo faremo, consentendo esplicitamente TLS e negando l'uso di SSL aggiungendo queste voci:

ssl_tlsv1=YESssl_sslv2=YESssl_sslv3=YES

40

Page 41: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Prima di terminare aggiungiamo anche alcune opzioni, queste ci eviteranno problemi con alcuni client ftp come Filezilla.

require_ssl_reuse=NOssl_ciphers=HIGH

Salviamo e chiudiamo il file e riavviamo il servizio FTP

# service vsftpd restart

Proviamo la nostra connessione con Filezilla, apriamolo e clicchiamo su l'icona site manager

Nell interfaccia che si apre clicchiamo sul pulsante new site

Inseriamo ora l'indirizzo del server FTP, e nella finestra Encryption abilitate la voce Require explicitFTP over TLS, inserite successivamente l'utente e la password e cliccate su connect.

A questo punto ci verrà mostrato il certificato, accettiamo cliccando su Ok e siamo connessi inmodalità sicura. Non è possibile effettuare questa operazione da browser perché esso con contemplail protocollo FTPS.

41

Page 42: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Finalmente abbiamo terminato, ora siamo in grado di creare un server FTP con svariateconfigurazione utente e con accesso protetto.

Creare un applicazione in PHP per gestire gli utenti virtuali

Vediamo ora come realizzare una piccola applicazione per gestire gli utenti virtuali in MySQL conPHP, che ci permetterà di inserire, modificare, visualizzare e cancellare gli utenti dal database.Iniziamo con il costruire la pagina index iniziale dell'applicazione, una semplice pagina in html cheposizioneremo in /var/www/html.

La pagina index.html

ecco qui di seguito il codice della nostra pagina statica iniziale:

<html> <head><title>Gestione utenti ftp </title> </head> <body bgcolor="#000000" text="#ffffff" link="yellow">

<center> <table cellpadding="20" border="2" bordercolor="white"> <tr><td align="center"> <h1>GESTIONE UTENTI FTP</h1>

42

Page 43: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

<br> <img src="logo.png" height="350" width="300">

<hr color="yellow" width="700"> <center> <table cellpadding="15" border="0"> <tr>

<td><a href="inserisci.php"><img src="InsU.png" height="80" width="140"></a></td> <td><a href="view.php"><img src="cermod.png" height="80" width="140"></a></td> <td><a href="stampalistautenti.php"><img src="stampa.png" height="80"width="140"></a></td> </tr>

</table> </center> </td> </tr> </table> </center> </body> </html>

Questo è il front end

43

Page 44: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

e fin qui niente di particolare, scriviamo ora il file php per la connessione al database mysql.

File connectdb.php

<?php /* CONNECTDB.PHP Consente a PHP di connettersi al tuo database */

// Variabili del database (inserisci le informazioni del tuo server) $server = 'localhost'; $user = 'root'; $pass = '123456'; $dbase = 'vsftpd';

// Connessione al Database $connection = mysql_connect($server, $user, $pass) or die ("Could not connect to server ... \n" . mysql_error ()); mysql_select_db($dbase) or die ("Could not connect to database ... \n" . mysql_error ());

?>

Dopo aver creato il file che gestisce la connessione possiamo ora creare il form in html perl'inserimento degli utenti nel database.

Form inserisci.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html> <head> <title>Caricamento dati nel db </title> </head> <body bgcolor="black" text="white"> <center> <h1>INSERIRE UTENTE E PASSWORD FTP</h1> <br> <a href="index.html"><img src="home.png" height="80" width="140"></a> <br> <form method="post" action="input.php"> <table cellpadding="15" border="1"> <tr><td> <br> Username:<br> <input type="varchar" name="username" size="25">

44

Page 45: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

<br>

Password:<br> <input type="varchar" name="password" size="25"></td></tr> <br> </td> <tr> <td> <input type="submit" value="Inserisci"> | <input type="reset" value="Cancella"> </td> </tr> </form> </table> <br> <img src="logo.png" height="150" width="100"> </center> </body> </html>

Ecco il front end dell'inserimento utente

Creiamo ora il file vero e proprio che gestisce l'inserimento dei dati, il file chiamato input.php

Input.php

45

Page 46: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

<html> <head> <title>Caricamento dati nel db</title> </head> <body bgcolor=”#000000” text=”#ffffff”> <h1>Caricamento utente server ftp</h1> <br> <h3>Risultato del caricamento</h3> <?

$username=$_POST['username']; $password=$_POST['password']; trim ($s_username); if (!$username || !$password) {

echo "Errore: non hai inserito i dati richiesti!"; exit;

}

$username = addslashes ($username); $password = addslashes ($password);

@ $db = mysql_pconnect ("localhost" , "root" , "123456"); if (!$db) { echo "Errore: connessione al database non riuscita<br>\n"; exit; } mysql_select_db ("vsftpd") or die ("Errore: ".mysql_error()); $query = "INSERT INTO accounts VALUES (' ','$username' , MD5('$password'))"; $risultato = mysql_query($query) or die ("Inserimento non riuscito, errore: ".mysql_error()); if ($risultato) { echo mysql_affected_rows () ." nuovo utente inserito nell ftp.<br>\n"; } ?> </body> </html>

Perfetto ora l'inserimento degli utenti all'interno del db è funzionante, creiamo ora la parte piùcopiosa ovvero la visualizzazione e modifica dei record, iniziamo con il creare il file divisualizzazione, ovvero quel file che ci permette di estrarre e visualizzare gli utenti all'interno deldb, anche questo ci fornirà un output su un file php.

46

Page 47: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

File view.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Visualizza Record</title> </head> <body bgcolor="#000000" text="#ffffff" vlink="orange"> <center> <h1>VISUALIZZA UTENTI FTP</h1> <br> <img src="logo.png" height="140" width="100"> </center> <br> <center> <?php /* VIEW.PHP Visualizza tutti i dati della tabella 'accounts' */

// connessione al database include('connectdb.php');

// ottiene i risultati dal database $result = mysql_query("SELECT * FROM accounts") or die(mysql_error());

// visualizza i dati in tabella echo "<p><b>Visualizza Tutto</b> | <a href='view-paginated.php?page=1'>Visualizzaimpaginato</a></p>";

echo "<table border='1' cellpadding='10' bordercolor='#ffffff'>"; echo "<tr> <th>id</th> <th>username</th> <th>password</th> <th></th> <th></th></tr>";

// loop tra i risultati della query del database, visualizzandoli in tabella while($row = mysql_fetch_array( $result )) {

// emissione del contenuto di ogni riga in una tabella echo "<tr>"; echo '<td>' . $row['id'] . '</td>'; echo '<td>' . $row['username'] . '</td>'; echo '<td>' . $row['password'] . '</td>'; echo '<td><a href="modifica.php?id=' . $row['id'] . '"><fontcolor="yellow">Edit</font></a></td>'; echo '<td><a href="cancella.php?id=' . $row['id'] . '"><font color="red">Delete</font></a></td>';

47

Page 48: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

echo "</tr>"; }

// chiude la tabella> echo "</table>";

?> </center> <br> <center> <table cellpadding="15" border="0"> <tr> <td><a href="index.html"><img src="home.png" width="120" height="80"></a></td>

<td><a href="inserisci.php"><img src="InsU.png" width="120" height="80"></a></td> </tr> </table> </center> </body> </html>

Ecco il front end del file

48

Page 49: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

da notare a fianco le voci edit in giallo che indicano la possibilità di modificare l'utente e lapassword criptata in MD5 oppure delete in rosso che permette di eliminare il record.

Creiamo ora il file Visualizza impaginato, questo file ci permette di visualizzare l'estrazione su piùfile invece che su un unico file in modo da facilitare la ricerca.

File view-paginated.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Visualizza Record Impaginati</title> </head> <body bgcolor="#000000" text="#ffffff" vlink="orange"> <center> <h1>VISUALIZZA RECORD IMPAGINATI</h1> <br> <img src="logoGallo.png" height="140" width="120" vlink="orange"> </center> <br>

49

Page 50: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

<center> <?php /* VIEW-PAGINATED.PHP Visualizza tutti i dati della tabella 'accounts' Questa è una versione modificata del file view.php che include l'impaginazione */

// connessione al database include('connectdb.php');

// numero di risultati da visualizzare per pagina $per_page = 3;

// calcola le pagine totali $result = mysql_query("SELECT * FROM accounts"); $total_results = mysql_num_rows($result); $total_pages = ceil($total_results / $per_page);

// controlla se la variabile 'page' è impostata nell'URL (es: view-paginated.php?page=1) if (isset($_GET['page']) && is_numeric($_GET['page'])) { $show_page = $_GET['page'];

// mi assicuro che il valore di $show_page sia valido if ($show_page > 0 && $show_page <= $total_pages) { $start = ($show_page -1) * $per_page; $end = $start + $per_page; } else { // errore - mostra il primo set di risultati $start = 0; $end = $per_page; } }

else {

// se la pagina non è impostata, mostra il primo set di risultati $start = 0; $end = $per_page; } }

else {

// se la pagina non è impostata, mostra il primo set di risultati $start = 0;

50

Page 51: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

$end = $per_page; }

// visualizza impaginazione

echo "<p><a href='view.php'>Visualizza Tutto</a> | <b>Visualizza impaginato:</b> "; for ($i = 1; $i <= $total_pages; $i++) { echo "<a href='view-paginated.php?page=$i'>$i</a> "; }

echo "</p>";

// visualizza i dati in tabella echo "<table border='1' cellpadding='10'>"; echo "<tr> <th>ID</th> <th>Username</th> <th>Password</th> <th></th> <th></th></tr>";

// loop tra i risultati della query del database, visualizzandoli in tabella for ($i = $start; $i < $end; $i++) { // mi assicuro che PHP non cerchi di mostrare risultati che non esistono if ($i == $total_results) { break; }

// emissione del contenuto di ogni riga in una tabella echo "<tr>"; echo '<td>' . mysql_result($result, $i, 'id') . '</td>'; echo '<td>' . mysql_result($result, $i, 'username') . '</td>'; echo '<td>' . mysql_result($result, $i, 'password') . '</td>'; echo '<td><a href="modifica.php?id=' . mysql_result($result, $i, 'id') . '"><fontcolor="yellow">Edit</font></a></td>'; echo '<td><a href="cancella.php?id=' . mysql_result($result, $i, 'id') . '"><fontcolor="red">Delete</font></a></td>'; echo "</tr>"; }

// chiude la tabella> echo "</table>";

// impaginazione

?> </center> <br> <center> <a href="index.html"><img src="home.png" width="120" height="80"></a> | <ahref="inserisci.php"><img src="InsU.png" width="120" height="80"></a> </center> </body> </html>

51

Page 52: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

L'output e simile a view.php.

Creiamo ora il file più impegnativo, il file modifica.php.

File modifica.php

<?php /* EDIT.PHP Consente all'utente di modificare una voce specifica nel database */

// crea il form di modifica record // dal momento che questo modulo è utilizzato più volte in questo file, ho fatto una funzionefacilmente riutilizzabile function renderForm($id, $username, $password, $error) { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Modifica Record</title> </head> <body bgcolor="#000000" text="#ffffff"> <center> <h1>MODIFICA PASSWORD</h1> <br> <img src="logo.png" width="100" height="140"> </center> <br> <?php // se ci sono errori, vengono visualizzati if ($error != '') { echo '<div style="padding:4px; border:1px solid red; color:red;">'.$error.'</div>'; } ?> <center> <table cellpadding="15" border="1" bordercolor="#ffffff"> <tr> <td> <form action="" method="post"> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <div> <p><strong>ID:</strong> <?php echo $id; ?></p> <br> <strong>Username: *</strong> <input type="text" name="username" value="<?php echo

52

Page 53: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

$username; ?>"/><br/> <br> <strong>Password: *</strong> <input type="text" name="password" value="<?php echo$password; ?>"/><br/> <p>* Richiesto</p> <input type="submit" name="submit" value="Invia"> </div> </form> </td></tr> </table> <br> <a href="index.html"><img src="home.png" width="100" hight="140"></a> </center> </body> </html> <?php }// connessione al database include('connectdb.php');

// verifica se il modulo è stato inviato. Se lo è, inizia a elaborare il modulo e lo salva nel database if (isset($_POST['submit'])) { // verificare che il valore di 'id' sia un intero valido prima di ottenere i dati del modulo if (is_numeric($_POST['id'])) { // ottenere i dati del modulo e verifica che siano validi $id = $_POST['id']; $username = mysql_real_escape_string(htmlspecialchars($_POST['username'])); $password = mysql_real_escape_string(htmlspecialchars($_POST['password']));

// controlla che i campi username/password siano entrambi compilati if ($username == '' || $password == '') { // genera messaggio di errore $error = 'ERROR: Please fill in all required fields!';

// errore, visualizzo il modulo renderForm($id, $username, $password, $error); } else { // salva i dati nel database mysql_query("UPDATE accounts SET username='$username', password=MD5('$password')WHERE id='$id'") or die(mysql_error()); // una volta salvato, si viene reindirizzati alla pagina di visualizzazione header("Location: view.php");

53

Page 54: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

} } else { // Se l' 'id' non è valido, viene visualizzato un errore echo 'Error!'; } } else // se il modulo non è stato inviato, ottengo i dati dal db e visualizzare il modulo {

// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sianumerico/maggiore di 0) if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0) { // query db $id = $_GET['id']; $result = mysql_query("SELECT * FROM accounts WHERE id=$id") or die(mysql_error()); $row = mysql_fetch_array($result);

// verifica che l' 'id' corrisponda a una riga nel database if($row) { // ottiene i dati dal db $username = $row['username']; $password = $row['password'];

// visualizza il modulo renderForm($id, $username, $password, ''); } else // se non corrisponde visualizza il risultato { echo "Nessun risultato!"; } } else // se l' 'id' nell'URL non è valido, o se non vi è alcun valore di 'id', visualizza un errore { echo 'Errore!'; } } ?>

Ecco qui di seguito il front end del file:

54

Page 55: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Notiamo come la password si presenti criptata in MD5, l'inserimento comunque avviene in carattereascii.

Creaiamo ora l'ultimo file quello che permette l'eliminazione del record, il file cancella.php.

File cancella.php

<?php /* DELETE.PHP Cancella una voce specifica della tabella 'players' */

// connessione al database

55

Page 56: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

include('connectdb.php');

// controlla se la variabile 'id' è impostata nell'URL, e controlla che sia valida if (isset($_GET['id']) && is_numeric($_GET['id'])) { // ottiene il valore id $id = $_GET['id'];

// elimina la voce $result = mysql_query("DELETE FROM accounts WHERE id=$id") or die(mysql_error());

// reindirizza alla pagina di visualizzazione header("Location: view.php"); } else // se l'id non è impostato o non è valido reindirizza alla pagina di visualizzazione { header("Location: view.php"); }

?>

Bene abbiamo quasi finito, creiamo ora l'ultimo file quello che ci stampa a video tutti gli utenti deldb

<html> <head><title>Stampa a video utenti</title> </head> <body bgcolor="#000000" text="#ffffff"> <center> <h1>STAMPA UTENTI FTP A VIDEO</h1> <br> <img src="logo.png" height="120" width="100"> <br> <a href="index.html"><img src="home.png" height="60" width="120"></a> <br> <br> <? $user="root"; $pass="123456"; $dbase="vsftpd";

mysql_connect(localhost,$user,$pass); @mysql_select_db($dbase) or die("Impossibile selezionare il database"); $query="SELECT * FROM accounts"; $risultati=mysql_query($query);

56

Page 57: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

$num=mysql_numrows($risultati);

mysql_close(); ?>

<table border="1" cellspacing="2" cellpadding="2" bordercolor="white"> <tr> <th><font face="Arial, Helvetica, sans-serif">username</font></th> <th><font face="Arial, Helvetica, sans-serif">password</font></th>

</tr>

<? $i=0; while ($i < $num) { $username=mysql_result($risultati,$i,"username"); $password=mysql_result($risultati,$i,"password");

?>

<tr> <td><font face="Arial, Helvetica, sans-serif"><?php echo $username;?></font></td> <td><font face="Arial, Helvetica, sans-serif"><?php echo $password;?></font></td>

</tr> <? $i++; } ?> </center> </body> </html>

57

Page 58: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Ed ecco l'output del file:

Installare Clamav antivirus e chrootkit e Rkhunter per controllareintegrità di file e server

Visto che il server FTP viene posto all'esterno e gli utenti che hanno accesso in scrittura possonoeroneamente inserire qualche file contententi virus o rootkit che possono infettare il pc, vediamocome installare e controllare il nostro server.

Installiamo Clamav antivirus

Prima di installare l'antivirus, dobbiamo installare i repo EPEL, installiamolo cosi.

# yum install epel-release

Ora possiamo installare l'antivirus.

# yum install clamav clamd

58

Page 59: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Una volta che l'antivirus viene installato dobbiamo avviare servizio e il demone.

# /etc/init.d/clamd on# chkconfig clamd on# /etc/init.d/clamd start

Eseguiamo l'update del signature dell'antivirus

# /usr/bin/freshclam

Una volta installato ed effettuato l'update configuriamo una scansione giornaliera del disco dove verranno posti i dati, nel nostro caso usiamo la partizione /dati

# nano /etc/cron.daily/manual_clamscan

Scendiamo in fondo al file e aggiungiamo le seguenti righe.

# ! /bin/bashSCAN_DIR=”/dati”LOG_FILE=”/var/log/clamav/manual_clamscan.log”/usr/bin/clamscan -i -r $SCAN_DIR >> $LOG_FILE

Salviamo e usciamo da l'editor nano, rendiamo ora eseguibile lo script

# chmod +x /etc/cron.daily/manual_clamscan

Creiamo ora uno script che ci permetta di eseguire automaticamente la scansione e di inviare subito dopo un report alla nostra mail. Iniziamo con l'editare il file che chiameremo clamav-scan in cron.daily.

# cd /etc/cron.daily# nano clamav-scan

Nello script inseriamo ora queste righe:

#!/bin/sh

# Generatore data/ora stile: HH:mm dd/mm/YYYY data=$(date "+%H:%M %d/%m/%Y")

# Indirizzo e-mail destinatario report email="[email protected]"

59

Page 60: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

# Esegui WPScan ed invia report per e-mail clamscan -i -r /dati | /usr/sbin/ssmtp -s $email

Salviamo e impostiamo i permessi corretti per renderlo eseguibile

# chmod 755 clamav-scan

Bene, l'antivirus è installato e pronto per eseguire una scansione giornaliera di tutti i dati inseriti nel server FTP. Vediamo di seguito l'installazione di Rkhunter e chrootkit.

Installare e configurare Rkhunter

Rkhunter è un tool opensource per la scansione di rootkit, backdoors e exploit locali, iniziamo con lo scaricare il tool:

# yum install rkhunter

Anche qui facciamo in modo di avviare automaticamente il demone del tool:

# chkconfig on

Eseguiamo anche qui l'update del tool

# rkhunter –update# rkhunter --propupd

Eseguiamo ora una scansione manuale

# rkhunter --check

Ora dopo aver effettuato uno scan manuale del server, creiamo un script per eseguire una scansione automatica alla settimana con invio dei file di log tramite mail.

# cd /etc/cron.weekly# nano rkhunter-scan.sh

Aggiungiamo ora le seguenti righe allo script.

#!/bin/sh

[email protected]

( /usr/bin/rkhunter --versioncheck /usr/bin/rkhunter --update

60

Page 61: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

/usr/bin/rkhunter --cronjob --report-warnings-only ) | /usr/sbin/ssmtp -s "$email"

Salvare e dare i permessi corretti al file:

# chmod 755 rkhunter-scan.sh

Un altro software per la scansione di rootkit è Chrootkit, vediamo come installarlo e configurarlo per uno scan automatizzato settimanale.

Chrootkit

Anche qui per installare il tools chrootkit dobbiamo disporre come abbiamo visto per gli altri, del repository epel, se questo è già stato installato, passiamo ad installare il tools.

Per installare Chrootkit, il comando da dare è il seguente:

# yum install chkrootkit

Se volessimo eseguire una scansione manuale, non ci resta che dare il comando

# chrootkit /directory o partizione

Anche qui possiamo schedulare una scansione con report da ricevere tramite mail del tools, quindila scansione anche in questo caso possiamo eseguirla settimanalmente pertando possiamoposizionarci in /etc/cron.weekly e creare il file chrootkit-scan.sh che conterrà giustamente lo script.

# cd /etc/cron.weekly# nano chrootkit-scan-sh

Inseriamo ora queste righe

#!/bin/sh

# Generatore data/ora stile: HH:mm dd/mm/YYYY data=$(date "+%H:%M %d/%m/%Y")

# Indirizzo e-mail destinatario report email="[email protected]"

# Esegui WPScan ed invia report per e-mail

61

Page 62: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

chkrootkit | /usr/sbin/ssmtp -s $email

Bene ora abbiamo configurato tutti e tre i tools e entrambi possono scansionare e inviare una mail diverifica automaticamente.

Vediamo ora però come installare un leggero server smtp in grado di fare questo lavoro, per l'occasione ho usato ssmtp.

Scaricare SSMTP

Per scaricare ssmtp dobbiamo disporre di wget, che abbiamo precedentemente installato, nel caso incui non lo abbiate fatto ecco come farlo:

# yum install wget

Una volta installato, posizioniamoci nella cartella /tmp scarichiamo ssmtp

# cd /tmp#wget https://dl.fedoraproject.org/pub/epel/6/x86_64/ssmtp-2.61-21.el6.x86_64.rpm

Terminato il download “che sarà molto veloce” installiamo il tool

# rpm -Uvh ssmtp-2.61-21.el6x86_64.rpm

Il file eseguibile verrà posizionato in /usr/sbin.Una volta installato configuriamolo con i parametri di posta desiderati, il file di configurazione lo troviamo in:

# nano /etc/ssmtp/ssmtp.conf

Mettiamo il simbolo # su tutte le voci e poi in fondo iniziamo ad inserire le seguenti voci di configurazione:

[email protected] mailhub=server smtp:porta (se diversa dalla 25)AuthUser=utente autorizzato ad inviare mailAuthPass=password dell'utenteRewriteDomain=dominio.docHostname=ftpsrv FromLineOvverride=YES UseSTARTTLS=YES UseTLS=YES (questo solo con gmail) AuthMethod=LOGIN (questo solo con gmail) TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt (questo solo con gmail)

62

Page 63: Web Server - appunti di Adam · 2017-02-14 · Web Server Installazione del server vsftpd Eseguita questa operazione preliminare, iniziamo con l'installazione del server FTP, CentOS,

Web Server

Testiamo ora che tutto funzioni correttamente

# ssmtp vostramail impostata sul file di confto: vostramail impostata sul file di conffrom: mail destinatario del messaggioSubject: test mail

mail prova

Per inviare la mail e chiudere usare la combinazione di tasti CTRL+D, se tutto funziona dovreste il destinatario riceverà una mail dal server.

Ora abbiamo finito il nostro server FTP oltre ad essere configurabile in vari modi, è protetto e ci avvisa con l'invio delle mail.

63