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.
la source
/var/www
sans l'ajouter également à ce groupe?/var/www
donc je pensais que donne un accès groupewww-data
et de faire à chacun un membre de ce groupe serait une bonne solution. Je peux maintenant voir le problème d'Apache d'être capable d'écraser n'importe quel fichier là-dedans, cependant. Étant donné que seulement 2 développeurs (dont moi-même) ont accès au code, il est relativement sûr à court terme.J'ai remarqué que tu n'avais pas utilisé
chown
.Pour définir correctement la propriété des fichiers / dossiers, vous pouvez définir l'ensemble du répertoire de cette façon:
chown -R www-data:www-data
Cela définit la propriété du groupe
www-data
et de l'utilisateurwww-data
En outre, vous pouvez le faire comme solution de contournement temporaire:
chmod 777 /var/data/<filename>
ouchmod 777 /var/data/<foldername>
modifiez le ou les fichiers selon vos besoins, puis
chmod 644 /var/data/<filename>
ouchmod 755 /var/data/<foldername>
Soyez prudent d'utiliser le commutateur "-R", car il modifie également les autorisations de tous les sous-fichiers et dossiers.
664 correspond aux autorisations de fichier standard Apache et 755 aux autorisations de dossier standard.
J'espère que cela t'aides :)
Étoile
la source
/var/data
? De plus, quel répertoire suggérez-vous d'utiliser la commandechown -R www-data:www-data
? Espérons que non/var/www
.