在CentOS8.3 配置SFTP

何为SFTP

SSH 文件传输协议(SSH File Transfer Protocol)或者说是安全文件传输协议(Secure File Transfer Protocol)。是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。
SFTP比FTP更可取:因为它具有最基本的安全特性和能利用SSH连接的能力,FTP是一种不安全的协议,只能在有限的情况下或在您信任的网络上使用,如果是放在internet上的服务,web要用https,FTP要用sftp,否则稽核时肯定是缺失。
另:在Linux只需要配置就可以使用sftp,因为默认的Linux都会安装SFTP服务的,不过OpenSSH-Server版本最好高于4.8p1

设定步骤

查看OpenSSH版本

ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS  21 Apr 2020

SFTP 配置

1. 创建用户组 sftp

 groupadd sftp

2. 创建用户sfcsftp

useradd -g sftp -s /sbin/nologin -d /home/sftp/sfcsftp sfcsftp
   -g 加入到sftp组
   -s 禁止登录    
   -d 指定用户的登入目录

3. 设置sfcsftp密码

passwd sfcsftp
输入两次密码

4. 创建用户ftp文件目录

cd /home
mkdir sftp
mkdir /home/sftp/sfcsftp

4.1 修改文件夹 拥有者

chown -R sfcsftp:sftp /home/sftp/sfcsftp
-R 递归修改子目录

5. 修改ssh的配置文件 /etc/ssh/sshd_config

修改sshd_config如下:
注释原来的Subsystem设置
#Subsystem sftp /usr/libexec/openssh/sftp-server
启用internal-sftp
Subsystem sftp internal-sftp
限制用户SFTP访问的根目录
限制sfcsftp用户的根目录
AllowGroups sftp
#Match Group sftp
AllowTcpForwarding no
X11Forwarding no
ChrootDirectory /home/sftp
ForceCommand    internal-sftp

6. 重启SSH服务

 systemctl restart sshd 

7. 测试sftp

sftp shsfc@192.168.1.2
sfcsftp@192.168.1.2's password: 
Connected to sfcsftp@192.168.1.2.
sftp> exit

8. 主要Log

查看ssh版本
[root@iZ2fg4gfn99zb4hG ~]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS  21 Apr 2020
添加group sftp
[root@iZ2fg4gfn99zb4hG ~]# groupadd sftp
groupadd: group 'sftp' already exists
修改sfcsftp
[root@iZ2fg4gfn99zb4hG ~]# usermod -g sftp -s /sbin/nologin -d /home/sftp/sfcsftp sfcsftp
[root@iZ2fg4gfn99zb4hG ~]# id sfcsftp
uid=1000(sfcsftp) gid=1000(sftp) groups=1000(sftp)
設定sfcsftp密碼
[root@iZ2fg4gfn99zb4hG ~]# passwd sfcsftp
Changing password for user sfcsftp.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
創建sfcsftp文件夾
[root@iZ2fg4gfn99zb4hG ~]# cd /home
[root@iZ2fg4gfn99zb4hG home]# mkdir sftp
[root@iZ2fg4gfn99zb4hG home]# mkdir /home/sftp/sfcsftp
[root@iZ2fg4gfn99zb4hG home]# ll
drwxr-xr-x 3 root      root      21 May 31 20:55 sftp
授權
[root@iZ2fg4gfn99zb4hG home]# chown -R sfcsftp:sftp /home/sftp/sfcsftp
[root@iZ2fg4gfn99zb4hG home]# ll
total 0
drwxr-xr-x 3 root      root      21 May 31 20:55 sftp
[root@iZ2fg4gfn99zb4hG home]# cd sftp
[root@iZ2fg4gfn99zb4hG sftp]# ll
total 0
drwxr-xr-x 2 sfcsftp sftp 6 May 31 20:55 sfcsftp
 
编辑/etc/ssh/sshd_config

10. 总结sshd_config编辑的内容

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server註釋掉這一行
Subsystem      sftp   internal-sftp  #添加這一行使用sftp服務,使用系统自带的internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

#AllowGroups sftp root
#Match user sfcsftp
#AllowTcpForwarding no
#X11Forwarding no
#ChrootDirectory /home/sftp
#ForceCommand    internal-sftp  第一次這些信息設置在此處,但workBench不能以root登陆服务器

UseDNS no 
AddressFamily inet
SyslogFacility AUTHPRIV
PermitRootLogin yes
PasswordAuthentication yes

#如果下面的信息直接寫在UseDNS no下面,systemctl restart sshd時會報錯,具體的看tail /var/log/messages
Match Group sftp  #我們自己創建了sftp Group,匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /home/sftp #用Chroot将用户的根目录指定到/home/sftp/%u,%u代表用户名,这样用户就只能在/home/sftp/%u下活动
ForceCommand internal-sftp #强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令
AllowTcpForwarding no      #不允许转发TCP协议,默认是yes,如果用户可以shell访问则建议为yes
X11Forwarding no  #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。
如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。
由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
如果启用了 UseLogin ,那么X11转发将被自动禁止
 
如果再創建一個sftp用戶,例如:mysftp 
useradd -g sftp -s /sbin/nologin -M mysftp
chown -R mysftp:sftp /home/sftp/mysftp
passwd mysftp
不管是用mysftp 還是sfcsftp,都能看到這兩個文件夾,並且也能下載,但上傳時,各自只能上傳到各自的文件夾,而我们的目的是sftpdir文件夹
如果想各自只能訪問各自的文件夾,如果僅僅在 ChrootDirectory /home/sftp/%u 是無效的並且sftp也不能訪問了
也許把Match user sfcsftp,mysftp 和ChrootDirectory /home/sftp/%u搭配可以,待驗證---結果是:不行

最終解決辦法:
1.先創建以用戶名命名的文件夾:/home/sftp/mysftp
2.再把此文夾夾授權給root:chown root:root /home/sftp/mysftp/
3.再創建sftpdir文件夾:mkdir /home/sftp/mysftp/sftpdir
4.再把此文夾夾授權給mysftp和sftp群組:chown mysftp.sftp /home/sftp/mysftp/sftpdir
5.再變更文件夾權限::chmod 775 /home/sftp/mysftp/sftpdir
6.修改sshd_config,只要把ChrootDirectory /home/sftp 改為/home/sftp/%u即可
7.當然要重啟sshd:systemctl restart sshd
如此:各自只能看到各自的根目錄,例如mysftp,在這裡只能上傳文件或覆蓋原文件,不能刪除文件,不能創建新的文件夾
但在sftpdir可以上傳可以刪除可以創建文件夾等操作
最终/etc/ssh/sshd_config文件行尾的一些信息:
UseDNS no
AddressFamily inet
SyslogFacility AUTHPRIV
PermitRootLogin yes
PasswordAuthentication yes

Match Group sftp
ChrootDirectory /home/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值