复制文件而不删除目标功能

时间:2020-01-14 16:59:36

标签: linux linux-capabilities

我有一个从C ++代码生成的二进制foo,它具有以下特殊功能:

sudo setcap cap_sys_rawio=ep ./foo

现在,我想构建该二进制文件的另一个版本,并将构建的输出(新二进制文件)放入名为bar的文件中。显然,bar将不具有foo的功能。我想在bar上复制foo的内容,以使foo代表新的二进制文件,但不删除功能。

This answer表示修改文件不会影响功能,但是当我尝试使用cp(在封面下使用open(..., O_TRUNC))时,功能会被删除。

1 个答案:

答案 0 :(得分:1)

我认为这不可能。您链接到的答案的评论不正确;如this answer所述,替换foo的内容将导致功能从foo中删除。

您可以使用以下普通的C程序对此进行测试(另存为editfoo.c):

#include <fcntl.h>
#include <unistd.h>

int main(int argc, char** argv) {
    int fd = open("foo", O_WRONLY);
    write(fd, "bar", 3);
    return 0;
}

然后:

$ gcc editfoo.c -o editfoo

$ echo "foo" > foo

$ sudo setcap cap_sys_rawio=ep foo

$ cat foo
foo

$ getcap foo
foo = cap_sys_rawio+ep

$ ./editfoo

$ cat foo
bar

$ getcap foo