0 votos

Dar a PHP local acceso total al disco en Mojave

Tengo una página web PHP que se ejecuta en la instalación local de apache. La página utiliza shell_exec para acceder a los mensajes/chat.db a través de sqlite3.

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

Antes de Mojave me respondía correctamente, pero desde la actualización a Mojave me sale:

unable to open database

Cuando se ejecuta en el Terminal directamente, ocurre este mismo problema y se soluciona añadiendo el Terminal al panel de "Acceso a todo el disco" en las Preferencias del Sistema.

No consigo averiguar qué tengo que añadir para la página PHP; he probado todo lo que he encontrado... sqlite3, apachectl, php-fpm, pero nada ha funcionado.

¿Qué tengo que añadir?

Para su información: ben está en el archivo sudoers

0 votos

¿Tiene algunas reglas en sudoers para apoyar esto? ¿Qué ocurre si simplemente intentas ls la BD del Chat desde PHP, ¿funciona?

0 votos

@nohillside - Su correcta - He quitado un poco para tratar de hacer más fácil de leer - He añadido -u ben ¡vuelve a entrar! ls también falla.

2voto

peter Puntos 29

Posiblemente lo estés haciendo mal.

En primer lugar, sudo normalmente requiere que se escriba una contraseña, y eso no ocurrirá a través de una aplicación web.

En segundo lugar, el El mundo de los negocios se ha convertido en un lugar de encuentro para la gente. el usuario no puede utilizar sudo . Es un gran agujero de seguridad. Ni se te ocurra modificar sudoers para permitirlo.

Lo que debería hacer en cambio es permitir que el El mundo de los negocios se ha convertido en un lugar de encuentro para la gente. usuario (el que ejecuta el servidor web) el acceso a la chat.db archivo, así:

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 votos

Cambio de grupo ~/Library pertenece es peligroso. Puede haber otros procesos/aplicaciones que dependan de que esta carpeta esté en el mismo grupo que el usuario propietario.

0 votos

+1 Buena respuesta, aunque estoy de acuerdo con @nohillside, hay mejores formas de dar _www permiso. También debe mencionar que no deben incluso pensar de hacer que el proceso web (apache/php) se ejecute bajo Root.\

0 votos

¿Funcionará? Estoy nervioso por jugar con los permisos que tengo que quitar. Me había perdido en mi pregunta que estoy corriendo como un usuario en el archivo sudoers - que el usuario tiene acceso al archivo de chat, pero no (por ejemplo) a través de la terminal sin la adición de Terminal a la lista de acceso a disco completo, por lo que surly esto no es un problema de permisos de usuario? BTW - Esto funcionó antes de la actualización Mojave

0voto

No tengo un sistema que no sea Mojave para verificar, pero con Mojave ~/Library tiene derechos de acceso bastante restringidos:

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

Así, aunque en teoría cualquier usuario puede leer chat.db nadie más que el usuario actual puede acceder al directorio en el que reside.

Si no te preocupa que otros tengan acceso al archivo, ejecuta

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

para permitir que cualquier usuario acceda a los archivos dentro de Messages . Todavía no podrán acceder a otros directorios o listar el contenido de Messages .

0 votos

No resuelve el problema - PHP todavía no puede ver el archivo

0voto

Ben Robinson Puntos 108

No es la respuesta correcta, pero es la única solución sensata que se me ocurrió.

He escrito una sencilla aplicación para Mac basada en GCDWebServer que pueda servir el contenido de la base de datos sin usar PHP/Apache/etc...

A esa aplicación se le puede dar acceso total al disco y todo funciona.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X