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

目前,我正在使用蓝牙LE和iBeacon设备.
我写了一个服务器,一直在寻找附近的信标.

我的服务器遵循以下示例(Link)

不幸的是调用了该函数:

hci_le_set_scan_parameters()

需要root权限.

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

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

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

PL

解决方法:

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

您可以以root用户身份启动服务器,然后立即放弃root用户特权.然后,您可以在执行功能时使用seteuid(2)临时获得root特权.

另请参见this answer.

您也只能获得选定的capabilities(7)(临时或永久).

线程安全说明

AFAIK,在Linux UID / GID上是每个线程的属性,可以将它们设置为单线程,请参见seteuid()手册页中的NOTES部分和this post.

上一篇:带有RN42模块的Android蓝牙连接


下一篇:.NET开源工作流RoadFlow-流程设计-流程属性设置