如果程序需要以超级用户身份运行,cap_set_proc()有什么用?

时间:2018-10-02 13:38:13

标签: c++ system mount capability umount

我正在尝试使用umount2()函数通过c ++程序卸载USB存储设备。从umount2() needs administrative privileges开始,我用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存储设备将成功卸载。所以我的问题是,如果cap_set_proc()函数本身需要root特权才能执行,那么使用cap_set_proc()提供管理特权有什么用? 我在这里做错什么了吗?

还可以在不使用sudo执行程序的情况下实际使用cap_set_proc()吗?

请帮助。

0 个答案:

没有答案