Comment configurer le serveur openSSH SFTP sous Linux?

10

Je veux configurer sftp-server pour partager un répertoire mais je ne sais pas comment le modifier /etc/ssh/sshd_config.

Mes exigences sont:

1) La connexion ne doit pas utiliser de certificats, uniquement un mot de passe (c'est-à-dire que l'autorisation utilise la méthode du mot de passe)

2) Je veux me connecter avec l'utilisateur: ftp, mot de passe: foo et partager le répertoire / home / ftp.

3) J'ai une application qui a besoin de temps en temps de télécharger un fichier depuis le serveur, je n'ai pas besoin de me connecter avec un client pleinement opérationnel.

Jusqu'à présent, j'ai ajouté les lignes suivantes à / etc / ssh / sshd_config:

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

Tout le reste est commenté.

/home/ftp est un répertoire vide pour le moment.

Access fonctionne si j'essaie de télécharger un fichier en utilisant les informations d'identification root, mais cela ne fonctionne pas si j'utilise les informations d'identification ftp. Dois-je définir un shell de connexion? Dois-je remplir / home / ftp d'une manière ou d'une autre?

EDIT: Ceci est mon journal sshd:

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

* Le client se bloque ici (jusqu'à ce qu'une temporisation se produise) *

Veuillez noter, encore une fois, que si je me connecte en tant que "root", le fichier se télécharge correctement. Il se télécharge également correctement si je commente les trois dernières lignes du fichier de configuration (c'est-à-dire la Matchligne et les 2 suivantes).

Emiliano
la source
Avez-vous essayé de spécifier uniquement l'une des options de correspondance ? Que se passe-t-il lorsque vous utilisez un vrai client SFTP? Pouvez-vous toujours vous connecter en utilisant un client SSH normal, par exemple ssh, ou PuTTY sous Windows? Quelle version d'OpenSSH utilisez-vous?
Daniel Beck

Réponses:

7

Vous devez vous assurer qu'il /home/ftpappartient à rootce groupe et à d'autres n'ont pas de droits d'écriture, par exemple chmod 0755. Vous devez ajouter des sous-répertoires pour ftpajouter des fichiers.


Vous avez également besoin du internal-sftpsous - système, sinon vous devez fournir un chrootenvironnement approprié dans /home/ftp:

Subsystem sftp internal-sftp

Pour interdire tous les types de connexion sans mot de passe, entrez

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

Ceux-ci sont activés par défaut.

Daniel Beck
la source
Le remplacement de ma ligne de sous-système par le vôtre (et la définition de l'autorisation de répertoire) fait disparaître ma chaîne d'erreur, mais mes programmes clients "se bloquent" et ne téléchargent pas le fichier dont j'ai besoin (je peux le télécharger en utilisant les informations d'identification root). Existe-t-il un moyen de rendre la sortie sshd plus verbeuse?
Emiliano
Essayez d'ajouter uniquement un élément de configuration à tour de rôle et testez si vous pouvez vous connecter pour déterminer laquelle des options est en cause, ou s'il s'agit peut-être d'une combinaison d'options. Vous devriez avoir une sortie /var/log/secure, au moins c'est là que je l'obtiens sur mon système.
Daniel Beck
J'ai augmenté mon niveau de connexion à l'aide de la directive LogLevel. Je peux lire une chaîne /var/log/messages. J'ai ce qui suit: Failed none for ftp [...]suivi de Accepted password for ftp [...]et User child is on pid 7658. Le client raccroche puis
expire
@happy_emi Envisagez d'ajouter ces informations à votre question.
Daniel Beck
Il semble que ce soit un problème d'autorisations de répertoire. sshd_configétait très bien.
Emiliano