SFTP(Secure File Transfer Protocol ):sftp为ssh自带的服务,无需额外安装软件,使用和配置很方便
SFTP的优势主要有两点:
1、不需要再配置个FTP服务端;
2、SSH协议是安全传输,上传和下载是经过加密的,安全方面高于vsftp,由于传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。

 

步骤:

系统环境配置

1、关闭Linux 的selinux

2、安装penssh-server

openssh-server 版本至少得 4.8p1, 因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成

# yum -y install openssh-server  openssh-clients
# ssh  -V

3、新建只用来登录sftp的账户

groupadd sftp
useradd -g sftp -s /sbin/nologin jason
passwd jason

4、sshd.conf配置

vi -b /etc/ssh/sshd_config
注释掉下面这一行:
Subsystem  sftp    /usr/libexec/openssh/sftp-server
添加: Subsystem sftp internal
-sftp Match Group sftp ChrootDirectory /var/lib/container X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp

注:这里要注意一下,上面这些代码务必放在最后,因为必须要“UseDNS no”后面

 

配置项说明:

#这行指定使用sftp服务使用系统自带的internal-sftp

Subsystem sftp internal-sftp

#这行用来匹配用户

Match User sftpuser

#用chroot将用户的根目录指定到/home/sftp,这样用户就只能在/home/sftp下活动

ChrootDirectory /home/sftp

AllowTcpForwarding no

#指定sftp命令

ForceCommand internal-sftp

 

#启用internal-sftp
Subsystem       sftp    internal-sftp
#限制www用户的根目录
Match User www
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
#限制blog和pay用户的根目录
Match Group sftp
    ChrootDirectory %h
    ForceCommand    internal-sftp

 

创建共享目录

mkdir -p /var/lib/container/jason

注意SFTP共享的根目录是 /var/lib/container/

5、修改目录权限

1、ChrootDirectory的权限问题:

(1)设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限只能是 750 或者 755

(2)目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。

(3)目录开始一直往上到系统根目录为止都不可以具有群组写入权限

2、共享目录权限问题:

目录所有者为jason,所有组为sftp,所有者有写入权限,而所有组无写入权限,权限为700、750或者755。可以根据情况具体设置

chown -R root:root /var/lib/container
chmod 755 /var/lib/container
chown -R jason:sftp /var/lib/container/jason
chmod 775 /var/lib/container/jason

 

6、重启sshd服务

systemctl restart sshd

 

7、测试

sftp -P 10022 jason@192.168.1.202

 

 

 

常见问题:

SFTP Permission denied处理
com.jcraft.jsch.SftpException: Permission denied

问题的原因是,SFTP服务器的SELINUX没关闭。
packet_write_wait: Connection to 192.168.1.202 port 10022: Broken pipe
Couldn't read packet: Connection reset by peer

原因是ChrootDirectory的权限问题

 

参考:

https://www.cnblogs.com/yyy-blog/p/11130302.html
https://blog.csdn.net/michaelwoshi/article/details/94184288
https://cloud.tencent.com/developer/article/1844272
https://support.huawei.com/enterprise/zh/knowledge/EKB1100061659
https://www.cnblogs.com/wish123/p/7071317.html

 

posted on 2023-11-08 18:09  小油2018  阅读(79)  评论(0编辑  收藏  举报