ssh长途登录协议和tcp wappers
1.SSH服务
1.1 SSH基础
什么是SSH服务器?
SSH(Secure Shell)是一种安全通道协议,首要用来完结字符界面的长途登录、长途 仿制等功能。SSH 协议对通讯两边的数据传输进行了加密处理,其中包含用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加速传输速度。
SSH客户端<————–网络—————->SSH服务端
长处:
- 数据传输是加密的,能够避免信息泄漏
- 数据传输是压缩的,能够进步传输速度
常见的ssh协议
客户端:
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient
OpenSSH 是完结SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作体系。
Centos 7体系默许已装置openssh相关软件包,并将sshd 服务添加为开机自发动。
履行"systemctl start sshd"指令即可发动sshd 服务
sshd 服务默许运用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有缝隙)
sshd服务的默许装备文件是/etc/ssh/sshd_config
ssh_config和sshd_config都是ssh服务器的装备文件,二者差异在于前者是针对客户端的装备文件,后者则是针对服务端的装备文件。
ssh服务端首要包含两个服务功能 ssh长途链接和sftp服务
效果:SSHD 服务运用 SSH 协议能够用来进行长途操控,或在核算机之间传送文件。
比较较之前用 Telnet 方法来传输文件要安全许多,因为 Telnet 运用明文传输,SSH 是加密传输。
服务称号:sshd
服务端主程序:/usr/sbin/sshd
服务端装备文件:/etc/ssh/sshd_config
客户端装备文件:/etc/ssh/ssh_config
1.2 ssh原理
1.2.1公钥传输原理
-
客户端主张链接恳求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,核算出一个值Res,并用服务端的公钥加密
-
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,核算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:两边各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的一切通讯都
会被加密
ssh加密通讯原理
(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服务器上衔接的用户的家目录下5、优缺点
比较于对称加密技能,非对称加密技能安全性更好,但功能更慢。此本次实验中,咱们用非对称加密算法ECDSA进行加密,为了便运用root用户,也可给其他普通用户装备
1.2.2登录
#登录 方法一:
ssh [长途主机用户名]@[长途服务器主机名或IP地址] -p port
当在 Linux 主机上长途衔接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当衔接另一台主机时也是用 root 用户登录时,能够直接运用 ssh IP,端口默许即可,假如端口不是默许的情况下,需求运用-p 指定端口。
比方:
[root@ky15 ~]#ssh root@192.168.91.101
#默许运用22端口 root(登录对方的用户)加IP 地址,初次登录会问询,并要求输入暗码
The authenticity of host '192.168.91.101 (192.168.91.101)' can't be established.
ECDSA key fingerprint is SHA256:o72+YjT+8laQRofsv2dFlcx099aeoI92rloek3ZVrUY.
ECDSA key fingerprint is MD5:a7:9c:69:35:16:17:21:cb:0e:4f:0d:42:44:16:3a:f7.
Are you sure you want to continue connecting (yes/no)?
root@192.168.91.101's password:
Last login: Tue Sep 28 22:23:52 2021
[root@ky15-1 ~]#
#登录方法二
ssh -l [长途主机用户名] [长途服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录称号。
-p:-p 选项,指定登录端口(当服务端的端口非默许时,需求运用-p 指定端口进行登录)
比方:
[root@ky15 ~]#ssh -l root 192.168.91.101
root@192.168.91.101's password:
Last login: Tue Sep 28 22:25:40 2021 from 192.168.91.100
1.3服务端装备
1.3.1常用装备项:
[root@ky15-1 ~]# vim /etc/ssh/sshd_config
Port 22 #出产主张修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes #默许ubuntu不答应root长途ssh登录
StrictModes yes #检查.ssh/文件的一切者,权限等
MaxAuthTries 6 #pecifies the maximum number of authentication
# ssh -o NumberOfPasswordPrompts=8root@192.168.91.100需求合作这个选 项一同运用
attempts permitted per connection. Once the number of failures reaches half this
value, additional failures are logged. The default is 6.
MaxSessions 10 #同一个衔接最大会话
PubkeyAuthentication yes #根据key验证
PermitEmptyPasswords no #空暗码衔接
PasswordAuthentication yes #根据用户名和暗码衔接
GatewayPorts no
ClientAliveInterval 10 #单位:秒
ClientAliveCountMax 3 #默许3
UseDNS yes #进步速度可改为no
GSSAPIAuthentication yes #进步速度可改为no
MaxStartups #未认证衔接最大值,默许值10
Banner /path/file
#以下能够束缚可登录用户的方法:白名单 黑名单
AllowUsers user1 user2 user3@ip(束缚主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
ssh服务的最佳实践
- 主张运用非默许端口
- 制止运用protocol version 1
- 束缚可登录用户
- 设定闲暇会话超时时长
- 运用防火墙设置ssh拜访战略
- 仅监听特定的IP地址
- 根据口令认证时,运用强暗码战略,比方:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
- 运用根据密钥的认证
- 制止运用空暗码
- 制止root用户直接登录
- 束缚ssh的拜访频度和并发在线数
- 常常剖析日志
1.3.2 运用秘钥对及免交互验证登录
原理:
- 用户/暗码
- 根据秘钥
用户/暗码:
-
客户端主张ssh恳求,服务器会把自己的公钥发送给用户
-
用户会根据服务器发来的公钥对暗码进行加密
-
加密后的信息回传给服务器,服务器用自己的私钥解密,假如暗码正确,则用户登录成功
根据密钥的登录方法
-
首要在客户端生成一对密钥(ssh-keygen)
-
并将客户端的公钥ssh-copy-id 拷贝到服务端
-
当客户端再次发送一个衔接恳求,包含ip、用户名
-
服务端得到客户端的恳求后,会到authorized_keys()中查找,假如有响应的IP和用户,就会随机生成一个字符串,例如:kgc
-
服务端将运用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
得到服务端发来的音讯后,客户端会运用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行比照,假如一致,就答应免暗码登录
[lisi@ky15-1 root]$ ssh-keygen --help
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[lisi@ky15-1 root]$ ssh-keygen -t ecdsa
#生成密钥文件
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/lisi/.ssh/id_ecdsa):
Created directory '/home/lisi/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lisi/.ssh/id_ecdsa.
Your public key has been saved in /home/lisi/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:hbO1nsVS739lrS+T4lMg4NbYihnyx96e0eYFgqP6eK4 lisi@ky15-1
The key's randomart image is:
+---[ECDSA 256]---+
| |
| .. |
| .o=o . |
| . . +*++.. |
| o *S.+.+.. .|
| +.+o * o. +|
| .o .+ o.o+.|
| o. . .=o.=..|
| E=o .o.oo ++|
+----[SHA256]-----+
[lisi@ky15-1 .ssh]$ cd ~
[lisi@ky15-1 .ssh]$ ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.91.100
#将公钥文件导入对方用户的 留意路径
#到对面服务器
[root@ky15 home]#cd zhangsan/
[root@ky15 zhangsan]#ls -a
. .bash_history .bash_profile .cache .mozilla
.. .bash_logout .bashrc .config .ssh
[root@ky15 zhangsan]#cd .ssh/
[root@ky15 .ssh]#ls
authorized_keys
[root@ky15 .ssh]#cat authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKQSA9IyCq51N+pngvuFSwoBsWBlzBPn1/pI73wSB+onDfd9i81aTl+QBysQFrDfWUcxlCKniUOP0BewP5rxD+o= lisi@ky15-1
免交互登录
[lisi@ky15-1 .ssh]$ ssh-add
Enter passphrase for /home/lisi/.ssh/id_ecdsa:
Identity added: /home/lisi/.ssh/id_ecdsa (/home/lisi/.ssh/id_ecdsa)
#此处输入此前的暗码
[lisi@ky15-1 .ssh]$ ssh zhangsan@192.168.91.100
Last login: Wed Sep 29 00:24:26 2021 from 192.168.91.101
[zhangsan@ky15 ~]$
ssh-keygen -t ecdsa
ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.91.100
ssh-add
#与用户暗码无关
#IP地址无关
#只与密钥对有关
1.4ssh客户端
scp指令 —— 长途安全仿制
sftp指令 —— 安全FTP上下载
格式:sftp user@host
[root@ky15-1 .ssh]# sftp root@192.168.91.100
[root@ky15-1 .ssh]# sftp -oPort=220 root@192.168.91.100
#假如修改了固定端口
2.TCP Wrappers
在 Linux 体系中,许多网络服务针对客户端提供了拜访操控机制,如 Samba、BIND、 HTTPD、OpenSSH 等。本节将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作 为应用服务与网络之间的一道特别防线,提供额定的安全保证。
TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了
一个安全检测过程,外来的衔接恳求有必要先经过这层安全检测,获得许可后才干拜访真实
的服务程序,如图 4.3 所示。TCP Wrappers 还能够记载一切妄图拜访被保护服务的行为,
为办理员提供丰厚的安全剖析材料。
2.1战略的装备格式
两个战略文件的效果相反,但装备记载的格式相同,如下所示。
服务程序列表:客户端地址列表
服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分 隔
(1)服务程序列表
服务程序列表可分为以下几类。
ALL:代表一切的服务
单个服务程序:如“vsftpd“
多个服务程序组成的列表:如“vsftpd,sshd”
2)客户端地址列表
客户端地址列表可分为以下几类。
- ALL:代表任何客户端地址。
- LOCAL:代表本机地址。
- 单个 IP 地址:如“192.168.4.4”
- 网络段地址:如“192.168.4.0/255.255.255.0”
- 以“.”开端的域名:如“.bdqn.com”匹配 bdqn.com 域中的一切主机。
- 以“.”完毕的网络地址:如“192.168.4.”匹配整个 192.168.4.0/24 网段
- 嵌入通配符“”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2”
- 匹配以 10.0.8.2 开头的一切 IP 地址。不可与以“.”开端或完毕的形式混用
- 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”
2.2拜访操控的基本原则
#留意sshd_config的黑白名单
[root@ky15 ~]#vim /etc/ssh/sshd_config
[root@ky15 ~]#ls /etc/host
host.conf hostname hosts hosts.allow hosts.deny
[root@ky15 ~]#vim /etc/hosts.allow
#装备格式 服务:地址(客户端)
#添加
sshd:192.168.91.101
[root@ky15 ~]#vim /etc/hosts.deny
sshd:ALL
3.轻量级自动化运维东西pssh
EPEL源中提供了多个自动化运维东西
-
pssh:根据python编写,可在多台服务器上履行指令的东西,也可完结文件仿制,提供了根据ssh
和scp的多个并行东西,项目:code.google.com/p/parallel-…
-
pdsh:Parallel remote shell program,是一个多线程长途shell客户端,能够并行履行多个长途
主机上的指令。 可运用几种不同的长途shell服务,包含rsh,Kerberos IV和ssh,项目:
pdsh.googlecode.com/
-
mussh:Multihost SSH wrapper,是一个shell脚本,答应运用指令在多个主机上经过ssh履行命
令。 可运用ssh-agent和RSA/DSA密钥,以削减输入暗码,项目:
www.sourceforge.net/projects/mu…
pssh 指令选项如下:
-H:主机字符串,内容格式”[user@]host[:port]”
-h file:主机列表文件,内容格式”[user@]host[:port]”
-A:手动输入暗码形式
-i:每个服务器内部处理信息输出
-l:登录运用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输出文件【可选】
-t:TIMEOUT 超时时间设置,0无束缚【可选】
-O:SSH的选项
-P:打印出服务器返回信息
-v:具体形式
--version:检查版本
4selinux
4.1什么是selinux
SELinux,Security Enhanced Linux 的缩写,也便是安全强化的 Linux,是由美国国家安全局(NSA)联合其他安全组织(比方 SCC 公司)共同开发的,旨在增强传统 Linux 操作体系的安全性,处理传统 Linux 体系中自主拜访操控(DAC)体系中的各种权限问题(如 root 权限过高等)。
SELinux 项目在 2000 年以 GPL 协议的形式开源,当 Red Hat 在其 Linux 发行版本中包含了 SELinux 之后,SELinux 才逐渐变得流行起来。现在,SELinux 现已被许多组织广泛运用,简直一切的 Linux 内核 2.6 以上版本,都集成了 SELinux 功能。
关于 SELinux,初学者能够这么了解,它是部署在 Linux 上用于增强体系安全的功能模块。
提到这儿,读者有必要具体地了解一下这两个拜访操控体系的特色:
-
自主拜访操控体系(Discretionary Access Control,DAC)
是 Linux 的默许拜访操控方法,也便是根据用户的身份和该身份对文件及目录的 rwx 权限来判别是否能够拜访。不过,在 DAC 拜访操控的实际运用中咱们也发现了一些问题:
- root 权限过高,rwx 权限对 root 用户并不生效,一旦 root 用户被盗取或者 root 用户自身的误操作,都是对 Linux 体系的致命威胁。
- Linux 默许权限过于简单,只要一切者、所属组和其他人的身份,权限也只要读、写和履行权限,并不利于权限细分与设定。
- 不合理权限的分配会导致严重后果,比方给体系灵敏文件或目录设定 777 权限,或给灵敏文件设定特别权限——SetUID 权限等。
-
强制拜访操控(Mandatory Access Control,MAC)是经过 SELinux 的默许战略规矩来操控特定的进程对体系的文件资源的拜访。也便是说,即使你是 root 用户,可是当你拜访文件资源时,假如运用了不正确的进程,那么也是不能拜访这个文件资源的。
这样一来,SELinux 操控的就不单单仅仅用户及权限,还有进程。每个进程能够拜访哪个文件资源,以及每个文件资源能够被哪些进程拜访,都靠 SELinux 的规矩战略来确认。
不过,体系中有这么多的进程,也有这么多的文件,假如手艺来进行分配和指定,那么作业量过大。所以 SELinux 提供了许多的默许战略规矩,这些战略规矩现已设定得比较完善,咱们稍后再来学习怎么检查和办理这些战略规矩。
这儿举一个比方,假定 apache 上发现了一个缝隙,使得某个长途用户能够拜访体系的灵敏文件(如 /etc/shadow)。假如咱们的 Linux 中启用了 SELinux,那么,因为 apache 服务的进程并不具备拜访 /etc/shadow 的权限,所以这个长途用户经过 apache 拜访 /etc/shadow文件就会被 SELinux 所阻挡,起到保护 Linux 体系的效果。
4.2 selinux效果
传统的 Linux 体系安全,选用的是 DAC(自主拜访操控方法),而 SELinux 是部署在 Linux 体系中的安全增强功能模块,它经过对进程和文件资源选用 MAC(强制拜访操控方法)为 Linux 体系提供了改进的安全性。
需求留意的是,SELinux 的 MAC 并不会完全取代 DAC,恰恰相反,关于 Linux 体系安全来说,它是一个额定的安全层,换句话说,当运用 SELinux 时,DAC 仍然被运用,且会首要被运用,假如答应拜访,再运用 SELinux 战略;反之,假如 DAC 规矩回绝拜访,则根本无需运用 SELinux 战略。
例如,若用户尝试对没有履行权限(rw-)的文件进行履行操作,那么传统的 DAC 规矩就会回绝用户拜访,因而,也就无需再运用 SELinux 战略。
比较传统的 Linux DAC 安全操控方法,SELinux 具有许多好处,比方说:
- 它运用的是 MAC 操控方法,这被以为是最强的拜访操控方法;
- 它赋予了主体(用户或进程)最小的拜访特权,这也就意味着,每个主体仅被赋予了完结相关使命一切必要的一组有限的权限。经过赋予最小拜访特权,能够避免主体对其他用户或进程产生不利的影响;
- SELinux 办理过程中,每个进程都有自己的运转区域(称为域),各进程仅运转在自己的域内,无法拜访其他进程和文件,除非被授予了特别权限。
- SELinux 能够调整到 Permissive 形式,此形式答应检查在体系上履行 SELinux 后所产生的印象。在 Permissive 形式中,SELinux 仍然会记载它所以为的安全缝隙,但并不会阻挠它们。
有关 SELinux 形式设置等内容,后续章节会具体介绍。
其实,想要了解 SELinux 的长处,最直接的方法便是检查当 Linux 体系上没有运转 SELinux 时会产生什么工作。
例如,Web 服务器看护进程(httd)正在监听某一端口上所产生的工作,而后进来了一个恳求检查主页的来自 Web 浏览器的简单恳求。因为不会受到 SELinux 的束缚,httpd 看护进程听到恳求后,能够完结以下工作:
- 根据相关的一切者和所属组的rwx权限,能够拜访任何文件或目录;
- 完结存在安全隐患的活动,比方答应上传文件或更改体系显示;
- 能够监听任何端口的传入恳求。
但在一个受 SELinux 束缚的体系上,httpd 看护进程受到了更加严厉的操控。仍然运用上面的示例,httped仅能监听 SELinux 答应其监听的端口。SELinux 还能够避免 httpd 拜访任何没有正确设置安全上下文的文件,并回绝没有再 SELinux 中显式启用的不安全活动。
因而,从本质上讲,SELinux 最大程序上束缚了 Linux 体系中的恶意代码活动。