以'root'或'sudo'身份运行特定的nodejs命令

时间:2018-05-10 07:44:52

标签: node.js linux permissions wifi

我正在使用Express.js在Node中编写一个小型RESTFul API,除其他外,它将为我提供wifi接入点详细信息,包括所有SSID名称,信号强度,频率,频道等。

我使用https://www.npmjs.com/package/wireless-tools节点包来完成此任务。

如果我以root或sudo运行节点程序,API工作正常,但这显然不太理想,并且可能不允许在我必须部署它的任何平台上。在这个应用程序中还有其他API调用,最应该 NOT 以root / sudo身份执行,所以我需要找到一种方法来提升API的这个特定部分的权限。

完成此操作的代码段如下所示

router.get('/ssid',auth.verifyAccess, function(req,res,next) 
{ 
    var iwlist = require('wireless-tools/iwlist'); 
    iwlist.scan( {iface:'wlan0', show_hidden : true }, function(err, networks) { 
    if(err) 
    { 
        logger.error(self.type + ":" + arguments.callee.name, __line, `${err}`); 
    } 
    else 
    { 
        logger.debug(self.type + ":" + arguments.callee.name, __line, `iwlist scan initiated. Results:${networks}`); 
        res.setHeader('Content-Type', 'application/json'); 
        res.send(JSON.stringify(networks)); 
    }
});

这给出了输出simalar:

[
    {
        "address": "e4:8d:8c:bc:f3:05",
        "channel": 10,
        "frequency": 2.457,
        "mode": "master",
        "quality": 70,
        "signal": -35,
        "ssid": "techedemic-Wifi-Dev",
        "security": "wpa2"
    },
    {
        "address": "10:08:b1:09:5b:1b",
        "channel": 1,
        "frequency": 2.412,
        "mode": "master",
        "quality": 64,
        "signal": -46,
        "ssid": "techedemic-WiFi-Prod",
        "security": "wpa2"
    },
    {.....

假设应用程序最终将作为“myuser”用户运行,我如何授予应用程序运行所需命令的权限,例如: iwlist wlan0 scan,无需以root运行整个API或以sudo

启动它

这应该起作用的系统: RaspberryPI,Debian和Ubuntu 16.04或18.04以及将来可能还有其他Linux风格 - 如果这是解决方案的一部分,它们都将支持sudo

我已经使用sudo用户运行上述所有系统进行了手动测试,一切顺利。

0 个答案:

没有答案