Скопируйте файл, не удаляя возможности назначения - PullRequest
0 голосов
/ 14 января 2020

У меня есть двоичный файл foo, сгенерированный из кода C ++, для которого установлены специальные возможности:

sudo setcap cap_sys_rawio=ep ./foo

Теперь я хочу создать еще одну версию этого двоичного файла и вывод build (новый двоичный файл) помещается в файл с именем bar. Очевидно, что bar не будет иметь тех же возможностей, что и foo. Я хотел бы скопировать содержимое bar поверх foo, чтобы foo представлял новый двоичный файл, но без удаления возможностей.

Этот ответ указывает, что изменение файл не влияет на возможности, но когда я пытаюсь использовать cp (который использует open(..., O_TRUNC) под обложками), возможности удаляются.

1 Ответ

1 голос
/ 14 января 2020

Я не думаю, что это возможно. Комментарий к ответу, на который вы ссылаетесь, неверен; замена содержимого 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
...