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
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 -...