3 votes

SFTP permission refusée mais SSH fonctionne bien

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%]

1voto

Cla Points 53

Je me demande si vous utilisez Selinux et si cela peut avoir un rapport avec votre problème. Qu'est-ce que getenforce ou sestatus montrent, le cas échéant ? Si vous utilisez enforcing, que se passe-t-il si vous passez à permissive ?

Si non, pouvez-vous tester et prouver quel compte utilisateur sftp utilise pour écrire des fichiers en votre nom ? En principe, ce devrait être cp5w mais est-ce le cas en réalité ?

Enfin, vous pouvez constater que chroot ne joue pas le jeu. Est-ce que cela fonctionne sans chroot ?

Bonne chance, M. Willmott.

1voto

Sukhjinder Singh Points 1924

Le problème principal est que votre serveur SFTP nécessite une authentification par clé SSH pour autoriser correctement les connexions. Vous avez mentionné l'utilisation de FileZilla, j'ai donc écrit cette réponse comme telle.

Dans ce cas, vous pouvez l'utiliser pour les clés SSH non protégées par un mot de passe :

  1. Ouvrez le client FileZilla.
  2. En haut de l'écran d'accueil, cliquez sur Modifier et sélectionnez Paramètres.
  3. Dans la partie gauche du menu, développez la section Connexion et sélectionnez SFTP.
  4. Cliquez sur le bouton [Add keyfile...], parcourez les répertoires de votre machine locale et sélectionnez votre fichier de clé privée. et sélectionnez votre fichier de clé privée.
  5. Ensuite, toujours en haut de l'écran d'accueil de FileZilla, cliquez sur Fichier et sélectionnez Site Manager.
  6. Enfin, dans la partie gauche du Site Manager, cliquez sur le bouton New Site et tapez un nom unique sous Mes sites qui vous permettra d'identifier facilement ce serveur distant à l'avenir. d'identifier facilement ce serveur distant particulier à l'avenir.
  7. Maintenant, sous l'onglet Général, remplissez les champs Hôte (avec une adresse IP ou un nom de famille) et Port (par défaut 22). ou FQDN) et Port (22 par défaut).
  8. Dans le menu déroulant Protocole, sélectionnez SFTP - SSH File Transfer. protocole.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X