Je continue à avoir Permission refusée Des erreurs se produisent lorsque l'on tente de télécharger des modifications dans un fichier via SFTP, mais cela fonctionne bien lorsque l'on utilise SSH directement avec le même utilisateur.
Le fichier que j'essaie de télécharger est /srv/www/website/current/app/AppKernel.php
(cependant, l'erreur s'applique actuellement à n'importe quel fichier de mon projet, nous nous en tiendrons à un seul fichier pour garder les choses simples).
Mon premier réflexe a été de me connecter au serveur en tant que même utilisateur et de confirmer que les autorisations fonctionnent.
Après m'être connecté, je vérifie qui je suis.
$ whoami
cp5w
Un site ls -l
révèle les permissions suivantes (extraites à la ligne correspondante)
$ ls -l
-rwxrwxr-x 1 deploy nginx 1523 Nov 11 12:51 AppKernel.php
Vous pouvez voir ici que le propriétaire du fichier est deploy
et le groupe est nginx
. Je peux confirmer l'utilisateur cp5w
est dans le groupe nginx
:
$ groups
opsworks nginx
Donc, en théorie, je devrais être capable d'écrire à AppKernel.php
Oui ? Essayons ça :
$ tail -n 3 AppKernel.php
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}
$ echo "# add line to end of file" >> AppKernel.php
$ tail -n 3 AppKernel.php
}
}
# add line to end of file
Oui, ça marche bien. Aucune erreur. Je ne suis pas en train de devenir fou.
Certaines solutions possibles suggèrent vérifier qu'il y a un groupe-exécutable sur le répertoire parent que j'ai vérifié deux fois, comme suit (à nouveau découpé à la ligne correspondante) :
$ ls -l ..
drwxrwxr-x 6 deploy nginx 4096 Nov 11 15:31 app
J'ai également vérifié problèmes avec les répertoires appartenant au système cependant, je travaille déjà sur un répertoire enfant website
qui partage également le même modèle de permission que le reste du projet :
- détenu par
deploy
- Le groupe est
nginx
- peut lire, écrire et parcourir des répertoires
Maintenant je vais essayer de télécharger (aka modifier) le fichier en utilisant SFTP depuis mon poste de travail. Même utilisateur. Même clé SSH. Même poste de travail. Même serveur. Cibler le même fichier. Juste SFTP maintenant, pas SSH.
psftp> open myserver
login as: cp5w
psftp> cd /srv/www/website/current/app
Remote directory is now /srv/www/website/releases/20151111145342/app
psftp> lcd C:\Users\chris\Source\website\app
New local directory is C:\Users\chris\Source\website\app
psftp> put AppKernel.php
/srv/www/website/releases/20151111145342/app/AppKernel.php: open for write: permission denied
Qu'est-ce qui se passe ? !!
D'autres éléments de réflexion :
- Ça marchait avant. via SFTP il y a quelques jours et je n'ai pas fait de changement dans la configuration du serveur récemment, à ce que je me souvienne.
- Le problème vient-il du fait que j'essaie d'écrire via un lien symbolique ?
- La seule chose que j'ai changée récemment est mon poste de travail qui est maintenant sous Windows et non plus sous Linux. C'est ma punition ? C'est une blague facile. Sérieusement, est-ce que le système d'exploitation de la station de travail peut affecter cela ?
TODO :
- Test à partir d'un autre système d'exploitation de la station de travail
EDIT
J'ai vérifié les journaux SSH pour voir si quelque chose d'important pouvait être ajouté, et voici la sortie provoquée par la tentative de téléchargement (certaines données ont été masquées par des %) :
$ tail -f /var/log/secure
Nov 11 17:46:58 %server% sshd[22455]: Accepted publickey for cp5w from %ip% port %port% ssh2: RSA %fingerprint%
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session opened for user cp5w by (uid=0)
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session closed for user cp5w
J'ai également activé les journaux SFTP en modifiant mon sshd_config et en ajoutant -l INFO
comme suit :
Subsystem sftp internal-sftp -l INFO
Suivi de /var/log/messages
avec les éléments suivants :
$ tail -f /var/log/messages
Nov 11 18:06:57 %server% internal-sftp[23002]: session opened for local user cp5w from [%ip%]
Nov 11 18:06:57 %server% internal-sftp[23002]: opendir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: closedir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: open "/srv/www/website/current/app/AppKernel.php" flags WRITE,CREATE,TRUNCATE mode 0666
Nov 11 18:06:57 %server% internal-sftp[23002]: sent status Permission denied
Nov 11 18:06:57 %server% internal-sftp[23002]: session closed for local user cp5w from [%ip%]