2015-11-10 108 views
0

我已經在文件夾中/var/lib/tomcat7/webapps/ROOT/DataMining/以下文件:Linux權限的問題腳本的NodeJS

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

Node.js的服務器應該他運行的不是Tomcat的用戶。

用戶特定的crontab應該在沒有sudo的情況下使用類似於的crontab -e進行更新,除了從您的node.js服務器獲取您的cron條目。

允許Web服務器以root用戶身份運行任意用戶提供的命令是非常危險的,並可能導致系統受到攻擊。