一、Linux Service and Security
1、OpenSSL(ssl/tls)协议
2、OpenSSH(ssh)协议
3、bind(dns)
4、web(http):httpd(apache),php,mariadb(mysql),LAMP,nginx(tengine,openresty),lnmp
5、file server:nfs,samba,ftp
6、dhcp,pxe
7、iptables
8、sudo,pam,nsswitch
二、OpenSSL
1、我们网络通信的两套协议家族(OSI和TCP/IP)
2、我们的通信协议大概可以分为两层,位于用户空间的叫做资源子网,位于内核空间的叫做通信子网,任何一个进程通信的数据报文都要通过网络发送给主机才能完成通信的目的。因此TCP/IP协议栈中应用层(资源子网)以下的几层主要考虑的是报文如何安全无误的送达到通信对端的。而资源子网中主要是考虑我们的数据是如何组织和交换的。我们的数据该如何表示,如何组织以及如何完成双方在应用层的交换。因此应用层主要是在用户空间实现,那么用户空间谁来负责实现它呢?其实在用户空间中每安装一款软件他就能作为我们用户空间的协议的客户端或服务端在进行工作,比如我们安装了httpd那么他就能作为我们http协议的服务端在工作。我们的浏览器就相当于作为http协议的客户端在工作。
3、同一主机上的进程间通信:IPC,message queue(消息队列),shm(共享内存),semerphor
4、不同主机上的进程间通信:socket
a、IP:port
port:进程地址,其是由内核中传输层协议提供,进程向内核注册使用某端口(独占)。
b、传输层协议:TCP,UDP,SCTP(流控协议)
c、cip:port <-- --> sip:port
d、我们通信的时候是一方发起一方接收,那么我们接收的一方到底该怎么接收呢?是别人随来我们就可以随意接收呢还是说我们应该做出什么样的准备来接收呢?因此一般来讲通信请求的发起方一般来讲应该明确对端的地址,包含了IP+端口,那么我们如何得知对端的IP+端口呢?因此我们的服务器端随时就需要处于监听模式。他指的是无论有没有人访问他都在那里。因此我们默认的http服务是80,https服务是443
5、ssl(Secure Socket layer):我们的wangjing公司为http协议设计研发了一种可被调用的公共功能模块,这个公共功能模块把它放在了应用层和传输层之间,他以库的形式来表示,并且在应用层和传输层协议层中都只放了半层。任何本身不具备加解密的程序在研发时调用了这个库他就能使用这个功能。研发时你调用了这个库他就能使用这个功能,不调用的话也照样可以工作,因此你用或者不用都可以,而这个半层库就叫ssl,也就叫安全的套接字层。所以无论是客户端还是服务器端开发时的程序员都需要用到这个库,程序员如果调用了这个库,这个库自身就能帮我们完成加解密功能。能帮我们完成秘钥分发功能。如果不调用也是可以的。
6、https,如果http协议调用了ssl就变成了https。http和https实现上差别非常的大。现在我们有一种全栈https运动,相当于你浏览商品的过程也是加密的,为什么呢?并不是说你浏览商品的过程是不可告人的,而是说现在互连网上很多运营商是非常流氓的,他会悄悄分析你浏览的过程,然后将过程中的广告悄悄换成自己的。
7、通信安全目标
a、通信的保密性:confidentiality
b、通信完整性:integrity
c、通信可用性:availability
8、安全攻击类型
a、威胁保密性攻击:窃听、通信量分析
b、威胁完整性的攻击:更改、伪装、重放,否认
c、威胁可用性的攻击:拒绝服务(DoS)
9、解决方案
a、技术
(1)、加密和解密
(2)、服务(用于抵御攻击的服务,也即是为了实现上述安全目标而特地设计的安全服务)
b、加密和解密
(1)、传统加密方法:替代加密方法、置换加密方法
(2)、现代加密方法:现代块加密方法、
任何未加密的技术我们都可以称为明文,然后我们结合算法将其转换为另外一种机制,我们称为密文,这个过程我们就称为加密。解密相当于我们拿到密文后使用解密算法然后将其转换为明文。因为算法好多人都知道,因此我们更多的不能依赖于算法本身而应该依赖于参与者,我们可以额外加一个参与者,也叫秘钥。我们可以让秘钥作为参与者从而保证加密的安全性,算法人人都可以理解,即便你知道算法和密文,我们也要确保不能通过密文在不知道秘钥的情况下暴力还原回来。这儿就有一个问题就是你的秘钥如何安全送达到对方,因为对方没有你的秘钥他也没法解密。如果你们此前未曾见过面,这时候就比较麻烦了
c、服务
(1)、认证机制
(2)、访问控制
d、秘钥算法和协议
(1)、对称加密
(2)、公钥加密
(3)、单向加密
(4)、认证协议
10、Linux实现上述加密功能的协议
a、OpenSSL(ssl协议的实现)
b、GPG(pgp协议的实现)
三、OpenSSL
1、OpenSSL由三部分组成
a、libencrypt:加密和解密库,专门实现加密和解密功能
b、libssl:用来实现sll安全通信机制的库。因此任何程序如果要想实现加密解密功能不是为了通信的目的可以调用libencrypt库,如果要基于安全通信方式加密解密就可以使用libssl
c、openssl:多用途命令行工具
2、加密算法和协议
a、对称加密:加密和解密使用同一个密钥
(1)、DES:Data Encryption Standrd。2003年被废了,因为被一个100万美元的服务器破解了。
(2)、3DES:Triple DES。比DES安全了三个数量级
(3)、AES:Advanced Encryption Standrd。DES使用56位密钥,而AES支持128,192,256,384位密钥
(4)、Blowflsh
(5)、Twoflsh
(6)、IDEA
(7)、RC6
(8)、CAST5
b、特性
(1)、加密,解密使用同一个密钥
(2)、将原始数据分割成为固定大小的块,逐个进行加密
c、缺陷
(1)、密钥过多:作为服务器端,我们需要与成千上万的客户端通信,这就导致我们要与每一个通信者之间都要使用一个独立的专用密钥,否则都有可能导致密钥彼此之间共享,一旦共享了安全性就不复存在了。
(2)、密钥分发困难:某东生成了密钥加密了一个数据,加密了数据后你访问不了还要再把密码给你,怎么拿到密码呢?因此就涉及到密钥交换。