Linux的安全和加密
【加密】
在互联网时代,最重要的是数据信息的安全。为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。这篇博就来说说linux的安全和加密。
什么是加密?加密总的来说就是将一串数据或者一个文件从明文转为密文的过程;对于已经加密的数据或者文件,使用某种方法将其从密文转为明文的过程就是解密了。
加密的过程分为两种:对称加密和非对称加密。
所谓对称加密,就是加密和解密的过程中使用同一个**。它的实现过程是:使用钥匙对数据或者文件进行加密,然后用户可以使用这把钥匙对数据或者文件解密。这样做的好处是,在处理数据或者文件时效率很高,但是同时安全性就较低。想想看,如果想让两个用户查看你的文件,你需要把你的钥匙复制两把分别给这两个用户,但由于你的文件锁只有这一个,所以如果这两个用户把你的钥匙复制送给了别人,别人是不是也可以轻而易举的打开你的锁?这样就会造成**过多,安全性降低。那么这个问题就由非对称加密来解决了。
非对称加密就比较厉害了。非对称加密的钥匙是成对出现的。即我们常听说的公钥和私钥。顾名思义,公钥就是公共的钥匙,即这把钥匙大家都可以有,你好我好大家好。那私钥就是自己私人的钥匙呗,自己小金库的钥匙你总不能给人家吧?一个道理。那么非对称加密是怎么实现加密过程的呢?如果只想将一个文件给固定的一个用户看,使用用户的公钥对文件加密,用户如果想要查看,就要使用自己的私钥进行解密,这样是不是就保证了只要用户才能查看文件的内容,而其他人看到的只能是加密过的文件。但是这样做也同时带来一个缺点,就是效率问题。**过长,加密解密耗时长。这就是非对称加密的实现原理。
Linux上有一个加密的小工具,即gpg,使用它可以实现对称和非对称加密。
【实验】gpg对称加密
现在我们有两台机器,分别是centos6和centos7,利用gpg来实现对称加密。
现有一个test文件,使用gpg -c 对文件进行加密:
输入**口令:
回车后系统会生成后缀为.gpg的已经加密过的文件:
使用scp命令将文件发给centos6:
在centos6上查看文件:
输入口令:
对称加密的整个实现过程很简单,因此也验证了我们上面所说的安全性低的问题。
【实验】非对称加密的实现
【SSH】
SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
可以实现ssh安全登陆有两个软件可以实现:
openssh:是ssh协议的开源实现,
dropbear:小型的远程登陆工具。
从客户端来看。SSH有两种基于用户的登陆验证方式:
1、基于口令的安全验证
2、基于**的安全验证
第一种,基于口令的安全验证,实现原理是:只要你知道账号和口令,就可以登陆到远程主机,所有传输的数据都被加密,每次登陆输入账号口令即可;但是不能保证你连接的服务器是你所想连接的服务器,可能会出现服务器冒充的情况;
第二种,基于**的安全验证,实现原理是:
1、首先客户端会生成一对公钥和私钥,并将自己的公钥发送给服务器并重命名为authorized_keys,存放在服务器的~/.ssh/目录下;
2、然后再向服务器端发送一个连接请求,信息包括IP地址、用户名等;
3、服务器收到公钥和请求后,会到authorized_keys中查找,如果有响应的IP地址、用户名,就会随机生成一个字符串,并使用客户端的公钥加密后发送回去;
4、客户端收到服务器的消息,使用私钥进行解密,并将解密后的字符串发送给服务器;
5、服务器收到客户端的回应,将客户端发来的字符串与之前的字符串进行比对,如果一致,就允许免密码登陆。这就是基于key的验证,在生产中多用到这种方式。
需要注意的是:需要我们操作的只有第一步和第二步,至于后面的验证步骤,是客户端和服务器自己完成的,并不需要我们来操作。
下面来模拟实验客户端和服务器之间的基于key验证:
【实验】
实验条件:客户端Rhel5(IP地址172.17.253.58)、服务器centos6(IP地址172.17.253.57)
实验目的:实现客户端和服务器之间的基于key验证。
需要使用一条命令:ssh-******
用于生成**,先来看一下它的选项:
选项 | 注释 |
---|---|
-b | 指定**长度; |
-e | 读取openssh的私钥或者公钥文件; |
-C | 添加注释; |
-f | 指定用来保存**的文件名; |
-i | 读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; |
-l | 显示公钥文件的指纹数据; |
-N | 提供一个新密语; |
-P | 提供(旧)密语; |
-q | 静默模式; |
-t | 指定要创建的**类型 |
-i | 指定公钥文件 |
先来看一下基于口令的验证:
通过以上实验,基于口令的验证方式只适用于小型环境,如果一个公司有很多台服务器,并且口令都不相同,那么连接起来是不是就很麻烦?这就需要用到基于key验证的登陆方式;那我们接下来来看看基于key验证的登陆方式:
下面的验证是由客户端和服务器自己完成的,我们不需要操作,只需要登陆验证一下就可以了:
思考一下:如果我们只是完成了上述操作,那么这样来说,服务器是不是照样是不安全的?虽然客户端连接方便了,但是如果客户端遭受了黑客攻击,从而就可以通过控制客户端来控制服务器了,是不是很吓人?为了解决这个问题,那我们需要给私钥设置一个口令来加把锁:
这样的做法也衍生出一个问题:为了安全给私钥设置了口令,那么每登陆一次就需要输入私钥的口令,这样跟口令验证的方法并没有什么不同,那么如何体现出基于key验证的特殊之处呢?我们需要找一个中间人,把钥匙托管给他,我们只需要告诉他一次口令,剩下的验证就可以交给他实现了:
使用验证代理的好处是,退出登陆即失效,如果客户端这边临时有事只需退出系统,需要登陆时验证代理**就可以了,这样就可以防止别有用心的人操作客户端而进行攻击服务器,相对来说比较安全。
ssh工具也有一些选项:
选项 | 注释 |
---|---|
-p port | 指定远程服务器监听的端口 |
-b | 指定连接的源IP |
-v | 调试模式 |
-C | 请求压缩所有数据 |
-X | 启支持X11转发功能 |
-x | 关闭x11转发功能 |
-Y | 支持信任x11转发 |
-t | 伪终端登陆,找一个跳板机实现间接连接 |