使用sftp进行文件传输

简介

SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

SFTP与FTP差别

使用SFTP传输文件

描述

只使用SFTP传输文件,不能使用ssh登录系统

创建sftp用户及组

创建sftp用户组

groupadd sftp-only

创建sftp用户

useradd -G sftp-only -d /home/sftp-user1 -s /sbin/nologin sftp-user1

设置SFTP用户起始目录

方式一

将ChrootDirectory目录设置为/home(所有权必须为root),然后 ForceCommand 使用-d 选项将用户的主目录指定为起始目录

当前/home目录

$ ls -lhd /home/ /home/sftp-user1/
drwxr-xr-x. 3 root root 24 Apr 8 13:58 /home/
drwxr-xr-x 2 sftp-user1 sftp-only 62 Apr 8 14:14 /home/sftp-user1/

编辑/etc/ssh/sshd_config文件

#注释此行
#Subsystem sftp /usr/lib/openssh/sftp-server
#添加下面的内容
Subsystem sftp internal-sftp
#匹配sftp-only组,如果匹配用户,则用Match User User-Name
Match Group sftp-only
# 锁定目录 %h 用户家目录。%u用户名
ChrootDirectory /home/
# 禁止tcp转发。
AllowTCPForwarding no
# 禁止X11转发
X11Forwarding no
ForceCommand internal-sftp -d %u

使用SFTP客户端,上传文件

使用sftp进行文件传输

查看用户home目录

$ ll /home/sftp-user1/
total 180
-rw-r--r-- 1 sftp-user1 sftp-only 182092 Apr 8 14:29 1.jpg

方式二

嵌套主目录

创建目录并设置权限

mkdir /home/sftp-user1/sftp-user1
# 属主必须为root
chown root:sftp-only /home/sftp-user1
# 如果/home/sftp-user1权限必须为710,否则用户能够在/home/目录下浏览或创建文件
chmod 710 /home/sftp-user1
chown sftp-user1:sftp-only /home/sftp-user1/sftp-user1
# /home/sftp-user1/sftp-user1权限可设置700,755,777等
chmod 750 /home/sftp-user1/sftp-user1

查看当前的目录结构

$ ls -lhd /home/ /home/sftp-user1/ /home/sftp-user1/sftp-user1/
drwxr-xr-x. 3 root root 24 Apr 8 13:58 /home/
drwx--x--- 3 root sftp-only 80 Apr 8 14:32 /home/sftp-user1/
drwxr-x--- 2 sftp-user1 sftp-only 6 Apr 8 14:41 /home/sftp-user1/sftp-user1/

修改/etc/ssh/sshd_config文件

#注释此行
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
# 匹配sftp-only组,如果匹配用户,则用Match User User-Name
Match Group sftp-only
# 锁定目录。为了能够chroot成功,该目录必须属主是root,并且其他用户或组不能写。%h 用户家目录。%u用户名
ChrootDirectory /home/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -d %u

使用SFTP客户端上传文件

使用sftp进行文件传输

查看上传的文件位置

$ ll /home/sftp-user1/sftp-user1/
total 200
-rw-r--r-- 1 sftp-user1 sftp-only 200988 Apr 8 14:46 5.jpg

高级使用

只能从特定的IP访问

Subsystem sftp internal-sftp
Match Group sftp-only, Address *,!10.10.0.1
ChrootDirectory /home/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -d %u

验证

从10.10.0.1机器登录

10.10.0.1机器能看到所有的目录

使用sftp进行文件传输

从其他主机登录

其他主机只能看到限定的目录

使用sftp进行文件传输

排除用户组中特定用户

属于sftp-only用户组,但是不限制ssh及sftp

创建用户

useradd -G sftp-only test1

修改配置

Subsystem sftp internal-sftp
Match Group sftp-only User *,!test1 Address *
ChrootDirectory /home/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -d %u

验证

ssh登录验证

# ssh test1@10.10.10.2
test1@10.10.10.2's password: 
Last login: Thu Apr 8 16:13:46 2021 from 10.10.10.2
[test1@envir-05 ~]$
使用sftp进行文件传输

配置日志记录

修改sshd配置

Subsystem sftp internal-sftp
Match Group sftp-only Address *
ChrootDirectory /home/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -d %u -f AUTH -l INFO

修改 /etc/rsyslog.conf,在最后添加

auth,authpriv.*,local5.* /var/log/sftp.log

SFTP 命令

# 从服务器下载文件
get filename
# 上传文件到服务器
put filename
# 操作本地目录,在linux命令前添加 'l'
# 切换本地目录
lcd c:usersjieDesktop
# 显示本地目录路径
lpwd
展开阅读全文

页面更新:2024-04-03

标签:伺服器   用户组   注释   客户端   权限   方式   服务器   文件   目录   用户

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top