题外话
最近在学习sftp,所以想自己搭建一套来完,根据百度和实际搭建,记下最终实现的方案。
1、SFTP是什么
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。
2、SFTP搭建
(1)检查OpenSSH版本
[root@localhost ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
根据网上前辈们的说明:OpenSSH版本必须大于4.8p1,低于这个版本需要升级。我的环境大于这个版本,所以就不用升级啦。不知道如果没有升级到这个版本会出现什么问题,目前没有遇到,大家如果需要相关的问题,可以留言哈~
(2)创建用户与用户组
根据实践证明:用户组设置成统一的名字:sftp,便于管理,当然,大家也可以根据自定义,为了方便理解,在这里我的用户和用户组分别为:sftpuser,sftp。
#创建用户组
groupadd sftp
#创建用户
useradd -g sftp -s /sbin/nologin sftpuser #设置成用户不可登录,虽然Linux无法登录,但是sftp可以登录
passwd sftpuser
输入密码:[自定义]
(3)创建文件传送目录
根据个人的需要,指定目录或创建一个目录,为了方便理解,我需要创建一个属于sftp用户组的目录:
#创建目录
mkdir /home/sftp
mkdir /home/sftp/sftpuser
#设置目录所属用户与组以及读写权限
chmod 755 /home/sftp
chown root:sftpuser /home/sftp/sftpuser
chmod 755 /home/sftp/sftpuser
(4)sshd_config配置文件设置
#编辑sshd_config文件
vi /etc/ssh/sshd_config
#找到以下行并注释
#Subsystem sftp /usr/libexec/openssh/sftp-server
#添加一行,配置一个外部子系统
Subsystem sftp internal-sftp
#配置传送目录和所属用户
Match User sftpuser #指定用户,如果指定组可以使用Match Group sftp
ChrootDirectory /home/sftp/%u #指定目录,其中%u表示对应用户名目录
ForceCommand internal-sftp #强制执行这里指定的命令而忽略客户端提供的任何命令
AllowTcpForwarding no #是否允许TCP转发,默认值为"yes", 禁止TCP转发并不能增强安全性,除非禁止了用户
X11Forwarding no #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
(5)重新加载sshd
#重新加载
service sshd reload
(6)测试是否可用
[root@localhost ]$ sftp sftpuser@127.0.0.1
Connecting to 127.0.0.1...
sftpuser@127.0.0.1's password:
sftp> pwd
Remote working directory: /
sftp>
如果你已经执行到这一步,就表示成功啦~
3、SFTP新增
SFTP新增,其实和配置差不多。首先,新加一个用户,比如sftpuser2;然后,在咱们刚才就创建好的/home/sftp目录下创建一个同名的目录,即:/home/sftp/sftpuser2,设置好所属用户和权限。然后,在sshd_config配置文件下的最后添加:
#配置传送目录和所属用户
Match User sftpuser2
ChrootDirectory /home/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
最后,重载sshd,新增的一个用户传送目录就搭建好啦~
4、SFTP使用
SFTP使用其实通过help即可看到用法,在下就偷个懒,不多阐述了,以后有机会再补充吧,哈哈~
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-P] remote-path [local-path] Download file
help Display this help text
lcd path Change local directory to 'path'
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln oldpath newpath Symlink remote file
lpwd Print local working directory
ls [-1aflnrSt] [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
progress Toggle display of progress meter
put [-P] local-path [remote-path] Upload file
pwd Display remote working directory
quit Quit sftp
rename oldpath newpath Rename remote file
rm path Delete remote file
rmdir path Remove remote directory
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
在此鸣谢,FlyBack的博客:https://www.cnblogs.com/flyback/p/6492059.html,在下有很多部分借鉴了这篇文章,希望作者不要介意,谢谢~