Tesina Daniele Coccia

Da Wiki-itsos.

Tesina Sistemi e Informatica
Itsos Marie Curie – Cernusco sul Naviglio

Daniele Coccia
5° Informatico A
AS 2015-2016


Situazione iniziale

L'azienda presso la quale ho perseguito lo stage estivo che si occupa di web design e grafica 3d ha presentato l'esigenza di rinnovare la parte IT con lo scopo di avere notevoli riduzioni nei costi di tempo e una maggiore efficienza.

Richieste

Avere la possibilità di condividere, archiviare ed eseguire backup dei dati. Inoltre avere una sezione di spazio da dedicare ai dati sensibili come credenziali di accesso. sviluppare in modo istantaneo l'ambiente di sviluppo per un nuovo sito in locale per poi esportarlo successivamente in un server esterno. gestire ed utilizzare in remoto sia i server che i pc.

Azioni svolte

Per la fase di sviluppo delle macchine ho scelto di partire con macchine virtuali. La prima macchina conterrà il server samba, apache2, bind, sftp

Installazione dei pacchetti
LAMP

apt-get install apache2 php5 php5-mysql mysql-server

Samba

apt-get install samba samba-common
apt-get install python-glade2 system-config-samba

DNS

apt-get install bind9 bind9-host dnsutils -y

Configurazione di Samba

essendoci due utenti creerò tre cartelle condivise una per ogni utente e una terza cartella in comune e in più condividerò la directory dove sono presenti tutti i siti

mkdir /media/daniele/dati/condivisione

Modificare il file di configurazione di samba /etc/samba/smb.conf

#======================= Global Settings =====================================
[global]
workgroup = WORKGROUP
server string = FileSrvOID %v
netbios name = FileSrvOID
security = user
map to guest = bad user
dns proxy = no
browsable= yes
guest ok = yes

client lanman auth = yes

#============================ Cartella file condivisa=================
[FileShere]
path = /media/daniele/dati/condivisione
valid users = @smbgrp
guest ok = no
writable = yes
browsable =yes
read only = no
create mask = 775

Riavviare il servizio con service smbd restart ora aggiungere il gruppo per gli utenti samba e creazione del primo utente samba

addgroup smbgrp
useradd silvio
passwd silvio
adduser silvio smbgrp
smbpasswd -a silvio
chown -R nobody:smbgrp /media/daniele/dati/condivisione
chmod -R 770 /media/daniele/dati/condivisione

verificare la corretta sintassi con il comando testparm

root@DataeWP:/etc/samba# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[SitiOrangeID]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions   


# Global parameters
[global]
       netbios name = FILESRVOID
       server string = FileSrvOID %v
       security = USER
       map to guest = Bad User
       dns proxy = No
       idmap config * : backend = tdb
       guest ok = Yes


[FileShere]
       path = /media/daniele/dati/condivisione
       valid users = @smbgrp
       read only = No
       create mask = 0775
       guest ok = No

Riavviare il servizio con service smbd restart

SFTP

FTP via SSH -> http://xmodulo.com/how-to-set-up-secure-sftp-server-in-linux.html

Scaricare i pacchetti con il comando

apt-get install libssl0.9.8 ssh openssh-server gcc make

Installazione del servizio

wget http://mysecureshell.free.fr/repository/index.php/source/mysecureshell_1.31.tar.gz
tar xvfvz mysecureshell_1.31.tar.gz
cd mysecureshell_1.31
./configure
make
./install.sh en

Verifica dell'installazione

whereis MySecureShell

Configurazione del servizio Creazione del gruppo per il servizio con aggiunta degli utenti

groupadd sftp
adduser silvio sftp 

Modifica del file di configurazione nano /etc/ssh/sftp_config


## MySecureShell Configuration File ##
#Default rules for everybody
<Default>
       StayAtHome              true    #limit client to his home
       VirtualChroot           false   #fake a chroot to the home account
       LimitConnection         10      #max connection for the server sftp
       LimitConnectionByUser   2       #max connection for the account
       LimitConnectionByIP     2       #max connection by ip for the account
       Home                    /media/daniele/dati/condivisione        #overrite home of the user but if you want you can use
                                               #       environment variable (ie: Home /home/$USER)
       IdleTimeOut             5m      #(in second) deconnect client is idle too long time
       ResolveIP               true    #resolve ip to dns
       HideNoAccess            true    #Hide file/directory which user has no access
       DefaultRights           0773 0773       #Set default rights for new file and new directory
       ShowLinksAsLinks        false   #show links as their destinations
  1. ConnectionMaxLife 1d #limits connection lifetime to 1 day
  1. Charset "ISO-8859-15" #set charset of computer
</Default>
<Group sftp>
       StayAtHome              false    # limit user to his/her home directory
       VirtualChroot           false    # fake a chroot to the home account
       LimitConnectionByUser   2       # max connection for each account
       LimitConnectionByIP     2       # max connection by IP for each account
       IdleTimeOut             300     # disconnect user if idle too long time (in sec)
       HideNoAccess            true    # hide file/directory which user has no access
</Group>

adesso è sufficiente impostare come in samba i permessi nelle directory

AFP

http://ubuntuforums.org/showthread.php?t=2105755

Gestione degli utenti

-> http://www.cyberciti.biz/faq/howto-linux-add-user-to-group/

Configurazione Server DNS

In questo caso la configurazione del DNS è strettamente legata al funzionamento del virtualhost dove su un singolo IP vengono associati più nomi. Configurazione del forwarder nel file /etc/bind/named.conf.options

options {
        directory "/var/cache/bind";

         forwarders {
                192.168.1.254;
         };
        dnssec-validation auto;
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

Ora impostare al server se stesso come dns e iniziare la configurazione delle zone in named.conf

// 18/03/16 prima configurazione della zona orangeid.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones"; 

zone "orangeid.local" IN {
        type master;
        file "/etc/bind/ZonaOrangeid";
};
zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/ZonaOrangeidInversa";
};

controllare la sintassi con named-checkconf. Configurazione della zona diretta

$ttl 24h
orangeid.local.  IN SOA ns.orangeid.local. admin.orangeid.local. (
       2016050510
       28800
       3600
       604800
       38400 )
orangeid.local. IN   NS  ns.orangeid.local.
               IN   A   192.168.1.245
mx.orangeid.local. IN  MX  10  mx.orangeid.local.
orangeid.local.    IN  MX  10  mx.orangeid.local.


ns         IN     A      192.168.1.245
router     IN     A      192.168.1.254

Configurazione zona inversa

$ttl 24h
@ IN SOA ns.orangeid.local. admin.orangeid.local. (
       2016050510;
       28800;
       604800;
       604800;
       86400
)
@                        IN      NS      ns.
245                      IN      PTR     ns.orangeid.local.
254                      IN      PTR     router.orangeid.local.

Configurazione Apache

Configurazione Apache con relativi virtual hosts risolti nel DNS locale.

Creare la cartella dedicata al sito e attibuirle i relativi permessi

root@DataeWP:/etc/apache2# mkdir /media/daniele/dati/condivisione/test2
root@DataeWP:/etc/apache2# chown silvio:www-data /media/daniele/dati/condivisione/test2

Creare in /etc/apache2 il file di configurazione relativo al sito

<VirtualHost *:80>
       ServerName provatst.orangeid.local
       ServerAdmin daniele@mail.orangeid.local
       DocumentRoot /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/provatst
       ErrorLog  /var/log/apache2/error.log
       CustomLog /var/log/apache2/access.log combined
    </VirtualHost>

Ora abilitare il sito creato con

a2ensite test2

E applicare le modifiche al DNS aggiungendo la risoluzione del nuovo sito

Wordpress

Installazione di wordpress ubuntu server -> https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04

PhpMyAdmin

Installazione di PhpMyAdmin ubuntu server -> https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-14-04

Installazione del pacchetto (consigliabile aggiornare le repository)

apt-get install phpmyadmin

abilitare php5enmod mcrypt

php5enmod mcrypt

riavviare il servizio

service apache2 restart

Automazione dei processi

Per automatizzare i processi di creazione, esportazione ed eliminazione ho creato tre script: VirtualHostCreatorShell, VirtualHostKillerShell e VirtualHostExporterShell

SCRIPT PER CREARE VIRTUAL HOST

#!/bin/bash
# 22/04/16 Daniele Coccia Ver. 1.1 Aggiunti controlli eseguzione comandi
# 08/05/16 Daniele Coccia Ver. 1.2 Aggiunta interazione database
# 01/06/16 Daniele Coccia Ver. 1.2.1 Aggiunto controllo nell'aggiunta riga al file di zona
nome=$VarNome;
echo "Inserisci il nome del sito:"
read nome;
mkdir /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/$nome;
chown -R nobody:smbgrp /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/$nome;
chmod -R 775 /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/$nome;
   if [ $? -eq 0 ]; then
       echo Creazione cartella dedicata riuscita
   else
       echo ErrorCreazioneCartella
       exit 0
   fi
echo "<VirtualHost *:80>
       ServerName $nome.orangeid.local
       ServerAdmin daniele@mail.orangeid.local
       DocumentRoot /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/$nome
       ErrorLog  ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost> " >  /etc/apache2/sites-available/$nome.conf;
a2ensite $nome.conf;
service apache2 restart
if [ $? -eq 0 ]; then
    echo il sito $nome creato e abilitato con successo
else
    echo "Non sono stato in grado di creare il sito";
    exit 0
fi
grep -q -F $nome" IN CNAME ns" /etc/bind/ZonaOrangeid || echo $nome" IN CNAME ns"  >> /etc/bind/ZonaOrangeid
service bind9 restart
if [ $? -eq 0 ]; then
    echo il sito $nome risolto dal DNS locale
else
    echo "Non sono stato in grado di risolvere il sito";
    exit 0
fi
mysql -uroot -p******** << EOF
INSERT INTO siti.sito (nome,ultimoup) VALUES ('$nome', now());
EOF

SCRIPT PER ESPORTARE VIRTUAL HOST

#!/bin/bash
echo "Inserisci il nome del sito";
        read nome;
echo "Inizio esportazione";
echo "Inserisci il nome utente";
        read user;
echo "Inserisci l'IP o il nome host";
        read ip;
echo "Inserisci la cartella di destinazione remota";
        read dest;
mysqldump -u root -pRaspberry $nome > /var/www/html/$nome.sql
scp -r /var/www/html/siti/$nome /var/www/html/$nome.sql $user'@'$ip:$dest
echo "Sito Esportato";

SCRIPT PER ELIMINARE VIRTUAL HOST

#!/bin/bash
# 08/05/16 Daniele Coccia Ver. 1.0
echo "Inserisci il nome del sito da eliminare";
read nome;
mysql -u root -pOrange << EOF
DROP DATABASE IF EXISTS $nome;
DELETE FROM siti.sito WHERE nome="$nome";
EOF
echo "dipendenze da MySql eliminate";
rm -r /media/daniele/dati/condivisione/SitiOrangeID/VirtualHosts/$nome
a2dissite $nome.conf
rm /etc/apache2/sites-available/$nome.conf
echo "Directory e configurazione del sito eliminati";
service apache2 restart
sed '/'$nome' IN CNAME ns/d' /etc/bind/ZonaOrangeid > eliminare
cp eliminare /etc/bind/ZonaOrangeid
service bind9 restart