Autorisations de fichier par défaut pour l'utilisateur php www-data

8

J'ai un php installé sur ma machine Ubuntu. La racine Web est/var/www

J'ai défini les autorisations pour ce dossier comme suit:

sudo chown -R ftpuser: www-data / var / www

ftpuser est l'utilisateur que j'ai configuré pour pouvoir ftp vers / var / www depuis une autre machine du réseau. www-data est l'utilisateur php utilise. J'ai revérifié à l'aide whoamide php.

Chaque fois que je télécharge ftp un nouveau fichier sur la machine, le groupe n'a aucune autorisation sur le fichier. Donc, quand j'essaie d'y accéder dans mon navigateur via, on machine-name/new-file.phpme dit que l'autorisation est refusée et je dois aller chercher chmodle nouveau fichier.

Je me demande s'il existe un moyen par défaut pour l'utilisateur / groupe www-data d'avoir des autorisations d'accès aux nouveaux fichiers, donc je n'ai pas à garder chmod à chaque nouveau fichier?

JD Isaacks
la source

Réponses:

6

Vous pouvez utiliser ACL. Pour configurer ACL pour Ubuntu 10.10, montez d'abord les systèmes de fichiers avec l'option acl dans / etc / fstab.

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 par défaut, acl 0 1

sudo mount -o remount,acl /

Créez ensuite un groupe auquel un utilisateur peut appartenir à cet effet.

sudo groupadd developers
sudo usermod -a -G developers $username

L'utilisateur doit se déconnecter et se reconnecter pour devenir membre du groupe de développeurs.

Bien sûr, ne faites pas cela si vous avez du contenu dans le répertoire / var / www que vous voulez, mais juste pour illustrer sa configuration pour démarrer:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

Remplacez ensuite les références à "/ var / www" par "/ var / www / public" dans un fichier de configuration et rechargez.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Si nous voulions restreindre la suppression et le renommage de tous sauf l'utilisateur qui a créé le fichier:

sudo chmod +t /var/www/public

De cette façon, si nous voulons créer des répertoires pour les frameworks qui existent en dehors de la racine du document Apache ou peut-être créer des répertoires inscriptibles par le serveur, c'est toujours facile.

Répertoire des journaux accessibles en écriture Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Répertoire de bibliothèque lisible par Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

la source
Cela a parfaitement fonctionné pour moi, mais je serais intéressé si vous pouviez expliquer ce que les commandes chmod g+set setfaclont fait (et leurs paramètres).
Greg
4

Je suis sûr que vous avez déjà réglé cela, donc c'est pour toute personne ayant une demande similaire

exécutez la commande "changer la propriété" sur votre dossier webroot:

sudo chown manny -R www

Cela vous fera remplacer le propriétaire "manny" par votre nom d'utilisateur, vous permettant d'écrire / lire dans le dossier www

Manny
la source
1

Si votre serveur Web ne peut même pas lire les fichiers, il est très probable que les autorisations de new-file.phpquelque chose comme 600 (lecture et écriture pour le propriétaire). Recherchez un paramètre umask dans votre application FTP et assurez-vous qu'il s'agit de 007.

Si votre application Web doit modifier les fichiers (ou d'autres opérations qui ne peuvent être effectuées que par le propriétaire du fichier), vous avez besoin d'une autre approche. Si vous utilisez Apache, vous devriez envisager d'utiliser le MPM itk . Avec ce module, vous pouvez faire exécuter / ouvrir Apache les fichiers en utilisant le même utilisateur que "ftpuser". Si vous avez besoin de plus d'informations sur ce sujet, ajoutez un commentaire.

Lekensteyn
la source