J'ai un serveur assez standard configuré avec Apache et PHP. Une application que j'exécute crée des fichiers qui appartiennent à l'utilisateur Apache www-data. Les fichiers que je télécharge via SFTP appartiennent à mon propre utilisateur charlesr. Tous les fichiers font partie du www-datagroupe. Mon problème est que je ne peux pas modifier ou écraser les fichiers via SFTP qui appartiennent à www-data, même s'il charlesrfait partie du www-datagroupe. Je peux modifier les fichiers sans problème via une session SSH.
Je ne sais donc pas quoi faire. Comment donner à ma session SFTP les autorisations pour modifier les www-datafichiers possédés?
Pour un peu de contexte, voici les notes que j'ai écrites moi-même lors de la configuration du serveur:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Et puis je continue à m'expliquer ce que signifie le réglage du bit SGID (c'est-à-dire que tous les fichiers créés dans font automatiquement /var/wwwpartie du www-datagroupe).
MISE À JOUR
Il semble que le problème soit dû à l'application elle-même ou, plus précisément, au cadre d'application ( Kohana ) définissant certains fichiers qu'elle écrit sur 0644 (rw-r - r--); c'est-à-dire non inscriptible en groupe. Ceci, couplé au fait que les fichiers appartiennent également à, www-datasignifiait que je ne pouvais pas modifier les fichiers via SFTP lors de la connexion en tant que charlesr. Je ne sais pas pourquoi j'ai pu éditer les fichiers via SSH. Je suppose que j'ai dû utiliser sudo.
Voici la stratégie d'autorisations que j'utilise maintenant grâce à l' aide infatigable de Marty Fried , qui a souligné les failles de ma stratégie précédente et m'a également aidé à naviguer dans le monde des autorisations Linux jusqu'à ce que je le trouve enfin. Merci Marty!
Présentation
- Les fichiers et répertoires
/var/wwwdoivent appartenir àroot:webmasters - Tous les développeurs doivent être membres du
webmastersgroupe - Tous les répertoires dans
/var/wwwdoivent être définis sur:2775ouu=rwx,g=rwxs,o=rx(rwxrwx-rx) - Tous les fichiers
/var/wwwdoivent être définis sur:0664ouug=rw,o=r(rw-rw-r--)
Les éléments suivants devraient appartenir à www-data:webmasters(c'est-à-dire que ce sont les répertoires sur lesquels Apache doit pouvoir écrire):
- application / cache
- application / journaux
- télécharger
- client_helpers / upload
COMMENT
Pour configurer des autorisations sur /var/wwwla provenance de vos fichiers par défaut:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[etc...]
Maintenant, déconnectez-vous et reconnectez-vous pour que les modifications prennent effet.
L'ensemble de commandes précédent effectue les opérations suivantes:
- Créez un nouveau groupe appelé
webmasters; tous les utilisateurs qui ont besoin d'un accès en écriture aux fichiers de l'application seront ajoutés à ce groupe. - ajoute l'utilisateur actuel (
$USER) auwebmastersgroupe. - change le propriétaire de
/var/wwwenrootet le groupe enwebmastersgroupe. - ajoute 664 autorisations (-rw-rw-r--) à tous les fichiers de
/var/www. - ajoute 775 autorisations (drwxrwxr-x) à tous les répertoires de
/var/www. - active le bit SGID
/var/wwwet tous les répertoires qu'il contient; ce dernier point mérite d'être expliqué. Notez également que vous pouvez également mettre un 2 à l'avant de votre octal chmod (par exemple 2644) pour faire la même chose. - définit le propriétaire sur
www-data(l'utilisateur d'Apache) et le groupe du répertoire fourni surwebmaster. Cela garantit que le répertoire est accessible en écriture par Apache et toute personne duwebmastersgroupe. Faites de même pour tous les autres répertoires qui doivent être accessibles en écriture.
/var/wwwsans l'ajouter également à ce groupe?