查询
查询库文件
包查询
[select-options]
[query-options]
licdR
常用的查询用法:
卸载:
二进制文件的恢复
包效验
使用rpm命令导入公钥(KEY文件)
验证rpm包来源(光盘)的来源及完整性
检查包安装后生成的文件,是否发生过变动
RPM包管理器的数据库
如果某个rpm相关内容被删除
如果rpm命令的包被删除了
信息库被删除了
删除/usr/bin下面的passwd命令后,如何恢复?
删除过程:
删除检验:
恢复过程:
查询
查询库文件
-
查看二进制程序所依赖的库文件名
ldd /PATH/TO/BINARY/FILE
-
管理及查看本机装载的库文件:ldconfig
-
显示本机已经缓存的所有的可用库文件及文件路径映射关系
ldconfig -p
-
配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
-
缓存文件:/etc/ld.so.cache
-
配置文件和缓存文件的路径/etc/ld.so.*
将新的包的安装路径写入这里,使用ldconfig将路径读入内存中,就可以用啦。
包查询
格式:rpm {-q|–query} [select-options] [query-options]
[select-options]
-
-a : 所有包
-
查询安装在系统上的所有的包
rpm -qa
-
-f : 查看指定的文件由哪个程序包安装生成
-
-p rpmfile(文件包包名) : 针对尚未安装的程序包文件做查询操作;
-
–whatprovides CAPABILITY : 查询指定的CAPABILITY由哪个包所提供
-
–whatrequires CAPABILITY : 查询指定的CAPABILITY被哪个包所依赖
-
–scripts PACKAGE_NAME : 查询某包安装时或卸载时执行的脚本
[query-options]
licdR
-
-c : 查询程序的配置文件
-
-d : 查询程序的文档
-
-i : information
-
-l : 查看指定的程序包安装后生成的所有文件;
-
-R : 查询指定的程序包所依赖的CAPABILITY;
-
–scripts : 程序包自带的脚本片断
-
–provides : 列出指定程序包所提供的CAPABILITY;
-
–changelog : 查询rpm包的changelog
常用的查询用法:
-
-qi PACKAGE,(-i:information)
-
-qf FILE, 查询某文件是由哪个包安装生成的
-
-qc PACKAGE,(-c:configuration)
-
-ql PACKAGE,(-l:list)
-
-qd PACKAGE(-d:document)
-
-qpi PACKAGE_FILE,…
-
-qpl PACKAGE_FILE, …
-
-qa
** notes:**
比如一个rpm包,名为make-3.81-23.el6.x86_64,那么这里:
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
其他选项同-i(安装)
triggers触发器:做一个动作的时候触发另外一个动作
二进制文件的恢复
假如不小心删除了某个二进制文件:
rpm2cpio 包文件 (这里展现的是二进制数据流,直接只运行这个,会扰乱整个终端,使用reset可以恢复 | \ >cpio –itv 预览包内文件 rpm2cpio 包文件 | cpio –id “*.conf” (只解压配置文件) 释放包内文件
这种恢复方法,恢复后的文件中,会有原来命令在系统中所需要用的权限。
包效验
开发者:使用单向特征算法,提取包文件的特征码,并使用私钥加密该特征码。对外提供出公钥。(这种是非对称加密)(如果使用对称加密算法的话,加密解密使用同一套密钥)
使用者:拿到包(内含加密过的特征码)和公钥,
– 使用公钥解密特征码===>证明来源是正确的
– 使用与开发者相同的单项特征算法提取包的特征码,与解密的特征码对比,相同,则表示该包未被修改过。===>内容等的正确性
-
存放公钥的位置
使用rpm命令导入公钥(KEY文件)
-
导入命令格式
rpm –import /path/to/RPM-GPG-KEY-FILE -
例如:
rpm –import RPM-GPG-KEY-CentOS-6 -
查询系统中是否有该秘钥:
[root@node4 ~]# rpm -qa gpg* gpgme-1.1.8-3.el6.x86_64[object Object][object Object]
-
卸载导入的公钥(pub key)===使用-e选项
[root@node4 yum.repos.d]# rpm -qa gpg* gpgme-1.1.8-3.el6.x86_64 [root@node4 yum.repos.d]# rpm -e gpgme-1.1.8-3.el6.x86_64 error: Failed dependencies: libgpgme-pth.so.11()(64bit) is needed by (installed) kdepimlibs-4.3.4-4.el6.x86_64 //这里想要删除的gpg密钥,系统中与他存在以来关系,所以不能够被删除。
这时候,虽然安装包依然是合法的,但是因为没有pubkey了,所以就无法检测包的完整性了。
NOTE:
在import后,就可以直接使用光盘了。
验证rpm包来源(光盘)的来源及完整性
rpm {-K|–checksig} PACKAGE_FILE
-
–nosignature:不检查来源合法性
-
–nodigest:不检查完整性
NOTES:
有时候,直接安装文件,不能够确定文件是完整的。需要使用-K
检查包安装后生成的文件,是否发生过变动
rpm {-V|--verify} [select-options] [verify-options]
S | 文件大小改变(file Size differs) |
---|---|
M | 文件类型或文件的属性(包括权限和文件类型)( Mode differs (includes permissions and file type)) |
5 | MD5的指纹码( digest (formerly MD5 sum) differs) |
D | 装置的主/次代码已经发生改变( Device major/minor number mismatch) |
L | Link路径已经发生改变(readLink(2) path mismatch) |
U | 文件属主改变( User ownership differs) |
G | 文件属组改变( Group ownership differs) |
T | 文件的修改时间发生改变(mTime differs) |
P | 文件功能发生改变( capabilities differ) |
-
系统安装新的包的时候,是如何知道这个包是否是被篡改过的呢?
-
安装后,某段时间之后,如何知道现在的包是否是当初安装的那个,是没有被黑客等恶意篡改的呢?
-
怎么对比呢?
因为系统中,在安装包时,将包的很多信息记录了下来。一段时间后对比,就可以知道了
使用当前包的状态,和系统中RPM包管理器的数据库中的记录进行对比
RPM包管理器的数据库
RPM包管理器的数据库,主要用来存放记录一些与软件相关的信息。
-
位置:/var/lib/rpm
-
命令:
rpm {--initdb|--rebuilddb[-v][--dbpath DIRECTORY}
- initdb:初始化数据库,数据库完全不存在时,可新建之 - rebuilddb:无论当前数据存在与否,都会直接创建词库;构建的数据库存放在、var/lib/rpm当中 - centos7中,使用rpmdb来替换这里的rpm命令。
如果某个rpm相关内容被删除
如果rpm命令的包被删除了
rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm | cpio -tv
信息库被删除了
/var/lib/rpm是rpm记录包信息的数据库
-
删除了该库后:
-
删除后,无法完成校验
-
安装数据库文件,也不能够完成
-如果已经完全删除了,可以使用initdb来初始化数据库,但是这里也只是建立了起来,里面的内容很可能都是空的。
删除/usr/bin下面的passwd命令后,如何恢复?
删除过程:
-
rm /usr/bin/passwd
删除检验:
恢复过程:
-
查询passwd命令的安装需要哪些包文件
[root@localhost Packages]# ls | grep passwd-0.79-4.el7.x86_64.rpm passwd-0.79-4.el7.x86_64.rpm[object Object][object Object]
-
查看这个包当中,包含哪些文件
rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv
从该查看命令的输出可以看出,每个文件的权限在正常系统中的权限,也都是给好了的。所以直接恢复就可以了,之后不需要再次修改权限了。
[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv -rw-r--r-- 1 root root 188 Jun 10 2014 ./etc/pam.d/passwd -rwsr-xr-x 1 root root 27832 Jun 10 2014 ./usr/bin/passwd drwxr-xr-x 2 root root 0 Jun 10 2014 ./usr/share/doc/passwd-0.79 -rw-r--r-- 1 root root 156 Nov 26 2012 ./usr/share/doc/passwd-0.79/AUTHORS -rw-r--r-- 1 root root 19950 Nov 26 2012 ./usr/share/doc/passwd-0.79/COPYING ....... 864 blocks
这个包中,包含那么多的文件,但是真正恢复需要的文件,只有一个。
[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv | grep /usr/bin/passwd -rwsr-xr-x 1 root root 27832 Jun 10 2014 ./usr/bin/passwd
-
解压这个包中的指定文件
rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -id ./usr/bin/passwd
[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -id ./usr/bin/passwd 864 blocks [root@localhost ~]# ls anaconda-ks.cfg Documents f.sh passwd Public usrbin Downloads initial-setup-ks.cfg passwd-0.79-4.el7.x86_64.rpm sbin VideosDesktop etc Music Pictures Templates
-
查看解压后的文件,权限在解压包中就已经给好了,无需修改权限了。
[root@localhost ~]# ll ./usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Aug 22 08:26 ./usr/bin/passwd
-
直接恢复文件
cp -a 能够拷贝文件的全部及元数据
[root@localhost ~]# cp -a ./usr/bin/passwd /usr/bin/ [root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Aug 22 08:26 /usr/bin/passwd
原创文章,作者:m20-吴清玲,如若转载,请注明出处:http://www.178linux.com/39876