当前位置:首页 > Linux > 正文

Linux如何开启SFTP服务

在Linux中启用SFTP服务通常只需确保OpenSSH服务器已安装并运行,SFTP默认集成在SSH中,因此启动 sshd服务后,用户即可使用SFTP客户端连接,通过编辑 /etc/ssh/sshd_config可配置用户访问权限或限制目录。

在Linux系统中开启SFTP(SSH File Transfer Protocol)服务是管理文件传输的安全高效方式,作为OpenSSH的子系统,SFTP默认通过SSH协议加密传输数据,无需额外安装独立服务,以下是详细操作指南:


前置条件

  1. 已安装OpenSSH服务器
    执行命令检查:

    ssh -v 2>&1 | grep "OpenSSH"  # 查看客户端版本(多数系统默认安装)
    systemctl status sshd         # 检查SSH服务状态

    若未安装,使用对应命令安装:

    # Debian/Ubuntu
    sudo apt update && sudo apt install openssh-server -y
    # CentOS/RHEL
    sudo yum install openssh-server -y
  2. 防火墙配置
    确保防火墙允许SSH端口(默认为22):

    sudo ufw allow 22/tcp        # Ubuntu UFW
    sudo firewall-cmd --permanent --add-service=ssh && sudo firewall-cmd --reload  # CentOS Firewalld

配置SFTP访问

SFTP通过SSH服务运行,但需限制用户权限以增强安全性,以下是两种常用场景:

场景1:允许普通SSH用户使用SFTP

  • 默认配置
    所有拥有SSH登录权限的用户均可使用SFTP,无需额外设置。
    验证连接(以用户username为例):

    sftp username@服务器IP

场景2:创建仅限SFTP的受限用户(推荐)

  1. 创建用户组与用户

    Linux如何开启SFTP服务  第1张

    sudo groupadd sftpusers       # 创建专用用户组
    sudo useradd -m -G sftpusers -s /sbin/nologin sftp_user  # 禁止Shell登录
    sudo passwd sftp_user         # 设置密码
  2. 修改SSH配置文件
    编辑/etc/ssh/sshd_config

    sudo nano /etc/ssh/sshd_config

    在文件末尾添加:

    Match Group sftpusers        # 针对sftpusers组用户
       ChrootDirectory /home/%u  # 限制用户到其家目录(%u为用户名)
       ForceCommand internal-sftp  # 强制使用SFTP,禁用Shell
       PermitTunnel no
       AllowAgentForwarding no
       AllowTcpForwarding no
       X11Forwarding no
  3. 设置目录权限

    sudo chown root:root /home/sftp_user      # 根目录所有者设为root
    sudo chmod 755 /home/sftp_user            # 根目录需root可写
    sudo mkdir /home/sftp_user/upload         # 创建用户可写的子目录
    sudo chown sftp_user:sftpusers /home/sftp_user/upload
  4. 重启SSH服务

    sudo systemctl restart sshd

验证SFTP服务

  • 连接测试
    使用客户端(如FileZilla或终端命令):

    sftp sftp_user@服务器IP

    输入密码后应进入受限环境,仅可访问/upload目录。

  • 错误排查
    检查日志:

    tail -f /var/log/auth.log     # Debian/Ubuntu
    tail -f /var/log/secure       # CentOS/RHEL

安全加固建议

  1. 禁用root登录
    sshd_config中设置:

    PermitRootLogin no
  2. 启用密钥认证
    生成密钥对:

    ssh-keygen -t ed25519

    将公钥id_ed25519.pub内容追加到用户~/.ssh/authorized_keys

  3. 更改默认端口
    修改sshd_config中的Port值(如2222),并更新防火墙规则。

  4. 定期更新系统

    sudo apt upgrade -y    # Debian/Ubuntu
    sudo yum update -y     # CentOS/RHEL

常见问题解决

  • 连接被拒绝:检查sshd服务状态及防火墙设置。
  • 目录权限错误:确保ChrootDirectory由root所有且权限为755
  • 用户无法上传文件:确认子目录(如upload)归用户所有且权限为755775

引用说明:本文配置参考OpenSSH官方文档(openssh.com/manual)及Linux权限管理标准,关键操作已通过Ubuntu 22.04/CentOS 7+环境验证,符合最小权限原则(Principle of Least Privilege),建议生产环境结合Fail2ban等工具增强防护。

0