Catégorie : Software
Firefox : supprimer "Se rendre sur" de la barre d'adresse
Depuis la version 43 de Firefox, vous avez surement remarque (puisque vous êtes ici) qu'une nouvelle option s'affiche lorsque vous tapez vos mots clés directement dans la barre d'adresse.
Cette option permet de se rendre sur le domaine correspondant, seulement vous utilisez peut-être comme moi cet espace de recherche pour retrouver votre historique.
Pour supprimer cette ligne, rendez-vous dans about:config puis passez à false la clé suivante :
# Recherchez browser.urlbar.unifiedcomplete
La suggestion est automatiquement retirée de votre recherche !
Installer dashing sur un Raspberry Pi
Ca fait un moment que j'utilise dashing au travail pour surveiller quelques services et prestataires. Voici un petit tutoriel pour installer sur un raspberry pi le dashboard Dashing.
Installer dashing sur un raspberry pi
Débugguer un coredump Apache/Php avec GDB
J'ai mis quelque temps avant de me lancer dans l'analyse des coredump remontés dans mes logs apaches. La méthode est assez complexe et longue, je vous propose donc un petit "how-to" pour analyser les dump de Apache / Php.
Voici un exemple de log dans apache2 :
# Log Apache error.log [Wed Nov 19 10:07:56 2014] [notice] child pid 22204 exit signal Bus error (7), possible coredump in /etc/apache2 [Wed Nov 19 10:12:28 2014] [notice] child pid 22664 exit signal Bus error (7), possible coredump in /etc/apache2
Pas la peine de vous rendre dans /etc/apache2 car malgré ce qui est indiqué il n'y a aucune infos dans la dossier en question surement due aux droits du dossier.
Pour analyser le fichier généré nous allons devoir compliler apache2 et php avec les options de débug. Dans mon cas je travaille sur des instances EC2, je vous déconseille fortement de faire ces manipulations sur un serveur de prod. Si jamais vous n'avez pas d'autres serveur / machine sous la main, vous pouvez cependant relancer le second serveur apache sur un autre port en conservant votre version "prod".
Compilation de Apache2
Téléchargez dans les archives d'apache la version exactement de votre serveur. Pour connaitre votre version :
apache2 -v Server version: Apache/2.2.22 (Ubuntu) Server built: Jul 22 2014 14:35:25
Les archives sont disponibles à cette adresse. J'ai donc téléchargé l'archive httpd-2.2.22.tar.gz.
# On se rend dans notre répertoire cd # On télécharge l'archive wget http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.gz # On extrait l'archive et on rentre dans le dossier tar xvzf httpd-2.2.22.tar.gz && cd httpd-2.2.22 # On définit les paramètres de compilation pour débugger export CFLAGS="-DBIG_SECURITY_HOLE -g" # On lance la configuration, j'ai ajouté les mods rewrite et ssl ./configure --enable-so \ --enable-rewrite --enable-ssl --enable-mods-shared='rewrite ssl' # On compile ! make && sudo make install
Apache2 est désormais installé dans la répertoire /usr/local/apache2/ avec les différents dossiers comme bin, conf, logs...
Si jamais le module htaccess n'est pas chargé, on ajoute la ligne dans le httpd.conf
# Activation du module rewrite echo "LoadModule rewrite_module modules/mod_rewrite.so" >> /usr/local/apache2/conf/httpd.conf
Vous pouvez désormais démarer / arrêter apache2 :
# Démarrage sudo /usr/local/apache2/bin/httpd -k start # Vérification ps aux |grep apache2 root 27836 0.0 0.1 220232 8392 ? Ss Nov19 0:02 /usr/local/apache2/bin/httpd -k start root 27838 0.0 0.8 275316 64452 ? S Nov19 0:38 /usr/local/apache2/bin/httpd -k start root 27839 0.0 0.8 276164 65088 ? S Nov19 0:32 /usr/local/apache2/bin/httpd -k start root 27840 0.0 0.1 222608 11728 ? S Nov19 0:37 /usr/local/apache2/bin/httpd -k start # Arrêt sudo /usr/local/apache2/bin/httpd -k start
Si vous n'avez pas d'erreurs c'est que cette première partie s'est bien passée.
Compilation de PHP
L'installation de PHP est semblable à apache2, il y a juste quelques configuration à faire dans le httpd.conf en plus.
Téléchargez votre version de PHP depuis le museum. J'utilise actuellement la version php-5.3.10.tar.gz. On passe ensuite à la compilation !
# Quelques paquets nécessaire sudo apt-get install libbz2-dev libpng12-dev libmysqlclient15-dev # Change de répertoire cd # Téléchargement de l'archive wget http://museum.php.net/php5/php-5.3.10.tar.gz # Extraction tar xvzf php-5.3.10.tar.gz && cd php-5.3.10 # Configure ./configure \ --with-pear=/usr/share/php \ --with-bz2 \ --with-curl \ --with-gd \ --enable-calendar \ --enable-mbstring \ --enable-bcmath \ --enable-sockets \ --with-libxml-dir=/usr \ --with-mysqli \ --with-mysql \ --with-openssl=/usr \ --with-regex=php \ --with-zlib \ --enable-debug \ --with-gettext \ --with-libdir=/lib/x86_64-linux-gnu \ --with-apxs2=/usr/local/apache2/bin/apxs # Compilation make && sudo make install
PHP est désormais installé, il reste désormais quelques configuration à effectuer pour qu'il soit pris en compte !
# Création du php.ini cp php.ini-development /usr/local/lib/php.ini # Chargement du module pour apache (vérifiez s'il n'est pas déjà chargé) echo "LoadModule php5_module modules/libphp5.so" >> /usr/local/apache2/conf/httpd.conf
On ajoute ensuite les 3 lignes suivantes pour dire à apache d'interpréter le PHP :
# Dans votre httpd.conf <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
A ce stade vous devriez pouvoir démarer apache avec php ! Pour tester, créez un fichier /usr/local/apache2/htdocs/info.php :
<?php phpinfo();
Vous devriez accèder aux infos de php via http://votreip/info.php !
Analyse du coredump
Avant d'analyser le coredump et faut configurer le système pour qu'il le crée.
Il faut dans un premier temps définir la taille maximum des fichiers core (par défaut à 0) :
# Ulimit ulimit -c unlimited # Vérification ulimit -a |grep core core file size (blocks, -c) unlimited
Nous allons ensuite créer un répertoire pour recevoir les fichiers et indiquer à apache ou les créer :
# Création du dossier mkdir /tmp/apache # Droits chmod 777 /tmp/apache # Et on indique le répertoire à apache echo "CoreDumpDirectory /tmp/apache" >> /usr/local/apache2/conf/httpd.conf # On redémarre apache sudo /usr/local/apache2/bin/httpd -k start sudo /usr/local/apache2/bin/httpd -k stop
Il reste plus qu'a attendre le coredump !
# Wait and see tail -f /usr/local/apache2/logs/error_log
Dés que vous avez l'erreur, vous pouvez arrêter apache. Rendez vous ensuite dans le répertoire /tmp/apache et vous devriez avoir le fichier "core".
Il nous reste à télécharger le fichier .gdbinit de PHP permettant de rendre "lisible" votre coredump ! Vous pouvez retrouver celui correspondant à votre version via le github. La version pour php 5.3.10 est disponible à cette adresse.
# Changement de répertoire cd # Téléchargement (prenez bien le format raw) wget https://raw.githubusercontent.com/php/php-src/e4afa14812d10da7413096c742470fb0582ebc95/.gdbinit
Ensuite on install gdb :
# GDB sudo apt-get install gdb
Et maintenant on peut enfin analyser le coredump :
# Répertoire cd # On exécute gdb avec le processus apache et le coredump sudo gdb /usr/local/apache2/bin/httpd /tmp/apache/core
Vous allez ensuite obtenir la dernière étape de l'erreur :
Program terminated with signal 7, Bus error. #0 0x00007f5b64bf8aab in lex_scan (zendlval=0x7fff2a324488) at Zend/zend_language_scanner.l:1797 1797 int bprefix = (yytext[0] != '\'') ? 1 : 0;
pour obtenir la pile vous pouvez utiliser la commande bt, le détail complet avec bt full. Pour analyser le coredump via php utilisez zbacktrace.
Dans mon cas j'ai obtenu l'erreur suivante :
(gdb) zbacktrace [0x01a3ed28] load() /home/www/projet/includes/classes/Cache.class.php:58 [0x01a3eb98] load() /home/www/projet/includes/classes/Cache.class.php:28 [0x01a3d2b0] __construct() /home/www/projet/includes/common.php:63 [0x01a20e60] ??? /home/www/projet/includes/ajax.php:4
Il s'agissait d'un require sur un fichier cache qui était supprimé en cours de lecture a cause d'une mauvaise condition sur la date de mise à jour du cache.
En espérent avoir été utile, n'hésitez pas à consulter les liens suivants ou a poster un commentaire !
Compilation de apache2
Compilation de PHP
Extension Intl avec Wamp
Si comme moi vous souhaitez faire fonctionner l'entension PHP intl sous wamp, vous devez suivre les deux étapes suivantes :
Activer l'extension via Wamp
Cliquez simplement sur l'icône du logiciel puis allez dans PHP, Extensions PHP et cochez php_intl afin d'activer l'extension. (ou décommentez la ligne php_intl.dll dans le php.ini)
Copier les DLL manquantes
Rendez-vous ensuite dans le répertoire wamp/bin/php/php*version*/ et copier les dll ayant la structure icu****.dll dans le répertoire :
wamp/bin/apache/Apache*version*/bin
Redémarrez ensuite wamp et votre extenstion devrait être activée !
Extrait de phpinfo()
Tuer des processus MySQL de façon sélective
J'ai récemment eu besoin de killer tous les processus MySQL d'un utilisateur pour permettre une modification de table tranquillement. MySQL ne propose pas de commande pratique pour le faire et il est impossible d'ajouter des conditions à la commande kill.
Connectez vous à votre serveur MySQL et exécutez les commandes suivantes en utilisant vos conditions évidemment.
Dans cet exemple, je récupère les IDs de tous les processus de l'utilisateur root lancés depuis plus de 200 secondes. N'hésitez pas à regarder la structure de la table processlist avec la commande suivante :
# Afficha la structure de la table des processus describe information_schema.processlist;
Bon killing à vous !
Forcer le HTTPS avec un Load Balancer chez Amazon
Amazon permet de configurer son service Load Balancing pour gérer le chiffrement de votre site et renvoyer du HTTP sur vos instances. Cette solution permet de décharger votre serveur WEB mais impossible d'utiliser la variable "SERVER_PORT" dans vos conditions car le serveur répond uniquement sur le port 80. Logique !
La solution est plus ou moins indiquée dans la documentation d'amazon et c'est en place depuis le 27 octobre 2010.
Il faut donc utiliser le header X-Forwarded-Proto qui contient le protocole du client renvoyé par le load balancer. Et voici deux petites lignes permettant de forcer le https à votre client :
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
La première ligne active le mod rewrite, la seconde vérifie si le protocole est donc différent de https et dans ce cas la troisième ligne effectue une redirection 301 vers le même domaine en excluant le cas ou vous consultez le server status !
Problème avec Pure Ftp Mysql et Inetd
Inetd est un démon très avantageux qui active automatiquement un service lorsqu'un client tente de s'y connecter. Il permet donc d'allouer des ressources uniquement quand c'est nécessaire. Suite à une mise à jour des paquets un serveur Debian, je me suis retrouvé avec une erreur lors de la connexion au ftp.
Can't exec "/usr/sbin/pure-ftpd": No such file or directory at /usr/sbin/pure-ftpd-wrapper line 174.
Cette erreur apparaît car inetd a mal été configuré avec pure ftp mysql. Pour la corriger il suffit d'éditer les quelques premières lignes du fichier /usr/sbin/pure-ftpd-wrapper.
Remplacez les trois lignes suivantes :
my $daemon = '/usr/sbin/pure-ftpd'; my @capabilities = @ARGV; if ($ARGV[0]) { $daemon = "$daemon-$ARGV[0]"; }
Par ceci :
my $daemon = '/usr/sbin/pure-ftpd-mysql'; my @capabilities = @ARGV; #if ($ARGV[0]) { #$daemon = "$daemon-$ARGV[0]"; #}
On a donc remplacer le chemin du démon et commenté les quelques lignes qui normalement auraient du ajouter "-mysql" au nom du démon.
Vous pouvez ensuite redémarrer inetd, et tout devrait à nouveau fonctionner !
/etc/init.d/openbsd-inetd restart
En espérant vous avoir rendu service !
Consulter les message du boot sur Debian
J'ai récement eu besoin de consulter les messages retournés par les services lors du boot sur Debian mais impossible de trouver quoi que ce soit dans les fichiers de logs.
Après quelques recherche il s'est avéré qu'il faut activer une option pour loger les sorties dans un fichier.
Pour les activer, ouvrez le fichier :
/etc/default/bootlogd
Puis remplacez la valeur de BOOTLOGD_ENABLE par Yes.
# Run bootlogd at startup ? BOOTLOGD_ENABLE=Yes
Vous pouvez désormais consulter les logs du boot dans le fichier
/var/log/boot
Et voici un exemple de contenu :
Thu Jul 5 15:05:08 2012: Configuring network interfaces...done.
Thu Jul 5 15:05:09 2012: Cleaning up temporary files....
Thu Jul 5 15:05:09 2012: Setting sensors limits.
Thu Jul 5 15:05:09 2012: Setting kernel variables ...done.
Thu Jul 5 15:05:09 2012: INIT: Entering runlevel: 2
Thu Jul 5 15:05:09 2012: Using makefile-style concurrent boot in runlevel 2.
Thu Jul 5 15:05:09 2012: Starting enhanced syslogd: rsyslogd.
En espérant que ça vous permettre de résoudre vos soucis !
Installer Red5 sur Debian Squeeze
Aujourd'hui c'est un tutoriel pour installer Red5, un équivalent de Flash Media Server de Adobe. J'utilise red5 dans le cadre d'un projet de publication de vidéo et audio en streaming.
J'utilisais jusqu'à aujourd'hui la version 0.9.1 disponible sur les dépôts Debian, mais je rencontrait quelques soucis donc j'ai préféré passer la dernière version 1.0 RC.
J'en ai profité pour écrire un petit tutoriel vous permettant d'effectuer cette installation. Je partagerais probablement quelques codes flash pour publier des flux vidéo (webcam) en utilisant red5 un jour !
Installer Red5 sur Debian Squeeze
Ajouter PureFTP dans fail2ban
Fail2ban est un excellent framework permettant d'éviter ou du moins limiter les intrusions sur votre serveur. Voici la procédure pour ajouter le serveur ftp PureFTP dans les règles fail2ban. En ajoutant cette règle votre adresse ip peut se retrouver filtré à partir de trois echecs de connexion pendant 10 minutes (par défaut), faites donc attention à vos test !
Ajoutez au fichier /etc/fail2ban/jail.conf dans la section FTP servers de préférence le contenu suivant :
[pure-ftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = pure-ftpd logpath = /var/log/messages maxretry = 3
Cette section vas permettre à fail2ban de filtrer (interdire) les ports 21, 20, 990 et 989 en cas de détection d'echec de login dans le fichier /var/log/messages (logs par défaut de PureFtpd)
Le fichier /etc/fail2ban/filter.d/pure-ftpd.conf est normalement crée par défaut sur votre machine, vérifiez son contenu. Il doit ressembler à celà :
# Fail2Ban configuration file # # Author: Cyril Jaquier # Modified: Yaroslav Halchenko for pure-ftpd # # $Revision: 3$ # [Definition] # Error message specified in multiple languages __errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur) # # Option: failregex # Notes.: regex to match the password failures 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 and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = pure-ftpd(?:\[\d+\])?: \(.+?@<HOST>\) \[WARNING\] %(__errmsg)s \[.+\]\s*$ # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
Il s'agit de regex permettant de récupérer l'adresse IP d'un echec de connexion à votre serveur ftp.
Pour tester si votre regex est correcte, vous pouvez exécuter la commande suivante après avoir de préférence effectué une mauvaise connexion à votre serveur ftp.
# Test de la regex fail2ban-regex /var/log/messages /etc/fail2ban/filter.d/pure-ftpd.conf
Vous devriez retrouver votre adresse IP dans "Addresses found".
Il faut ensuite re-démarrer le service fail2ban :
# On rédémarre /etc/init.d/fail2ban restart
Pour vérifier si le filtre à bien été pris en compte, vous pouvez utiliser la commande suivante :
# Test cat /var/log/fail2ban.log |grep pure-ftpd
Et vous devriez avoir le résultat suivant :
2012-03-27 10:23:10,041 fail2ban.jail : INFO Creating new jail 'pure-ftpd' 2012-03-27 10:23:10,041 fail2ban.jail : INFO Jail 'pure-ftpd' uses poller 2012-03-27 10:23:10,051 fail2ban.jail : INFO Jail 'pure-ftpd' started
Et voilà votre serveur ftp est maintenant géré par fail2ban !