sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH 的一部分,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多,如果您对网络安全性要求更高时,可以使用 SFTP 代替 FTP。

1 | sftp 搭建

1.1 创建 sftp 组

# groupadd sftp
# useradd -g sftp -d /data/sftp/sftpuser -s /sbin/nologin sftpuser
# echo 123456 | passwd --stdin sftpuser 参数详解:
-g 用户组; -d 指定家目录; -s 不登陆; -M 不创建家目录

1.2 修改 sshd_config 配置

# vim /etc/ssh/sshd_config        #编辑sshd配置文件

#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp #------下面两项是与安全有关------
AllowTcpForwarding no
X11Forwarding no 参数详解:

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 通信,因为用户可以安装他们自己的转发器。

1.3  权限设置

要实现 Chroot 功能, 目录权限的设置非常重要 。否则无法登录,给出的错误提示也让人摸不着头脑,无从查起。我在这上面浪费了很多时间。

ChrootDirectory:定义了用户通过认证以后的 chroot 目录,此目录及其所有子目录的属主必须是 root,且这些目录只有 root 帐号可以进行写操作,其他任何组和帐号都不可写。chroot 以后,sshd 会将用户的工作目录转到 chroot 目录中用户自己的主目录。如果 ChrootDirectory 定义的目录下没有相应的 /home/username 目录,则会直接转到 chroot 的 / 目录下。

# chown root:root /data/sftp/sftpuser
# chmod 755 /data/sftp/sftpuser

目录权限设置上要遵循2点:

  • ChrootDirectory 设置的目录权限及其所有的上级文件夹权限,属主和属组必须是 root;
  • ChrootDirectory 设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是 755。

1.4  建立 SFTP 用户可写目录

由于 /data/sftp/sftpuser 的用户是 root,其它用户都没有写的权限,所有要有该目录下新建一个目录用于文件的上传下载。

# mkdir -p /data/sftp/sftpuser/upload
# chown sftpuser:sftp /data/sftp/sftpuser/upload
# chmod 755 /data/sftp/sftpuser/upload

1.5 测试

# sftp -P2022 sftpuser@172.16.16.126
sftp> pwd
Remote working directory: /upload
sftp> lls
1 anaconda-ks.cfg zookeeper.out
sftp> put anaconda-ks.cfg
Uploading anaconda-ks.cfg to /upload/anaconda-ks.cfg
anaconda-ks.cfg 100% 1839 39.4KB/s 00:00

2 |SFTP 配置

2.1 MaxStartups 1000:30:3000

同时允许几个尚未登入的联机画面,所谓联机画面就是在你 ssh 登录的时候,没有输入密码的阶段

MaxStartups 10:30:100    # start:rate:full

参数详解:

start:表示未完成认证的连接数
  • rate:当未完成认证的连接数超过 start 时,rate/100 表示新发起的连接有多大的概率被拒绝连接。
  • full:如果未完成认证的连接数达到 full,则新发起的连接全部拒绝。

查看 sshd 配置参数:

# sshd -T | grep -i startup

2.2 maxsessions 1000

同一地址的最大连接数,也就是同一个 IP 地址最大可以保持多少个链接。

如下以上两个参数配置不正确,可能出现如下错误:

ssh_exchange_identification: Connection closed by remote host

《SSH 服务的几个超时参数配置》: https://yq.aliyun.com/articles/57903?spm=5176.11156381.0.0.68684403ani1fa

3 |踩过的坑

问题 1: Couldn't read packet: Connection reset by peer

sftp 输入密码后报错:

[root@sdw1 ~]# sftp sftpuser@sdw1
sftpuser@sdw1's password:
packet_write_wait: Connection to 192.168.2.111 port 22: Broken pipe
Couldn't read packet: Connection reset by peer
[root@sdw1 ~]# sftp sftpuser@sdw1
sftpuser@sdw1's password:
Connected to sdw1.

原因:/data/sftp/sftpuser(ChrootDirectory) 的用户必须为 root,参考 sftp 安装 (3)

chown root:sftp /data/sftp/sftpuser

问题 2: remote readdir("/"): Permission denied

sftp 登陆成功后,没有读的权限

sftp> ls
remote readdir("/"): Permission denied

原因:/data/sftp/sftpuser(ChrootDirectory) 组 sftp 必须要有读的权限,参考 sftp 安装 (3)

chmod 755 /data/sftp/sftpuser

  

  

sftp 多用户安装与配置的更多相关文章

  1. SFTP 安装与配置

    SFTP 安装与配置 sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH 的一部分,由于这种 ...

  2. Linux学习(一)--VMware下Linux安装和配置

    本片随便将给大家讲述linux在VM虚拟机上安装及终端的安装和配置 一.Linux介绍 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线 ...

  3. Linux环境下SVN服务器端的安装与配置

    最近尝试了下在Linux(CentOS6.5)环境下安装与配置SVN服务器端,安装过程中碰到了一些问题,参看了网友们分享的一些心得,并通过自己实际的操作,最终安装与配置成功!总的来说网上的说法芸芸,大 ...

  4. Centos6.5 Openvpn的安装与配置

    一.安装准备 ? 1 2 yum -y install openssl-devel openssl yum -y install gcc gcc-c++ 二.OpenVPN服务端安装过程1.lzo下载 ...

  5. (转)CentOS6.5下Redis安装与配置

    场景:项目开发中需要用到redis,之前自己对于缓存这块一直不是很理解,所以一直有从头做起的想法. 本文详细介绍redis单机单实例安装与配置,服务及开机自启动.如有不对的地方,欢迎大家拍砖o(∩_∩ ...

  6. nginx在Centos7.5下源码安装和配置

    安装nginx 安装nginx依赖包 yum install -y pcre-devel zlib-devel openssl-devel wget gcc tree vim 进入目录/root/se ...

  7. zabbix系列之六——安装后配置二Items

    https://www.zabbix.com/documentation/3.4/manual/config/items/itemtypes/snmp 1Items 1.1creating items ...

  8. CentOS7安装及配置vsftpd (FTP服务器)

    CentOS7安装及配置vsftpd (FTP服务器) 1.安装vsftpd 1 yum -y install vsftpd 2.设置开机启动 1 systemctl enable vsftpd 3. ...

  9. Ubuntu系统下安装并配置hive-2.1.0

    说在前面的话 默认情况下,Hive元数据保存在内嵌的Derby数据库中,只能允许一个会话连接,只适合简单的测试.实际生产环境中不使用,为了支持多用户会话, 则需要一个独立的元数据库,使用MySQL作为 ...

随机推荐

  1. 【协作式原创】查漏补缺之Go并发问题(单核多核)

    主要回答一下几个问题 1.单核并发问题 2.多核并发问题 2.几个不正确的同步案例 1.单核并发问题 先看一段go(1.11)代码: 单核CPU,1万个携程,每个携程执行100次+1操作, 思考n最终 ...

  2. HTML常用标签效果展示

    HTML常用标签效果展示 一.文本效果 段落1---收到了开发建设看来得更加快乐圣诞节福利肯定是减肥的路上苏里科夫就是打开了飞机都是风口浪尖上的疯狂了大煞风景圣诞快乐的索科洛夫几点上课了关键是低空掠过 ...

  3. Unity热更新对比

    https://www.jianshu.com/p/f9d90edf4a7c Unity 热更新为啥用Lua 详解 ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优 ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:偏移列

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. LeetCode困难题(一)

    题目一: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 ...

  6. 苹果系统 MacOS 安装根证书

    12306 网上购票以及一些其他内部使用的系统,需要安装.cer扩展名的根证书的情况,windows安装较为简单大家也比较熟悉,使用mac安装根证书在此做下详细介绍. 当前以10.13.5版本为例,其 ...

  7. Codeforces Global Round 4E(字符串,思维)

    #include<bits/stdc++.h>using namespace std;string s,a,b;int main(){ cin>>s; int n=s.size ...

  8. jquery对象和dom原生获取的对象是不同的。

    写了一个点击无缝滚动的demo,但是点击的时候如果上一个不运动完成,在快速点击就会快闪. 可是开始也清除定时器了,后来发现是传入的jq对象,jqobj.timer=定时器,这里jqobj没法添加.ti ...

  9. what is 'linesize alignment' meaning?

    链接: https://stackoverflow.com/questions/35678041/what-is-linesize-alignment-meaning

  10. redhat 7.6 ssh 服务配置

    安装ssh yum install openssh 查看端口 netstat -ntpl netstat -ntpl | grep :22 启动和关闭 service sshd restart/sta ...