目前,我正在使用蓝牙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.