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 [目录]