web-dev-qa-db-fra.com

Comment faire une page web php pour accéder au fichier dans le répertoire / root?

J'utilise Linux 12.04, Apache et php y sont installés.Je veux accéder à un fichier texte dans/root/folder.Je suis vraiment confondu avec les permissions.Le script php que j'utilise

<?php
$file = fopen("/root/cr.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached

while(!feof($file))
  {
  echo fgets($file). "<br>";
  }

fclose($file);
?> 

Ce script peut accéder au dossier fichier/var/www mais pas au fichier /root/ip.txt. S'il vous plaît aider et expliquer étape par étape possible.

2
acekapila

J'oublierai les conséquences de cette opération pour la sécurité et je passerai aux choses sérieuses:

Si vous avez fait ls -l /var/www et ls -l /root, vous auriez remarqué que les deux ont des autorisations différentes:

$ ls -l /root/cr.txt
total 2
-rw-r-----  1 root root    0 Jul  9 01:28 cr.txt
$ ls -l /var/www
total 2
-rw-r--r--  1 www-data www-data    0 Jul  9 01:28 somefile

Le /root n'est lisible que par root, tandis que /var/www est lisible par l'utilisateur www-data. Maintenant, si vous vérifiez le processus Apache, vous remarquerez qu'il est exécuté avec l'utilisateur www-data.

$ ps aux | grep Apache www-data 5133 0,0 0,2 6512 1208? R + 10:04 0:00 Apache

Vous essayez maintenant de faire fonctionner Apache avec l'utilisateur www-data en lecture du fichier. Vous pouvez prendre trois mesures:

  1. Déplacez le fichier vers /var/www et modifiez ses autorisations pour que les utilisateurs de www-data puissent le lire.

    mv /root/cr.txt /var/www/
    chown www-data:www-data /var/www/cr.txt
    

    C'est la méthode préférable.

  2. Créez un lien symbolique vers le fichier dans le répertoire /var/www:

    ln -s /root/cr.txt /var/www/
    

    Cela ne garantit pas que votre fichier est lu, dans certains cas.

  3. Ceci est dangereux et ne devrait pas être fait! Ajoutez l'utilisateur www-data au groupe root ou changez le propriétaire du fichier pour qu'il puisse être lu par www-data utilisateurs :

    chown :www-data /root/cr.txt
    ## Or
    Sudo adduser www-data root
    

    Cela ne devrait pas être fait si vous ne comprenez pas les risques!

1
Braiam

Le fichier est-il lisible par des utilisateurs autres que root? Essayez d'ajouter un accès en lecture pour ALL.

Sudo chmod a+r /root/cr.txt
0
etsauer