Gewähren Sie lokalem PHP vollen Festplattenzugriff in Mojave

Ich habe eine PHP-Webseite, die auf der lokalen Apache-Installation ausgeführt wird. Die Seite verwendet shell_exec, um über sqlite3 auf die messages/chat.db zuzugreifen.

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

Vor Mojave habe ich die Antwort korrekt erhalten, aber seit dem Update auf Mojave bekomme ich:

unable to open database

Beim direkten Ausführen im Terminal tritt dasselbe Problem auf und wird gelöst, indem Terminal zum Bereich „Vollständiger Festplattenzugriff“ in den Systemeinstellungen hinzugefügt wird.

Ich kann nicht herausfinden, was ich für die PHP-Seite hinzufügen muss; Ich habe alles versucht, was ich finden kann ... sqlite3, apachectl, php-fpm, aber nichts hat funktioniert.

Was muss ich hinzufügen?

FYI: ben ist in der sudoers-Datei

Haben Sie einige Regeln in Sudoern, um dies zu unterstützen? Was passiert, wenn Sie einfach versuchen, lsdie Chat-DB von PHP aus aufzurufen, funktioniert das?
@nohillside - Du hast Recht - ich habe ein bisschen entfernt, um das Lesen zu erleichtern - ich habe es -u benwieder hinzugefügt! lsscheitert auch.
@JBis - Das ist anders; Die Antwort auf diese Frage beschreibt den von mir erwähnten Prozess "Vollständiger Festplattenzugriff", aber ich möchte die spezifische Anwendung hinzufügen ...

Antworten (3)

Möglicherweise machst du es falsch.

Zunächst einmal sudomuss normalerweise ein Passwort eingegeben werden, und das geschieht nicht über eine Web-App.

Zweitens kann der _www-sudo Benutzer . Das ist eine große Sicherheitslücke. Denken Sie nicht einmal daran, Sudoers zu modifizieren , um dies zuzulassen.

Was Sie stattdessen tun sollten, ist, dem _www- Benutzer (demjenigen, als der der Webserver läuft) Zugriff auf die chat.dbDatei zu gewähren, wie folgt:

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
Das Ändern der Gruppenzugehörigkeit ~/Libraryist gefährlich. Möglicherweise gibt es andere Prozesse/Anwendungen, die darauf angewiesen sind, dass sich dieser Ordner in derselben Gruppe befindet wie der besitzende Benutzer.
+1 Gute Antwort, obwohl ich @nohillside zustimme, gibt es bessere Möglichkeiten, die _wwwErlaubnis zu erteilen. Sie sollten auch erwähnen, dass sie nicht einmal daran denken sollten, den Webprozess (Apache/PHP) unter root laufen zu lassen.\
Ob das funktioniert? Ich bin nervös, mit Berechtigungen herumzuspielen, die ich aufheben muss. Ich hatte in meiner Frage übersehen, dass ich als Benutzer in der sudoers-Datei laufe - dieser Benutzer hat Zugriff auf die Chat-Datei; aber nicht (zum Beispiel) über das Terminal, ohne Terminal zur Liste Full Disk Access hinzuzufügen; so mürrisch ist dies kein Problem mit der Benutzerberechtigung? Übrigens - Dies funktionierte vor dem Mojave-Update

Sie haben kein Nicht-Mojave-System zu verifizieren, ~/Libraryhaben aber mit Mojave eher eingeschränkte Zugriffsrechte:

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

Während also theoretisch jeder Benutzer lesen kann, chat.dbkann niemand außer dem aktuellen Benutzer tatsächlich auf das Verzeichnis zugreifen, in dem es sich befindet.

Wenn Sie sich keine Sorgen machen, dass andere Zugriff auf die Datei erhalten, führen Sie sie aus

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

um jedem Benutzer den Zugriff auf Dateien innerhalb von Messages. Sie können weiterhin nicht auf andere Verzeichnisse zugreifen oder den Inhalt von auflisten Messages.

Löst das Problem nicht - PHP kann die Datei immer noch nicht sehen

Nicht wirklich die richtige Antwort, aber die einzig vernünftige Lösung, die mir einfallen würde.

Ich habe eine einfache Mac-App basierend auf GCDWebServer geschrieben , die den Datenbankinhalt ohne Verwendung von PHP/Apache/etc bereitstellen kann...

Diese App kann vollen Festplattenzugriff erhalten und alles funktioniert.