对于linux运维工作者而言,加密技术已经很早就用于数据的存储和数据之间的交换。我们可以会为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。一下就对linux的安全和加密依据个人学习经验做以下总结。
学习的章节内容:
目录
安全机制
信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性 Controlability
不可否认性 Non-repudiation
安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法
对称和非对称加密
什么是加密?加密总的来说就是将一串数据或者一个文件从明文转为密文的过程;对于已经加密的数据或者文件,使用某种方法将其从密文转为明文的过程就是解密了。
加密的过程分为两种:对称加密和非对称加密。
所谓对称加密,就是加密和解密的过程中使用同一个**。它的实现过程是:使用钥匙对数据或者文件进行加密,然后用户可以使用这把钥匙对数据或者文件解密。这样做的好处是,在处理数据或者文件时效率很高,但是同时安全性就较低。想想看,如果想让两个用户查看你的文件,你需要把你的钥匙复制两把分别给这两个用户,但由于你的文件锁只有这一个,所以如果这两个用户把你的钥匙复制送给了别人,别人是不是也可以轻而易举的打开你的锁?这样就会造成**过多,安全性降低。那么这个问题就由非对称加密来解决了。
非对称加密就比较厉害了。非对称加密的钥匙是成对出现的。即我们常听说的公钥和私钥。顾名思义,公钥就是公共的钥匙,即这把钥匙大家都可以有,你好我好大家好。那私钥就是自己私人的钥匙呗,自己小金库的钥匙你总不能给人家吧?一个道理。那么非对称加密是怎么实现加密过程的呢?如果只想将一个文件给固定的一个用户看,使用用户的公钥对文件加密,用户如果想要查看,就要使用自己的私钥进行解密,这样是不是就保证了只要用户才能查看文件的内容,而其他人看到的只能是加密过的文件。但是这样做也同时带来一个缺点,就是效率问题。**过长,加密解密耗时长。这就是非对称加密的实现原理。
常用密码算法和协议
- 常用的对称加密算法:DES (56)、3DES、AES (128,192,256,384,512)、Blowfish、Twofish、IDEA、RC6、CAST5等 ;
- 公钥加密:也叫非对称加密,是由对应的一对唯一性**(即公开**和私有**)组成的加密方法。
- 常用的公钥加密算法:RSA, DSA, EIGamal等;
- 单向加密:是不可解密的加密方法,是非可逆的;
- 常用的公钥加密算法:MD5、SHA1、SHA256、SHA384、SHA512等;
认证协议:
- IKE协议(英特网**交换协议):常用来确保虚拟专用网络***与远端网络或者宿主机进行交流时的安全;
- SSL( 安全套接字层): 网络通信提供安全及数据完整性的一种安全协议。
- TLS(传输层安全): 是仿照SSL制定,用于在两个通信应用程序之间提供保密性和数据完整性。
对称加密算法
对称加密:加密和解密使用同一个**
- DES: Data Encryption Standard, 56bits
- 3DES:
- AES: Advanced (128, 192, 256bits)
- Blowfish, Twofish
- IDEA, RC6, CAST5
特性:
- 1、加密、解密使用同一个**,效率高
- 2、将原始数据分割成固定大小的块,逐个进行加密
缺陷:
- 1、 **过多
- 2、**分发
- 3、数据来源无法确认
Linux上有一个加密的小工具,即gpg,使用它可以实现对称和非对称加密。
【实验】gpg对称加密
现在我们有两台机器,分别是centos6和centos7,利用gpg来实现对称加密。
现有一个test文件,使用gpg -c 对文件进行加密:
输入**口令:
回车后系统会生成后缀为.gpg的已经加密过的文件:
使用scp命令将文件发给centos6:
在centos6上查看文件:
解密过程:
输入**口令:
对称加密的整个实现过程很简单,因此也验证了我们上面所说的安全性低的问题。
非对称加密算法
公钥加密: **是成对出现
- 公钥:公开给所有人; public key
- 私钥:自己留存,必须保证其私密性; secret key (private)
- 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
- 数字签名:主要在于让接收方确认发送方身份
- 对称**交换:发送方用对方的公钥加密一个对称**后发送给对方
- 数据加密:适合加密较小数据
缺点:**长, 加密解密效率低下
算法:
- RSA(加密,数字签名) bob----> alice alice公钥加密【bobS(data)】用bob私钥加密
- DSA(数字签名)
- ELGamal
公钥私钥文件:
[[email protected]>01:08:46~]#cd /etc/ssh
[[email protected]>02:17:13/etc/ssh]#ls
moduli ssh_host_dsa_key ssh_host_key.pub
ssh_config ssh_host_dsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_key ssh_host_rsa_key.pub
检查包的完整性:
先导入公钥:
[[email protected]>01:08:46~]# rpm --import /misc/cd/RPM-GPG-KEY-Centos-7
[[email protected]>01:08:46~]# rpm -K /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm
/misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
【实验】非对称加密的实现
在hostB主机上用公钥加密,在hostA主机上解密
1、在centos 7主机上生成公钥/私钥对
gpg --gen-key
2、在centos7主机上查看生成的公钥
gpg --list-keys
3、在centos7主机上导出公钥到zhang.pubkey
gpg -a --export -o zhang.pubkey
4、从centos7主机上复制公钥文件到需加密的B主机上
scp zhang.pubkey hostB:
scp zhang.pubkey 192.168.161.129
完成第一阶段。
第二阶段:在主机B上生成非对称公钥/**对
1、在需加密数据的centos6主机上生成公钥/私钥对
[[email protected] ~ 12:10:38]# gpg --list-keys ##查看公钥私钥
[[email protected] ~ 12:10:38]# gpg --gen-key ##生成公钥私钥对
2、在centos6主机上导入公钥
[[email protected] ~ 12:10:38]# gpg --import zhang.pubkey ###导入centos7中的公钥
[[email protected] ~ 12:10:38]# gpg --list-keys
3、用从centos7主机导入的公钥,加密centos6主机的文件file,生成file.gpg
[[email protected] ~ 12:10:38]#gpg -e -r centos7 test
*****注意:这里选定用谁的公钥进行加密,就是当初创建公钥私钥时候起的名字*****
4、复制加密文件到centos7主机
scp test.gpg 192.168.161.130:
5、在centos7主机解密文件
[[email protected] data]#gpg -d test.gpg ###解密文件并打印
[[email protected] data]# gpg -o file -d test.gpg ###解密后生成文件
删除公钥和私钥
- gpg --delete-keys centos7
- gpg --delete-secret-keys centos7
单向散列(又成哈希算法)
任意数据缩小成固定大小的“指纹”
- • 任意长度输入
- • 固定长度输出
- • 若修改数据,指纹也会改变(“不会产生冲突”)
- • 无法从指纹中重新生成数据(“单向”)
功能:数据完整性
常见算法
- md5: 128bits、 sha1: 160bits、 sha224、 sha256、 sha384、 sha512
常用工具
- • md5sum | sha1sum [ --check ] file
- • openssl、 gpg
- • rpm -V
常见工具使用方法:
计算哈希值:
[[email protected]>19:39:52/data]#sha1sum /dev/sr0
4eead850afed0fc7d170c23bfabfed379419db79 /dev/sr0
或者
[[email protected]>19:39:52/data]# sha1sum test
md5sum all.sh md5sum + file
83b567b32827ce7f26f528676653097e all.sh
例子:
[[email protected] data]# sha1sum test > sha1.log
[[email protected] data]# cat sha1.log
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666 test
[[email protected] data]# sha1sum fstab2 >> sha1.log
[[email protected] data]# cat sha1.log
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666 test
9f93eb08a16db59d0522bdc79c187381bc466dc8 fstab2
[[email protected] data]# sha1sum --check sha1.log
test: OK
fstab2: OK
###检查文件的内容是否被修改,修改后可以校验哈希值是否有变化###
sha1sum --check file
[[email protected]>20:00:51/data]#cat check.log
7b7b5b3ef60d9ea7ebf93b4469103caf43059939 all.sh
96f485550c4ad72dd572abef1f26df6b05c42d4e age.sh
[[email protected]>20:01:01/data]#sha1sum --check check.log
all.sh: OK
age.sh: OK
rpm -V 可以检查安装包是否被修改过,如果修改过,将会显示修改信息,如果没有修改则返回空值,以下截图为修改过信息后的返回信息。
[[email protected] data]# rpm -V tree