umask de apache à 002 sur debian/Ubuntu pour obtenir des permissions à 664/775

umask de apache à 002 sur debian/Ubuntu pour obtenir des permissions à 664/775

Le umask par défaut d’apache est à 022, Nous allons voir ici comment le modifier afin d’obtenir des permissions en lecture/écriture pour les utilisateurs appartenant au même groupe.

Lorsque l’utilisateur apache crée des fichiers (que ce soit via un upload, ou un script tel qu’une installation de module/plugin dans un CMS) les permissions par défaut sur Debian (et Ubuntu) son rw-r–r– (0644) pour les fichiers, et rwxr-xr-x (755) pour les dossiers.
Ce comportement est certes sécurisé, mais particulièrement frustrant lorsque l’utilisateur FTP cherche à modifier ces fichiers créés et se retrouve coincé parce qu’il n’a pas les droits.
Et il n’est pas si facile que ça de mettre la main sur la solution, bien qu’on puisse la trouver ici et là.

Pour que l’utilisateur apache puisse créer des fichiers en 0664 et des dossiers en 0775 il faut changer son umask par défaut en 002 au lieu de 0022.

Pour ce faire commencer par faire un petit script php de test :

<?php
$now = date("Y-m-d-H-i-s",time());
if ($fp = fopen($now . '.txt', 'w')) {
  fwrite($fp, 'fichier de test.');
  fclose($fp);
  echo "ecriture réussie";
} else {
  echo "erreur d'écriture de fichier";
}
?>

et placer ce script dans un dossier où l’utilisateur apache a le droit d’écrire..

Vérifier que la ligne :

PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)

Se trouve bien dans le fichier /etc/init.d/apache2 et si elle s’y trouve, ajouter à la fin du fichier /etc/apache2/envvars :

#umask  002 pour passer les permission de fichiers à 0664 et de dossiers à 0775
umask 002

Relancer ensuite apache via un STOP/START (pas un restart):

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

et c’est tout..
Lancer votre test et faites un ls dans le dossier pour vérifier les permissions :

-rw-r--r-- 1 www-data www-data  19 Nov 13 02:59 2014-11-13-07-59-54.txt
-rw-rw-r-- 1 www-data www-data  19 Nov 13 03:32 2014-11-13-08-06-33.txt

Ne pas oublier ensuite, si ce n’est pas déjà fait, d’attribuer le groupe de l’utilisateur ‘apache’ (www-data ici) à vos utilisateur FTP

(solution trouvée via serverfault.com appliquée et traduite de mes blanches mains pour votre plaisir)