¿Cómo puedo configurar el servidor openSSH SFTP en Linux?

10

Quiero configurar sftp-server para compartir un directorio pero no sé cómo modificarlo /etc/ssh/sshd_config.

Mis requisitos son:

1) El inicio de sesión no utilizará certificados, solo contraseña (es decir, la autorización utiliza el método de contraseña)

2) Quiero iniciar sesión con el usuario: ftp, contraseña: foo y compartir directorio / home / ftp.

3) Tengo una aplicación que de vez en cuando necesita descargar un archivo del servidor, no necesito iniciar sesión con un cliente operativo completo.

Hasta ahora agregué las siguientes líneas a / etc / ssh / sshd_config:

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

Todo lo demás está comentado.

/home/ftp es un directorio vacío en este momento.

Access funciona si intento descargar un archivo usando credenciales de root, pero no funciona si uso las credenciales de ftp. ¿Necesito configurar un shell de inicio de sesión? ¿Necesito poblar / home / ftp de alguna manera?

EDITAR: Este es mi registro 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

* El cliente se cuelga aquí (hasta que se agote el tiempo de espera) *

Tenga en cuenta, nuevamente, que si inicio sesión como "root", el archivo se descarga correctamente. También se descarga correctamente si comento las últimas tres líneas del archivo de configuración (es decir, la Matchlínea y las siguientes 2).

Emiliano
fuente
¿Has intentado especificar solo una de las opciones de coincidencia ? ¿Qué sucede cuando usas un cliente SFTP real? ¿Todavía puede conectarse usando un cliente SSH normal, por ejemplo ssh, o PuTTY en Windows? ¿Qué versión de OpenSSH estás usando?
Daniel Beck

Respuestas:

7

Debe asegurarse de que /home/ftpes propiedad de rootese grupo y de otros que no tienen permisos de escritura, por ejemplo chmod 0755. Debe agregar subdirectorios para ftpagregar archivos.


También necesita el internal-sftpsubsistema, de lo contrario, debe proporcionar un chrootentorno adecuado en /home/ftp:

Subsystem sftp internal-sftp

Para no permitir todos los tipos de inicio de sesión sin contraseña, ingrese

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

Estos se activan por defecto.

Daniel Beck
fuente
Reemplazar mi línea de subsistema con la suya (y configurar el permiso del directorio) hace que mi cadena de error desaparezca, sin embargo, mis programas de cliente se "cuelgan" y no descargan el archivo que necesito (puedo descargarlo usando credenciales de root). ¿Hay alguna forma de hacer que la salida sshd sea más detallada?
Emiliano
Intente agregar un solo elemento de configuración a su vez y pruebe si puede conectarse para determinar cuál de las opciones tiene la culpa o si es quizás una combinación de opciones. Deberías tener algo de salida /var/log/secure, al menos ahí es donde lo obtengo en mi sistema.
Daniel Beck
He elevado mi nivel de inicio de sesión utilizando la directiva LogLevel. Puedo leer la cuerda adentro /var/log/messages. Tengo lo siguiente: Failed none for ftp [...]seguido de Accepted password for ftp [...]y User child is on pid 7658. El cliente cuelga y luego agota el tiempo de espera
Emiliano
@happy_emi Considere agregar esa información a su pregunta.
Daniel Beck
Parece que fue un problema de permisos de directorio. sshd_configestuvo bien.
Emiliano