Как я могу использовать «setcap» для повышения привилегий исполняемого файла, созданного «тестом груза»?

#c #rust #perf #linux-capabilities

Вопрос:

Я пишу инструмент анализа производительности в Rust/C.

Я использую системный вызов perf_event_open в Rust и написал тест. Тест выглядит так:

 #[test]
fn syscall_test() {
    let event = amp;mut perf_event_attr {
        type_: perf_type_id_PERF_TYPE_HARDWARE,
        size: std::mem::size_of::<perf_event_attr>() as u32,
        // something to consider fixing, for now leave it alone.
        config: perf_hw_id_PERF_COUNT_HW_INSTRUCTIONS as u64,
        ..Default::default()
    };
    event.set_disabled(1);
    event.set_exclude_kernel(1);
    event.set_exclude_hv(1);
    let fd: isize = perf_event_open(amp;event, 0, -1, -1, 0);
    assert_ne!(fd, -1, "Testing for failure");
}
 

Как я могу увеличить привилегии тестового исполняемого файла? perf_event_open всегда будет возвращать -1, если для исполняемого файла не заданы ни CAP_PERFMON, ни CAP_SYS_ADMIN.

Комментарии:

1. Если это ограничение является одним из контролируемых /proc/sys/kernel/yama/ptrace_scope , может быть проще просто установить его в масштабах всей системы ( 0 вместо значения по умолчанию 3 или что-то в этом роде) с помощью sysctl.conf. В противном случае предположительно sudo setcap или каким-либо другим способом вызова setcap. (Извините, я не знаю, что определяет возможность установки битов возможностей в файлах.)