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
想要成功使用,请注意要满足以下几点:
用户可以使用密钥和密码登录,如果使用密码登录则 sshd_config 里要允许密码登录。
用户的 Shell 必须在 /etc/shells 中,否则无法登录,如果使用的是 /usr/sbin/nologin 请加入到 /etc/shells 中,或为用户指定一个已经在其中的 shell。
用户的 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 条评论
暂无评论,快发表你的评论吧。