ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux-如何强制rpm -V验证所有文件?

2019-11-19 18:50:54  阅读:338  来源: 互联网

标签:verify rpm linux


我希望能够针对rpm数据库验证所有文件(所有文件均来自rpm).

示例:当我要求rpm验证包含/ etc / hosts的软件包时,我得到:

# rpm -Vv setup-2.8.14-16.el6.noarch
.........  c /etc/aliases
S.5....T.  c /etc/bashrc
.........  c /etc/csh.cshrc
.........  c /etc/csh.login
.........  c /etc/environment
.........  c /etc/exports
.........  c /etc/filesystems
.........  c /etc/group
.........  c /etc/gshadow
.........  c /etc/host.conf
.........  c /etc/hosts
.........  c /etc/hosts.allow
(stuff deleted)

我想看看/ etc / hosts已更改.我该怎么做呢?

解决方法:

rpm规范文件可以明确说明应使用-V验证文件的哪些方面,通常希望更改配置文件(在输出的第二列中由c表示),并且在更新时不会覆盖配置文件.

使用rpm -qlv可以很容易地获得原始文件的大小和所有权,因此您可以对相同的文件进行ls处理,然后进行比较.例如,

rpm=setup
rpm -ql $rpm | 
xargs ls -ld --time-style='+%b %d %Y' |
tr -s ' ' |
sort -k9 |
diff -u <(rpm -qlv $rpm |tr -s ' ' | sort -k9) -

可以显示更改(现在是rpm的前缀-)或不显示更改(前缀).

这是一个脚本,其中包含软件包名称列表,并使用–dump来获取
校验和信息(等),在我的Fedora 22上似乎是sha256sum,而不是
md5sum,并将其与真实文件进行比较.尽管rpm -V还有一个额外的最终字段,
“功能不同”,转储输出中未提供此信息.

#!/bin/bash
for pkg
do rpm -q --dump "$pkg" |
 while read path size mtime digest mode owner group isconfig isdoc rdev symlink
 do if [ "$path" = package ] # not installed
    then echo "$path $size $mtime $digest $mode"
         continue
    fi
    S=. M=. F=. D=. L=. U=. G=. T=.
    type=$(stat --format='%F' $path)
    if [ "$type" = "regular file" ]
    then if realsum=$(sha256sum <$path)
         then [ $digest != ${realsum/ -/} ] && F=5
         else F=?
         fi
    elif [ "$type" = "symbolic link" ]
    then reallink=$(readlink $path)
        [ "$symlink" != "$reallink" ] && L=L
    # elif [ "$type" = "directory" ] ...
    fi
    eval $(stat --format='s=%s u=%U g=%G t=%Y hexmode=%f' $path)
    realmode=$(printf "%07o" 0x$hexmode)
    realmode6=$(printf "%06o" 0x$hexmode)
    [ "$mode" != "$realmode" -a "$mode" != "$realmode6" ] && M=M
    [ "$size" != "$s" ] && S=S
    [ "$owner" != "$u" ] && U=U
    [ "$owner" != "$g" ] && G=G
    [ "$mtime" != "$t" ] && T=T
    flags="$S$M$F$D$L$U$G$T"
    [ "$flags" = "........" ] ||
    echo "$flags $path" # missing: P capabilities
 done
done

标签:verify,rpm,linux
来源: https://codeday.me/bug/20191119/2038293.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有