linux 配置sftp服务器

1. 创建一个sftp组

groupadd sftp

2. 创建一个用户名为 test 密码为 test123456 的用户

useradd –g sftp –s /bin/false test 
passwd test 

3. 设置用户的家目录

usermod -d  /var/www/html/cms/ test

4. 更改ssh配置

vim /etc/ssh/sshd_config
找到如下这行,用#符号注释掉。
# Subsystem      sftp    /usr/libexec/openssh/sftp-server
#限定只有sftp组的才能访问
Match Group sftp 
#设定属于用户组sftp的用户访问的根文件夹 (%u 用户)                   
ChrootDirectory /var/www/html/cms/
###强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录###shell执行(shell -c)。这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。
###这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。
ForceCommand    internal-sftp
###是否允许TCP转发,默认值为"yes", 禁止TCP转发并不能增强安全性,除非禁止了用户###对shell的访问,因为用户可以安装他们自己的转发器。
AllowTcpForwarding no  
###是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器
AllowTcpForwarding no  

5. 设置Chroot目录权限

chown root:sftp /var/www/html/cms
chmod 755 /var/www/html/cms

6. 重启sshd服务

systemctl restart sshd

问题查找:

如果sshd重启失败运行命令 (sshd -t)查看具体的错误原因。

如果客户端连接不上, 可以增加日志

###修改/etc/ssh/sshd_config 增加日志记录(追加后面的内容)
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f local5
LogLevel INFO
###修改/etc/rsyslog.conf  文件最后增加一行
auth,authpriv.*,local5.* /var/log/sftp.log
### 重启sshd, rsyslog服务
systemctl restart sshd
systemctl restart rsyslog
### 查看日志
tail -f /var/log/sftp.log

常见问题

### sshd -t
/etc/ssh/sshd_config line 149: Directive 'UseDNS' is not allowed within a Match block
#将UseDNS no 这天指令移到  Subsystem   sftp    /usr/libexec/openssh/sftp-server之前
/etc/ssh/sshd_config line 149: Subsystem 'sftp' already defined.
#将Subsystem sftp internal-sftp  注释掉
### tail -f /var/log/sftp.log
Nov  1 10:16:27 iZbp195ygwh32u2aocf5j2Z sshd[24944]: fatal: bad ownership or modes for chroot directory component "/var/www/html/cms/" [postauth]
# 这个目录的own需要是root,group需要是sftp组,权限755,父目录的own全部是root(检查步骤5)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注