sftp-详解
sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议.可以为传输文件提供一种安全的网络的加密方法
1、FTP 和 SFTP 的区别
- 链接方式:FTP 使用 TCP 端口 21 上的控制连接建立连接.而 SFTP 是在客户端和服务器之间通过 SSH 协议( TCP 端口 22 )建立的安全连接来传输文件
- 安全性:SFTP 使用加密传输认证信息和传输的数据,所以使用 SFTP 相对于 FTP 是非常安全
- 效率:SFTP 这种传输方式使用了加密解密技术,所以传输效率比普通的 FTP 要低得多.如果您对网络安全性要求更高时,可以使用 SFTP 代替 FTP
2、需求
- 搭建多账号 SFTP,不同的用户只能够查看自己所属的目录
- 禁止 SFTP 账号通过 SSH 连接
- SFTP 用户: demo1、demo2
- 所属目录: /dataSftp/demo1、/dataSftp/demo2
3、添加组和用户
groupadd sftp
cat /etc/group | grep sftp
useradd -g sftp -s /bin/false demo1
useradd -g sftp -s /bin/false demo2
echo "pTXAxs6XY5p3" | passwd demo1 --stdin
echo "123qwe123asd" | passwd demo2 --stdin
4、设置组根目录权限
mkdir /dataSftp/{demo1,demo2} -p
chown root:sftp /dataSftp/demo1/
chmod 755 /dataSftp/demo1
#设置用户可以上传的目录upload
mkdir /dataSftp/demo1/upload
chown -R demo1:sftp /dataSftp/demo1/upload/
chmod 755 /dataSftp/demo1/upload
5、配置 ssh 和权限
vim /etc/ssh/sshd_config
#修改(指定使用 sftp 服务使用系统自带的 internal-sftp )
Subsystem sftp internal-sftp -l INFO -f AUTH
#新增
#匹配 sftp 组的用户,如果要匹配多个组,多个组之间用逗号分割
#Match User SXYL0082
#sftp主目录指定
#ChrootDirectory /dataSftp/SXYL0082
#指定sftp命令
#ForceCommand internal-sftp
#用户不能使用端口转发
#AllowTcpForwarding no
#用户不能使用端口转发
#X11Forwarding no
#注意,以下要放在文件的最后,否则 root 用户无法登陆
Match Group sftp
ChrootDirectory /dataSftp/%u
#只能访问默认的用户目录(自己的目录),例如 /dataSftp/demo1
#ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
6、修改 rsyslog
vim /etc/rsyslog.conf
#文件末尾添加一行
auth,authpriv.* /var/log/sftp.log
vim /etc/logrotate.d/sftp
/var/log/sftp.log
{
missingok
weekly
create 0600 root root
minsize 1G
rotate 10
dateext
}
7、重启 ssh 服务
systemctl restart rsyslog
systemctl restart sshd.service
8、测试 SFTP 功能
#登录sftp
sftp demo1@192.168.47.111
#进入upload目录
cd upload
#上传文件
put /root/nginx-1.15.12.tar.gz
#查看目录下的文件
ls
#下载文件
get nginx-1.15.12.tar.gz
9、查看日志
tail -f /var/log/sftp.log
debug
1. 如果你链接服务器的时候出现下面的提示:
> Write failed: Broken pipe
> Couldn't read packet: Connection reset by peer
这个问题的原因是 ChrootDirectory 的权限问题,你设定的目录必须是 root 用户所有,否则就会出现问题.所以请确保 sftp 用户根目录的所有人是 root,权限是 750 或者 755
注意以下两点原则:
- 目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root
- 目录开始一直往上到系统根目录为止都不可以具有群组写入权限
上面 2 点一定注意,仔细检查.我就是因为这个问题,导致一直有这个问题.仔细检查配置后,解决问题,不用考虑别的,就弄权限!
2. 客户端 sftp 登录服务器显示文件列表时间不正确
服务器开启 sftp 的 chroot 安全登录功能,就访问不了系统的时区文件,客户端登录后,执行ls -l
显示文件列表时间不是服务器上的时间,而是差了一个时区,需要 +8h 才能得到文件正确时间
解决:
进入sftp用户根目录
mkdir etc
cp -r /usr/share/zoneinfo/Asia/Shanghai etc/localtime
------------------------------- THE END -------------------------------
—
©版权声明
读万卷书,行万里路。
——————————– THE END ——————————–