helloxixi 发表于 2017-3-14 15:02:47

grub2 中md5sum的使用方式

想在grub启动时对内核文件进行校验,目前看到md5sum -c 这个命令可以检测文件的完成性,但是如果MD5验证失败后就不启动内核,这个grub.cfg 关于md5sum这一段该怎么写?

wintoflash 发表于 2017-3-15 20:14:49

请教一下md5sum -c是怎么用的?

helloxixi 发表于 2017-3-16 11:56:26

wintoflash 发表于 2017-3-15 20:14
请教一下md5sum -c是怎么用的?

我先在ubuntu系统里面使用命令md5sun initrd.img-4.4.0-57-generic >/boot/file.md5生成initrd.img-4.4.0-57-generic文件的md5校验文件。然后重启ubuntu,进入grub2 的command界面,然后在grub输入md5sum -c /boot/file.md5 -p /boot/ 这个命令可以通过这个file.md5文件校验initrd.img-4.4.0-57-generic这个文件,如果initrd.img-4.4.0-57-generic文件被修改过则会校验失败,没有修改则校验成功。我现在想通过校验结果来决定是否启动系统。现在遇到的问题是手动执行md5sum -c /boot/file.md5 -p /boot/ 可以做正确判断,但是现在遇到的问题不能依据这个执行结果做逻辑判断

wintoflash 发表于 2017-3-16 12:05:32

helloxixi 发表于 2017-3-16 11:56
我先在ubuntu系统里面使用命令md5sun initrd.img-4.4.0-57-generic >/boot/file.md5生成initrd.img-4.4 ...

命令执行失败,返回值为1,执行成功,返回值为0。根据这个用if判断应该可以吧。

helloxixi 发表于 2017-3-16 17:11:14

wintoflash 发表于 2017-3-16 12:05
命令执行失败,返回值为1,执行成功,返回值为0。根据这个用if判断应该可以吧。

a=$(md5sum -c /boot/file.md5 -p /boot/)这个命令取不到返回值,执行报错,是这样取返回值吗

wintoflash 发表于 2017-3-16 17:40:31

helloxixi 发表于 2017-3-16 17:11
a=$(md5sum -c /boot/file.md5 -p /boot/)这个命令取不到返回值,执行报错,是这样取返回值吗

md5sum -c /boot/file.md5 -p /boot/
a=$?
试一试。

helloxixi 发表于 2017-3-16 18:03:44

wintoflash 发表于 2017-3-16 17:40
md5sum -c /boot/file.md5 -p /boot/
a=$?
试一试。

用你的方法能拿到返回值,但是文件被修改过和没有被修改过返回值都是0。我猜可能是命令执行是成功的,所以返回值都是0 但是校验成功了输出OK,文件被修改校验失败了输出failed所以无论是ok,还是failed命令的返回值都是0 除非命令报错

helloxixi 发表于 2017-3-16 18:50:23

wintoflash 发表于 2017-3-16 17:40
md5sum -c /boot/file.md5 -p /boot/
a=$?
试一试。

谢谢可以了把命令改成这样就可以获取到返回值,成功返回0,失败返回1 ,命令如下:
md5sum -c /boot/file.md5 -p /boot/
a=${?}
页: [1]
查看完整版本: grub2 中md5sum的使用方式