我在/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);
});
});
答案 0 :(得分:0)
node.js服务器应该作为 al 而不是Tomcat用户运行。
除非从您的node.js服务器获取cron条目,否则应使用类似于 crontab -e 的内容更新特定于用户的crontab而不使用sudo。
允许Web服务器以root身份运行任意用户提供的命令是非常危险的,并且可能导致系统受损。