当前位置: 首页 > 面试题库 >

如何找出一个进程需要哪些Linux功能才能工作?

施阳曜
2023-03-14
问题内容

我处在一个困难的情况下,我不知道一个进程需要什么Linux功能才能工作。最好的方法是什么,或者找出所需的上限的任何方法?

我现在唯一能想到的就是使用capsh并降低进程中的所有上限。然后,该过程失败,我开始添加上限(通过删除–drop = CAP_XZY),直到它起作用为止。

还有更好的建议吗?


问题答案:

我之前在Brendan Gregg的这篇博客文章中遇到的另一种方法是使用功能跟踪器 功能

以下是示例输出:

$ sudo /usr/share/bcc/tools/capable
TIME      UID    PID    COMM             CAP  NAME                 AUDIT
11:31:54  0      2467   capable          21   CAP_SYS_ADMIN        1
11:31:54  0      2467   capable          21   CAP_SYS_ADMIN        1
11:31:59  1000   2468   ls               1    CAP_DAC_OVERRIDE     1
11:31:59  1000   2468   ls               2    CAP_DAC_READ_SEARCH  1
11:32:02  0      1421   timesync         25   CAP_SYS_TIME         1
11:32:05  1000   2469   sudo             7    CAP_SETUID           1
11:32:05  0      2469   sudo             6    CAP_SETGID           1

它具有记录内核针对给定进程进行的功能检查的显着优势。这样就可以根据应用程序实际需要的功能来分析应用程序,例如,缩小特权范围并以非特权用户身份执行它。

尽管 pscap 允许列出所有正在运行的进程的 有效 功能,但它不能提供一种可靠的方法来检查该进程实际上需要哪些功能,因为:

  • 进程可能在其允许的集合中具有能力X,并且仅在短时间内将其提升到有效的集合中才能执行特权操作。
  • 一个进程本可以从更广泛的功能集开始,进行需要提升特权的初始化,然后放弃某些(或全部)功能(例如ping打开原始套接字)。
  • 它仅适用于已经以基于功能的方式运行的进程。如果必须确定新开发的应用程序所需的最小功能集怎么办?
  • 它不允许将对应用程序进行的特权检查与它执行的操作相关联,并且 无法 获得每次检查的时间戳。

对于源
可在github上。对于BCC(包括安装说明
能力
)都可以在这里。有关进一步的描述,请参阅开头提到的博客文章,也请注意,该功能需要内核4.4+,博客文章中也提供了较旧内核的替代方法。


注意:我不是作者,也不以任何方式隶属于工具开发人员。我只是想将它带给更广泛的受众,因为我亲自使用它来为复杂的监视应用程序开发功能配置文件,该应用程序以前需要运行完整的root特权才能运行,并且发现此跟踪器有很大帮助。



 类似资料:
  • 假设我有一个Docker容器来保存一些数据。我希望这些数据能够持久化--如果容器被停止、删除、升级等,我仍然希望这些数据位于主机OS文件系统中的一个可访问的位置。 那么,如何对正在挂载的目录设置正确的权限呢?

  • 问题内容: 我认为这个问题已经存在,但是我找不到。 我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例: 这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码? 编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要

  • 我正在使用HIbernate core 3.6.2 final。我将注释类映射放在hibernate中。cfg。xml,例如 由于我使用3.6.2的Hibernate版本,所以我不需要创建注释配置类对象。因此,我将配置对象创建为私有静态最终SessionFactory SessionFactory; 但给我错误作为初始SessionFactory创建failed.org.hibernate.Map

  • 本文向大家介绍Redis 有哪些功能?相关面试题,主要包含被问及Redis 有哪些功能?时的应答技巧和注意事项,需要的朋友参考一下 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列

  • 1、基于本机内存的缓存 当调用api访问数据库时,假如此过程需要2秒,如果每次请求都要访问数据库,那将对服务器造成巨大的压力,如果将此sql的查询结果存到Redis中,再次请求时,直接从Redis中取得,而不是访问数据库,效率将得到巨大的提升,Redis可以定时去更新数据(比如1分钟)。 2、如果电脑重启,写入内存的数据是不是就失效了呢,这时Redis还提供了持久化的功能。 3、哨兵(Sentin

  • 有一个文件能统一管理哪些路由需要登录才能进入,哪些不用登陆也能进入查看。