温馨提示×

centos sftp文件共享设置

小樊
35
2025-12-25 09:23:28
栏目: 智能运维

CentOS SFTP文件共享设置

一 环境准备与基础检查

  • 确认已安装并运行 OpenSSH 服务器,默认端口 22/TCP 可用;必要时放行防火墙。
  • 建议准备一个用于共享的目录结构,例如 /sftp,并按需创建子目录用于读写隔离。
  • 检查 OpenSSH 版本(建议不低于 4.8p1),并确认 22 端口连通性(如 telnet your_ip 22)。
  • 防火墙放行示例(firewalld):firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload

二 快速搭建步骤

  • 安装与启动
    • 安装:sudo yum install -y openssh-server
    • 启动与开机自启:sudo systemctl start sshd && sudo systemctl enable sshd
  • 创建用户与组
    • 创建组:sudo groupadd sftpusers
    • 创建用户(禁止 shell 登录):sudo useradd -g sftpusers -s /sbin/nologin sftpuser
    • 设置密码:sudo passwd sftpuser
  • 准备目录与权限(按用户隔离)
    • 根目录(用于 chroot):sudo mkdir -p /sftp/sftpuser
    • 根目录必须 root:root 且 755sudo chown root:root /sftp/sftpuser && sudo chmod 755 /sftp/sftpuser
    • 可写子目录:sudo mkdir /sftp/sftpuser/upload && sudo chown sftpuser:sftpusers /sftp/sftpuser/upload && sudo chmod 755 /sftp/sftpuser/upload
  • 配置 SSH(启用 internal-sftp 并限制用户)
    • 编辑 /etc/ssh/sshd_config,在文件末尾加入:
      Subsystem sftp internal-sftp
      
      Match Group sftpusers
          ChrootDirectory /sftp/%u
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
          PasswordAuthentication yes
      
    • 说明:%u 自动替换为用户名,实现按用户隔离;ChrootDirectory 指定的目录及其上级必须为 root 所有且不可写
  • 使配置生效
    • 检查语法:sudo sshd -t
    • 重启服务:sudo systemctl restart sshd
  • 客户端连接测试
    • 命令行:sftp sftpuser@your_server_ip
    • 图形客户端(FileZilla/WinSCP):协议选 SFTP,主机填服务器 IP,端口 22

三 常见共享场景配置

  • 多用户共享同一目录(只读共享,集中维护)
    • 创建共享目录:sudo mkdir -p /sftp/shared && sudo chown root:sftpusers /sftp/shared && sudo chmod 755 /sftp/shared
    • 为每个用户创建可写子目录:sudo mkdir /sftp/shared/upload && sudo chown sftpuser:sftpusers /sftp/shared/upload && sudo chmod 755 /sftp/shared/upload
    • 用户 chroot 到各自目录(如 /sftp/sftpuser),通过上层共享目录进行只读访问与各自上传。
  • 将系统其他目录“挂载”到用户 chroot 内(避免使用软链)
    • 示例:sudo mount --bind /data/reports /sftp/sftpuser/reports
    • 写入 /etc/fstab 持久化(按需):/data/reports /sftp/sftpuser/reports none bind 0 0
    • 说明:chroot 环境下 软链接通常不可用,推荐使用 mount --bind 将目标目录映射到 chroot 内。

四 权限与故障排查要点

  • 权限规则
    • ChrootDirectory 指定路径的每一级目录都必须是 root 拥有且不可写(通常 755);用户的可写目录放在其下,并 chown 给相应用户/组。
    • 常见报错如 “Network error: Software caused connection abort” 多与 chroot 目录权限不符有关,需确保 root:root 且 755
  • SELinux
    • 若启用 SELinux,必要时调整策略或临时测试:sudo setenforce 0(测试后请恢复为 Enforcing 并采用正确的 SELinux 策略/布尔值)。
  • 日志与语法
    • 修改配置后先执行 sudo sshd -t 检查语法,再重启 sshd;查看日志:journalctl -u sshd -f/var/log/secure
  • 连接与端口
    • 确认 22/TCP 未被占用且防火墙放行;客户端可用 sftp sftpuser@ip 或 FileZilla/WinSCP 测试上传下载。

五 安全加固建议

  • 禁用不必要功能:在 Match 段保持或显式设置 ForceCommand internal-sftpAllowTcpForwarding noX11Forwarding no
  • 使用 SSH 密钥认证 替代口令(在用户家目录 .ssh/authorized_keys 部署公钥),并禁用密码登录(在需要更严格时设置 PasswordAuthentication no)。
  • 仅允许 SFTP 访问:通过 Match Group sftpusers 限制范围,禁止该组用户获得 shell。
  • 定期更新 OpenSSH 与系统补丁,最小化对外开放端口,仅允许可信来源 IP(结合防火墙/安全组)。

0