小编Adm*_*emo的帖子

通过 exec 传递功能

我试图了解 Linux 功能如何传递给一个已被exec()另一个进程使用的进程。从我读过的内容来看,为了在 exec 之后保留功能,它必须在可继承集中。但是,我不确定该集合是如何填充的。

我的目标是能够以通常需要 root 的普通用户身份运行程序。它需要的功能是cap_dac_override可以读取私有文件。我不想给它任何其他功能。

这是我的包装器:

#include <unistd.h>

int main(int argc, char *argv[]) {
    return execl("/usr/bin/net", "net", "ads", "dns", "register", "-P", NULL);
}
Run Code Online (Sandbox Code Playgroud)

当我在生成的可执行文件上设置 setuid 权限时,这会起作用:

~ $ sudo chown root: ./registerdns
~ $ sudo chmod u+s ./registerdns
~ $ ./registerdns 
Successfully registered hostname with DNS
Run Code Online (Sandbox Code Playgroud)

不过,我想使用功能而不是 setuid。我试过cap_dac_override在包装器上设置功能:

~ $ sudo setcap cap_dac_override=eip ./registerdns
~ $ ./registerdns 
Failed to open /var/lib/samba/private/secrets.tdb
ERROR: Unable to open secrets database
Run Code Online (Sandbox Code Playgroud)

我还尝试cap_dac_overridenet …

linux setcap capabilities

9
推荐指数
1
解决办法
6185
查看次数

标签 统计

capabilities ×1

linux ×1

setcap ×1