【问题标题】:Errno 13 Permission denied bash script and apache2Errno 13 权限被拒绝 bash 脚本和 apache2
【发布时间】:2016-07-16 15:20:17
【问题描述】:

我正在尝试运行 bash 脚本以从 BMP280 传感器获取值。

#!/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 中,脚本运行良好。 无法弄清楚“权限被拒绝”问题在哪里。

【问题讨论】:

  • 您不能直接从 apache 服务器运行 bash 脚本。看看这个答案 - stackoverflow.com/a/8378332/1075324。 tl;博士,在 apache 中配置 cgi-bin 并从那里运行脚本。
  • 根据回溯,www-data用户没有调用smbus.SMBus()的权限?
  • 用户 www-data 添加到组 i2c:# groups www-data www-data : www-data i2c
  • 您的网络服务器需要知道如何执行和提供 shell 脚本。

标签: python linux bash apache


【解决方案1】:

如果 tte 文件由 root 拥有,则尝试 chmod +s /usr/local/bin/read_bme280。它应该允许脚本以 root 权限运行,因此可以访问所有内容。

作为安全预防措施,您可以确保其他用户无法编辑此文件。

【讨论】:

  • 不,不要以 root 权限通过 web 运行脚本。
  • 如果脚本是只读的,这样做会有什么问题?将 www-data 用户添加到有权访问 i2c 总线的组中可能会更危险。
【解决方案2】:

我是用 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>";

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-06-11
    • 2014-07-15
    • 2015-07-17
    • 2016-07-25
    • 2013-06-12
    相关资源
    最近更新 更多