1. 介绍

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

2. sftp搭建

2.1 创建SFTP 主目录

mkdir -p /data/sftp

2.2 创建SFTP 用户组

groupadd sftp

2.3 创建FTP用户,并指定home到SFTP主目录下

以下创建了3个SFTP用户

useradd -g sftp -s /sbin/nologin -d /data/sftp/ftp1 ftp1
useradd -g sftp -s /sbin/nologin -d /data/sftp/ftp2 ftp2
useradd -g sftp -s /sbin/nologin -d /data/sftp/ftp3 ftp3

2.4 设置FTP用户密码

echo password1 | passwd --stdin ftp1
echo password2 | passwd --stdin ftp2
echo password3 | passwd --stdin ftp3

2.5 修改 sshd_config 配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

vi /etc/ssh/sshd_config

#找到并注释
#Subsystem sftp /usr/libexec/openssh/sftp-server #添加
Subsystem sftp internal-ftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

  

解释:
Subsystem      sftp    internal-sftp  
这行指定使用sftp服务使用系统自带的internal-sftp
 
Match Group sftp  
这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
 
当然,也可以匹配用户
Match User mysftp
这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便
 
ChrootDirectory /data/sftp/%u  
用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动,chroot的含义,可以参考这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
 
ForceCommand    internal-sftp  
指定sftp命令
 
AllowTcpForwarding no  
X11Forwarding no  
这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

2.6 修改目录权限

chown root:sftp /data/sftp/*
chmod 755 /data/sftp/*

解释:
目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限

2.7 创建ftp用户上传下载目录

照上面设置后,在重启sshd服务后,FTP 用户已经可以登录,但使用 chroot 指定根目录后,根应该是无法写入的.

mkdir /data/sftp/ftp1/upload
mkdir /data/sftp/ftp2/upload
mkdir /data/sftp/ftp3/upload

chown ftp1:sftp /data/sftp/ftp1/upload
chown ftp2:sftp /data/sftp/ftp2/upload
chown ftp3:sftp /data/sftp/ftp3/upload

chmod 755 /data/sftp/ftp1/upload
chmod 755 /data/sftp/ftp2/upload
chmod 755 /data/sftp/ftp3/upload

2.8 重启SSHD 服务

service sshd restart

2.9 登录验证

[root@test1 ~]# sftp ftp2@localhost
Connecting to localhost...
ftp2@localhost's password:
sftp> dir
upload
sftp> cd upload
sftp> lcd /etc
sftp> put passwd
Uploading passwd to /upload/passwd
passwd 100% 1825 1.8KB/s 00:00
sftp> dir
passwd
sftp>

  

完成!
 
如果还能不能登录,请检查
1.防火墙是否关闭
2.SELINUX 是否关闭
#关闭命令
service iptables stop
chkconfig iptables off sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;
setenforce 0

参考:

SFTP 服务搭建的更多相关文章

  1. 搭建sftp服务+nginx代理

    在公司,经常会用到sftp服务,比如两个公司对接生产项目,其中一方,要在sftp上上传pdf文件,另一方公司要在sftp服务器上用nginx代理直接下载pdf文件.下面就说说我在实际中应用到的sftp ...

  2. linux 上搭建sftp服务

    原文链接:https://www.cnblogs.com/yanduanduan/p/9046723.html sftp和ftp的区别 FTP是一种文件传输协议,一般是为了方便数据共享的.包括一个FT ...

  3. CentOS7搭建SFTP服务

    CentOS7.5环境下搭建SFTP服务. 创建用户组及用户 创建用户组 # groupadd sftpgroup 创建用户 $ useradd -g sftpgroup -s /sbin/nolog ...

  4. 使用Docker快速搭建sftp服务

    一.安装docker环境 参见 http://www.cnblogs.com/rslai/p/8403350.html 二.从Docker Hub查找sftp镜像 docker search sftp ...

  5. SFTP环境搭建及客户代码调用公共方法封装

    一.背景 在开发应用软件的过程中,广泛使用FTP在各子系统间传送文本数据.但FTP存在安全问题,开放到外网存在安全漏洞,容易被攻击.替换方案是使用SFTP,SFTP提供更高的安全性,当然传输的效率也会 ...

  6. win服务器安装sftp服务端

    工作环境中常常会用要下载数据或者是让对端推送数据到本地服务器上,当传输的数据比较重要时,可以使用基于安全文件传输协议(sftp)来实现需求. 本人在工作环境中就遇到这样的情况,局方给我们推送数据,要求 ...

  7. Linux之sftp服务

    Linux之sftp服务 一.sftp介绍转自:[1]Linux如何开启SFTP https://www.cnblogs.com/xuliangxing/p/7120205.htmlSFTP是Secu ...

  8. Linux设置SFTP服务用户目录权限

    我们有时会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加.修改.删除操作,并且只能使用sftp登录服务器,不能用ssh操作.这些可以通过配置sftp服务实现. 提供sftp服务 ...

  9. ServiceStack.Hello——跨平台.net REST api服务搭建

    ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...

随机推荐

  1. 【转载】MySQL数据库可以用任意ip连接访问的方法

    通过CMD命令行修改数据库表的一个字段的值,实现连接,访问. 第一步.找到MYSQL软件安装所在的bin目录: (1)cd\当前目录 (2)指定MYSQL安装的bin目录 (3)输入 -h local ...

  2. Swiper轮播图

    今天咱们来说一下.Swiper轮播图. 超级简单的: 翠花,上代码:   <!DOCTYPE html>   <html lang="en">   < ...

  3. How to fix Mysql table crashes

    Whenever you enconter this: Please use mysql_upgrade to fix this error. or using  mysql_upgrade -u r ...

  4. SqlServer 批量添加记录

    declare @i int ) begin INSERT INTO [dbo].[Settlements] ([ID] ,[Count] ,[SettlementDate]) VALUES ( ne ...

  5. byr面经两则

    人人,金山西山居,腾讯互娱,微信,网易游戏offer及面经 首先感谢师兄在两年前发的贴([天道酬勤] 腾讯.百度.网易游戏.华为Offer及笔经面经 ),这篇文章对我帮助很大. 我写这篇文章一是为了感 ...

  6. iOS8模糊效果UIVisualEffectView的使用

    iOS8模糊效果UIVisualEffectView的使用 效果: 源码: // // ViewController.m // EffectView // // Created by XianMing ...

  7. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  8. Druid学习---配置_DruidDataSource参考配置

    [更多参考]https://www.cnblogs.com/niejunlei/p/5977895.html 配置_DruidDataSource参考配置 以下是一个参考的连接池配置: <bea ...

  9. php中的mysql_fetch_row,mysql_fetch_array,mysql_fetch_object

    1.mysql_fetch_row mysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数组返回.每个结果的列储存在一个数组的单元 ...

  10. cascade属性

    cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,一对一的时候直接写在标签上,其他的要写在set标签上 cascade="none|save-upd ...