在调用chmod()
目录之前,如果调用者不拥有该目录,我想测试调用者是否有CAP_FOWNER
能力。
从搜索来看,我似乎应该能够CAP_FOWNER
通过调用来测试该功能capable(CAP_FOWNER)
——但capable()
不在我的手册页中,而且似乎也不是由<linux/capability.h>
.
什么是正确的包含文件capable()
,或者,什么是测试 linux 功能的最简单/最好的方法?
在调用chmod()
目录之前,如果调用者不拥有该目录,我想测试调用者是否有CAP_FOWNER
能力。
从搜索来看,我似乎应该能够CAP_FOWNER
通过调用来测试该功能capable(CAP_FOWNER)
——但capable()
不在我的手册页中,而且似乎也不是由<linux/capability.h>
.
什么是正确的包含文件capable()
,或者,什么是测试 linux 功能的最简单/最好的方法?
我认为这capable()
在内核源代码中可用,但不适用于一般用途。如果您正在编写设备驱动程序或模块,那么它应该是可用的。
如果您正在编写用户空间程序,那么您也许可以使用libcap
; 提供的功能。见man capabilities(7)
和man libcap(3)
。我建议#include <sys/capability.h>
并使用cap_get_proc()
和可能CAP_IS_SUPPORTED(CAP_FOWNER)
。
如果这不好,明显的解决方法是尝试chmod()
目录并处理可能的故障。
在目录上调用 chmod() 之前,...我想测试调用者是否具有 CAP_FOWNER 功能。
你有理由在应用程序方面这样做吗?如果一个进程调用chmod()
(或任何其他系统调用),内核将在任何情况下检查该进程是否被允许这样做,如果不被允许则EPERM
返回EACCES
。在应用程序端检测这是一个非常简单的测试,并且在任何情况下应用程序都需要做一些事情,因为应用程序可能不知道内核完成的所有访问控制。(想想例如 SELinux。)
一般来说,首先测试听起来很像检查时间到使用时间的问题。对于非特权进程,这不是问题,但是如果您的进程代表另一个用户执行某些工作(进程的实际特权高于它想要授予用户的权限),它很快就会变成一个。