一、简介
参考:https://blog.csdn.net/cuker919/article/details/6403925
说到sftp就要说ftp,简单来说:
1. ftp要安装,sftp不要安装;
2. sftp更安全,但更安全带来副作用就是的效率比ftp要低些,但据说差别不大
3. ftp功能更强大,有支持的可操作的客户端
二、搭建
参考:https://www.cnblogs.com/reachos/p/11157329.html
2.1 创建sftp用户组
需要root权限,一般可使用 sudu su - ,或命令前面加sudo执行
groupadd sftp
可以使用 cat /etc/group 查看用户组信息
2.2 向sftp用户组中增加sftp_test用户,并修改密码
useradd -g sftp -s /bin/false sftp_test
passwd sftp_test
参数 -s /bin/false :最严格的禁止login选项,一切服务都不可用
对应的是 -s /sbin/nologin 只是不允许系统login,可以使用其他ftp等服务
2.3 新建sftp_test用户的home目录,并进行指定
mkdir -p /app/sftp/sftp_test
usermod -d /app/sftp/sftp_test
2.4 修改ssh配置
vim /etc/ssh/sshd_config
将如下这行用#符号注释掉
# Subsystem sftp /usr/libexec/openssh/sftp-server
并在文件最后面添加如下几行内容然后保存
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /app/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
最后结果如图所示:
2.5 设置Chroot目录权限
chown root:sftp /app/sftp/sftp_test
chmod 755 /app/sftp/sftp_test
注意:这里设置Chroot目录权限和上面配置中的ChrootDirectory应是同级目录,%u即表示用户
2.6 新建一个目录供sftp_test用户上传下载文件
这个目录所有者为sftp_test所有组为sftp,所有者有写入权限所有组无写入权限
cd /app/sftp/sftp_test
mkdir upload download
chown sftp_test:sftp /app/sftp/sftp_test/upload
chown sftp_test:sftp /app/sftp/sftp_test/download
chmod 755 /app/sftp/sftp_test/upload
chmod 755 /app/sftp/sftp_test/download
注意:若/app目录不是root的话,还要执行 chown root /app ,将/app所有者设置为root
这样的权限,不允许sftp_test在/app/sftp/sftp_test/目录下创建新目录、上传文件,但可以在/app/sftp/sftp_test/upload创建新目录、上传文件
最终目录结构如图所示:
2.7 关闭selinux并重启sshd服务
setenforce 0
systemctl restart sshd.service
也可以使用 systemctl status sshd.service ,查看sshd服务运行状态
三、使用sftp服务
参考:https://www.linuxprobe.com/linux-sftp-files.html
3.1 连接
连接命令:sftp 用户名@ip地址
sftp sftp_test@127.0.0.1
若需要指定端口
sftp -oPort=22 sftp_test@127.0.0.1
3.2 查看目录及基础命令
进入sftp目录:cd upload/
查看sftp目录文件:ls 、ls upload/
查看当前所在的sftp目录:pwd
查看本地目录文件:lls、lls upload/
查看当前所在的本地目录:lpwd
可以看出查看本地是比查看sftp多了“l”
3.3 上传
上传test.txt文件到sftp的当前目录:put test.txt
上传本地sftp_test目录的全部文件到sftp的当前目录:put -r sftp_test/
3.4 下载
下载sftp当前目录的test.txt文件到本地的当前目录:get test.txt
下载sftp的sftp_test目录的全部文件到本地的当前目录:get -r sftp_test/
3.5 退出
退出sftp:exit