一、SSH服务
1、SSH是什么?
SSH协议是一种安全通道协议,主要用来实现字符界面等待远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH为建立在应用层和传输层基础上的安全协议。
2、SSH服务常用软件和及基础知识
SSH客户端:putty、Xshell、CRT、MobaXterm、FinalShell
SSH服务端:OpenSSH
OpenSSH是实现SSH协议的开源软件项目,设用于各种UNIX、Linux操作系统。 OpenSSH常用的配置文件有两个/etc/ssh/ssh_config和/etc/sshd_config ssh_config:为客户端配置文件,设置与客户端相关的应用可以通过此文件实现 sshd_config:为服务器端配置文件,设置与服务端相关的应用可通过此文件实现
Centos7系统默认已安装openssh相关软件包,并将sshd服务添加为开机自启
systemctl start sshd 命令可启动sshd服务
sshd服务默认使用TCP的22端口
sshd服务的默认配置文件为:/etc/ssh/sshd_config
ssh_config和sshd_config都是ssh服务器的配置文件,二者的区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
3、ssh服务端的两个服务功能
两个服务是ssh远程链接和sftp服务
作用:SSHD服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件。相比较之前用Telnet方式来传输文件要安全很多,因为Telnet使用明文传输,SSH是加密传输。
ssh -v 查看当前ssh服务的版本
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
4、ssh远程登录方式
(1)登录 方法一:
ssh [远程主机用户名] @[远程服务器主机名或IP地址] -p port
当在 Linux主机上远程连接另一台 Linux主机时,如当前所登录的用户是root的话,当连接另一台主机时也是用root用户登录时,可以直接使用ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p指定端口。
RSA算法基于一个十分简单的数论事实;将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
(2)登录方法二
ssh -l [远程主机用户名] [远程服务器主机名或IP地址] -p port -l: -l 选项,指定登录名称。
-p: -p选项,指定登录端口(当服务端的端口非默认时,需要使用-p指定端口进行登录)
注:第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连接,输入yes后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/ss/knownhosts件中,下次进行登录时因为保存有该主机信息就不会再提示了
5、Openssh服务包
openssh-5.3p1-114.e16_7.x86_64 #包含OpenSSH服务器及客户端需要的核心文件。
openssh-clients-5.3p1-114.e16_7.x86_64 #OpenSSH客户端软件包。
openssh-server-5.3p1-114.e16_7.x86_64 #OpenSSH服务器软件包。
openssh-askpass-5.3p1-114.e16_7.86_64 #支持对话框窗口的显示,是一个基于x系统的
rpm -qa | grep openssh ##查看openssh软件包
生产中要及时升级openssh包可增加ssh传输的安全性,可在官网中下载。升openssh是有风险的升级失败会导致22端口不能使用。
升级时候尽量使用编译安装,必须先安装telnet并测试用户登录无问题才能进行升级
或者编译RPM包 openssh
二、ssh密钥对验证
1、ssh密钥对概述
SSH协议是采用了基于密钥的安全验证方式用于远程管理的,需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥(锁头)(Public key)放在需要访问的目标服务器上,另外,还需要把私有密钥(钥匙)(Private key)放到SSH的客户端或对应的客户端服务器上。
2、加密算法
(1)对称加密
1、概念
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
2、常用算法
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
3、特点
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
4、优缺点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
(2)非对称加密
1、概念
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
2、常用算法
RSA(RSA algorithm):目前使用最广泛的算法
DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA
仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快
ECC(Elliptic curve cryptography,椭圆曲线加密算法)
ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA
的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障
3、原理
首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的SSH客户端发送过来的公用密钥进行比较。如果两个密钥一致,SSH服务器就用公钥加密"质询"(challenge)并把它发送给SSH客户端。
4、特点
私钥不能在网络中传输,私钥可以解密公钥
公钥可以在网路中传输,公钥不能解密私钥
5、优缺点
相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
三、实验案例
1、实验一
远程登录并查看生成的加密方式(在文件konwn_hosts中)
登出后查看文件 /root/.ssh/hnown_host
注意:工作中遇到登录报错,删除known_hosts删除可能解决问题
2、实验二 (修改hosts配置文件)
用主机名实现远程登录
先修改两台主机中的配置文件
vim /etc/hosts
用20主机远程连接19主机,就可以登录了
3、实验三(远程登入用户的账号)
ssh [用户名] @主机ip
输入用户密码成功就可登入
4、实验四 (跳过验证界面直接远程登录)
ssh -o StrictHostKeyChecking=no root@ip地址 ###就可以跳过验证界面
在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登录会被禁止,并弹出如下类似提示:
The authenticity of host '192.168.109.11 (192.168.109.11)' can't be established.
ECDSA key fingerprint is SHA256:AaGpHeEiRuXMy96oezzV6Toej5nJUmZIe/djqR7qCVk.
ECDSA key fingerprint is MD5:78:al:bl:1c:36:76:c7:34:54:87:cc:ea:51:3f:0c:24.
Are you sure you want to continue connecting (yes/no) ? yes
warning: Permanently added '192.168.10.9’(ECDSA) to the list of known hosts.
Authentication failed.
ssh会把你每个你访问过计算机的公钥(publickey)都记录在**~/.ssh/known_hosts**。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,openSSH会发出警告,避免你受到DNS Hijack之类的攻击。
解决办法
使用ssh连接远程主机时加上"-o StrictHostKeyChecking=no"的选项,如下:
ssh -o .StrictHostKeyChecking=no 192.168.xxx.xxx
一个彻底去掉这个提示的方法是,修改/etc/ssh/ssh_config文件(或$HOME/.ssh/config)中的配置,添加如下两行配置:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一IP,登录过一次后就会把ssh信息记录在本地的~/.ssh/known hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容
5、实验五(指定端口实现远程连接)
vim /etc/ssh/sshd_config #进入配置文件
修改完成 重启服务
-p 指定端口号 进行sshd控制连接
useDNS yes 一般来说,为了要判断客户端来源是正常合法的,因此会使用DNS去反查客户端的主机名,但通常在内网互连时,该项设置为no因此使联机的速度会快一些
禁用DNS反向解析以提高服务器的响应速度
当有人使用时ssh登录系统的时候,SSH会记录信息,这个信息要记录的类型为AUTHPRIV,sshd服务日志存放在:/var/log/secure。
6、实验六(设置安全调优时间)
进入配置文件设置安全调优时间为一分钟
并重启服务
过了一分钟就登陆不上了
7、实验7 (permitRootLogin yes)
是否允许root登入,默认是允许的,但是建议设定成no,真实的生产环境服务器,是不允许root账号直接登录的,仅允许普通用户登录,需要用到root用户再切换到root用户。
vim /etc/ssh/sshd_config
permitROOTlogin no #不允许root用户登录
####PasswordAuthentication yes
密码验证当然是需要的!所以这里写yes,也可以设置为
no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
关闭密码认证
开启密钥认证
8、密钥登录实验一
服务器提供的密钥对
(1) 先创建普通用户zhuxuan设置密码,切换到用户
再创建密钥对
(2)vim /etc/ssh/sshd_config ##修改配置文件
PubkeyAuthentication yes #开启密钥认证登录
AuthorizedKeysFile .ssh/authorized_keys #注意查看你的公钥名称是否一致
关闭密码认证
修改密钥对应的路径 保存并重启服务
3、
上传到桌面
设置登录用户
导入密钥
用zhuxuan用户登录登录成功
9、密钥登录实验二
客户端提供密钥对
1、配置用户属性,选择密钥对登录
选择生成密钥
默认下一步
默认下一步
设置密钥名称 设置密码
保存公钥文件到桌面
把桌面上的公钥文件传送到
/root/.ssh 目录下
vim /etc/ssh/sshd_config #修改配置文件
用root用户登录选择相应的密钥文件
root用户登录成功
10、scp复制
安全性复制
scp:scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,而且scp传输是加密的。
本地文件复制到服务器
scp li.txt root@192.168.154.19:/opt
复制服务器的目录到本地
scp root@192.168.154.19:/home/sky/ ./
本地目录复制到服务器
scp -r sky2/ root@192.168.154.19:/home
(1)将本地文件复制到服务器
(2)复制本地目录到服务器
3、本地目录复制到服务器
11、sftp安全性传输
安全性传输sftp
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。
sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作
所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP
sftp root@192.168.154.10 #登陆到服务器
get下载
get anaconda-ks.cfg /home/
上传
put 123.txt #默认时会上传的/root
put 123.txt /home/
查看可用命令
help #查看sftp可使用的命令和用途
打印服务器当前位置
pwd #打印当前服务器所在位置
lpwd #打印当前本地位置
切换目录、查看文件
cd #切换服务器上的目录
ls #查看当前目录下文件列表
下载文件、退出sftp
get #下载文件
get -r #下载目录
quit #退出sftp
put #上传文件
退出命令:quit、exit都可以
(1)、从服务端下载文件
(2) 上传文件到服务器
四、TCP Wrappers访问控制
在 Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、 HTTPD、OpenSSH 等
TCP Wrappers(TCP封套) 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了 一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
1、TCP WRAPPERS概述
TCP wrappers 将 TCP服务程序"包裹"起来, 代为监听 TCP
服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序
TCP Wrappers 还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料
TCP Wrappers 的访问控制是基于 TCP 协议的应用服务
TCP Wrappers 只能控制 TCP 协议的应用服务,并且不是所有基于 TCP 协议的应用服务都能接受它的控制
2、保护机制的实现方式
直接使用 tcpd 程序对其他服务程序进行保护,需运行 tcpd 程序。
由其他网络服务程序调用 libwrap.so.* 链接库,不需要运行tcpd程序,此方式的应用更广泛,更有效率。
3、配置文件
/etc/hosts.allow 允许
etc/hosts.deny 拒绝
4、策略应用
(1)设置访问控制策略
格式:
语法格式:<服务程序列表>:<客户端地址列表> 服务程序列表、客户机地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分隔
服务程序列表:
多个服务以逗号分隔,ALL表示所有地址
单个服务程序:如“vsftpd"
多个服务程序组成的列表:如“vsftpd, sshd"
客户端地址列表:
ALL:代表任何客户端地址
LOCAL:代表本机地址
多个地址以逗号分隔
允许使用通配符"*“和”?",前者代表任意长度字符,后者仅代表一个字符
网段地址,如"192.168.109. "或者 192.168.109.0/255.255.255.0
区域地址,如“. sky.com"匹配sky.com域中的所有主机
(2)访问控制基本原则
检查hosts.allow,找到匹配则允许访问
再检查hosts .deny,找到则拒绝访问
若两个文件中均无匹配策略,则默认允许访问
允许所有,拒绝个别
只需在/etc/hosts.deny文件中添加相应的拒绝策略
允许个别,拒绝所有
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts deny文件中设置"ALL:ALL"的拒绝策略。
总结
ssh的原理
ssh常用操作实验
密钥对的原理及实验
TCP Wrappers访问控制