在Mojave中授予本地PHP完整磁盘访问权限


0

我有一个在本地apache安装上运行的PHP网页。该页面使用shell_exec通过sqlite3访问messages / chat.db。

shell_exec("sudo -u ben sqlite3 ~/Library/messages/chat.db \"SELECT ...

在Mojave之前,我正确地获得了响应,但是由于更新到Mojave,我得到了:

unable to open database

当直接在终端中运行时,会发生同样的问题,可以通过将终端添加到“系统偏好设置”的“全盘访问”窗格中来解决。

我不知道我需要为PHP页面添加什么。我已经尝试了所有可以找到的东西... sqlite3,apachectl,php-fpm,但没有任何效果。

我需要添加什么?

仅供参考:ben在sudoers文件中


您在sudoers中有一些规则可以支持这一点吗?如果仅尝试ls从PHP 到Chat DB,会发生什么情况?
nohillside


@nohillside-您的正确-我删除了一些内容,以使其更易于阅读-我-u ben重新添加了! ls也失败了。
本·罗宾逊

@JBis-这是不同的;这个问题的答案描述了我提到的“全盘访问”过程,但是我要添加特定的应用程序……
本·罗宾逊

Answers:


2

您可能做错了。

首先,sudo通常需要输入密码,而这不会通过Web应用程序发生。

其次,_www用户无法使用sudo。那是一个很大的安全漏洞。甚至不要考虑修改sudoers以允许它。

相反,您应该做的是允许_www用户(运行Web服务器的用户)访问chat.db文件,如下所示:

sudo chgrp _www ~/Library
sudo chgrp _www ~/Library/messages
sudo chgrp _www ~/Library/messages/chat.db
chmod g+rx ~/Library
chmod g+rx ~/Library/messages
chmod g+r  ~/Library/messages/chat.db

1
更改组~/Library所属属于危险。可能还有其他进程/应用程序依赖于此文件夹与拥有用户的用户位于同一组中。
nohillside

+1好的答案,尽管我确实同意@nohillside,但是有更好的方法来授予_www许可。您还应该提到,他们甚至都不应该考虑使Web进程(apache / php)在root下运行。\
JBis

这样行吗?我担心要取消必须取消的权限。我想念我是作为sudoers文件中的用户运行的-该用户有权访问聊天文件;但是(例如)不通过终端而不将终端添加到“全盘访问”列表中;所以这不是用户权限问题吗?顺便说一句-这个工作的莫哈韦更新之前
本·罗宾逊

0

没有非Mojave系统可进行验证,但是Mojave ~/Library具有相当有限的访问权限:

pse@Mithos:~$ ll -d . Library Library/Messages Library/Messages/chat.db
drwxr-xr-x@ 137 pse  staff      4384 Nov 11 09:11 ./
drwx------+ 139 pse  staff      4448 Oct  8 20:52 Library/
drwx------   13 pse  staff       416 Sep 27 17:47 Library/Messages/
-rw-r--r--    1 pse  staff  12169216 Nov 15 20:08 Library/Messages/chat.db

因此,从理论上讲,chat.db除当前用户外,任何用户都无法读取任何内容,实际上,该用户可以访问其所在的目录。

如果您不担心其他人可以访问文件运行

chmod o+x ~/Library
chmod o+x ~/Library/Messages

允许任何用户访问中的文件Messages。他们仍然无法访问其他目录或列出的内容Messages


无法解决问题-PHP仍然看不到文件
Ben Robinson

0

确实不是正确的答案,而是我能想到的唯一明智的解决方案。

我已经写了一个基于GCDWebServer的简单Mac App ,无需使用PHP / Apache / etc即可提供数据库内容。

该应用程序可以被授予完全磁盘访问权限,并且一切正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.