我正在尝试使用umount2()
函数通过 c++ 程序卸载 USB 存储设备。由于umount2() 需要管理权限,我用 cap_set_proc() 实现了 umount2() 如下
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-storage 设备将成功卸载。所以我的问题是,如果 cap_set_proc() 函数本身需要 root 权限才能执行,那么使用 cap_set_proc() 提供管理权限有什么用?我在这里做错了吗?
另外,是否可以在不使用 sudo 执行程序的情况下实际使用 cap_set_proc() ?
请帮忙。