Pratiques recommandées concernant les autorisations et la propriété des fichiers / répertoires Joomla sur les systèmes Linux?

26

Dans le passé, j'ai souvent rencontré des problèmes avec les autorisations et la propriété des fichiers / répertoires Joomla sur les systèmes Linux.

Problèmes inclus

  • Impossible de transférer des fichiers vers le serveur à l'aide de programmes tels que WinSCP.
  • Ne pas pouvoir installer les extensions Joomla, les plugins, etc.
  • Fichiers et dossiers non sécurisés en raison d'autorisations et de paramètres de propriété dangereux.

Quelles sont les meilleures pratiques recommandées pour définir les autorisations et les propriétaires dans Joomla sur les systèmes Linux?

TryHarder
la source

Réponses:

22

Il existe quelques causes potentielles de problèmes d'autorisation de fichiers et de dossiers sur l'hébergement Linux.

1. Autorisations de fichiers et de dossiers

Vérifiez que les autorisations sur les dossiers sont définies sur 0755 et que les autorisations sur les fichiers sont définies sur 0644. Notez que les autorisations sur les fichiers et les dossiers peuvent être réinitialisées sur ces paramètres sécurisés standard à l'échelle du site à l'aide de la version gratuite ou payante d'Akeeba Admin Tools.

2. Paramètres PHP

Vérifiez que le paramètre upload_max_filesize dans l'onglet Informations PHP dans les informations système est suffisant. Vous pouvez souvent remplacer le paramètre par défaut dans un environnement d'hébergement partagé via les paramètres PHP dans cPanel ou un php.inifichier personnalisé .

3. Chemins d'accès incorrects dans configuration.php

Vous pouvez avoir des chemins incorrects spécifiés pour les dossiers tmp et logs. Ceux-ci sont spécifiés dans la configuration du système ou peuvent être mis à jour directement dans le fichier configuration.php si vous êtes à l'aise pour éditer directement les fichiers système. Si vous n'êtes pas sûr du chemin d'accès, créez et téléchargez un fichier whereami.php(ou similaire) dans le dossier racine de votre site Web avec le contenu suivant:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Naviguez pour [mywebsite].com/whereami.phpvoir le chemin d'accès au dossier racine.

Une fois que vous avez le bon chemin, n'oubliez pas de supprimer le whereami.phpfichier.

4. Gestionnaire de fichiers PHP inapproprié

Votre hébergement Web peut être configuré avec le gestionnaire de fichiers PHP par défaut, mais devrait idéalement utiliser suPHP ou FastCGI ou similaire pour que Joomla puisse télécharger et exécuter des fichiers en utilisant des autorisations de fichiers sécurisées.

Vous pouvez voir à quel gestionnaire PHP est utilisé System -> System Information -> WebServer to PHP Interface.

Il y a un bon article sur les mérites relatifs des gestionnaires de fichiers PHP à: http://boomshadow.net/tech/php-handlers

Dans un environnement d'hébergement partagé, vous n'avez généralement pas accès au changement du gestionnaire de fichiers PHP activé, mais votre hébergeur peut être en mesure de le changer pour vous.

Parfois, en tant que solution de contournement, les autorisations de fichiers et de dossiers sont modifiées en 0777, mais cela met votre site Web dans un état vulnérable et les autorisations de fichiers 0777 doivent généralement être évitées.

Si votre société d'hébergement Web ne peut pas activer suPHP ou FastCGI, la seule autre option pourrait être de trouver une nouvelle société d'hébergement Web.

5. Espace disque

Vérifiez que vous n'avez pas dépassé votre quota d'espace disque.

LISTE DE CONTRÔLE DE DÉPANNAGE

Quelles sont les meilleures pratiques recommandées pour définir les autorisations et les propriétaires dans Joomla sur les systèmes Linux?

Voir 1 et 4.

Impossible de transférer des fichiers vers le serveur à l'aide de programmes tels que WinSCP.

Voir 1, 2, éventuellement 4 et 5.

Ne pas pouvoir installer les extensions Joomla, les plugins, etc.

Voir 1, 2, 3, 4 et 5.

Fichiers et dossiers non sécurisés en raison d'autorisations et de paramètres de propriété dangereux.

Voir 1 et 4.

Neil Robertson
la source
1
Dans mon cas, je pense que les gestionnaires PHP étaient une grande partie du problème.
TryHarder
1
+1 Votre réponse n'a pas vraiment résolu mon problème, mais je me suis inspiré pour vérifier les paramètres PHP de mon serveur - Mode sans échec et il s'est avéré qu'il était activé. Par conséquent, en l'éteignant, c'était la solution. Donc pour les futurs lecteurs si rien de ce qui précède ne l'a corrigé, vérifiez également votre mode sans échec :)
Mohammed Joraid
12

Veuillez vérifier les niveaux d'autorisation, il devrait être respectivement 644 et 755 pour les fichiers et les dossiers.

Plusieurs fois, les niveaux d'autorisation sont très bien, même lorsque certains problèmes sont rencontrés. Cela signifie que vous devrez vérifier la propriété et le groupe des fichiers et dossiers spécifiques . Normalement, le groupe et la propriété peuvent être modifiés en www-data pour apache (utilisé dans les serveurs Web basés sur Ubuntu).

N'hésitez pas à consulter ce document Joomla intéressant basé sur la vérification des autorisations de fichier.

Shyam
la source
Joomla appartient-il généralement au groupe www-data?
TryHarder
1
Parallèlement à la réponse de Shyam, nous utilisons le module SuPHP Apache . Nous avons constaté que lorsqu'une extension était installée, nous ne pouvions pas modifier ces fichiers via FTP et vice versa (problème de propriété des fichiers). SuPHP a corrigé cela pour nous en s'assurant que les scripts PHP s'exécutent avec les autorisations de leurs propriétaires.
Zachary Draper
1
le processus apache est exécuté sous 'www-data' un groupe unix. Ce n'est pas seulement Joomla, toutes les applications basées sur Apache.
Shyam
Est-il possible de développer et d'exécuter un script shell pour corriger automatiquement toutes les autorisations de fichier?
NivF007
1
Oui. gist.github.com/ssv445/11204300 Vous pouvez exécuter le script dans cron.
Shyam
8

Une solution simple pour moi est de laisser souvent PHP s'exécuter en mode (Fast-) CGI et de définir la propriété du répertoire Joomla pour l'utilisateur FTP. Ainsi, vous pourrez télécharger et écraser des fichiers via FTP et Joomla pourra également écrire des fichiers.

Une façon de le faire sur un environnement d'hébergement partagé (si cela est autorisé), consiste à ajouter quelque chose comme ça à votre fichier .htaccess:

AddHandler php53-cgi .php

Voir également un aperçu des différents modes .

fruppel
la source
7

Les autorisations doivent être 644 et 755 comme expliqué par Shyam.

Dans Joomla, vous pouvez éviter tous les problèmes que vous avez mentionnés, avec les méthodes suivantes.

Impossible de transférer des fichiers vers le serveur à l'aide de programmes tels que WinSCP.

  • Cela peut se produire en raison de l'autorisation de (444) comme Joomla configuration.phpa cette autorisation, elle ne l'autorise pas par défaut (pour des raisons de sécurité).
  • Une autre situation pour cette même erreur est lorsque vous transférez un site ou des dossiers d'un serveur à un autre.

Ne pas pouvoir installer les extensions Joomla, les plugins, etc.

  • Cela se produira en raison d'une temp/logmauvaise autorisation de dossier. (Il fallait 755)

  • Ou une autre raison est que le temp/logchemin est erronéconfiguration.php

Fichiers et dossiers non sécurisés en raison d'autorisations et de paramètres de propriété dangereux.

  • Ceci est le plus important Joomla toujours recommandé de ne pas utiliser 777 pour le fichier et le dossier si vous n'êtes pas au courant de cela .

J'espère que ça aide ..

Jobin Jose
la source
7

Les autorisations doivent être 644 et 755 comme expliqué par Shyam.

Les problèmes que vous rencontrez sont probablement liés à la configuration de votre serveur. La plupart du temps, cela se produit sur des hôtes partagés où Apache s'exécute sous un autre utilisateur que votre compte FTP. Comme vous téléchargez habituellement Joomla via FTP, Apache n'est pas le propriétaire du fichier et n'a donc pas les autorisations nécessaires pour le modifier.

Il existe un mode FTP dans Joomla qui vous permet de contourner ce problème. Vous pouvez l'activer dans la configuration globale de Joomla. Il fera ensuite tout l'accès aux fichiers en utilisant l'utilisateur FTP au lieu de l'utilisateur Apache normal.

Une meilleure façon est cependant de demander à votre hôte de résoudre le problème. Ils peuvent configurer PHP (Apache) pour s'exécuter sous un utilisateur spécial, qui dans ce cas devrait être votre utilisateur FTP. Ensuite, tout fonctionnera bien.

Bakual
la source
L'utilisateur / groupe est la réponse, comme vous l'avez dit, avoir l'utilisateur spécial pour PHP résout ce problème, surtout s'il coïncide avec l'utilisateur FTP.
jackJoe
5

Oui, les autorisations doivent être 644 et 755 comme expliqué par Shyam , mais les autres affiches oublient de mentionner que c'est le cas si le fichier appartient à votre serveur Web et que le groupe est le groupe auquel vous appartenez.

Par exemple, dans FileZilla, vous verrez des autorisations comme ceci:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

Les autorisations drwxr-xr-x sont 755 (ignorez simplement le dr principal pour qu'il soit wxr-xr-x). Les autorisations de lecture valent 4, les autorisations d'écriture valent 2 et les autorisations d'exécution valent 1 .. donc les avoir toutes jusqu'à 7, et c'est ce que possède le propriétaire de ce fichier. Le groupe a des autorisations de lecture et d'exécution mais pas d'écriture, il en a donc 5, et tout le monde en a également 5 .. ce qui rend les autorisations 755.

754 seraient des propriétaires ayant lu, écrit, exécuté. Groupe ayant lu et exécuté, et tout le monde ayant seulement des autorisations de lecture.

Dans l'exemple ci-dessus, vous pouvez voir que le propriétaire du fichier est www-data (qui est le groupe de serveurs Web par défaut pour de nombreux serveurs Apache) et que le groupe est le groupe myGroup, qui est le groupe (admins) auquel j'appartiens.

Le premier nombre correspond aux autorisations des propriétaires, le second aux autorisations des groupes et le troisième aux autorisations de tous. De toute évidence, vous devez faire attention à donner au serveur Web les autorisations dont il a besoin ... et vous assurer que les fichiers qui doivent être verrouillés ne peuvent pas être écrits ou exécutés par n'importe qui (le troisième numéro). Voici ce que signifient les chiffres:

En supposant que le serveur Web possède les fichiers, votre administrateur est dans le groupe et, bien sûr, tout le monde est le troisième numéro.

644: Les fichiers dont les autorisations sont définies sur 644 sont lisibles par tout le monde et accessibles en écriture uniquement par le propriétaire du fichier / dossier.

755: Les fichiers dont les autorisations sont définies sur 755 sont lisibles et exécutables par tous, mais uniquement accessibles en écriture par le propriétaire du fichier / dossier.

777: les fichiers dont les autorisations sont définies sur 777 sont lisibles, inscriptibles et exécutables par tous. N'utilisez pas cet ensemble d'autorisations, pour des raisons de sécurité, sur votre serveur Web, sauf en cas d'absolue nécessité, et uniquement temporairement. C'est un désastre qui attend de se produire, surtout si un répertoire a ces autorisations .. cela signifie que n'importe qui peut télécharger des fichiers et les exécuter.

Voici les commandes Linux pour configurer Joomla! autorisations recommandées à partir de la ligne de commande. Autorisations de fichier Joomla recommandées

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

NOTE - beaucoup de gens vous montreront ces commandes sans le chemin, mais je préfère TOUJOURS utiliser le chemin complet, car si vous oubliez de changer de répertoire à la racine Joomla! répertoire d'installation et les exécuter sans le chemin d'accès, vous venez de modifier les autorisations pour chaque fichier et répertoire dans ce répertoire supérieur, et créé un énorme gâchis.

Après avoir exécuté ces commandes, vous devrez corriger les autorisations pour tous les répertoires qui ont besoin de plus d'autorisations ... par exemple ... les utilisateurs qui téléchargent des images, etc.

SI VOUS N'UTILISEZ QUE LE JOOMLA! et vous n'avez pas d'administrateur ou d'accès FTP au serveur, alors UTILISEZ LA PROPRIÉTÉ et les AUTORISATIONS CI-DESSUS.

ARRÊTEZ ICI SI VOUS ÊTES UN NOVICE .. ce qui suit est uniquement pour les personnes qui comprennent vraiment ce que les autorisations et la propriété font.

Cependant, je trouve que la propriété et les autorisations sont très peu pratiques car j'aime utiliser FileZilla et une ligne de commande de session Terminal Server la plupart du temps, et je télécharge beaucoup de fichiers manuellement. Mais je ne peux pas écraser de fichiers car je ne les possède pas et je n'ai pas l'autorisation d'écrire. Je pourrais demander à FileZilla de se connecter sous le compte du serveur Web, MAIS ... Je veux que FileZilla se connecte sous mon compte, afin que je puisse également parcourir d'autres répertoires, pas seulement les fichiers auxquels le serveur Web a accès ... SO ... Je change la propriété et les autorisations en ceci:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Je me fais propriétaire et je mets le serveur Web dans le groupe ... et je change les autorisations pour les répertoires en 775 et pour les fichiers en 664. Cela me facilite beaucoup la vie ... mais je ne le recommande pas pour toutes les personnes.

Si vous le faites à ma façon, voici les commandes:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  
bgies
la source
"drwxr-xr-x sont 755" - ce serait 751 (absence de lecture permanente pour le public), pas 755. (Bien que 755 soit plus "normal" pour les répertoires.)
MrWhite
4

Les autres réponses fournissent une bonne explication de ce qui devrait être fait, je veux seulement ajouter un script pour corriger les autorisations si vous avez déjà téléchargé un composant et ne pouvez pas accéder aux fichiers avec ftp.

Dans ce cas, je téléchargerais ce fichier fix.phpsur le serveur FTP et l'ouvrirais dans le navigateur:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Ce script définit toutes les autorisations du fichier sur 666 et tous les répertoires sur 777. World Writable n'est pas le meilleur ensemble d'autorisations pour un hôte partagé, mais vous pourrez à nouveau accéder à vos fichiers et le définir ensuite avec les valeurs correctes avec FTP.

Harald Leithner
la source
1

Tard à la fête. Je suis venu ici à la recherche ainsi que d'autres endroits pour un guide définitif sur les dossiers qui doivent être accessibles en écriture pour Joomla.

Désolé, d'être le signe avant-coureur de mauvaises nouvelles.

Le conseil d'utiliser les autorisations 755 pour tous les répertoires et 644 pour tous les dossiers est à tout le moins irresponsable .

Rendre tous les dossiers et fichiers du propriétaire accessibles en écriture est correct tant que le propriétaire n'est pas le serveur Web (apache et al).

Je sais que cette pratique est courante mais je peux vous assurer que ce n'est pas une bonne pratique. Le dernier logiciel que vous souhaitez donner la possibilité d'écrire dans des dossiers est le serveur Web lui-même. C'est le serveur Web utilisé par les pirates pour tirer parti de cet exploit qui n'a pas encore été corrigé (ou même trouvé).

Pensez-vous que .htaccess sauvera votre Kevin? Oubliez cela car vous avez autorisé le serveur Web à accéder en écriture, nos chers amis hackers peuvent créer leurs propres fichiers .htaccess en leur accordant les autorisations qu'ils souhaitent! comme Oh je ne sais pas Umm faire des fichiers .jpg exécutables par le serveur. Et vous pensiez que la protection contre l'exécution .php allait couvrir votre A.

Mais assurez-vous que seuls les dossiers nécessitant un accès en écriture l'ont. 755 et 644 pour les dossiers suivants.

public_html/images
public_html/cache
public_html/tmp

Et assurez-vous de désactiver les fichiers .htaccess avec AllowOveride none pour tous les dossiers inscriptibles (comme ceux ci-dessus)

Pour ceux d'entre vous sur l'hébergement mutualisé, bonne chance car il s'agit d'un élément de configuration que vous ne pouvez pas contrôler.

Ne pensez pas que la lecture du fichier .htaccess en lecture seule sera utile. Si nos amis pirates peuvent créer un nouveau dossier (ils le peuvent), ils peuvent créer leur propre .htaccess.

Pour ceux d'entre vous qui exécutent un hébergement partagé pour tout ce qui est sacré, veuillez obtenir un indice sur la sécurité.

Si vous ne comprenez pas la sécurité, veuillez vous retirer de l'hébergement que vous rendez difficile pour le reste d'entre nous.

Maintenant, revenons à ma recherche du guide définitif sur les dossiers nécessitant un accès en écriture ...

DeveloperChris
la source
Merci Chris, mais je m'en tiendrai probablement aux autorisations de fichiers standard 755 et 644, alors que cela est recommandé par le site officiel de Joomla et des experts en sécurité tels que Sucuri: docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ …
Neil Robertson
Oui, je sais que c'est le "recommandé" mais une fois que vous avez été exploité et que vous avez compris pourquoi vous étiez exploité, je peux vous assurer que vous jetez les "recommandations" par la fenêtre et recommencez à zéro. Les recommandations sont le chemin de moindre résistance. Pas le plus sûr.
DeveloperChris
Les étapes 1 à 10 de la liste "Garder un site Web Joomla sécurisé" sur joomla.stackexchange.com/a/180/120 avec les autorisations de fichier standard ont bien fonctionné pour la cinquantaine de sites Web que j'ai recherchés pour le dernières années. Votre kilométrage peut bien sûr varier.
Neil Robertson
@NeilRobertson Je suis d'accord avec cette liste mais s'il y a un exploit qui n'est pas piégé par cela, votre dernière ligne de défense est de ne pas donner d'autorisations d'écriture au serveur web (apache et al). Ce n'est pas un conseil spécifique à Joomla d'ailleurs. De plus, la plupart des gens ne peuvent pas mettre en œuvre bon nombre des recommandations de cette liste. Ils n'ont tout simplement pas les ressources ou utilisent un hébergement moins cher (pas le moins cher).
DeveloperChris