sftp utiliza el túnel cifrado ssh, que es más instalable que ftp, y se basa en el servicio ssh que viene con el sistema. A diferencia de ftp, necesita una instalación adicional. El servicio sftp basado en ssh tiene mejor seguridad que ftp (Cuenta sin texto sin formato transmisión de contraseñas) y una cómoda gestión de derechos (restringiendo el directorio activo del usuario).
1. Abra la cuenta sftp, para que el usuario solo pueda operar archivos a través de sftp, pero no ssh al servidor
2. Limite el directorio activo del usuario, para que el usuario solo pueda estar activo en el directorio especificado, usando la configuración de ChrootDirectory de sftp
Comprobar la versión ssh
ssh -V
Añadir grupo de usuarios sftp
agregar grupo sftp
crear usuario sftp
useradd -g sftp -s /bin/false baksftp
-s /bin/false : no permite inicios de sesión de shell. -g sftp : Únete al grupo sftp
configurar la clave
contraseña baksftp
Establecer directorio activo
mkdir -p /datos/sftp/baksftp
Configurar los permisos del directorio Chroot
# Nota: si este directorio se utiliza para el directorio activo chroot subsiguiente, el propietario del directorio debe ser root chown root:sftp /data/sftp/baksftp chmod 755 /data/sftp/baksftp
Posibles problemas con chroot :
Debido a que chroot cambiará el directorio raíz de la sesión a este, es probable que el inicio de sesión ssh solicite /bin/bash: No existe tal archivo o error de directorio, porque la ruta de esta sesión será [chroot]/bin/bash
Especificar como el directorio de inicio del usuario del grupo sftp
usermod -d /datos/sftp/baksftp baksftp
Modificar el archivo de configuración ssh
vi /etc/ssh/sshd_config
Configuración básica de inicio de sesión remoto ssh
# Habilitar verificación PasswordAuthentication sí # Deshabilitar inicio de sesión con contraseña vacía PermitEmptyPasswords no # Habilitar inicio de sesión remoto PermitRootLogin sí
Ahora puede usar ssh para iniciar sesión de forma remota en el servidor
configurar ftp
# Modifique la configuración del subsistema, use el servicio internal-sftp que viene con el sistema para cumplir con los requisitos # Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
Subsistema se refiere al submódulo de ssh, el módulo sftp está habilitado aquí, y el sftp interno que viene con el sistema se utiliza para proporcionar este servicio. De hecho, después de configurar esto, puede iniciar sesión con la cuenta ssh o sftp con el cliente ftp.
Si desea que el usuario inicie sesión en el servidor solo a través de sftp pero no de ssh, y para limitar el directorio activo del usuario, continúe viendo la configuración a continuación
# Restricciones en el usuario de inicio de sesión Match Group sftp ChrootDirectory /data/sftp/%u # También puede usar %h para representar el directorio de inicio del usuario %u para representar el nombre de usuario ForceCommand internal-sftp # Usar a la fuerza el servicio internal-sftp que viene con el sistema, para que el usuario solo use el modo ftp para iniciar sesión AllowTcpForwarding no X11Forwarding no
Coincidir con [Usuario|Grupo] nombre de usuario|nombre de grupo :
Coincidencia [Usuario|Grupo] sftp Esta es la configuración de permisos para el usuario de inicio de sesión. La coincidencia funcionará en el usuario o grupo de usuarios coincidentes y es superior a la configuración general de elementos de ssh.
Directorio chroot :
El directorio activo del usuario puede usar %h para identificar el directorio de inicio del usuario y %u para representar el nombre de usuario. Cuando el usuario coincidente inicia sesión, el directorio raíz de la sesión cambiará a este directorio. He aquí dos cuestiones a las que hay que prestar especial atención:
1. Para todos los directorios en la ruta chroot, el propietario debe ser root y la autoridad máxima es 0755, a la que se debe prestar atención. Entonces, si inicia sesión como usuario no root, debemos crear un nuevo directorio en chroot que el usuario que inició sesión tenga permiso para operar.
2. Una vez que se configura chroot, el directorio raíz "/" de la sesión del usuario correspondiente se cambiará a este directorio cuando el usuario correspondiente inicie sesión. Si usa ssh en lugar del protocolo sftp para iniciar sesión en este momento, probablemente se le solicita: /bin/bash : No existe tal archivo o directorio
Para el usuario que inicia sesión en este momento, el directorio raíz "/" en la sesión se ha cambiado al directorio chroot establecido, a menos que chroot sea el directorio "/" del sistema, de lo contrario no habrá comando bash bajo el chroot/bin en este momento Al igual que el conjunto de parámetros -s /bin/false al agregar un usuario, el tipo de comando inicial /bin/false del shell naturalmente no puede iniciar sesión de forma remota a través de ssh.
Comando de fuerza :
El comando inicial que se usa cuando se obliga a un usuario a iniciar sesión en una sesión. Si este elemento está configurado como se indicó anteriormente, el usuario coincidente solo puede iniciar sesión con el protocolo sftp, pero no puede iniciar sesión con ssh, y se le preguntará: Este servicio solo permite conexiones sftp.
Crear un nuevo directorio de carga
Cree un nuevo directorio para que el usuario stp baksftp cargue archivos. El propietario de este directorio es baksftp, todos los grupos son sftp, el propietario tiene permiso de escritura y todos los grupos no tienen permiso de escritura.
mkdir /data/sftp/baksftp/upload chown baksftp:sftp /data/sftp/baksftp/upload chmod 755 /data/sftp/baksftp/upload
Reinicie el servicio sshd
# Cerrar selinux setenforce 0 # Reiniciar el servicio sshd systemctl reiniciar sshd.service
iniciar sesión en sftp
sftp -P22 baksftp@IP