使用sftp进行文件传输
简介
SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
SFTP与FTP差别链接方式:FTP使用TCP端口21上的控制连接建立连接。而SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。安全性:SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP是非常安全。效率: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客户端,上传文件
查看用户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客户端上传文件
查看上传的文件位置$ 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* 匹配所有地址,IP匹配格式:IP地址/子网掩码(如192.0.2.0/24)上面的规则:匹配所有的IP,但排除IP 10.10.0.1,! 排除Match可选参数有User、Group、Host、LocalAddress、LocalPort和Address
验证
从10.10.0.1机器登录
10.10.0.1机器能看到所有的目录
从其他主机登录
其他主机只能看到限定的目录
排除用户组中特定用户
属于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匹配Group sftp-only及所有用户但排除用户test1
验证
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 ~]$
配置日志记录
修改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日志级别:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2、 DEBUG3。DEBUG1,2,3更高级别的调试日志输出。默认是ERROR-f:DAEMON、USER、AUTH、LOCAL0、LOCAL1、LOCAL2、LOCAL3、LOCAL4、LOCAL5、LOCAL6、LOCAL7。 默认是 AUTH
修改 /etc/rsyslog.conf,在最后添加auth,authpriv.*,local5.* /var/log/sftp.log
SFTP 命令# 从服务器下载文件 get filename # 上传文件到服务器 put filename # 操作本地目录,在linux命令前添加 "l" # 切换本地目录 lcd c:usersjieDesktop # 显示本地目录路径 lpwd