Projet - Mon p`tit nuage

Transcription

Projet - Mon p`tit nuage
Projet informatique
(secteur : développement).
MAYERAU David
Début : 01/09/13 – Mise à jour : 13/02/14
PRESENTATION. --------------------------------------------------------------------------------------------- 3
SECURISER LE SERVEUR.
---------------------------------------------------------------------------------- 4
CONFIGURATION DU PROTOCOLE SSH .
INSTALLATION DE FAIL2BAN .
INSTALLATION DE PORTSENTRY .
BLOQUER LES REQUETES W00T-W00T QUI CIBLENT LE DAEMON APACHE.
INSTALLATION DE RKHUNTER .
MISE EN PLACE D’UN PARE-FEU .
INSTALLATION DE WEBMIN .
INSTALLATION DE ZABBIX.
INSTALLATION D’UN SERVEUR FTP .
INSTALLATION DE APACHETOP .
INSTALLATOIN DE HTOP .
QUELQUES INFORMATIONS SUPPLEMENTAIRES .
CONFIGURATION DU SERVEUR POUR LE FONCTIONNEMENT DU SITE. ------------------------------
15
INSTALLATION ET CONFIGURATION DES PAQUETS NECESSAIRES AU FONCTIONNEMENT DU SITE.
INSTALLATION DU SITE.
INDEX DU SITE.---------------------------------------------------------------------------------------------
21
CATEGORIES DU SITE. ------------------------------------------------------------------------------------
22
LE FORMULAIRE DE CONTACT.
-------------------------------------------------------------------------- 23
LE FORMULAIRE DE CONNEXION-INSCRIPTION. ------------------------------------------------------- 24
LE FORMULAIRE POUR L’OUBLIE DE MOT DE PASSE. ------------------------------------------------ 29
GESTION DES COMPTES UTILISATEURS.---------------------------------------------------------------POSTER DES COMMENTAIRES.
32
-------------------------------------------------------------------------- 35
LIENS UTILISES LORS DE LA CREATION DE CE DOSSIER.---------------------------------------------
35
PRESENTATION.
J’ai décidé de monter ce projet de manière personnelle afin d’étendre mes connaissances en informatique et
plus particulièrement dans le développement d’applications web. Ici, il s’agit de découvrir et d’apprendre les
langages de développement web (HTML, CSS et PHP) tout en créant un site web de A à Z.
Mon site a pour but de venir en aide à une communauté assez spécifique en proposant beaucoup de
documentations informatiques (tutoriels, projets, scripts, …) personnelles, rédigées durant les années
d’études ou sur du temps libre mais également des documentaires vidéo.
Les documentations seront sous forme de fichiers PDF à télécharger. Une petite présentation est affichée
pour chaque documentation. Les vidéos ne pourront pas être téléchargées puisqu’elles sont affichées sur le
site via « YouTube ».
Une gestion de comptes utilisateurs sera mise en place. Les utilisateurs pourront se créer un compte qui leur
permettra par la suite de poster des commentaires sur n’importe quelles documentations du site mais
également pour l’utilisation de la FAQ.
En effet, comme beaucoup de sites, les foires aux questions (FAQ) sont très présentes afin d’obtenir de l’aide
d’autres personnes, une FAQ sera donc mis à disposition.
De plus, j’utilise beaucoup l’influence des réseaux sociaux en mettant à disposition des utilisateurs des
boutons partager pour « Twitter », « Facebook » et « Google+ ».
SECURISER LE SERVEUR.
Faire les mises à jour du système d’exploitation avant toutes autres opérations. Se connecter en mode superutilisateur ou root, grâce à la commande suivante : « su ».
Ensuite utiliser les commandes suivantes pour faire les mises à jour :
- « aptitude update ».
- « aptitude upgrade ».
Configuration du protocole SSH :
-
Avant de modifier le fichier de configuration, il est important de faire une copie. Utiliser la
commande suivante : « cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old ».
-
Maintenant on édite le fichier avec la commande : « nano /etc/ssh/sshd_config » et on
effectue les modifications suivantes :
o Modifier le port du protocole SSH. Par défaut, le port SSH est en 22.
Ex : Port 22 devient Port 2020
o
Interdire la connexion distante en SSH avec le mode « root » ou super-utilisateur. Retrouver
la ligne suivante et modifier la valeur « yes » par « no ».
Ex : PermitRootLogin yes devient PermitRootLogin no
Pour les prochaines connexions en SSH il faudra utiliser le compte utilisateur puis utiliser la
commande « su – » pour avoir accès au compte super-utilisateur.
o
N’autoriser qu’un utilisateur précis à se connecter en SSH sur la machine. Ajouter une ligne
entre les deux lignes suivantes :
PermitRootLogin no
AllowUsers xxxxx
StrictModes yes
A la place des xxxxx en rouge, entrer le nom de l’utilisateur dont on souhaite autoriser la
connexion en SSH.
o
Ajout d’un timeout d’inactivité.
Il n’est pas prudent de garder une session ouverte indéfiniment, surtout si l’on s’absente un
moment. Pour cela, ajouter les deux lignes en rouge comme suit :
Ex :
PermitRootLogin no
AllowUsers xxxxx
StrictModes yes
ClientAliveInterval 360
ClientAliveCountMax 0
o
Enregistrer les modifications en utilisant la combinaison « Ctrl+X » et en confirmant.
Relancer le service SSH à l’aide de la commande « /etc/init.d/ssh restart »
Pour la suite, il serait plus simple d’utiliser un logiciel de connexion à distance, tel que
PuTTy, pour se connecter en SSH à la machine et effectuer plus facilement des
copier/coller, etc !
-
Pour en finir avec la configuration du protocole SSH, il est possible de créer une petite alerte pour
être informer lorsqu’une connexion est effectuée sur notre machine. Il faut commencer par se
rendre dans le fichier de configuration en utilisant la commande « nano /root/.bashrc » puis il
faut ajouter la ligne suivante :
« echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname`
Shell Root de `who | cut
-d"(" -f2 | cut -d")" -f1`
[email protected] »
Et voilà, désormais lorsqu’une connexion SSH sera effectuée sur le serveur, un mail nous sera
envoyé avec l’heure, la date et le login utilisé.
Ex : Acces Shell Root le dimanche 12 janvier 2014, 19:28:05 (UTC+0100) pi pts/1 2014-01-12 19:27
(david)
Faire les mises à jour du système d’exploitation avant toutes autres opérations. Se connecter en mode superutilisateur ou root, grâce à la commande suivante : « su ».
Ensuite utiliser les commandes suivantes pour faire les mises à jour :
- « aptitude update ».
- « aptitude upgrade ».
Installation de fail2ban :
Les ports ouverts sur une machine sont à priori sans grande protection, et sujet à des attaques simples telles
que la tentative de connexion par brute-force ou par dictionnaire (par exemple, tester toutes les combinaisons
de mots de passe pour se logguer en ssh), le déni de services (surcharger le serveur de requêtes) ou - plus
bêtement - la recherche d’utilisateurs sans mots de passe... Si votre machine est infiltrée aussi facilement,
l’attaquant sera vraiment content.
Fail2ban est un petit utilitaire qui se base sur les logs de la machine pour chercher des actions suspectes
répétées (par exemple, des erreurs de mots de passe) dans un laps de temps donné. S’il en trouve, il bannira
l’IP de l’attaquant via iptables. Ce type de logiciel est indispensable, car, bien que léger, il offre une bonne
protection contre les attaques basiques indiquées ci-dessus.
-
On installe le paquet : aptitude install fail2ban.
Une fois l’installation de faite vous avez deux fichiers de configuration :
o fail2ban.conf
o jail.conf
-
On commence par le fichier fail2ban.conf (chemin vers le fichier :
/etc/fail2ban/fail2ban.conf). Dans ce fichier de configuration il n’y à rien à faire, vous
pouvez laisser les options par défaut :
loglevel = 3
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock
-
On passe maintenant au fichier jail.conf (chemin vers le fichier : /etc/fail2ban/jail.conf).
Ce fichier est beaucoup plus intéressant, il contient tous les services à monitorer.
Tout d’abord il faut vérifiez l'adresse d'envoi des mails d'avertissement :
[DEFAULT]
destemail = root@localhost
Erreur commune pour l'envoi des mails d'alerte  N'oubliez pas de modifier la variable action =
%(action_)s Et de la placer soit sur :
action = %(action_mw)s
Soit sur
action = %(action_mwl)s
Pour activer la surveillance d'un service, il suffit de placer la variable « enabled » à « true »
Par défaut la protection du service SSH est activée, pas les autres : Si votre SSH n'écoute pas
sur le port 22, pensez à le changer… (port = N° de port)
[ssh]
enabled = true
port
= ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
D'autres services, à activer en fonction de vos besoins :
[xinetd-fail]
enabled
= true
filter
= xinetd-fail
port
= all
banaction = iptables-multiport-log
logpath
= /var/log/daemon.log
maxretry = 2
[pam-generic]
enabled = true
filter = pam-generic
port = all
banaction = iptables-allports
port
= anyport
logpath = /var/log/auth.log
maxretry = 6
[ssh-ddos]
enabled = true
port
= ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 6
[apache]
enabled = true
port
= http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-multiport]
enabled
= true
port
= http,https
filter
= apache-auth
logpath
= /var/log/apache*/*error.log
maxretry = 6
[apache-noscript]
enabled = true
port
= http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-overflows]
enabled = true
port
= http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2
-
[postfix]
enabled =
port
=
filter
=
logpath =
true
smtp,ssmtp
postfix
/var/log/mail.log
[sasl]
enabled
port
filter
logpath
true
smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
sasl
/var/log/mail.log
=
=
=
=
On redémarre fail2ban  service fail2ban restart
Il est possible d’effectuer des tests pour fail2ban : http://www.isalo.org/wiki.debian-fr/Fail2ban
Installation de portsentry :
Cet utilitaire permet de bloquer en temps réel la plupart des scans de port connus. Je rappelle au passage que
scanner les ports signifie tester tous les ports d’une machine afin de déterminer ceux qui sont ouverts (les
portes d’entrées en gros). Cependant, il ne faut pas paniquer si votre serveur est la cible d’un simple scan de
port, cela sera monnaie courante, et si vous êtes bien protégé, le pirate passera sa route.
-
On installe le paquet : aptitude install portsentry
-
Pour le configurer taper la ligne suivante : nano
/usr/local/psionic/portsentry/portsentry.conf ou
nano /etc/portsentry/portsentry.conf
Puis commentez les lignes KILL_HOSTS_DENY et décommentez la ligne
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP".
Ainsi, Portsentry ajoutera une règle dans le firewall (iptables) pour rejeter les paquets en cas de
scans.
-
On démarre le logiciel (il faut le lancer deux fois, pour TCP et UDP) :
portsentry –audp
portsentry –atcp
Bloquer les requêtes w00t-w00t qui ciblent le daemon Apache :
En effet, si vous avez un serveur Apache, vous avez très certainement dans les logs des attaques de type
w00tw00t.at.ISC.SANS.
Ce sont des personnes qui utilisent un logiciel de scanning nommé DFind.
-
Nous allons donc bannir les adresses IP qui effectuent ces requêtes en créant le fichier
/etc/fail2ban/filter.d/apache-w00tw00t.conf :
nano /etc/fail2ban/filter.d/apache-w00tw00t.conf
Et ajoutons y les lignes suivantes pour créer notre filtre :
#<HOST> - - [11/Jan/2010:14:56:27 +0200] "GET
/w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 326
[Definition]
# Option: failregex
# Notes.: regex to match the w00tw00t scan messages in the logfile. The
#
host must be matched by a group named "host". The tag "<HOST>"
can
#
be used for standard IP/hostname matching.
# Values: TEXT
failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
ignoreregex =
Enregistrer ensuite le fichier que l’on vient de créer.
Une fois notre filtre créé, il nous faut ajouter et activer le jail :
nano /etc/fail2ban/jail.conf
Pour y ajouter les lignes suivantes :
[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
port = all
banaction = iptables-allports
port
= anyport
logpath = /var/log/apache*/access.log
maxretry = 1
bantime = 86400
Installation de Rkhunter :
Dernier volet de cette section intrusion, les backdoors. Si par malheur un attaquant arrive à prendre
possession de votre machine, il y a fort à parier qu’il y laisse une backdoor (porte dérobée) qui lui permettrait
d’en reprendre le contrôle plus tard, ainsi qu’un rootkit pour la dissimuler : l’attaquant maintient ainsi un accès
frauduleux à votre machine.
Rkhunter est un utilitaire qui est chargé de détecter d’éventuels rootkits sur votre serveur. Il est relativement
léger (s’exécute une fois par jour par défaut) donc on aurait tort de se priver.
-
On installe le paquet : aptitude install rkhunter
-
Il est conseillé de modifier un peu la configuration : nano /etc/default/rkhunter
REPORT_EMAIL : indiquez un mail pour recevoir des alertes de Rkhunter ;
CRON_DAILY_RUN : mettez « yes » pour une vérification quotidienne de votre machine via un cron.
Notez que Rkhunter se trompe parfois en déclarant comme infectés des fichiers sains (« faux positifs »), donc
il faut être critique à l’égard des rapports. Par contre, s’il s’avère que l’alerte est justifiée, cela signifie que vous
avez un rootkit ainsi qu’une faille de sécurité qui a été découverte et exploitée. Méfiance donc !
Mise en place d’un pare-feu :
Le firewall est l’élément indispensable pour sécuriser son serveur. Il va en effet filtrer tout le trafic en
n’autorisant que les échanges permis par l’administrateur. Sans firewall correctement réglé, tous les trafics
sont plus ou moins permis (c’est-à-dire qu’un attaquant peut faire ce qu’il veut chez vous) et ce genre de faille
est détectable par un simple scan de ports.
Or, le noyau Linux offre déjà un pare-feu à l’utilisateur, qu’il est possible de configurer via le logiciel iptables
(normalement contenu dans /sbin/iptables). Vérifier, avant de commencer la création du script, que le
paquet iptables est bien installé.
-
On commence la création du script : nano /etc/init.d/firewall
On efface les règles précédentes pour partir sur de bonnes bases :
iptables -F
iptables -X
On bloque par défaut tout le trafic (si vous êtes en ssh, bien entendu, n’exécutez pas encore le
script !) :
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
On ne ferme pas les connexions déjà établies :
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Nous indiquons avec les paramètres -m et --state de ne pas fermer les connexions qui sont déjà
établies.
On autorise le loopback (on ne va pas se bloquer nous-mêmes !)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Note : lo signifie localhost (le serveur lui-même).
Tout est bloqué, il ne nous reste plus qu’à ouvrir les ports utilisés.
Exemple des ports les plus courant :
Esnuite la ligne de base pour la création d’une régle de filtrage sur un port est la suivante :
iptables -A INPUT/OUTPUT -p protocole –dport/--sport port_a_ouvrir -j ACCEPT
Ci-dessous le script de base qui autorise les connexions sur les ports 22, 53, 80, 25, 110, 143, 123 ainsi que
le ping (icmp) :
#!/bin/sh
# Reinitialise les regles
iptables -F
iptables -X
# Bloque
iptables
iptables
iptables
tout le trafic
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
# Autorise les connexions deja etablies et localhost
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# ICMP (Ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
# DNS
iptables
iptables
iptables
iptables
-A
-A
-A
-A
OUTPUT -p tcp --sport 53 -j ACCEPT
OUTPUT -p udp --sport 53 -j ACCEPT
INPUT -p tcp --dport 53 -j ACCEPT
INPUT -p udp --dport 53 -j ACCEPT
# HTTP
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# FTP
sudo iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# Mail SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
# Mail POP3
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 110 -j ACCEPT
# Mail IMAP
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT
# NTP (horloge du serveur)
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
Lorsque vous avez défini toutes les règles, rendez ce fichier exécutable en tapant la ligne suivante :
chmod +x /etc/init.d/firewall
Vous pourrez le tester en l'exécutant directement en ligne de commande. Assurez-vous d'avoir toujours le
contrôle de votre machine (reconnectez-vous en SSH, vérifiez la disponibilité des services web, ftp, mail...).
En cas d'erreur, redémarrez le serveur, les règles seront oubliées et vous permettront de reprendre la main.
En revanche, si les tests s'avèrent concluants, ajoutez le script au démarrage pour que celui-ci protège le
serveur dès le boot.
Afin de l'ajouter aux scripts appelés au démarrage : update-rc.d firewall defaults
Pour le retirer, vous pouvez utiliser la commande suivante : update-rc.d -f firewall remove
Redémarrez, ou exécutez /etc/init.d/firewall pour activer le filtrage.
Installation de Webmin :
Si vous souhaitez vous éloigner un peu de la ligne de commande pour paramètrer votre serveur, il existe une
interface web appelée Webmin. Il s'agit d'une interface graphique libre permettant d'administrer son serveur.
-
On édite le fichier sources.list : nano /etc/apt/sources.list
-
On colle les informations suivantes dans le fichier sources.list:
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge
contrib
-
On importe la clé :
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc
aptitude update
-
On installe le paquet : aptitude install webmin
-
Il est possible de restreindre les adresses IP. Pour cela veuillez vous rendre dans le menu
Webmin>Configuration de Webmin>Contrôle d’accès IP :
Là, on peut décider quelles IP sont autorisées, ou non, à se connecter à webmin. On peut par
exemple limiter les accès à uniquement son réseau Interne et à une petit série d’IP publique. Par
contre, si votre adresse IP est dynamique, cela peut poser problème :
-
Vous pouvez également changer le port par défaut. Cela se fait via le menu Webmin>Configuration
de Webmin>Ports et adresse. Par défaut le port est le 10000, choisissez en donc un autre :
-
Et pour finir, nous pouvons retourner dans le fichier de conf de fail2ban « jail.conf » pour surveiller
les connexions sur l’interface. Pour cela édité le fichier : nano /etc/fail2ban/jail.conf
Ensuite ajoutez les lignes suivantes :
webmin-auth]
enabled = true
port
= https,numéro de port
filter
= webmin-auth
logpath = /var/log/auth.log
maxretry = 3
Enregister puis relancer fail2ban.
Installation d’un serveur FTP :
Utilisation de Proftpd, ce paquet va permettre de transférer des fichiers d’une machine à une autre et
inversement. Pour les sauvegardes, c’est très utile.
-
On installe le paquet : aptitude install proftpd
-
Configuration de proftpd :
-
Toujours faire une sauvegarde du fichier source avant toutes modifications !!!
o
Editer le fichier /etc/proftpd/proftpd.conf avec la commande suivante :
nano /etc/proftpd/proftd.conf et modifier les lignes qui suivent :
Activation ou pas de l’IPv6
UseIPv6
off
Répertoire de destination par défaut
DefaultRoot /var/www
le port d’écoute
Port
21
Empêcher la connexion root au serveur FTP. Ajouter cette ligne à la fin du fichier
proftpd.conf :
RootLogin
off
-
Il ne reste plus qu’à utiliser un navigateur ou un client FTP comme Filezilla pour se connecter à la
machine.
Ex (ouvrir navigateur sur une autre machine) : ftp://@ip_serveur_web
Ex (ouvrir filezilla sur une autre machine) : rentrer toutes les informations nécessaire à la
connexion.
Installation de Apachetop :
Apachetop est très utile si vous souhaitez visualiser en temps réel les requêtes effectuées sur votre serveur
web Apache.
-
On installe le paquet : aptitude install apachetop
-
Lancer apachatop avec la commande : apachetop -d 1 -f
/var/log/apache2/access_log
Attention, apache2 en gras peut être httpd sous certaines distributions !!!
Installatoin de htop :
htop permet de monitorer l’activité de son serveur comme top, mais avec une interface plus ergonomique et
amélioré.
- On installe le paquet : aptitude install htop
- Lancer htop : htop
Adresse intéressantes, contenant de nombreux outils pour surveiller l’état de son serveur web
par exemple : http://blog.admin-linux.org/astuces/suivre-en-temps-reel-lactivite-de-son-serveurgnulinux
Quelques informations supplémentaires :
-
http://wiki.gandi.net/fr/hosting/using-linux/tutorials/ubuntu/remote-mysql
-
Au cas où vous seriez banni de ssh : http://www.it-connect.fr/premiers-pas-avec-fail2ban/
-
Pour le test avec le script perl, utiliser la commande :
« perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl »
Une fois le script lancé, on doit avoir plein de ligne qui affiche :
« HTTP/1.1 403 Forbidden », cela veut dire que vous êtes bien sécurisé contre les attaques
DDoS.
-
Penser à modifier le fichier /etc/apache2/apache2.conf qui contient la ligne commentée
« DOSWhiteList 127.0.0.1 ». Il faut la décommenter.
-
Sauvegarder sa bdd avec « mysqldump » :
« mysqldump -u root -p --databases site > BDD_monptitnuage.sql»
CONFIGURATION DU SERVEUR POUR LE FONCTIONNEMENT DU SI TE.
Installation et configuration des paquets nécessaires au fonctionnement du site :
- On installe les paquets nécesaire :
aptitude install apache2 php5 mysql-server libapache2-mod-php5
mysql
php5-
-
Tester le fonctionnement en tapant dans la barre d’adresse d’un navigateur : http://@ip-du-serveur.
Si le message « It’s works ! » est affiché alors c’est ok.
-
Il est possible de modifier le port par défaut d’apache. Utiliser la commande : nano
/etc/apache2/ports.conf puis modifier la ligne suivante :
Listen 80 devient Listen xxxx
Enregistrer les modifications avec Ctrl+X et confirmer.
-
Ensuite, modifier le fichier default à l’aide de la commande :
nano
/etc/apache2/sites-available/default. A la première ligne, modifier le port 80
par celui choisi précédemment :
<VirtualHost * :80> devient <VirtualHost * :xxxx>
Enregistrer les modifications.
-
Protéger le dossier /var/www. Le répertoire par défaut d’Apache (dans lequel on veut mettre ses
pages web) est /var/www, qui est sous droits administrateurs. Exécutez cette commande pour
éditer le fichier de configuration : nano
/etc/apache2/sites-available/default puis
suivre les modifications suivantes :
Toujours faire une sauvegarde du fichier source avant toutes modifications !!!
o
Modifications à la section <Directory /var/www>, changer :
<Directory
/var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
en :
<Directory
/var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.1 # local
Allow from 192.168.1.0/24 # reseau
</Directory>
Seule ma machine et celles du réseau 192.168.1.0 auront accès à ce répertoire.
-
Nous allons maintenant créer et placer nos repertoires dans la zone /home/monsieur :
mkdir /home/monsieur
mkdir /home/monsieur/public
mkdir /home/monsieur/private
-
On donne les droits utilisateur aux repertoires de travail :
chown -R $USER:users /home/monsieur
Pour pouvoir accéder à ces répertoires, apache a besoin d'une *redirection*.
Cette *redirection* se présente sous la forme : http://nom_de_domaine.tld/nom_de_redirection
Ces *redirections* s'appellent des Alias.
Il nous faut donc ajouter deux alias, un pour public et un pour private.
Éditez en super utilisateur le fichier : /etc/apache2/sites-available/default ajoutez à la
suite de <Directory /var/www>….</Directory> :
## ZONE PUBLIQUE
Alias /public /home/monsieur/public
<Directory /home/monsieur/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
## ZONE PRIVEE
Alias /private /home/monsieur/private
<Directory /home/monsieur/private>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.1
# Local
Allow from 192.168.1.0/24
# Réseau
Allow from .w3.org
# W3C
Allow from sandbox.paypal.com
# Paypal
</Directory>
Ensuite on configure une redirection (un alias) pour qu’Apache puisse accéder à ce répertoire :
ln -s
/home/monsieur/www
/var/www
Ajouter un lien symbolique pour qu’Apache puisse voir ces dossiers depuis la racine du serveur :
ln -s
/home/monsieur/www/public
/var/www/public
ln –s
/home/monsieur/www/private
/var/www/private
Cacher la version d’apache et autres informations sensibles. Editer le fichier « security » à l’aide de la
commande : nano /etc/apache2/conf.d/security :
Rechercher la ligne suivante : « ServerSignature » et modifier la valeur « on » par « off ».
Rechercher la ligne suivante : « ServerTokens » et mettre comme valeur « Prod ».
Créer un fichier « .htaccess » à la racine du site « /home/monsieur/www » avec la commande : nano
/home/monsieur/www/.htaccess et écrire les lignes suivantes :
# Definit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie,
Server) seront enregistrees
# comme des variables globales.
# Par defaut sur Off normalement, mais il me semble avoir lu que Ovh (un
prestataire) la repassait à On.
# Donc on la re-desactive.
SetEnv REGISTER_GLOBALS 0
# Positionner l'execution du php v5.3 par defaut (chez ovh)
SetEnv PHP_VER 5_3
# Afficher (ou non) les signatures du serveur, lors d'une erreur, d'une page non
trouvee ou autre,
# le serveur peut afficher des infos supplementaires comme la version apache, le
nom et l'adresse mail
# de l'admin, etc.
# Fixée à non ici, car il faut donner un minimum d'informations aux eventuelles
tentatives d'attaques.
ServerSignature Off
# Ne pas permettre le listage des fichiers des dossiers, à partir du dossier dans
lequel est le fichier
# htaccess en cours (racine / en général), et pour tous ses sous-dossiers.
# Mettre +Indexes au lieu de -Indexes si l'on souhaite que le listage des
dossiers soient possibles.
# Si l'on souhaite qu'un dossier en particulier puisse être liste, mettre ici Indexes, et créer un htaccess
# dans le dossier en question avec:
Options All -Indexes
# Suivre les liens symboliques du serveur.
Options +FollowSymLinks
# Fixer une adresse pour l'administrateur du site, Cette adresse est visible si
on a positionne
# l'affichage des signatures serveurs à On.
#SetEnv SERVER_ADMIN [email protected] # Ne se surcharge pas chez ovh on
dirait
# Je fixe le fuseau horaire de mon site, en gros, ça peut servir sur certains
calculs de dates, dans le futur,
# comme ça c'est fait.
SetEnv TZ Europe/Paris
# Autoriser les inclusions de fichiers d'autres serveurs que celui sur lequel on
est.
# Cette variable positionnée à Off empêche normalement les includes de fichiers
qui ne sont pas heberges
# sur notre propre site.
#allow_url_include 0 # déjà présente chez ovh par défaut
# pas question de securite ici, juste de jeux de caracteres par defaut...
AddDefaultCharset UTF-8
# Positionner le langage par défaut pour certains types de fichiers
AddLanguage fr-FR .html .htm .css .js
# interdire l'acces au fichier htaccess à travers le navigateur (mais normalement
c'est deje ainsi avec apache..)
<Files .htaccess>
order allow,deny
deny from all
</Files>
##################################
# Possibilite de bloquer des ip agressives :
##################################
# deny from 79.142.69.69
Se protéger contre les attaques DoS. Pour limiter les attaques de type Denial of Service, il est intéressant de
limiter dans la mesure du possible le nombre de connexions simultanées « MaxClients » et le «
MaxKeepAliveRequests ».
Cette directive définit le nombre maximum de demandes autorisées par connexion persistante (recommandé
de le mettre à 100).
Pour cela, modifier le fichier nano /etc/apache2/apache2.conf, ajouter les directives suivantes et
ajuster en fonction de ses besoins :
« MaxClients 200
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5 »
Création de la base de données pour le fonctionnement du site :
- Utiliser la commande suivante : mysql -u root -p. Taper ensuite le mot de passe
correspondant au compte mysql précédemment installer.
-
Créer une nouvelle base de données appelée « site » :
-
Vérifier la présence de la nouvelle BDD :
-
Se positioner dans la BDD « site » :
CREATE DATABASE site ;
SHOW DATABASES ;
USE site ;
-
Ensuite, on peut créer les tables avec les commandes suivantes :
Création de la table : PROJET
CREATE TABLE projet(
id INT PRIMARY KEY NOT NULL,
img VARCHAR(255),
title VARCHAR(255),
entry TEXT,
date_entered DATE,
cat VARCHAR(255),
pdf VARCHAR(255),
docx VARCHAR(255)
);
Création de la table : TUTORIEL
CREATE TABLE tutoriel(
id INT PRIMARY KEY NOT NULL,
img VARCHAR(255),
title VARCHAR(255),
entry TEXT,
date_entered DATE,
cat VARCHAR(255),
pdf VARCHAR(255),
docx VARCHAR(255)
);
Création de la table : DEVELOPPEMENT
CREATE TABLE developpement(
id INT PRIMARY KEY NOT NULL,
img VARCHAR(255),
title VARCHAR(255),
entry TEXT,
date_entered DATE,
cat VARCHAR(255),
pdf VARCHAR(255),
docx VARCHAR(255)
);
Création de la table : PORTEFEUILLE
CREATE TABLE portefeuille(
id INT PRIMARY KEY NOT NULL,
img VARCHAR(255),
title VARCHAR(255),
entry TEXT,
date_entered DATE,
cat VARCHAR(255),
pdf VARCHAR(255),
docx VARCHAR(255)
);
Création de la table : VIDACTU
CREATE TABLE vidactu(
id INT PRIMARY KEY NOT NULL,
url VARCHAR(255),
title VARCHAR(255),
entry TEXT,
date_entered DATE,
cat VARCHAR(255),
pdf VARCHAR(255),
docx VARCHAR(255)
);
Création de la table : MEMBRE
create table membre(
id int(11) NOT NULL auto_increment,
nom text NOT NULL,
prenom text NOT NULL,
email varchar(255) NOT NULL,
login text NOT NULL,
pass_md5 text NOT NULL,
token varchar(50) NOT NULL,
token_date varchar(50) NOT NULL,
connexion DATETIME NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
Création de la table : AVATAR
CREATE TABLE avatar(
id INT PRIMARY KEY NOT NULL,
url_Avatar text NOT NULL,
);
Modifier le nom d’une colonne (ex : idVid devient id)
ALTER TABLE vidactu CHANGE idVid id [INTEGER ou VARCHAR ou …] ;
Vérifier la structure d’une table :
DESCRIBE nom_table ;
Ajout d’une nouvelle colonne :
ALTER TABLE nom_table ADD exemple VARCHAR(50) NOT
NULL ;
Faire les mises à jour du système d’exploitation avant toutes autres opérations. Se connecter en mode superutilisateur ou root, grâce à la commande suivante : « su – ».
Ensuite utiliser les commandes suivantes pour faire les mises à jour :
- « aptitude update ».
- « aptitude upgrade ».
Installation de Zabbix :
Cet outils permet de superviser quasiment tout et n'importe quoi, des choses très simples telles que l'utilisation
du CPU, de la RAM, l'espace disponible sur les disques dur...
Zabbix repose sur 3 composants :
 Une partie "serveur", cœur de la solution, qui va être en charge de collecter les données, les agréger,
les stocker, etc...
 Une partie "agent", qui sera à déployer sur les machines que l'on souhaite superviser, et qui va être
interrogée par le "serveur" (mode passif) ou qui peut lui "pousser" ses données (mode actif)
 Une partie "front-end", qui va permettre à travers une interface web de mettre en forme les données
(graphiques), consulter les dernières mesures, etc... mais aussi d'administrer la solution.
En pré-requis pour l'interface web, vous aurez besoin d'un serveur web (Apache dans mon cas) et de PHP
(ici PHP5).
-
On installe le paquet : aptitutde install zabbix-server-mysql zabbix-agent
zabbix-frontend-php
Pour le reste de la configuration le tutoriel suivant vous permettra de finaliser l’installation :
http://www.micougnou.com/2013/04/tuto-superviser-ses-machines-avec-zabbix.html
INDEX DU SITE.
J’ai d’abord réfléchie à l’aspect du site en mettant en place une « BETA ». La structure de base de ma page
d’accueil ressemblera à celle-ci :
: Le « header » ou « en tête ». Il contient le titre du
site, le logo, une barre de recherche et une barre
de connexion/inscription.
: La barre de navigation.
: Le corps. Dans cette partie, j’affiche le dernier
article des cinqs catégories suivantes :
Projets.
Tutoriels.
Développement.
Portefeuille.
Vid’actu.
: Le « footer » ou « pied de page ». Il contient des
liens d’autres sites, les réseaux sociaux sur lequel
on peut me suivre, une barre de recherche, une
fenêtre de connexion/inscription et 4 autres liens
concernant le site.
J’ai choisis un aspect central pour tous mon site afin qu’il soit compatible avec toutes les résolutions d’écrans.
La barre de navigation est composée de six catégories : « Projets », « Tutoriels », « Développement »,
« Vid’Actus », « Portefeuille » et « A propos ». L’affichage pour chaque catégories se présente sous la même
forme, je garde l’en tête ainsi que la barre de navigation et le pied de page puis j’affiche le contenu de la
catégorie dans le corps.
Exemple :
De plus, chaque fois que l’utilisateur visitera une catégorie, le nom sera mis en surbrillance afin de connaître
notre position sur le site.
Exemple :
Cette barre de navigation est dynamique, c’est-à-dire que j’utilise une feuille de style en CSS qui permet,
lorsque l’utilisateur survol les catégories, de faire bouger le lien en agrandissant le contour et en mettant une
légère surbrillance.
Exemple :
Concernant le contenu de mon site, tous les articles, toutes les vidéos et informations concernant les
utilisateurs sont stockés dans une base de données. Pour plus de détails se référer aux tables créées
précédemment lors de l’installation et la configuration du serveur accueillant le site.
CATEGORIES DU SITE.
La première catégorie PROJET contient tous les projets que j’ai rédigés au cours de mes deux années de
BTS SIO (Service Informatique aux Organisations). Le titre ainsi qu’une introduction est écrite à coté de
photos correspondant au projet. Pour pouvoir télécharger ou partager le document il suffit de cliquer sur « Lire
la suite ».
Vous atterrissez ensuite sur une nouvelle page qui contient l’introduction complète ainsi que le bouton pour
télécharger le document au format PDF.
Ensuite on passe aux tutoriels que j’ai également rédigés au cours de mes deux années de BTS. Le titre ainsi
qu’une introduction est écrite à coté de photos correspondant au tutoriel. Pour pouvoir télécharger ou partager
le document il suffit de cliquer sur « Lire la suite ».
Vous atterrissez ensuite sur une nouvelle page qui contient l’introduction complète ainsi que le bouton pour
télécharger le document au format PDF.
La troisième catégorie DEVELOPPEMENT contient tous les scripts que j’ai eu l’occasion utilisés au cours de
mes deux années de BTS ou que j’utilise encore. Le titre ainsi qu’une introduction est écrite à coté de photos
correspondant au script. Pour pouvoir télécharger ou partager le document il suffit de cliquer sur « Lire la
suite ».
Vous atterrissez ensuite sur une nouvelle page qui contient l’introduction complète ainsi que le bouton pour
télécharger le document au format PDF.
J’ai également créé une partie appelée VID’ACTU pour poster des vidéos que j’ai pu visionner grâce à
d’autres sites informatique ou que l’on m’a conseillé de regarder. Le principe est donc simple, j’utilise une
balise <iframe> pour afficher la vidéo puis je met à coté le titre ainsi qu’une description de la vidéo. Aucuns
télécharger ni partage n’est possible puisqu’il s’agit exclusivement de vidéos provenant du site « YouTube »
ou de d’autres sites.
Toutefois lorsqu’il s’agit d’une vidéo que j’ai pu visionner sur un autre site informatique, j’utilise la description
faite par l’auteur du site en question et je met une adresse redirigeant vers ce site grâce à la phrase
« via xxxxxx ».
On passe à la catégorie PORTEFEUILLE, elle contient toutes sortes de documents me concernant y sont
postés, rapport de stage, cv, … Le titre ainsi qu’une introduction est écrite à coté de photos correspondant au
document. Pour pouvoir télécharger ou partager le document il suffit de cliquer sur « Lire la suite ».
Vous atterrissez ensuite sur une nouvelle page qui contient l’introduction complète ainsi que le bouton pour
télécharger le document au format PDF.
Et pour finir, j’utilise la catégorie A PROPOS où je peux me présenter, parler de mon site et pourquoi je l’ai
fait. Je fourni également mes coordonnées Internet.
LE FORMULAIRE DE CONTACT.
Afin que les utilisateurs puissent me poser des questions ou autres, j’ai mis à disposition un lien nommé
« contacter » dans le pied de page :
Lorsque l’utilisateur clique sur le lien, il atterrit sur une nouvelle page proposant un formulaire avec différentes
informations demandées :
Une fois que l’utilisateur à rentrer les informations et son message, il ne lui reste plus qu’à cliquer sur
« Envoyer ». L’email m’est envoyé et l’utilisateur reçoit également une copie.
Une petite sécurité est mise en place dans ce formulaire. En effet, il est important de vérifier que l’email soit
valide, c’est à dire écrit dans un format correct. Si l’utilisateur entre par exemple « toto » comme adresse
email, un message d’erreur sera affiché pour le prévenir :
LE FORMULAIRE DE CONNEXION-INSCRIPTION.
Passons au formulaire de connexion et d’inscription. J’ai mis en place ce formulaire car je souhaite donner la
possibilité aux utilisateurs de poster des commentaires pour n’importe quels documents.
Exemple : Dans la catégorie « TUTORIELS », l’utilisateur est en train de regarder le document « Prise en
main de l’applicatif web GLPI. » et il souhaite poster un commentaire. Il est donc obligatoire d’avoir un compte
personnel pour pouvoir effectuer cette opération.
De plus, j’ai également mentionné dans l’introduction de ce dossier, mon intention de mettre en place une
FAQ (Foire aux questions). Là encore, il sera obligatoire d’avoir un compte personnel pour poster et répondre
à des messages.
Le fait d’obliger l’utilisateur à se créer un compte pour pouvoir effectuer les opérations ci-dessus me permet
d’avoir un contrôle, notamment sur le fait que si je donner la possibilité de poster des commentaires sans
aucunes conditions, des robots pourraient en poster des milliers et saturer mon serveur.
Bien que j’ai mis en place certaines restrictions, évoquées dans la partie « Installation et configuration du
serveur accueillant le site », je préfère mettre en place cette politique d’accès. De plus, mon but premier dans
ce projet est d’apprendre les langages html, css et php donc il est toujours intéressant de savoir comment
créer certains formulaires.
Je vais maintenant rentrer dans le vif du sujet, voici à quoi ressemble le formulaire de connexion/inscription,
celui-ci est situé dans haut de page et dans le pied de page :
Haut de page.
Pied de page.
L’utilisateur a donc deux possibilités, soit il possède déjà un compte et il lui suffit de rentrer son nom
d’utilisateur et son mot de passe puis de cliquer sur « Connexion », soit il n’en possède pas et il doit donc
cliquer sur « Inscription ». Pour tous ce qui concerne ce formulaire, d’importantes restrictions et sécurités ont
étés mises en place.
Voyons d’abord le premier cas, il possède un compte personnel et il lui suffit de se connecter avec les bon
identifiants. Ici je me contente de vérifier, grâce à une requête SQL si le nom d’utilisateur et le mot de passe
sont bien présent dans la base de données. Si ce n’est pas le cas, je renvoie l’utilisateur vers une page avec
un message d’erreur.
Le deuxième cas est plus intéressant, tant au niveau requêtes SQL que langage PHP. En effet, si l’utilisateur
ne possède pas de compte, il est donc obligé d’en créer un. Il faut donc cliquer sur « Inscription » puis on
atterri sur une nouvelle page qui contient un formulaire avec toute sortes d’informations concernant le
compte :
Voici les informations que l’utilisateur est obligé de renseigner :
- NOM et PRENOM.
-
PSEUDO : j’ai mis en place une sécurité qui oblige l’utilisateur à mettre au moins trois caractères.
-
MOT DE PASSE : Ici il est obligatoire de choisir un mot de passe qui contient au moins huit
caractères. J’ai également mis en place une sécurité qui rend impossible la création du mot de
passe sans qu’il y est au moins un chiffre, une lettre majuscule, une lettre minuscule et un
caractère spécial.
-
CONFIRMER : Il est préférable de redemander le mot de passe, cela permet à l’utilisateur d’être
sûr de ce qu’il a tapé. Pour cela j’utilise une petite condition qui permet de vérifier l’égalité entre la
chaîne de caractère contenant le mot de passe et la chaîne de caractères contenant la
confirmation.
-
EMAIL : Il ne reste plus qu’à rentrer une adresse email. J’utilise la même méthode que pour le
formulaire de contact, c’est-à-dire que je vérifie le bon format de l’email et en plus je vérifie
également qu’il n’existe pas déjà dans la base de données.
Le cadre « CONSIGNES A LIRE AVANT DE REMPLIR LE FORMULAIRE » apparaît automatiquement dès
que l’utilisateur survol le formulaire avec la souris.
Reprenons, une fois que l’utilisateur à finis de renseigner tous les champs, j’utilise une sécurité de plus pour
vérifier effectivement que tous les champs sont bien remplis. Si ce n’est pas le cas, un message d’erreur est
affiché :
Si tous les champs sont bien remplis, j’utilise donc toutes les sécurités mentionnées ci-dessus, (trois
caractères, huit caractères, …) et si je détecte une erreur un message est affiché et l’utilisateur doit retaper les
informations.
Exemple :
De plus, lorsque l’utilisateur cliquera de nouveau dans le champ pour rectifier son erreur, tout le champ sera
effacé. Autrement dit, s’il fait une erreur pour son mot de passe, il reclique sur le champ et son mot de passe
s’efface, il doit donc le retaper entièrement.
Pour finir, si toutes les vérifications sont faites et qu’il n’y a aucuns problèmes alors le formulaire peut être
traité pour rentrer toutes les informations dans la base de données.
Afin de préserver la sécurité du mot de passe de chaque utilisateur, j’utilise une fonction de hachage appelé
MD5 dans la base de données.
Donc lorsque le mot de passe est écrit dans la base de données à l’aide d’une requête INSERT INTO, il est
immédiatement transformer en MD5, puis lorsque l’utilisateur souhaite se connecter j’utilise une fonction php
pour pouvoir retranscrire le hash MD5 correspondant au nom d’utilisateur et ouvrir le compte.
Remarque : Un email de confirmation est envoyé automatiquement pour confirmer l’inscription de l’utilisateur.
Pour savoir lorsque l’utilisateur est bien connecter, il suffit de regarder dans le haut de page ou dans le pied
de page si le message suivant apparaît « Bienvenue xxxxxxxx » :
J’expliquerais par la suite les différentes informations que l’on peut voir. Et donc lorsque l’utilisateur va sur
d’autres pages, il y aura toujours ce message d’inscrit.
Effectivement, pour effectuer cette opération j’ai créé quatre scripts php appelés « header1.php »,
« header2.php », « footer1.php » et « footer2.php » :
- header1.php et footer1.php permettent d’afficher le haut et le pied de page avec la fenêtre de
connexion/inscription.
- header2.php et footer2.php permettent d’afficher le haut et le pied de page mais avec le message
de bienvenue.
Voici le haut et le pied de page lorsque l’utilisateur n’est pas connecté :
Voici le haut et le pied de page lorsque l’utilisateur est connecté :
Pour pouvoir faire la distinction entre un utilisateur connecté ou non, j’utilise une fonction php appelé
« session_start(); ». Il suffit de mettre ceci au début de chaque code php lorsque cela est nécessaire bien sur.
LE FORMULAIRE POUR L’OUBLIE DE MOT DE PASSE.
Il est impératif de mettre à disposition de l’utilisateur un moyen de récupérer son mot de passe s’il ne s’en
souviens plus. J’ai donc mis en place un système qui se présente de la manière suivante :
1- L’utilisateur clique sur le bouton « Mot de passe oublié » :
2- Puis il arrive sur la page suivante :
Une information est affiché concernant la démarche à suivre pour récupérer le mot de passe ainsi que
le temps dont dispose l’utilisateur pour effectuer l’opération.
Remarque : j’utilise les même sécurités que pour les autres formulaires (vérification du format de
l’email, champs vide ou non,…)
Une fois que l’utilisateur à entrer son adresse email, correspondant à celle lors de son inscription
évidemment, il lui suffit de cliquer sur « Envoyer ». Ensuite il doit consulter sa boîte mail et attendre
une réponse comme ci-dessous :
« Bonjour,
Nous avons reçu une demande de réinitialisation de mot de passe sur le site monptitnuage.com, associé
à cette adresse email. Si vous êtes à l'origine de cette demande, suivez les instructions ci-dessous.
Cliquez sur le lien ci-dessous valable 15 minutes, pour réinitialiser votre mot de passe à l'aide de
notre page sécurisé :
http://monptitnuage.no-ip.org/resetMdp.php?jtds=2927252e7668156a281.00453415
Si vous n'avez pas demandé la réinitialisation de votre mot de passe, vous pouvez ignorer cet email.
La sécurité de votre compte utilisateur est assurée.
Si le lien ne semble pas fonctionner, vous pouvez copier et coller ce lien dans la barre d'adresse de
n'importe quels navigateurs ou y retaper l'adresse indiquée par le lien.
A bientôt sur monptitnuage.no-ip.org »
Ce qui nous intérésse dans ce mail est le lien :
http://monptitnuage.no-ip.org/resetMdp.php?jtds=2927252e7668156a281.00453415
Il contient un jeton de sécurité qui rend le lien unique est donc la réinitialisation du mot de passe
impossible à effectuer sans l’aide de ce jeton. Je l’expliquerais par la suite.
3- L’utilisateur clique sur le lien puis il arrive sur une page affichant le formulaire suivant :
Là encore une information est affichée pour expliquer la démarche à suivre, les mêmes sécurités sont
utilisées (vérifications longueur mot de passe, format, …). Une fois que l’utilisateur à remplis les
champs et cliqué sur le bouton « Modifier » il est redirigé sur une page de confirmation :
Je vais maintenant expliquer mon système de jetons de sécurités.
Lorsque l’utilisateur arrive sur le formulaire du « Mot de passe oublié » il dois renseigné son email puis il clique
sur « Envoyer » et c’est à ce moment là que mon système ce déclenche de manière invisible (dans le code
php).
La première étape que le code effectue c’est la création d’un jeton de sécurité aléatoire ainsi qu’un jeton
contenant la date sous forme de timestamp.
Exemple :
- Jeton de sécurité aléatoire (contenu dans le lien) : http://...jtds=2927252e7668156a281.00453415
« jtds » est un nom que j’ai choisit pour identifier le jeton.
-
Jeton contenant la date sous forme de timestamp : 1390896769
Ces deux jetons sont mis dans des variables (token et token_time).
Puis je fais ensuite une mise à jour des colonnes token et token_date correspondant à l’adresse email de
l’utilisateur dans ma table membre :
Et pour finir j’envoie le mail avec le lien contenant le jeton de sécurité (voir un peu plus haut).
Deuxième étape, l’utilisateur clique sur le lien ou il le copie et le colle. Il faut savoir que ce système permet
d’utiliser n’importes quel navigateurs, c’est-à-dire que l’utilisateur peut utiliser le formulaire de « Mot de passe
oublié » sur le navigateur Chrome et ensuite aller sur son téléphone et ouvrir le lien pour ensuite modifier son
mot de passe. Etant donné que les jetons sont contenus dans la base de données la vérification fonctionne
quand même.
Et justement une fois que l’utilisateur à donc cliqué sur le lien il atterit sur la page suivante :
Ici j’ai mis quelques sécurités en place.
- Je vérifie que le lien utiliser contient bien le mot « jtds ».
- Ensuite je vérifie que le jeton de sécurité contenu dans le lien existe bien dans ma base de
données.
- Et pour finir je vérifie que le temps contenu dans le token_date n’est pas expiré.
Toutes ces vérifications empêche un utilisateur d’aller directement sur ma page de modification de mot de
passe en utilsant par exemple un jeton invalide.
Troisième étape, toutes les vérifications ont été effectuées et il n’y a aucuns problèmes donc je modifie le mot
de passe correspondant au jeton de sécurité contenu dans le lien.
Remarque : si l’utilisateur utilise son lien de réinitialisation trop tard, un message d’erreur est affiché pour
l’informer que le jeton est expiré et qu’il doit recommencer toute l’opération de modification de son mot de
passe :
GESTION DES COMPTES UTILISATEURS.
Je vais maintenant parler du compte utilisateurs. J’ai montrer un peu plus haut comment était affiché le
message de bienvenue lorsque l’utilisateur se connecte :
Je vais donc détailler les informations qui y sont affichées, en commençant par la dernière deconnexion. Il est
toujours utile d’être informé de la dernière fois que l’on s’est connecté sur son compte, cela permet de vérifier
qu’un pirate n’a pas utiliser votre compte sans que vous le sachiez.
En général, on à l’habitude de voir plutôt le message « dernière connexion » et non « dernière deconnexion »
mais j’ai du faire façe à un problème que je tente de régler activement.
Quoi qu’il en soit, pour afficher cette information de date et heure je fais appel à ma base de données et plus
particulièrement à ma table « membre ».
En effet, mon système est très simple ; lorsque l’utilisateur s’inscrit pour la première fois je rentre une
information supplémentaire dans ma table « membre », dans la colonne « connexion », que l’utilisateur ne voit
pas et qui est la date et l’heure actuelle. Ce qui fait que lorsqu’il est connecté pour la première fois il est verra
afficher comme dernière deconnexion la date et l’heure actuelle de son inscription.
Ensuite lorsque l’utilisateur se déconnectera, une fonction invisible va mettre à jour la colonne « connexion »
pour remplacer la date et l’heure par la date et l’heure actuelle.
Effectivement mon système n’est pas tout à fait exacte, notemment lors de la première fois que l’utilisateur
s’inscrit. Mais je travaille activement pour remédier au problème.
Passons à l’onglet « Mes paramètres ». Comme sont nom l’indique c’est ici que l’utilisateur va pouvoir modifier
ses informations. Lorsqu’il clique dessus il atterit sur une page qui affiche le cadre suivant :
Il s’agit du cadre « principal », il affiche l’avatar de l’utilisateur, les informations, et les options qui lui sont
proposées.
Je vais commencer par l’option « Changer mon avatar », si l’utilisateur clique dessus un nouveau cadre
apparaît :
J’ai séléctionner de nombreux avatar pour donner le choix à l’utilisateur.
Remarque : L’utilisateur est obligé de choisir un avatar parmis mes propositions, je n’ai pas encore mis en
place un système pour importer son propre avatar.
Donc lorsque l’utilisateur à trouver son avatar, il lui suffit de cocher le bouton « radio » situé à coté de son
avatar puis il clique sur « Changer » et la modification est automatiquement faite dans la table « membre » au
profil utilisateur correpondant. L’avatar sera également changer dans les fenêtre de connexion et dans le
cadre de profil.
Si toutefois il ne souhaite finalement pas changer son avatar, il lui suffit de cliquer sur « Retour » et aucunes
modifications ne sera effectuées.
Une petite explication pour l’affichage des avatars. J’ai créé une nouvelle table appelée « avatar », elle
contient tous les chemins vers les images. Donc il me suffit d’utiliser une requête SQL ainsi qu’une boucle
« while » pour afficher toutes les images contenues dans ma table.
Ensuite, si l’utilisateur souhaite changer son mot de passe il doit cliquer sur « Changer mon mot de passe »
qui le redirige vers un autre cadre :
Il s’agit du formulaire de base que l’on trouve un peu partout sur des sites où un compte est exigé. L’utilisation
est très simple, l’utilisateur entre son mot de passe actuel puis il choisit un nouveau mot de passe qu’il entre
de nouveau pour confirmer. Il ne lui reste plus qu’à cliquer sur « Modifier » pour effectué l’opération.
Un email est ensuite envoyé pour en informer l’utilisateur.
Ici j’utilise les même sécurités que pour l’inscription. Je vérifie pour les champs « Nouveau mot de passe » et
« Confirmer » que le mot de passe contient au moins 8 caractères, ainsi qu’une lettre majuscule et minuscule,
un chiffre et un caractère spécial. Et je vérifie également que les mots de passe soit pareil.
Cependant j’utilise une sécurité de plus étant donné que j’ai un nouveau champ « Acien mot de passe ». J’ai
donc mis en place un moyen de vérifier que le mot de passe existe bien dans la table « membre » au profil
correspondant. Si ce n’est pas le cas, un message d’erreur est affiché :
Autrement la modification du mot de passe peut être effectué.
Et je termine par l’option « Modifier mon profil » :
Un nouveau cadre apparaît avec les informations de l’utilsiateur déjà préremplis dans les champs. Il suffit
donc à l’utilisateur de modifier n’importe qu’elles informations puis de cliquer sur « Modifier » pour ensuite
mettre à jour les informations dans la table « membre » au profil correspondant.
POSTER DES COMMENTAI RES.
A venir…
LIENS UTILISES LORS DE LA CREATION DE CE DOSSIER.
-
Config fail2ban : http://reseau.developpez.com/tutoriels/fail2ban/
Config rkhunter, portsentry et iptables : http://fr.openclassrooms.com/informatique/cours/securiserson-serveur-linux#.U5r2GMqwsas
Config wootwoot : http://www.sublimigeek.fr/installer-et-configurer-fail2ban-sur-un-serveur
Installation de Webmin : http://www.actualinet.fr/securiser-son-serveur-dedie

Documents pareils

Sécurité sous Linux - Association infothema

Sécurité sous Linux - Association infothema iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name BLACKLIST --set iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name BLACKLIST --update --seconds 10 -...

Plus en détail