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.
fuente
Respuestas:
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.
fuente
/data
carpeta: 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/img
carpeta)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
777
permisos 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.
fuente
www-data
con700
permisos, pero es probable que esto no funcione en su caso.Apache/2.2.9 (Debian) PHP/5.2.6-1
www-data
grupo, debe cambiar los usuarios / grupos después de la transferencia o, de hecho, utilizar los777
permisos. Pero esto no tiene sentido, no podemos ayudarlo de esta manera.