【SSH/SFTP】SSH协议和SFTP
【SSH和SFTP】
■ 设置一个只允许访问部分目录的SFTP服务器
由于SSH和SFTP之间的紧密联系,一个SFTP服务器必然会导致开放一定的SSH服务,而SSH的风险显然比SFTP要大一些。自然,我们就会需要:1.禁止SSH登录但保持SFTP服务可用;2.SFTP也不能让外部用户可以自由读写所有服务器上信息。这两个需求可以通过用户配置及sshd配置来配合完成。
在/etc/ssh/sshd_config中加上这些配置:
#Subsystem sftp /usr/libexec/openssh/sftp-server
#这行是默认开启的,用#把它注释掉 #添加下面这些内容,其中ftpuser是我们要进行限制的用户
Subsystem sftp internal-sftp
Match User ftpuser
ChrootDirectory /hsdata/datadir/ftpuser
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
如果顺利,那么ftpuser通过sftp协议连入之后,默认就是在/hsdata/datadir/ftpuser这个目录下,且cd ..;或者读写其他目录下的尝试都会失败。比如cd /tmp时会提示不存在/tmp目录。因为此时对于这个SFTP的客户端来说,/hsdata/datadir/ftpuser就是根目录/。
要想顺利实现,有两个前提条件:
1. ChrootDirectory配置项的值即/hsdata/datadir/ftpuser这个目录及其所有长辈目录(/hsdata/datadir和/hsdata)必须都是root:root的。
2. ChrootDirecotry配置项的值的目录及其所有长辈目录,最大权限只能开放到755,即写权限只能让目录所有者(即root)拥有。
上述sshd_config的变更成功实现了对sftp用户进行访问限制的功能,但是此时用户还可以通过ssh连入,这就没有意义了。禁止其ssh连入但是允许sftp连入的实现方式很简单,是改变用户的默认shell(which是/bin/bash)为/bin/false:
#在root权限下
usermod -s /bin/false ftpuser
■ 几个概念初探
使用java的jsch包,进行SSH/SFTP连接时,经常会出现各种各样的错误。比如报错Algorithm Negotiation错误,比如End of IO Stream等等。首先jsch包版本本身会对连接能否成功建立有影响。比如一个实践是当S端的openssh组件升级之后,C端无论如何连不上,但是将jsch包从45版本升级到53或者54版本就可以了。。这个比较迷,也还没来得及深究原因。
其次要明确,SSH连接中有C端(客户端)和S端(服务端)。如果要进行一个连接,那么C端和S端应该都装有openssh(都是Linux的场合),如果两者版本一致是最好了。但是往往C端和S端的openssh版本不同。版本不同会导致很多乱七八糟的事情。
在建立连接的过程中,C和S端要进行加密算法(Cipher)、密钥交换算法(Kex Algorithm)和消息确认算法(MAC)。Kex的全称是Key Exchange,MAC的全称是Message Authentication Code。如果两端无法协商成立使用统一的算法,那么连接就无法建立。通常一个特定发行版本的openssh会自带一些默认支持的算法,对于剩余不默认支持的,可以在配置文件中加入额外配置增加支持。
当openssh升级过后客户端发现无法连接了,那么很有可能是openssh新版本将一些默认支持的老算法(尤其是kex算法部分)列入了默认不支持范围。可以考虑在/etc/ssh/sshd_config中增加相关配置即可。具体增加的配置可以百度一下,有很多,也就是配置了名为Ciphers,Kex Algorithms和MACs的三项。
另一方面,在手动通过字符界面的ssh客户端发起连接时,如果想要知道客户端和服务端究竟协商成了什么样的算法,那么可以ssh -vvv 目标IP,加上参数-vvv之后,ssh连接过程中的所有debug日志都会被打印出来。在打印出来的日志中可以详细查询debug1(C端日志)和debug2(S端日志)开头的部分。其中就有debug1后面的kex algorithm和debg2后面的algorithm,分别指出了C、S端使用的Kex算法。
在C或S任意一端上,如果想要查看默认支持的算法,还可以尝试通过man sshd_config或者ssh -Q kex(仅限于查看kex算法,也可换成cipher或者mac)两条命令。不过对于一些版本比价老的openssh,可能这些命令不支持需要注意。
【SSH/SFTP】SSH协议和SFTP的更多相关文章
- 教你如何配置linux用户实现禁止ssh登陆机器但可用sftp登录!
构想和目标最近有个这样的诉求:基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,如直接修改代码.系统配置,并且也直接连上mysql.因此希望能限制开发人 ...
- 常见https,SSH协议和MD5加密方式分析
前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加入SSL层,是http安全的基础;B.htts协议是在 ...
- Installing SFTP/SSH Server on Windows using OpenSSH
Installing SFTP/SSH Server 1. On Windows 10 version 1803 and newer In Settings app, go to Apps > ...
- 第1章 ssh和SSH服务(包含隧道内容)
本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...
- man ssh翻译(ssh命令中文手册)
本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1) BSD Ge ...
- HTTP协议和SOCKS5协议
HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...
- [转]ssh和SSH服务(包含隧道内容)
本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...
- linux下的ssh与ssh客户端
经常会看到ssh客户端,或者听到ssh到某台机器..问题:ssh和ssh客户端什么关系? 1.ssh,secure shell,是一种网络交互协议,也指实现该协议的网络服务程序.主要用于远程机器管理, ...
- 页面解耦—— 统跳协议和Rewrite引擎
原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...
随机推荐
- R+OCR︱借助tesseract包实现图片文本提取功能
2016年11月,Jeroen Ooms在CRAN发布了tesseract包,实现了R语言对简单图片的文本提取.分析功能. 利用开源OCR引擎进行图片处理,目前可以识别超过100种语言,R语言可以借助 ...
- php中的单引号、双引号和转义字符
PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name):最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出. 例如: <?php ...
- thinphp 整合ueditor
我的ueditor是部署在public/editor 部署前台页面 <script type="text/javascript" > var UEDITOR_HOME_ ...
- 基于LVDS/M-LVDS的数据通信
现在有两种方案:一种基于 M-LVDS (基于总线的多节点通信) ,有其 特定的电气要求:另外一种是基于 LVDS 的点到点通信,具体说明如 下: 基于 M-LVDS 的总线通信: 基于 M-LVDS ...
- JavaScript过滤特殊字符
JavaScript过滤特殊字符 1.设计实例 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Struts2实现文件上传报错(二)
1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -he ...
- ONCOCNV软件思路分析之control处理
进行数据初步处理(perl) 统计amplicon的RC(read counts),并且相互overlap大于75%的amplicon合并起来 统计每个amplicon的GC含量,均值, 性别识别并校 ...
- winfrom如何在listview中添加控件
private Button btn = new Button(); private void Form1_Load(object sender, EventArgs e) { ListViewIte ...
- springMVC web项目 对访问数据库的用户名密码进行加密解密
在使用springMVC开发web项目中,数据库的用户名,密码一般都是配置在.properties文件中 然后在通过.xml配置文件引入.properties的变量,例如 在config.proper ...
- CSS实现网页背景图片自适应全屏
一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形 ...