通过Apache访问网络摄像头的权限
我正试图通过网络摄像头捕获图像并将其显示在网页上,但我收到了“拒绝许可错误” 我正在使用以下用户/组运行apache /etc/apache2/envvars:通过Apache访问网络摄像头的权限,apache,permissions,cgi,Apache,Permissions,Cgi,我正试图通过网络摄像头捕获图像并将其显示在网页上,但我收到了“拒绝许可错误” 我正在使用以下用户/组运行apache /etc/apache2/envvars: export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data 在html代码中,我有一个请求: myRequest.open("GET", "/cgi-bin/getImage1.cgi", true); myRequest.send(); 在/usr/lib/cg
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
在html代码中,我有一个请求:
myRequest.open("GET", "/cgi-bin/getImage1.cgi", true);
myRequest.send();
在/usr/lib/cgi-bin中,我有一个文件:getImage1.cgi
#!/bin/bash
rm image1.jpg
fswebcam -r 640x400 --no-banner --deinterlace -q -d /dev/video0 --jpeg 95 image1.jpg
文件和目录权限为:
In /usr/lib drwxrwxrwx 2 root www-data 4096 May 14 19:37 cgi-bin
In /usr/lib/cgi-bin -rwxr-xr-x 1 www-data www-data 115 May 14 18:51 getImage1.cgi
In /dev crw-rw----+ 1 root video 81,0 May 14 18:02 video0
用户www数据是以下组的成员:
$ id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),44(video)
当我运行网页时,我得到以下错误代码:
rm: cannot remove 'image1.jpg': No such file or directory
Error opening device: /dev/video0
open: Permission denied
Unable to find a source module that can read /dev/video0.
End of script output before headers: getImage1.cgi,
该错误表示它正在执行脚本,但用户没有足够的权限访问/dev/video0。
apache用户应该是www数据,它是www数据和视频组的成员,因此它应该可以访问/usr/lib/cgi-bin目录、getImage1.cgi文件和/dev/video0网络摄像头
如果我从控制台执行脚本,它可以正常运行
如果有人能提供建议,我将不胜感激。关于
/dev
本身的权限是什么?我已经在上面添加了视频设备的权限。所有者是root:video。如前所述,我将www数据用户添加到视频组中。权限是660,很难更改这些权限,因为它们在重新启动时会返回默认值。我说的是/dev
,而不是/dev/video0
。如果用户/组被锁定在文件夹之外,则他无法访问video0
。这将是一个奇怪的设置,但只是检查。所有/dev设备都是root。我在/etc/group中将用户www数据添加到根组,现在一切正常。这对这个设置来说是可行的,但我确信给web访问根权限不是管理系统的安全方法。绝对不是。。。这基本上允许恶意用户以root身份从web脚本执行任何操作