2

在调用chmod()目录之前,如果调用者不拥有该目录,我想测试调用者是否有CAP_FOWNER能力。

从搜索来看,我似乎应该能够CAP_FOWNER通过调用来测试该功能capable(CAP_FOWNER)——但capable()不在我的手册页中,而且似乎也不是由<linux/capability.h>.

什么是正确的包含文件capable(),或者,什么是测试 linux 功能的最简单/最好的方法?

4

2 回答 2

4

我认为这capable()在内核源代码中可用,但不适用于一般用途。如果您正在编写设备驱动程序或模块,那么它应该是可用的。

如果您正在编写用户空间程序,那么您也许可以使用libcap; 提供的功能。见man capabilities(7)man libcap(3)。我建议#include <sys/capability.h>并使用cap_get_proc()和可能CAP_IS_SUPPORTED(CAP_FOWNER)

如果这不好,明显的解决方法是尝试chmod()目录并处理可能的故障。

于 2017-04-26T13:13:21.450 回答
2

在目录上调用 chmod() 之前,...我想测试调用者是否具有 CAP_FOWNER 功能。

你有理由在应用程序方面这样做吗?如果一个进程调用chmod()(或任何其他系统调用),内核将在任何情况下检查该进程是否被允许这样做,如果不被允许则EPERM返回EACCES。在应用程序端检测这是一个非常简单的测试,并且在任何情况下应用程序都需要做一些事情,因为应用程序可能不知道内核完成的所有访问控制。(想想例如 SELinux。)

一般来说,首先测试听起来很像检查时间到使用时间的问题。对于非特权进程,这不是问题,但是如果您的进程代表另一个用户执行某些工作(进程的实际特权高于它想要授予用户的权限),它很快就会变成一个。

于 2017-04-26T13:21:52.987 回答