web-dev-qa-db-fra.com

Quelles doivent être les autorisations du système de fichiers Unix pour les fichiers PHP sous Apache?

Quelle est la meilleure pratique pour les autorisations avec les fichiers PHP? Quand devraient-ils être accessibles en écriture ou exécutables? Quel propriétaire est le meilleur?

J'utilise un serveur Apache.

2
Kirk Strobeck

Les scripts PHP doivent être modifiables par le propriétaire, lisibles par un groupe dans lequel se trouve l'utilisateur Apache et éventuellement lisibles par quiconque. Ils n'ont pas besoin d'être exécutables. Idéalement, la plupart des scripts php devraient se trouver en dehors d'un dossier accessible sur le Web, en particulier les fichiers de configuration. De cette façon, même s'il y a un problème avec la configuration d'Apache, vos fichiers php ne seront jamais exposés au Web. Souvent, vous avez juste une page index.php qui appelle require_once () sur un script du répertoire protégé en dehors du dossier accessible sur le Web. Un fichier .htaccess réécrit toutes les demandes entrantes afin qu’elles passent par le fichier index.php, qui utilise ensuite le routeur dans le répertoire protégé pour déterminer ce qu’il faut servir.

9
Bob Baddeley

Vous pouvez confondre les rôles de PHP et du système de fichiers. PHP ne dispose pas d'autorisations de lecture, d'écriture ou d'exécution. Ceux-ci sont gérés par le système de fichiers sous-jacent (ext4, NTFS, etc.).

Vous pouvez utiliser les fonctions PHP telles que is_writable () et is_readable () pour déterminer les autorisations d'un fichier donné, et chmod ( ) pour les changer.

4
George Cummins

Fondamentalement, la plupart des fonctions/méthodes tentant d'écrire dans un fichier dans PHP devraient avoir une idée comme celle-ci:

function writeSomething( $file )
{
    if ( !is_writable( $file ) )
    {
        // attempt to make it writable
        if ( !chmod($file, 0777) )
        {
            // could not make file writable
            // log the error....
            return false;
        }
    }

    // perform the writing here..
}

C'est une bonne idée de vous assurer que vous pouvez accéder au fichier avant d'essayer de le faire, car il est toujours préférable de montrer à l'utilisateur une erreur personnalisée telle que "Il y avait un problème" plutôt que d'afficher une erreur classique PHP telle que - "Impossible d'écrire dans le fichier ..." ou quelque chose comme ça ...

J'espère pouvoir aider!

1
David Conde

755 pour les dossiers et 644 pour php et autres fichiers.

1
Prateek

PHP en soi est un langage de script. Je suppose que vous souhaitez connaître les meilleures autorisations de fichiers dans les dossiers Web.

Cela dépend vraiment de ce que vous essayez d’obtenir avec le serveur avec lequel vous vous trouvez, de ce à quoi les utilisateurs distants devraient avoir accès, etc.

Si vous utilisez le serveur uniquement à des fins de publication de pages Web via des scripts PHP, les autorisations de fichiers 755 fonctionneront bien (et non pas 655), ainsi le propriétaire du PHP _ a le plein contrôle du fichier alors que le reste du monde (y compris le groupe dans lequel se trouve l’utilisateur) ne pourra que lire le fichier et l’exécuter.

Pour une sécurité améliorée, utilisez ensuite les autorisations de fichier 711 afin que le monde ne puisse, au mieux, qu'exécuter le fichier. En outre, envisagez d’ajouter des fonctionnalités au serveur Apache afin que celui-ci permute l’utilisateur à chaque demande pour une sécurité encore accrue. Par cela, je veux dire ajouter un module mod_ruid2, ou un module suPHP, etc.

0
Mike

Les autorisations couramment utilisées pour Cpanel sont:

  1. Permissions des dossiers: 755
  2. Autorisation de fichier générale: 644
  3. Permissions du fichier de configuration: 444
0
Shreyas

0655 est le meilleur niveau de permission. Il n'y a vraiment aucune raison de modifier vos fichiers ci-dessus. Bien sûr, il peut y avoir un dossier, ici ou là, qui nécessite des autorisations en écriture, mais pour tout le reste, 0655 fonctionnera.

En guise de conseil, assurez-vous que tous vos fichiers appartiennent à Apache. Cela peut facilement être changé si vous transférez vos fichiers sur le serveur. Assurez-vous donc de les définir sur Apache pour les sites de production. Cela éliminera beaucoup de problèmes de permission lors de l’exécution d’un navire aussi étroit.

0