使用 SFTP 代替 FTP

Pader2020年5月14日 发表于 系统与硬件 ftp sftp chroot

SFTP 通过 SSH 建立加密连接,比 FTP 具有更好的安全性和更简单的协议特征(单连接和端口),如果不是因为加密甚至拥有更好的性能。

正常情况下我们直接用 SSH 的账号方式即可连接 SFTP,但这时用户是可以见到整个系统的目录的,如果想让用户通过 SFTP 登录后根目录在指定目录,应该要怎么做呢。

首先配置指定用户使用 sftp 登录配置

  • ChrootDirectory 指定登录后的目录(%h 代表用户 Home 目录),也可以指定其它目录。

  • ForceCommand 设置为 internal-sftp 才能对 sftp 的用户进行正常 chroot,否则默认的 sftp 会要求 chroot 的目录内拥有一套完整的系统基础命令环境。

  • PasswordAuthentication yes 单独允许此用户使用密码登录,如果全局中已经允许则此处无需设置。

  • 剩下的几项则主要是安全设置,如不允许用于 sftp 的账号进行网络转发代理等。

/etc/ssh/sshd_config

Match User www
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication yes
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no

想要成功使用,请注意要满足以下几点:

  1. 用户可以使用密钥和密码登录,如果使用密码登录则 sshd_config 里要允许密码登录。

  2. 用户的 Shell 必须在 /etc/shells 中,否则无法登录,如果使用的是 /usr/sbin/nologin 请加入到 /etc/shells 中,或为用户指定一个已经在其中的 shell。

  3. 用户的 SFTP Chroot 目录必须是归属于 root:wheel 且权限是 755 (仅 root 可写),且向上的每一层目录都得至少是这个权限才能进行 chroot,否则会报 “sshd[3319]: fatal: bad ownership or modes for chroot directory ..” 的错误。

第 3 条的限制可能导致非 root 用户无法在根目录进行写入,但可以在其它拥有权限的目录进行相关操作,我们可以在每个用户目录下建立属于该用户的子目录,实际业务指向子目录即可,如下:

[root]  /data/
├── [root]  pader
│   ├── [pader]  files
│   └── [pader]  www-root
├── [root]  unbound
│   ├── [unbound]  files
│   └── [unbound]  www-root
└── [root]  www
    ├── [www]  files
    └── [www]  www-root

在使用过程中建议做好 SSH 的安全防护,使用防火墙针对 IP 做好限制,或针对暴力破解做一些防范。

评论 共有 0 条评论

暂无评论,快发表你的评论吧。