我有一个从C ++代码生成的二进制foo
,它具有以下特殊功能:
sudo setcap cap_sys_rawio=ep ./foo
现在,我想构建该二进制文件的另一个版本,并将构建的输出(新二进制文件)放入名为bar
的文件中。显然,bar
将不具有foo
的功能。我想在bar
上复制foo
的内容,以使foo
代表新的二进制文件,但不删除功能。
This answer表示修改文件不会影响功能,但是当我尝试使用cp
(在封面下使用open(..., O_TRUNC)
)时,功能会被删除。
答案 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