mardi 25 août 2015

mailto - retour à la ligne

Comment insérer des retour à la ligne dans un mailto ?
Inutile d'utiliser la balise <br> ou \n, ça ne fonctionne pas. En revanche, l'expression %0A donne les résultats escomptés.

vendredi 5 juin 2015

SELinux sur CentOS

J'ai récemment migré un site php sous apache hosté sur un serveur Ubuntu vers un serveur CentOS.

Le premier problème rencontré après ma migration vers CentOS a été l'upload de fichiers qui ne fonctionne plus.
Pourtant, après avoir vérifié sur le web, les droits de mon répertoire d'upload étaient bien ajustés :

sudo chown apache:apache /var/www/upload_dir
sudo chmod 774 /var/www/upload_dir


Rien à faire, j'ai toujours un « permission denied » dans mon /etc/httpd/logs/ssl_error_log …

Que s'est-t-il passé ? La gestion traditionnelle des droits sur les répertoires est soumises à SELinux (Security-Enhanced Linux). Le principe est que les utilisateurs et les applications peuvent changer les droits d'accès aux répertoires du serveur et pas toujours de la bonne manière. L'administrateur ne peut contrôler tous ces changements de droits.

SELinux va donc recouvrir tous les dossiers du serveur par un niveau ré-haussé de sécurité. Par exemple, il va interdire les accès autres que lecture seule pour http (apache) dans mon /var/www/.

On peut changer le statut de SELinux en modifiant /etc/selinux/config (selinux=enfocing, permissive ou disabled) ou en écrivant

Setenforce 0

Cette commande va permettre de désactiver SELinux mais ne résiste pas à un reboot. Si on modifie le fichier /etc/selinux/config, ça résiste à un reboot.

Passer en disabled ou permissive permet de retrouver l'accès écriture à mon dossier et donc l'upload des fichiers fonctionne à nouveau. Le problème, c'est qu'on perd l'avantage de SELinux.

Comment configurer le système pour ouvrir les droits d'écriture sur certains répertoires (/var/www/upload_dir) et pas sur le reste ?
Voici quelques commandes utiles de SELinux.

Tout d'abord, on peut afficher le « contexte SELinux » associé à un fichier :

ls -Z /var/www/index.php

=> -rw-r--r--  username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html

system_u:object_r:httpd_sys_content_t nous renseigne sur le contexte SELinux sous le format utilisateur:rôle:type:mls. (mls n'est pas affiché)

On peut tester cette commande sur quelques fichiers du serveur pour mieux cerner son fonctionnement.
Pour résumé, apache (httpd_t) peut lire des fichier de type httpd_sys_content_t. Par exemple, apache ne pourrait pas lire un fichier dans le home d'un utilisateur.

Comment modifier le contexte des fichiers ?

chcon -v --type=httpd_sys_content_t /var/www/newfile.php

En récursif :

chcon -vR –type=httpd_sys_content_t /var/www/newdir

Finalement, voici le type qu'on va appliquer aux fichiers dans lesquels on souhaite uploader des fichiers :

chcon -vR unconfined_u:object_r:httpd_sys_rw_content_t:x0 /var/www/upload_dir

Maintenant qu'on a ouvert l'accès à l'upload de fichier, il reste à faire ça correctement en modifiant le code php pour :

  1. vérifier que l'extension du fichier est dans une « white list » (gif, jpg, png, pdf, doc, etc.) ;
  2. vérifier que le type du fichier correspond bien à ce que son extension prétend être.

mercredi 27 mai 2015

Auto-correction dans calc (libreoffice)

Si vous aussi vous en avez marre de voir calc faire systématiquement des auto-corrections lorsque vous encodez des valeurs, sachez qu'il est possible de configurer l'outil selon votre bon vouloir.
Par exemple, l'ajout automatique de majuscules en début de phrase peut être utile dans le writer mais devient vite insupportable dans calc.
Il suffit de se rendre dans le menu Outils / AutoCorrection et de consulter les options disponibles. Par exemple, dans le troisième onglet, on peut désactiver les majuscules en début de phrase.


Apache - redirection

Voici deux méthodes de redirection sur un serveur apache.

  1. Je souhaite rediriger le port 80 vers le port 443
    => on ajoute la ligne suivante dans le VirtualHost 80 :
    Redirect / https://%{HTTP_HOST}
  2. Je souhaite rediriger l'adresse ip du serveur vers mon nom de domaine
    => il faut installer le module Rewrite :
    sudo a2enmod rewrite
    => on ajoute les lignes suivantes dans le VirtualHost 443 :
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^<nomdedomaine>$
    RewriteRule (.*) https://<nomdedomaine>

vendredi 22 mai 2015

Nettoyer son pc - fichier de sauvegarde

voici une petite ligne de commande utile pour retrouver les fichiers de sauvegarde qui ont tendance à s'accumuler sur le pc. Exemple : test.php~.

find /chemin/ -name '*~'