FTP是一种文件传输协议,服务端和客户端可视化软件很多,只要支持相同的协议标准基本可以互相连通。
SFTP相对于FTP在数据传输中添加了数据加密,以损失数据传输效率为代价提高数据传输安全性。但加密解密等操作均为CPU时间,相对于文件的IO传输时间性能损失的占比不大。
以下使用linux服务器部署SFTP服务端,win10下安装XshellFTP客户端,进行FTP文件传输的测试。
一、linux服务器部署SFTP服务
1.1 检查环境:
SFTP在linux系统中是自带的,无需额外安装。不放心的话做如下检查,以CentOS为例。
rpm -qa | grep openssh clear
ssh -V
如果没有发现openssh,那就去下载吧。。。如果ssh版本在4.8以下,需升级版本
sudo yum update -y openssh-server
1.2 添加SFTP专用的用户组和用户
以下添加my-sftp-group用户组,sftpuser1、sftpuser2两个用户,并分别指定用户根目录和sftp服务目录权限
sudo groupadd my-sftp-group # 创建用户组
sudo useradd -g my-sftp-group -m sftpuser1 #创建用户并指定组
sudo useradd -g my-sftp-group -m sftpuser2
root用户下 passwd sftpuser1 输入密码(可能要两次,也可能提示密码未通过字典检查),如下图所示密码已设置成功
passwd sftpuser2 #root用户下设置新用户密码
检查用户所在组是否设置成功:
groups sftpuser1 / groups sftpuser2
如果发现用户组设置错误,移动用户组的指令 :
usermod -g my-sftp-group sftpuser1 / usermod -g my-sftp-group sftpuser2
1.3 创建ChrootDirectory及sftp操作文件夹
ChrootDirectory 是配置sftp连接之后进入的根目录。我打算配置为 /data/sftpdata/%u最后一位%u是取用户名,为了让不同的用户登录之后进入到不同的文件夹,避免看到其他用户的数据。
确保ChrootDirectory中配置的路径从系统根目录第一个文件夹到最后一个文件夹所有者都是root,权限是755,否则sftp启动后远程连接会报错。但问题也很明显,sftp连接上来的用户由于没有根目录的写权限所以不能在根目录创建文件或文件夹,所以我们要给定一各路径,提前配置好用户权限。
假设我们使用 /data/sftpdata/sftpuser1/upload 这个文件夹来作为 sftpuser1这个用户能够操作的文件路径。则从data文件夹开始到sftpuser1文件夹,所有者都必须是root权限至少755,最后的update文件夹所有者设置为sftpuser1(用来登录sftp的用户),权限可以设置成7**
以下为参考指令,截图为创建过程
chown 用户:组 文件(夹)路径 # 修改文件(夹)的所有者
chmod 745 文件(夹)路径 # 修改权限:第一个数字是所有者权限,第二个数字是所属组用户权限,第三个数字是其他用户权限。每个数字是三位二进制数,分别表示读、写、执行。7=4+2+1即读写执行都有,5=4+1即读和执行,4则只有读权限。
留意,ChrootDirectory路径中的文件夹的权限最后一位其他用户权限中至少给个读和执行权限,不然sftpuser1用户登录sftp之后就连工作根目录都无法读和执行命令。
如果你对用户所有者、权限、sftp的ChrootDirectory工作根目录不是很熟悉,建议跟我保持完全一致,避免出现各种权限错误。
1.3 修改配置文件
vim /etc/ssh/sshd_config 文件尾补充内容
vim /etc/selinux/config 修改SELINUX属性参数
照着敲吧,粘贴到网页上会有格式问题。
1.4 重启ssh
systemctl restart sshd (CentOS的指令,ubuntu可能有所不同,自行百度吧)
1.5 本地测试一下
二、win10下安装FlashFTP客户端
2.1 首先win10本身是自带sftp的,在cmd命令行中输入sftp user_name@ip 然后输入密码就可以连接远程sftp服务器了。
命令行连接sftp服务之后,需要使用指令进行文件传输操作,比如put指令get指令等。
2.2 XshellFTP客户端下载安装
网上很多绿色版和破解版,自行百度吧。
百度网盘备份:链接:https://pan.baidu.com/s/147RPyw6zzhu-V0IjokhISQ 提取码:44dk
三、sftp客户端与服务端进行文件传输
客户端:win10 下路色版 XshellFTP
服务端:linux 下 SFTP服务
打开XshellFTP窗口,左上角新建
连接成功!
左侧是本地文件系统,右侧是sftp文件系统。双击文件则直接进行文件传输。