Permisos correctos para / var / www y wordpress

41

He configurado un servidor LAMP y tengo acceso a través de SSH y a la página "funciona" desde un navegador web desde dentro de mi red (a través de la dirección IP) y desde afuera usando dyndns.

Tenemos algunos proyectos de Wordpress que se encuentran en subdirectorios en / var / www / wordpress1 / var / www / wordpress2, etc. No puedo acceder a estos subdirectorios desde un navegador para configurar WP o (supongo) para ver contenido en un navegador. Recibo un error prohibido 403 en mi navegador.

Supongo que este es un problema de permisos. ¿Puede decirme la configuración adecuada de los permisos para:

  1. Permitir a los desarrolladores y a mí leer / escribir.
  2. para permitir que WP se configure y haga lo suyo
  3. Permita que los visitantes accedan a los sitios a través de la web.

También debo mencionar que la subcarpeta en realidad son enlaces simbólicos a la carpeta en otro disco duro interno; no creo que esto haga una diferencia, pero pensé que debería revelarlo.

total 12
drwxr-xr-x  2 root root 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root root 4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 root root   43 2012-07-11 20:45 admin_media ->     /root/django_src/django/contrib/admin/media
-rw-r--r--  1 root root  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 root root   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 root root   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Aquí está el resultado de usar chown -R www-data:www-data /var/www

total 12
drwxr-xr-x  2 www-data www-data 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root     root     4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 www-data www-data   43 2012-07-11 20:45 admin_media -> /root/django_src/django/contrib/admin/media
-rw-r--r--  1 www-data www-data  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 www-data www-data   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 www-data www-data   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Todavía no puedo acceder a través del navegador.

dpbklyn
fuente
Por favor, publique el resultado del comando ls -la /var/www.
SirCharlo
¡por favor ponga esa información en su pregunta!
Jorge Castro
OK, me tomó un segundo recordar cómo publicar el código ...
dpbklyn
Ok, bueno inténtalochown -R www-data:www-data /var/www
SirCharlo
2
Creo que su problema ahora es que está utilizando enlaces. Apache no seguirá los enlaces. Lo que haría sería mover esos archivos a / var / www y configurar apache para usar vitrualhosts. Consulte help.ubuntu.com/10.04/serverguide/httpd.html Alternativas, si lo desea utilizar /hdd/web/wordpresssería configurar Apache (directorio raíz) correctamente. Puede configurar Apache para usar enlaces, pero no lo aconsejo. Consulte también help.ubuntu.com/community/WordPress
Panther

Respuestas:

81

Primero, debe asegurarse de que su nombre de usuario esté incluido en el www-datagrupo. Si no, puede agregar su nombre de usuario como www-datagrupo

sudo adduser $USER www-data

Después de eso, debe cambiar la propiedad de / var / www a su nombre de usuario

sudo chown $USER:www-data -R /var/www

Siguiente paso, para la práctica general , debe cambiar el permiso a 755 (rwxr-xr-x), no recomendar cambiar el permiso a 777 por razones de seguridad

sudo chmod u=rwX,g=srX,o=rX -R /var/www

En relación con el permiso específico para WordPress o Laravel u otro marco, puede leer la documentación respectivamente.

Espero eso ayude...

metamorfo
fuente
1
no funcionó para mí, agrego para usarsudo chown www-data:www-data -R mywordpressdirectory/
Louis
Después de cambiar la propiedad, también debe cambiar el permiso. ¿Ha cambiado su permiso a 755?
metamorph
1
Lo hizo con chmod. Está cambiando el permiso a 755 con bits adhesivos (para mantener nuevos archivos propiedad de www-data.)
Zachary Dahan
La mejor explicación que pude encontrar, corta y dulce. Gracias.
Banago
1
Por lo tanto, no podrá instalar / eliminar complementos / temas, etc. desde el panel de administración porque WordPress no tendrá permiso de escritura.
Igor Skoldin
3

Aparentemente, así es como se recomienda en la Guía del servidor de Ubuntu:

Capítulo 11. Servidores web.

1.4. Compartir permiso de escritura

Para que más de un usuario pueda escribir en el mismo directorio, será necesario otorgar permiso de escritura a un grupo que comparten en común. El siguiente ejemplo otorga permiso de escritura compartido a / var / www / html al grupo "webmasters"

Yo uso www-data . Simplemente reemplace "webmasters" con su grupo, asegúrese de agregar el usuario al grupo, por supuesto.

sudo chgrp -R webmasters /var/www/html
sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www/html -type f -exec chmod g=rws "{}" \;

Acabo de probarlo con Dreamweaver desde mi escritorio de Mac y cargué y reemplacé archivos, agregué archivos, etc. El directorio html conserva su propiedad como root, pero el usuario local puede editarlo.

$ls -l
$-rw-rw-r-- 1 localUser www-data 11505 May 28 09:56 index2.html
$-rw-rwSr-- 1 root  www-data 11535 May 28 09:58 index.html

Espero que esto aclare las cosas y ayude a los cansados, porque sé que siempre estaba cansado de esta situación, pero ahora está claro para mí.

Ah, y recomiendo usar sftp con claves para acceder a su ftp, funciona muy bien para mí y no necesito PureFTP ni ningún otro método inseguro para entregar los archivos al sitio web. Hay algunos buenos tutoriales en el sitio de Digital Ocean sobre cómo asegurar su servidor con claves ssh:

Cómo configurar la autenticación basada en clave SSH en un servidor Linux

MagicCamera
fuente
1) que deja bits fijos en los archivos. Parece extraño, no hace nada, abre la puerta a problemas de seguridad si los usuarios pueden hacer que los archivos sean ejecutables y ejecutarlos. Pero si está satisfecho con setgid en los archivos, reemplace los complejos findcon solo sudo chmod -R g=srwX /var/www/html.
temoto
2) find -exec chmodgenerará un programa separado para cada archivo, lo que lleva mucho tiempo y ejerce una presión innecesaria sobre el sistema si tiene muchos archivos. Solución: sudo find /var/www/html -type f -print0 |sudo xargs -0 chmod g=rw. xargs intentará alimentar tantas rutas de archivos como sea posible a una sola instancia de chmod.
temoto
0

Compruebe que Apache tiene derechos de ejecución para /hdd/web/mediay /hdd/web/wordpress.

Correr:

chmod o+x /root /root/site /root/site/about

Además, Apache debe configurarse para permitir el acceso al directorio en el sistema de archivos. Esto debe hacerlo un administrador del sistema insertando una directiva en los archivos de configuración de apache (httpd.conf).

Dado que el directorio real está dentro de la raíz web, debe ser accesible, pero FollowSymLinks puede no haber sido habilitado para el directorio; esto también debe agregarse a la directiva.

Ver http://httpd.apache.org/docs/2.0/mod/core.html#directory

jazmines
fuente
Gracias a todos ... He decidido seguir el camino de menor resistencia ... eliminé los enlaces simbólicos. Todo funciona a la perfección.
dpbklyn
0

Lectura de la guía de instalación para Ubuntu ..

chown -R www-data /usr/share/wordpress

Tal vez podría ser más fácil instalarlo de esta manera en lugar de intentar descomprimir los archivos en /var/www

https://help.ubuntu.com/community/WordPress ...

de alguna manera wordpress se ejecuta en apache ... ¿verdad? si quieres hacerlo de esa manera ... muestra do como @metamorph y luego da permiso en apache2 de httpd.confesta manera:

<VirtualHost *:80>
        ServerName site
        ServerName site.domain
        DocumentRoot /srv/www/wordpress.site

        DirectoryIndex index.php

</VirtualHost>

y luego default-server.conf.

<Directory "/srv/www/wordpress.site">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

Quizás sea mejor hacer el paso a paso https://help.ubuntu.com/community/WordPress

maniat1k
fuente