Выполнение определенной команды nodejs как «root» или «sudo» - PullRequest
0 голосов
/ 10 мая 2018

Я пишу небольшой RESTFul API в Node с Express.js, который, помимо прочего, предоставит мне информацию о точках доступа Wi-Fi, включая все имена SSID, уровень сигнала, частоты, каналы и т. Д.

Я использую пакет узла https://www.npmjs.com/package/wireless-tools для этого.

API работает нормально, если я запускаю программу узла от имени пользователя root или sudo, но это, очевидно, не идеально и, скорее всего, не будет разрешено на любой платформе, которую я должен развернуть. В этом приложении также есть другие вызовы API, которые, безусловно, должны НЕ выполняться как 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, без необходимости запускать весь API как root или запускать его с sudo

Системы, на которых это должно работать: RaspberryPI, Debian и Ubuntu 16.04 или 18.04 и, возможно, другие версии Linux в будущем - все будут поддерживать sudo, если это является частью решения.

Я проверил его вручную на всех вышеперечисленных системах, работающих под именем sudo, и все в порядке.

...