对于linux运维工作者而言,加密技术已经很早就用于数据的存储和数据之间的交换。我们可以会为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。一下就对linux的安全和加密依据个人学习经验做以下总结。
学习的章节内容:
目录
安全机制
对称和非对称加密
散列算法
gpg
PKI和CA
openssl
证书管理
ssh服务和dropbear
aide
Sudo
TCP Wrappers
PAM模块
安全机制
信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性 Controlability
不可否认性 Non-repudiation
安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法
对称和非对称加密
什么是加密?加密总的来说就是将一串数据或者一个文件从明文转为密文的过程;对于已经加密的数据或者文件,使用某种方法将其从密文转为明文的过程就是解密了。
加密的过程分为两种:对称加密和非对称加密。
所谓对称加密,就是加密和解密的过程中使用同一个密钥。它的实现过程是:使用钥匙对数据或者文件进行加密,然后用户可以使用这把钥匙对数据或者文件解密。这样做的好处是,在处理数据或者文件时效率很高,但是同时安全性就较低。想想看,如果想让两个用户查看你的文件,你需要把你的钥匙复制两把分别给这两个用户,但由于你的文件锁只有这一个,所以如果这两个用户把你的钥匙复制送给了别人,别人是不是也可以轻而易举的打开你的锁?这样就会造成密钥过多,安全性降低。那么这个问题就由非对称加密来解决了。
非对称加密就比较厉害了。非对称加密的钥匙是成对出现的。即我们常听说的公钥和私钥。顾名思义,公钥就是公共的钥匙,即这把钥匙大家都可以有,你好我好大家好。那私钥就是自己私人的钥匙呗,自己小金库的钥匙你总不能给人家吧?一个道理。那么非对称加密是怎么实现加密过程的呢?如果只想将一个文件给固定的一个用户看,使用用户的公钥对文件加密,用户如果想要查看,就要使用自己的私钥进行解密,这样是不是就保证了只要用户才能查看文件的内容,而其他人看到的只能是加密过的文件。但是这样做也同时带来一个缺点,就是效率问题。密钥过长,加密解密耗时长。这就是非对称加密的实现原理。
常用密码算法和协议
认证协议:
对称加密算法
对称加密:加密和解密使用同一个密钥
特性:
缺陷:
Linux上有一个加密的小工具,即gpg,使用它可以实现对称和非对称加密。
现在我们有两台机器,分别是centos6和centos7,利用gpg来实现对称加密。
现有一个test文件,使用gpg -c 对文件进行加密:
输入密钥口令:
回车后系统会生成后缀为.gpg的已经加密过的文件:
使用scp命令将文件发给centos6:
在centos6上查看文件:
解密过程:
输入密钥口令:
对称加密的整个实现过程很简单,因此也验证了我们上面所说的安全性低的问题。
非对称加密算法
缺点:密钥长, 加密解密效率低下
公钥私钥文件:
[root@centos6-->01:08:46~]#cd /etc/ssh
[root@centos6-->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
检查包的完整性:
先导入公钥:
[root@centos6-->01:08:46~]# rpm --import /misc/cd/RPM-GPG-KEY-Centos-7
[root@centos6-->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主机上生成公钥/私钥对
[root@centos6-10 ~ 12:10:38]# gpg --list-keys ##查看公钥私钥
[root@centos6-10 ~ 12:10:38]# gpg --gen-key ##生成公钥私钥对
2、在centos6主机上导入公钥
[root@centos6-10 ~ 12:10:38]# gpg --import zhang.pubkey ###导入centos7中的公钥
[root@centos6-10 ~ 12:10:38]# gpg --list-keys
3、用从centos7主机导入的公钥,加密centos6主机的文件file,生成file.gpg
[root@centos6-10 ~ 12:10:38]#gpg -e -r centos7 test
*****注意:这里选定用谁的公钥进行加密,就是当初创建公钥私钥时候起的名字*****
4、复制加密文件到centos7主机
scp test.gpg 192.168.161.130:
5、在centos7主机解密文件
[root@centos7-4 data]#gpg -d test.gpg ###解密文件并打印
[root@centos7-4 data]# gpg -o file -d test.gpg ###解密后生成文件
删除公钥和私钥
单向散列(又成哈希算法)
任意数据缩小成固定大小的“指纹”
功能:数据完整性
常见算法
常用工具
常见工具使用方法:
计算哈希值:
[root@centos7-->19:39:52/data]#sha1sum /dev/sr0
4eead850afed0fc7d170c23bfabfed379419db79 /dev/sr0
或者
[root@centos7-->19:39:52/data]# sha1sum test
md5sum all.sh md5sum + file
83b567b32827ce7f26f528676653097e all.sh
例子:
[root@centos7-4 data]# sha1sum test > sha1.log
[root@centos7-4 data]# cat sha1.log
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666 test
[root@centos7-4 data]# sha1sum fstab2 >> sha1.log
[root@centos7-4 data]# cat sha1.log
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666 test
9f93eb08a16db59d0522bdc79c187381bc466dc8 fstab2
[root@centos7-4 data]# sha1sum --check sha1.log
test: OK
fstab2: OK
###检查文件的内容是否被修改,修改后可以校验哈希值是否有变化###
sha1sum --check file
[root@centos7-->20:00:51/data]#cat check.log
7b7b5b3ef60d9ea7ebf93b4469103caf43059939 all.sh
96f485550c4ad72dd572abef1f26df6b05c42d4e age.sh
[root@centos7-->20:01:01/data]#sha1sum --check check.log
all.sh: OK
age.sh: OK
rpm -V 可以检查安装包是否被修改过,如果修改过,将会显示修改信息,如果没有修改则返回空值,以下截图为修改过信息后的返回信息。
[root@centos7-4 data]# rpm -V tree