使用root权限调用C ++函数,而不以root身份执行整个程序

时间:2016-01-11 14:26:05

标签: c++ linux bluetooth

目前我正在玩蓝牙LE和iBeacon设备。 我写了一个不断寻找附近信标的服务器。

我的服务器遵循此示例(Link

不幸的是调用函数:

hci_le_set_scan_parameters()

需要root权限。

由于我不想以root权限运行整个服务器,我想询问是否有可能只使用root权限调用此函数?

我知道在执行程序时要求sudo总是至少有问题我找不到任何其他扫描iBeacons的可能性。 如果还有其他可能性,我也很高兴听到它。

感谢您的帮助和亲切的问候

nPLus

1 个答案:

答案 0 :(得分:3)

根据POSIX,UID / GID是进程属性。您的流程中的所有代码都是使用当前为整个流程设置的UID / GID执行的。

您可以以root身份启动服务器并立即删除root权限。然后,您可以在执行函数时使用seteuid(2)临时获得root权限。

另见this answer

您也可以只获得选定的capabilities(7)(临时或永久)。

主题安全提示

AFAIK,Linux UID / GID是每线程属性,可以为单线程设置它们,请参阅NOTES手册页中的seteuid()部分和{{3} }。