Какая польза от cap_set_proc (), если программу нужно запускать с правами root

Я пытаюсь размонтировать USB-накопитель с помощью программы на C ++, используя umount2() функция. поскольку umount2 () нужны права администратора, Я реализовал umount2 () с cap_set_proc () следующим образом

  cap_t caps;
cap_value_t cap_list[1];
caps = cap_get_proc();
if (caps == NULL)
std::cout << "cap_get_proc failed: " << strerror(errno) << std::endl;
cap_list[0] = CAP_SYS_ADMIN;
if (cap_set_flag(caps, CAP_EFFECTIVE, 1, cap_list, CAP_SET) == -1)
std::cout << "cap_set_flags failed: " << strerror(errno) << std::endl;
if (cap_set_proc(caps) == -1)
std::cout << "cap_set_proc failed: " << strerror(errno) << std::endl;
else
{
while(umount2("/media/user/usb_storage_device", MNT_DETACH))
{
std::cout << "ERROR: " << strerror(errno) << std::endl;
std::this_thread::sleep_for (std::chrono::seconds(2));
}
std::cout << "Unmounted!" << std::endl;
}
if (cap_free(caps) == -1)
std::cout << "cap_free failed: " << strerror(errno) std::endl;

Но когда я запускаю приведенный выше код как обычный пользователь, я получаю сообщение об ошибке:

«cap_set_proc не удалось: операция не разрешена»

Но, если я запускаю код от имени пользователя root, USB-накопитель успешно размонтируется. Поэтому мой вопрос заключается в том, какая польза от использования cap_set_proc () для предоставления административных привилегий, если для самой функции cap_set_proc () требуются привилегии root для выполнения?
Я что-то здесь не так делаю?

Кроме того, возможно ли на самом деле использовать cap_set_proc () без выполнения программы с помощью sudo?

Пожалуйста помоги.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …