簡體   English   中英

Node.js:使用setuid / setgid后偵聽端口80

[英]Nodejs: Listen on port 80 after using setuid/setgid

我只是被一些互聯網文章深信,使用setuid / setgid切換到特權較低的用戶可能很重要。 由於我正在開發Web應用程序,因此決定選擇www-data

因此,我正在使用userid NPM模塊來找出www-data的用戶和組ID,然后將其更改。 但是,當我執行此操作時(與在何處完全無關緊要),我得到以下信息(在此示例中,安全處理程序在代碼的最底部執行):

2014-09-04T23:07:05.812Z - info: BIRD3 Security -> Changed to www-data:www-data (33:33)

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EACCES
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1023:19)
    at listen (net.js:1064:10)
    at net.js:1146:9
    at dns.js:72:18
    at process._tickCallback (node.js:419:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:906:3

如您所見,一旦我更改了特權級別,它也會同時降低對端口80的可訪問性。

有沒有一種方法可以實現安全性,但不使用此類端口就繼續使用端口80

您不需要第三方模塊即可執行此操作。 process.setgid()process.setuid()都接受ID或組名/用戶名。

還要確保在偵聽端口80 之后放棄特權,並在process.setgid() 之前調用process.setuid()

例:

var net = require('net');

var srv = net.createServer(function(s) {
});

srv.listen(24, function() {
  console.log('listening');
});

process.setgid('www-data');
process.setuid('www-data');

setgid()和setuid()是否應該在回調響應內連接后運行?

    srv.listen(24, function() {
console.log('listening');

process.setgid('www-data');
process.setuid('www-data');
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM