array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 『学了就忘』Linux启动引导与修复 — 71、grub启动引导程序的加密 - 爱码网
liuyuelinfighting

1、什么是grub加密

上篇文章说了,系统在开机的时候,有一个5秒的读秒时间,方便你进入到grub界面中。

如下图所示:

image

此时我们按下Enter键,就可以进入到grub界面中。

如下图所示:

image

在选择框的正下方可以看到有几行提示:

# 使用 ↑ 和 ↓ 键高亮某个选项,并按回车键确认来引导选定的操作系统。
Use the ↑ and ↓ keys to select which entry is highlighted.
Press enter to boot the selected OS,

# 按e键在启动之前编辑命令,
'e' to edit the connands before booting,

# 按a键在启动之前修改内核参数,
'a' to nodify the kernel argunents before booting, 

# 按c键切换命令行(esc键返回)。
or 'c' for a connand-1 ine.

可以看到提示,按e键就能编辑grub配置文件中的启动选项内容。

e键,结果如下图:

image

提示再按e键可直接修改内容。

grub加密,就是在上面第二张图的状态时,需要先输入我们设定的密码,才能按e键编辑系统启动参数。也就是说给grub设置一个密码, 避免像上边那样能够直接进入grub,并编辑其中的系统启动参数。

2、grub加密步骤

1)执行grub-md5-crypt命令成生md5密码。

执行命令:[root@localhost ~]# grub-md5-crypt

2)设置密码。

输入两次密码:

Pas sword:
Retype pas sword:

生成MD5加密的密码字符串:$1$Y84LB1$8tMY2PibScmu0Cc8z8U351

这样就把你输入的密码进行了MD5加密,用这个加密字符串来加密grub配置文件。

3)修改grub的配置文件。

一定在timeout属性之后,在splashimage属性之前,添加password选项,一定是这个顺序,放在其他位置不生效。

如下所示:

[root@localhost ~]# vim /boot/grub/grub.conf

# 内容
default=0
timeout=5

# password选项放在整体设置处。
password --md5 $1$Y84LB1 $8tMY2PibScmu0Cc8z8U35/

splashimage=(hd 0,0)/grub/splash.xpm.gz

4)重启系统。

重启系统后,我们发现进入到grub界面中,下面的提示,原来的e键变成了p键。

image

我们再按e键都是没有反应的,按p键就会让你输入密码,不输入密码你就不能编辑grub的配置文件。

如下图所示:

image

输入后按Enter键,才进入到可编辑的grub界面中,e键提示又出来了。如下图:

image

注意:

当你在第四步中第一个图的时候,就算你不知道密码,直接按Enter键,系统是可以直接启动的。所以说grub加密是对grub配置文件的编译进行了加密,而不是对系统的启动进行加密。

上面的加密步骤,是对grub菜单整体加密,整体加密后,如果想进入grub编辑界面必须输入正确的密码。同时也是不影响系统的正常启动的。

还有对单个启动菜单进行加密,但grub的编辑模式是不能锁定的,还是可以按e键进入编辑模式。而且进入编辑模式后,是可以删除password字段的,不是很好,所以不讲解了。

3、grub加密的lock属性

如果我想启动CentOS系统时,既需要grub的整体加密,又需要系统启动时输入正确的grub加密密码,才能正常启动系统。那应该怎么做呢?

很简单,方法如下:在grub/boot/grub/grub.conf配置文件中,在title字段中加入lock,代表锁死,如果不输入正确的grub密码,系统是不能启动的。

如下图所示:

image

注意:

lock这个属性千万不要添加,如果添加了lock属性在grub的配置文件中,当你在不输入密码的时候,直接按Enter键,是不能直接进入系统的,会报错,如下图:

image

提示了错误32,按任意键继续,就又回来了。

image

为什么一定不要添加lock的原因:

在系统启动的时候,进入到grub启动引导,此时系统还没有启动完成,网卡是还没加载生效,所以远程终端是连接不上服务器的,这时候就只能拿键盘做本地输入。但现在我们的服务器一般都放在机房或者远端,你会十分的不方便。所以坚决不能用lock锁定grub的配置文件。

相关文章: