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-data
groupe. Mon problème est que je ne peux pas modifier ou écraser les fichiers via SFTP qui appartiennent à www-data
, même s'il charlesr
fait partie du www-data
groupe. 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-data
fichiers 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/www
partie du www-data
groupe).
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-data
signifiait 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/www
doivent appartenir àroot:webmasters
- Tous les développeurs doivent être membres du
webmasters
groupe - Tous les répertoires dans
/var/www
doivent être définis sur:2775
ouu=rwx,g=rwxs,o=rx
(rwxrwx-rx) - Tous les fichiers
/var/www
doivent être définis sur:0664
ouug=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/www
la provenance de vos fichiers par défaut:
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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
) auwebmasters
groupe. - change le propriétaire de
/var/www
enroot
et le groupe enwebmasters
groupe. - 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/www
et 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 duwebmasters
groupe. Faites de même pour tous les autres répertoires qui doivent être accessibles en écriture.
/var/www
sans l'ajouter également à ce groupe?