Rétablir les droits des dossiers

  quand l’accès FTP ne vous donne pas tout


Vous avez noté que l’installation de SPIP par FTP nécessite une gestion des droits (les droits /répertoires du serveur) assez précisement décrite.

Alors, quand l’accès FTP au serveur est configuré de telle façon que vous ne pouvez pas faire directement vos manipulations, comment s’en tirer (avec un peu de PHP ?

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Sur la plupart des hébergeurs mutualisés, la configuration des accès FTP et Apache (ainsi que l’accès superviseur root) est correct ; mais comment faire lorsque Le serveur proteste de droits incorrects  ?

Cet exemple retrace les recherches et manipulations que j’ai dues gérer pour implanter une version de test sur un serveur étranger ; par mesure de confidentialité et de sécurité, les affichages -bien réels- seront très partiels.

 La situation initiale

On dispose initialement d’un accès FTP sur le site, qui permet donc (en théorie) de manipuler les fichiers du serveur... mais en l’occurrence (et sans accès webmestre SPIP, il peut y avoir quelques délais..)
Première précaution, c’est de Sauvegarder SPIP ! Déjà une sauvegarde SPIP.. oui mais le compte fourni ne donne pas d’autorisation Webmestre..

L’accès FTP vous permet de récupérer le dump de données obtenu pour Sauvegarder sa base de données SPIP ; de même on peut (et doit lire les fichiers sous ./squelettes [1], soit en texte pour les squelettes et en binaire pour les fichiers joints (en particulier les images).

Tout se complique quand on veut intervenir sur le serveur :
- premier constat, il traînait une sous-arboresccence incomplète de décompactage d’un SPIP ancien, sans doute le résultat d’un spip_loader interrompu en-cours de traitement : mais impossible de supprimer ou renommer le répertoire.
- impossible également de déposer le spip_loader dans un sous-répertoire du site pour implanter une version de test (le client FTP rend compte d’une erreur de droits d’accès).

Par chance, nous trouvons un autre sous-répertoire dans lequel le dépot d’un fichier .php est accepté : situé sous www/htdocs/ il est accessible par une URL et donc il est possible de faire exécuter à Apache des scripts php spécifiques sur ce serveur.

 Quelles étapes accomplir

Le besoin final est d’avoir la main par FTP sur un répertoire modifiable par APACHE, pour pouvoir :
- installer SPIP (télécharger, puis Restaurer son SPIP sur un nouveau serveur avec un nouveau prefix),
- modifier, c’est-à-dire écrire sur ce dossier (et également lire) par FTP
- et de pouvoir définir ces dossiers comme lisibles, ou modifiables par APACHE (le process propriétaire qui exécute SPIP et les scripts php qui auront à y écrire..).

Plus précisement, il faudra que, le propriétaire des fichiers ecrits par FTP, et le propriétaire exécutant SPIP aient chacun des droits d’accès (en écriture) sur les les fichiers et répertoires écrits par l’autre [2], puis de sécuriser les droits de modification par d’autres inconnus, utilisateurs indélicats.

JPEG - 56.8 ko
Les droits et propriétaires des fichiers par WinSCP
Exemple d’une installation spécifique : comprendre :
le propriétaire n°6000 correspond à l’accès FTP, tandis que l’exécution de spip_loader par Apache rend ce propriétaire système n°48 !

Pour cela, il faut d’abord vérifier si Apache et votre compte FTP s’exécutent avec les mêmes droits, s’ils font partie d’un même groupe sur le serveur Linux : pas de souci.
Si ce n’est pas le cas, il vous faudra -à la main- garantir les modifications de droits nécessaires, en identifiant bien le bon propriétaire visé (évidemment nous découvrons un cas à problème, mixant deux groupes utilisateurs distincts, sans cela cet article n’aurait pas lieu d’être !)

JPEG - 16.1 ko
Les droits mis par la création FTP de ./plugins/auto

Même avec spip_loader vous aurez à rajouter par FTP les dossiers supplémentaires ./plugins/auto/, par exemple comme ci-dessus.
Et en cas d’erreur, SPIP 3 vous donnera un message plus explicite (et décevant).

JPEG - 28.7 ko
Apache/SPIP signale l’impossibilité d’écriture
Apache n’étant pas dans le meme groupe ne pourra pas ecrire dans ce ./plugins/auto pour installer des plugins automatiquement.

Ici, il aura fallu passer le dossier ./plugins/auto/ en 0777  !

 Les étapes à valider

- pouvoir déposer un fichier script php sur un répertoire accessible par Apache, et
- vérifier de pouvoir exécuter ce script php par accès d’une URL dans votre navigateur,
- vérifier qu’Apache pourra écrire dans vos dossiers d’installation (pour l’installation), et
- contrôler les droits d’Apache nécessaires pour écrire des fichiers en exploitation (cache).
- sécuriser les accès (accès fichiers, voire accès aux scripts limités par .htaccess.


 Les fonctions php utiles

Si votre client FTP ne parvient pas à appliquer des droits complets sur des fichiers ou dossiers, vous devrez suspecter une différence de propriétaires ; et si l’affichage FTP n’est pas explicite (voir Outils FTP pour Webmestre), vous devrez utiliser des fonctions de php dans des scripts que vous trouverez ci-dessous.

- pour identifier le chemin réel de votre site Web, vous utiliserez realpath(''), en effet le proocessus Apache parcourt les répertoires son serveur en partant de la racine du disque ( /) qui est généralement bien au-dessus de la racine Web nommé DocumentRoot apparente à votre navigateur, soit par exemple :
<?php echo realpath(''); ?>
affichera quelque chose comme : /home/www/htdocs/tests/.
- pour vérifier le propriétaire, vous pourrez faire

  1. <?php
  2. $dossier = "/home/www/htdocs/tests/'' ; // mettre la valeur trouvée
  3. echo "<br/>$dossier ";echo "<br/>"; // avec affichage de controle
  4. $etat = stat($dossier );
  5. print_r(posix_getpwuid($etat['uid']));echo "<br/>";

Télécharger


- enfin pour changer les droits, vous ferez comme SPIP un chmod( $dossier."/tests",0777);   par exemple :

  1. <?php
  2. chmod("/home/www/htdocs/tests", 0777);
  3. ?>

Télécharger


Merci de nous signaler les coquilles ou erreurs qui figureraient dans cette page.

[1Lors des transferts FTP soyez attentifs au paramétrage des options de votre client FTP pour bien récupérer ces fichiers sans changement de casse[[Différentiation de casse, entre Majuscules et minuscule, qui rendrait votre sauvegarde ou sa restauration dysfonctionnant sous Linux !

[2Après installation, il sera possible de sécuriser plus finement les droits.. mais vous retrouverez la même difficulté lors de votre prochaine mise-à-jour de SPIP !


Liens visibles seulement pour les inscrits.

Article publié le 10 juin 2015, et actualisé en juin 2015 .

Répondre à cet article