当triyng运行nodejs脚本时,linux权限问题

时间:2015-11-10 19:04:58

标签: linux node.js permissions

我在/var/lib/tomcat7/webapps/ROOT/DataMining/文件夹中包含以下文件:

drwxr-xr-x 6 al al 4096 Nov 10 20:53 ./
drwxr-xr-x 4 al al 4096 Nov 10 09:36 ../
-rw-r--r-- 1 al al  163 Nov 10 20:53 1447181583
drwxr-xr-x 3 al al 4096 Nov 10 10:48 html/
drwxr-xr-x 3 al al 4096 Nov  9 23:15 node.js/
-rw-r--r-- 1 al al  144 Nov 10 20:53 query
drwxr-xr-x 3 al al 4096 Nov 10 20:27 source/
drwxrwxr-x 3 al al 4096 Nov 10 20:53 target/

并在node.js中我有这些文件:

-rw-rw-rw- 1 al al  526 Jul 20  2014 config.html
-rw-rw-r-- 1 al al   19 Jul 20  2014 end.html
drwxr-xr-x 8 al al 4096 Nov  9 19:23 node_modules/
-rwxrwxrwx 1 al al 1160 Jul 20  2014 script.sh*
-rw-rw-r-- 1 al al 2889 Nov  9 23:08 server.js
-rw-rw-r-- 1 al al  676 Aug 30  2014 start.html

文件server.js使服务器侦听端口9080而不是处理来自config.html的输入并运行script.sh

config.html的内容如下所示:

<form action="http://localhost:9080/config" method="post">
    <input type="text" name="data">
    <input type="submit" id="button" value="config"></input>
</form>

但由于某种原因,在开始运行服务器之后,当我提交数据时,我得到它以询问我的root密码,并且在我输入之后它再次询问。我的用户名是al,如何让server.s在不问我密码的情况下完成工作?

这是server.js的相关内容:

app.post('/config', function (req, res) {
    var source = req.body.data;
    var script = '/home/al/Projects/DataMining/node.js/script.sh ' + source;
    exec(script);
    addCronTab(script);
    //readFile - respon file that read..
    res.end('success');
});

app.get('/select', function (req, res) {
  selectQuery(req,function (err, guides) {
  var text = fs.readFileSync('/home/al/Projects/DataMining/node.js/start.html', 'utf8');
    if (!err && guides) {     
      text += guides;   
    } else {
      text += "NO DATA FOUND";
    }
      text += fs.readFileSync('/home/al/Projects/DataMining/node.js/end.html', 'utf8');
      res.end(text);
  });
});

1 个答案:

答案 0 :(得分:0)

node.js服务器应该作为 al 而不是Tomcat用户运行。

除非从您的node.js服务器获取cron条目,否则应使用类似于 crontab -e 的内容更新特定于用户的crontab而不使用sudo。

允许Web服务器以root身份运行任意用户提供的命令是非常危险的,并且可能导致系统受损。