2016-03-29 124 views
0

我想運行一個bash腳本來從BMP280傳感器獲取值。Errno 13權限被拒絕bash腳本和apache2

#!/bin/bash 
echo "Content-type: text/html" 
echo "" 
read_bme280 --i2c-address 0x76 

該網頁是空白,在error.log中我得到:

[Tue Mar 29 07:20:40.579423 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: Traceback (most recent call last): 
[Tue Mar 29 07:20:40.580102 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: File "/usr/local/bin/read_bme280", line 9, in <module> 
[Tue Mar 29 07:20:40.580589 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215:  
[Tue Mar 29 07:20:40.581016 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: load_entry_point('bme280==0.2', 'console_scripts', 'read_bme280')() 
[Tue Mar 29 07:20:40.581669 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: File "/usr/local/lib/python2.7/dist-packages/bme280/bme280.py", line 210, in main 
[Tue Mar 29 07:20:40.582426 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215:  
[Tue Mar 29 07:20:40.582811 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: bme280_i2c.set_default_bus(int(args.i2c_bus)) 
[Tue Mar 29 07:20:40.583487 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: File "/usr/local/lib/python2.7/dist-packages/bme280/bme280_i2c.py", line 22, in set_default_bus 
[Tue Mar 29 07:20:40.583991 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215:  
[Tue Mar 29 07:20:40.584345 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: default_bus = smbus.SMBus(bus_number) 
[Tue Mar 29 07:20:40.584836 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: IOError 
[Tue Mar 29 07:20:40.587657 2016] [cgi:error] [pid 1280] [client 10.20.30.127:34334] AH01215: : [Errno 13] Permission denied 

從CLI,腳本運行就好了。 找不到「權限被拒絕」問題。

+2

你不能直接從Apache服務器運行bash腳本。看看這個答案 - http://stackoverflow.com/a/8378332/1075324。 tl; dr,在apache中配置cgi-bin並從那裏運行腳本。 –

+0

根據回溯,'www-data'用戶沒有權限調用smbus.SMBus()'? – tripleee

+0

用戶www-data被添加到組i2c: #groups www-data www-data:www-data i2c – basante

回答

0

如果tte文件屬於root,則嘗試chmod +s /usr/local/bin/read_bme280。它應該允許腳本以root權限運行,因此可以訪問所有內容。

作爲一項安全措施,您可以確保其他用戶無法編輯此文件。

+0

不,不要通過web作爲根權限運行腳本。 –

+0

如果腳本是隻讀的,會出現什麼問題? 將www-data用戶添加到可訪問i2c總線的組中可能會更危險。 – Bogdan

0

我用PHP做的:

<?php 
$url1=$_SERVER['REQUEST_URI']; 
header("Refresh: 10; URL=$url1"); 

$output = shell_exec('read_bme280 --i2c-address 0x76'); 

$parts = explode("\n", $output); 

echo "<pre>"; 

echo "<h2>Temp: " . $parts[2] . "</h2><br />"; 
echo "<h2>Humidity: " . $parts[1] . "</h2><br />"; 
echo "<h2>Pressure: " . $parts[0] . "</h2>"; 
相關問題