SFTP账号建立与用法

摘自:https://blog.csdn.net/weixin_44654338/article/details/123404028

 

1、SFTP简述
SFTP(Secure File Transfer Protocol)即文件加密传输协议 这种传输方式更为安全,传输双方既要进行密码安全验证还要进行基于密钥的安全验证,有效的防止了“中间人”的威胁和攻击。

2、SFTP与FTP的区别
FTP是一种文件传输协议,它的目的就是为了传输文件,有独立的守护进程,使用20、21两个端口,20是数据链路的端口,21是控制链路的端。
SFTP也是用来传输文件的,但它的传输是加密的是ssh服务的一部分没有单独的守护进程,可以看做是ssh服务文件传输方案。SFTP协议是在FTP的基础上对数据进行加密,使得传输的数据相对来说更安全。但是这种安全是以牺牲效率为代价的,也就是说SFTP的传输效率比FTP要低,在linux系统中传输默认的端口为22端口。

3、结果测试说明
a、测试用户是否固定在家目录下
b、测试上传下载是否成功
c、测试sftp账号ssh能否登录

4、创建sftp账号注意事项
a、一定要备份ssh配置文件,养成修改前备份的习惯
b、ChrootDirectory 所指定目录的所有都必须为root 且权限不能大于755。例:/home/sftpuser1
c、因为指定家目录无所建用户权限,单独新建目录并进行目录权限更改以供sftp账号使用 例:/home/sftpuser1/test1 (只对test1下具备操作权限,上级目录无权限)
d、sshd文件配置内容说明:
##Match Group sftp 这一行是指定以下的子行配置是匹配 sftp 用户组的。Match user userA,userB 则是匹配用户。
##ChrootDirectory /data/sftp/%u 设定属于用户组 sftp 的用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名。
##ForceCommand internal-sftp 该行强制执行内部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令。
##AllowTcpForwarding no 是否允许 TCP 转发,默认值为 "yes", 禁止 TCP 转发并不能增强安全性,除非禁止了用户对 shell 的访问,因为用户可以安装他们自己的转发器。
##X11Forwarding no 是否允许进行 X11 转发。默认值是 "no",设为 "yes" 表示允许。如果允许 X11 转发并且 sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用 X11 转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止 X11 转发并不能禁止用户转发 X11 通信,因为用户可以安装他们自己的转发器。

5、按规划新建sftp测试账号代码

 1 useradd -d /home/sftpuser1 -s /sbin/nologin test1
 2 echo 123456|passwd --stdin test1
 3 useradd -d /home/sftpuser2 -s /sbin/nologin test2
 4 echo 123456|passwd --stdin test2
 5 chown root. /home/sftpuser1
 6 chmod 755 /home/sftpuser1
 7 chown root. /home/sftpuser2
 8 chmod 755 /home/sftpuser2
 9 mkdir /home/sftpuser1/test1
10 mkdir /home/sftpuser2/test2
11 chown test1. /home/sftpuser1/test1
12 chown test2. /home/sftpuser2/test2
13  
14 sed -i.bak 's/Subsystem/#Subsystem/' /etc/ssh/sshd_config
15  
16 cat >> /etc/ssh/sshd_config << EOF
17 Subsystem    sftp    internal-sftp
18 Match User test1
19     X11Forwarding no
20     AllowTcpForwarding no
21     ChrootDirectory /home/sftpuser1
22     ForceCommand internal-sftp
23 Match User test2
24     X11Forwarding no
25     AllowTcpForwarding no
26     ChrootDirectory /home/sftpuser2
27     ForceCommand internal-sftp
28 EOF
29  
30 systemctl restart sshd
31  

6、按计划进行测试

a、测试用户是否固定在家目录下

测试test1
[root@localhost ~]# sftp test1@172.20.10.5
The authenticity of host '172.20.10.5 (172.20.10.5)' can't be established.
ECDSA key fingerprint is SHA256:3rhFGJS6km8yPby5scchYZDbX1aQtQ71xZs9f+ayAfk.
ECDSA key fingerprint is MD5:c6:37:f8:4a:ba:90:86:b7:41:d4:b7:aa:e4:92:0f:4e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.20.10.5' (ECDSA) to the list of known hosts.
test1@172.20.10.5's password: 
Connected to 172.20.10.5.
sftp> pwd
Remote working directory: /
sftp> ls
test1  
sftp> cd /root/
Couldn't canonicalize: No such file or directory
sftp> cd /home/sftpuser2
Couldn't canonicalize: No such file or directory
sftp> 

我们可以看到已经固定在家目录内,对其他目录无权限
b、测试上传下载是否成功

[root@localhost ~]# touch /home/sftpuser1/test1/sftp_test2.txt
[root@localhost ~]# sftp test1@172.20.10.5
test1@172.20.10.5's password: 
Connected to 172.20.10.5.
sftp> put 
anaconda-ks.cfg    sftp_test.txt     tools/               
sftp> cd test1/
sftp> put sftp_test.txt
Uploading sftp_test.txt to /test1/sftp_test.txt
sftp_test.txt                                           100%    0     0.0KB/s   00:00    
sftp> ls
123              sftp_test.txt    sftp_test2.txt
sftp> get 
123/             sftp_test.txt    sftp_test2.txt   
sftp> get sftp_test2.txt 
Fetching /test1/sftp_test2.txt to sftp_test2.txt
sftp> quit
[root@localhost ~]# ll
total 748
-rw-------. 1 root root   1569 Mar  4 23:38 anaconda-ks.cfg
-rw-r--r--  1 root root      0 Mar 10 17:04 sftp_test2.txt
-rw-r--r--  1 root root      0 Mar 10 16:56 sftp_test.txt
drwxr-xr-x. 2 root root      6 Mar  9 14:05 tools
[root@localhost ~]# ll /home/sftpuser1/test1/
total 0
drwxr-xr-x 2 test1 test1 6 Mar 10 16:53 123
-rw-r--r-- 1 root  root  0 Mar 10 17:04 sftp_test2.txt
-rw-r--r-- 1 test1 test1 0 Mar 10 17:04 sftp_test.txt
[root@localhost ~]# 

可以看到,成功上传以及下载文件,至此SFTP账号配置完毕。

最后我们在测试下sftp账号能否ssh登录主机,正常为不能登录

[root@localhost ~]# ssh test1@172.20.10.5
test1@172.20.10.5's password: 
This service allows sftp connections only.
Connection to 172.20.10.5 closed.

至此测试完毕,ssh无法登录 提示: "This service allows sftp connections only.(此服务仅允许 sftp 连接。)"

7、SFTP用法
连接SFTP

sftp username@IP(回车后输入账号密码进入)

上传文件至服务器内(上传不添加服务器目录则默认上传到当前所在位置)

put [filename] [服务器上传文件目录]

从服务器下载文件至本地(不加地址则默认下载至登陆前位置)

get [服务器地址及文件] [本地下载到的位置]

当然还有查看和进入目录的命令

ls
cd [目录]

 

posted @ 2022-08-25 17:59  LiuYanYGZ  阅读(750)  评论(0编辑  收藏  举报