El administrador de mi servidor quiere que establezca permisos de escritura pública en un directorio

9

Soy relativamente nuevo en el desarrollo web, así que sea paciente.

Soy principalmente un desarrollador de iPhone, pero recientemente he hecho un sitio para otra persona que usa hosting compartido. Podría escribir bien en archivos en PHP en ese sitio, sin tener que pensar en los permisos.

Estoy en el proceso de implementar un servicio web para una nueva aplicación que estoy creando, pero en realidad no funciona sin problemas. La diferencia más importante aquí es que estoy usando el servidor de otra persona, y solo tengo acceso FTP / DB.

Básicamente, tengo una carga de archivos PHP que componen mi CMS, así:

mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php

Esas secuencias de comandos editan la base de datos o los archivos. Pueden interactuar con el DB bien, sin embargo, mis scripts no pueden escribir en el sistema de archivos. Podrían, por ejemplo, intentar escribir en los siguientes archivos:

mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt

Esto funcionó bien en mi instalación de MAMP (localmente), pero una vez implementado en el servidor, PHP arrojó errores cada vez que se intentó escribir ... algo como esto:

No se pudo abrir el archivo "../data/img/someimage.png" para escribir.

Así que le envié un correo electrónico al tipo que está ejecutando el servidor, y él regresó diciendo:

¿Funciona con permiso público? (777)

Y lo hizo, pero fui muy cauteloso con el uso de permisos públicos, así que lo deshabilité de inmediato. Le envié un correo electrónico diciéndole "cómo puedo hacer que mis scripts PHP escriban usando permisos de usuario estándar", y dijo:

Déjalo como público, estará bien

Creo que es un conflicto de IP en algún lugar de la resolución del dominio, pero no me preocupa.

Luego le envié un correo electrónico diciendo "seguramente esto es inseguro" o algo por el estilo, y respondió con lo siguiente:

la realidad es que hay millones de sitios web, incluidos varios que administro que tienen 777 en varias carpetas, es solo una forma de vida.

¿Alguien podría darme una idea de una solución que podría darle? ¿O qué puedo hacer para evitar tener que usar 777? Realmente no me gusta la idea de que las carpetas de mi sitio / servicio puedan escribirse públicamente.

Le agradecería mucho su consejo ya que sé muy poco acerca de los servidores web.

Alex Coplan
fuente
12
Huye de este chico y no mires atrás.
user9517
No es realmente una opción ... ver los comentarios sobre la respuesta de SvenW ...
Alex Coplan

Respuestas:

13

Vamos a desglosarlo :

Necesita que el usuario ejecute el script para leer, ejecutar y escribir en el directorio, por lo que debe ser:

7 = (r) ead, (w) rito, e (x) ecute

Otros usuarios que pertenecen al mismo grupo deberían poder ejecutar el archivo php dentro del directorio, pero no escribir en él (por razones obvias); no necesariamente necesitan leer los archivos PHP. Por lo tanto, necesitamos proporcionar solo permisos de ejecución:

1 = e (x) ecute

Lo mismo para el público. De hecho, eso es todo lo que necesita para los usuarios externos que necesitan ver php y archivos estáticos:

1 = e (x) ecute

Entonces, el mínimo debería ser:

711

Confirmé la configuración anterior con mi propia configuración, por lo que debería funcionar; sin embargo, esto está bajo el usuario web predeterminado. Si está cargando con un inicio de sesión que no sea www, los archivos y directorios probablemente estarán bajo un usuario diferente. En ese caso, es posible que el usuario web predeterminado no pueda leer o escribir los archivos que le pertenecen. En ese punto, probablemente necesite agregar el usuario web predeterminado a su grupo (el administrador del sistema tendrá que hacerlo) y luego otorgar permisos de lectura, escritura y ejecución a los usuarios que pertenecen al grupo:

771

Y eso probablemente funcionaría. O eso, o haga que el administrador del sistema cambie la propiedad del usuario y del grupo de esos archivos al usuario predeterminado del servidor web (¡pero NO LOS PERMISOS!). Si eso todavía no funciona, una salida de muestra de los permisos (algo así como "ls -la dentro del directorio") nos ayudaría a solucionar esto aún más. Dicho esto, siempre que solo tenga que otorgar permisos de ejecución al público ( u "otro"), debería estar bien desde el punto de vista de la seguridad.

Rilindo
fuente
2
Ojalá pudiera votar dos veces.
Wesley
El problema es que el sitio web no debe escribir en archivos dentro de su propia estructura en lugar de los permisos en sí.
JamesRyan
Tienes razón. Dependiendo de los datos, es probable que desee escribir en un archivo fuera de la raíz web pública.
Rilindo
Aquí estoy escribiendo en una /datacarpeta: esta carpeta contiene scripts PHP que componen mi servicio web JSON, y un montón de imágenes utilizadas para el contenido transmitido en el servicio web (en una /data/imgcarpeta)
Alex Coplan
Entonces, ¿las imágenes deben ser públicas? Eso aclaró las cosas.
Rilindo
18
Leave it as public, it'll be fine

I reckon it's an ip conflict somewhere in the domain resolution, 
but I'm not worried about it.

Este tipo es un idiota y esto no tiene sentido. Los derechos de acceso no tienen nada que ver con la dirección IP o la resolución de dominio, solo está soltando palabras.

Dada la calidad de este "administrador", recomendaría alojar su sitio en otro lugar, ya que es muy probable que el sitio se administre muy mal e inseguro. Simplemente poner 777permisos sobre algo para que funcione es una señal segura de que no entiende un poco de lo que está haciendo.

Los derechos de acceso que realmente son necesarios dependen de la forma en que se usa y configura el sistema y es un poco difícil decirle algo sin saberlo.

Sven
fuente
gracias, mi pensamiento es exactamente sobre los permisos, realmente no tengo una opción para alojarlo en otro lugar, ya que la compañía para la que estoy desarrollando no pagará, y me recomendó este tipo y me dijo que lo llevarían a hágalo gratis, por lo que puedo decir, solo estoy ejecutando uno de sus servidores virtuales. Entonces, ¿cómo funciona normalmente, cómo se puede ejecutar un script PHP como "usuario" y, por lo tanto, poder escribir en cualquier cosa del sitio?
Alex Coplan
Bueno, les informaría sobre lo que obtienen "gratis". No tengo mucha experiencia con ningún alojamiento compartido, por lo que no puedo comentar sobre eso. Todos mis sitios ejecutan servidores web de Debian y las carpetas que deben poder escribirse serán propiedad de ellos www-datacon 700permisos, pero es probable que esto no funcione en su caso.
Sven
Creo que también le están pagando por su sitio principal, por eso, si hay alguna ayuda en la parte inferior de cualquier página de error del servidor, dice estoApache/2.2.9 (Debian) PHP/5.2.6-1
Alex Coplan
también esto es vps no compartido
Alex Coplan
2
Bueno, trato de averiguar qué permisos y propiedades pueden transferir sus archivos al servidor. Si se trata de un usuario que no es al menos un miembro del www-datagrupo, debe cambiar los usuarios / grupos después de la transferencia o, de hecho, utilizar los 777permisos. Pero esto no tiene sentido, no podemos ayudarlo de esta manera.
Sven