服务器怎么接收sftp?

SFTP(SSH File Transfer Protocol)是建立在SSH(安全外壳协议)之上的一个安全文件传输协议,要“接收SFTP”,核心就是配置好服务器的SSH服务,绝大多数Linux/Unix服务器和macOS系统都自带SSH服务,这也意味着它们天生就具备了提供SFTP服务的能力。

下面我将分步骤详细说明如何配置。

核心原理

SFTP是SSH的一个子系统(sftp-server),当客户端通过SFTP连接时,SSH守护进程(sshd)会启动这个子系统来处理文件传输请求,我们不需要单独安装SFTP服务器软件,只需要配置SSH。

详细配置步骤(以Linux为例)

以下步骤假设您拥有服务器的root或sudo权限。

步骤一:检查SSH服务是否已安装并运行

1、检查SSH服务状态

    systemctl status ssh
    # 或者,在某些系统上可能是sshd
    systemctl status sshd

如果看到active (running),说明服务已在运行,如果未安装,请先安装(在Ubuntu上:sudo apt update && sudo apt install openssh-server)。

步骤二:配置SSH以启用SFTP(关键步骤)

SSH的主配置文件是/etc/ssh/sshd_config,我们需要编辑这个文件。

1、备份配置文件(好习惯):

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

2、编辑配置文件

    sudo nano /etc/ssh/sshd_config

3、确保SFTP子系统已启用(通常默认是开启的):

找到类似下面这行,确保它没有被注释掉(行首没有#):

    Subsystem sftp /usr/lib/openssh/sftp-server

在某些新版本中,可能会使用内部的sftp-server:

    Subsystem sftp internal-sftp

一般情况下,无需修改此行。

步骤三:创建专用的SFTP用户(为了安全,强烈推荐)

为了安全起见,最好不要让SFTP用户拥有完整的系统shell访问权限,我们可以创建一个只能用于SFTP、不能SSH登录的用户。

1、创建用户组(可选,便于管理多个SFTP用户):

    sudo groupadd sftpusers

2、创建新用户,并指定其主目录和禁止shell登录:

    sudo useradd -g sftpusers -d /home/sftpuser -s /sbin/nologin sftpuser

-g sftpusers将用户添加到sftpusers 组。

-d /home/sftpuser设置用户的主目录。

-s /sbin/nologin设置用户的登录shell为/sbin/nologin,这将阻止其获得SSH shell。

3、设置用户密码

    sudo passwd sftpuser

4、创建并设置主目录权限

    sudo mkdir -p /home/sftpuser
    sudo chown root:root /home/sftpuser  # 将目录的所有者改为root,增强安全
    sudo chmod 755 /home/sftpuser        # root可读写执行,其他用户只读执行

关键点:为了让ChrootDirectory(下一步会配置)正常工作,目录的所有者必须是root,并且其他用户不能有写权限。

5、在用户主目录下创建用户实际可以操作的子目录

    sudo mkdir /home/sftpuser/files
    sudo chown sftpuser:sftpusers /home/sftpuser/files
    sudo chmod 755 /home/sftpuser/files

用户sftpuser 只能在files 目录下上传、下载和删除文件。

步骤四:配置Chroot监狱(增强安全性)

“Chroot监狱”能将用户的活动范围限制在其主目录内,使其无法访问服务器上的其他文件系统,这是SFTP配置中非常重要的安全措施。

/etc/ssh/sshd_config 文件的末尾添加以下配置:

Match Group sftpusers
    ChrootDirectory /home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Match Group sftpusers这个配置块只对属于sftpusers 组的用户生效。

ChrootDirectory /home/%u将用户限制在其主目录(/home/用户名)中。%u 是一个变量,代表用户名。

ForceCommand internal-sftp强制这些用户连接时只能使用SFTP,即使他们尝试启动其他命令也会被拒绝。

AllowTcpForwarding noX11Forwarding no禁用端口转发和X11转发,进一步减少攻击面。

步骤五:重启SSH服务使配置生效

1、检查配置文件语法是否正确

    sudo sshd -t

如果没有输出,说明语法正确。

2、重启SSH服务

    sudo systemctl restart sshd

步骤六:测试SFTP连接

您可以从任何SFTP客户端进行测试。

使用命令行客户端

    sftp sftpuser@你的服务器IP地址

输入密码后,您应该会看到类似sftp> 的提示符,尝试pwdls 等命令,确认您被限制在/home/sftpuser 目录下,并且可以在files 目录中进行操作。

使用图形化客户端(推荐)

FileZilla(跨平台,免费)

WinSCP(Windows)

Cyberduck(macOS)

Transmit(macOS)

在客户端中,选择协议为SFTP,输入服务器IP地址、用户名(sftpuser)和密码即可连接。

防火墙设置

如果您的服务器开启了防火墙(如ufwfirewalld),请确保SSH端口(默认为22)是开放的。

对于ufw(Ubuntu)

    sudo ufw allow ssh
    # 或者直接允许22端口
    sudo ufw allow 22/tcp

要让服务器“接收SFTP”,您需要:

1、确保SSH服务正常运行

2、创建专用的SFTP用户,并限制其shell访问。

3、配置SSH(sshd_config,通过Match 块为SFTP用户启用Chroot监狱,增强安全性。

4、正确设置目录权限,这是Chroot能正常工作的关键。

5、重启SSH服务测试连接

按照以上步骤操作,您就可以成功搭建一个安全、可用的SFTP服务器了,如果您在某个步骤遇到问题,可以查看SSH的日志文件(通常是/var/log/auth.log/var/log/secure)来排查错误。

文章摘自:https://idc.huochengrm.cn/fwq/16661.html

评论