La mayoría de las respuestas aquí no están escritas con la seguridad en mente. Es bueno tener la sensación de que correr sudo
cada vez no es muy sabio. Si hace un error tipográfico (por ejemplo, un espacio en blanco en un lugar incorrecto: sudo rm -rf / var/www/dir
¡no lo ejecute! ), Podría tirar a la basura su sistema.
Nota: Comenzando con Apache 2.4.7 / Ubuntu 14.04, /var/www
se ha movido a /var/www/html
Ajustar los comandos en esta respuesta en consecuencia.
Ver:
Malas ideas:
chmod 777
(sagarchalise): esto permite que cualquier persona con acceso a su sistema escriba en los directorios y archivos y, por lo tanto, permite al intruso ejecutar cualquier código bajo el www-data
usuario
chgrp -R www-data $HOME
(cob): esto permite www-data
leer o escribir cualquier archivo en el directorio de inicio. Esto no tiene en cuenta la regla de Privilegio Mínimo
chown -R $USER:$USER /var/www
(kv1dr): a menos que el mundo tenga permisos de lectura /var/www
, el servidor web que se ejecuta www-data
no podrá leer (servir) los archivos. Si el archivo es un documento HTML simple accesible al público, puede que no sea un problema si el mundo puede leer el archivo. Pero si el archivo es un archivo PHP que contiene contraseñas, lo es.
NOTA : en las siguientes soluciones, he otorgado www-data
privilegios de escritura. Sin embargo, /usr/share/doc/base-passwd/users-and-groups.txt.gz
afirma:
www-data
Algunos servidores web se ejecutan como www-data. El contenido web no debe ser propiedad de este usuario, o un servidor web comprometido podría reescribir un sitio web. Los datos escritos por los servidores web serán propiedad de www-data.
Siempre que sea posible, no otorgue permisos de escritura al www-data
grupo. www-data
solo necesita poder leer los archivos para que el servidor web pueda servirlo. El único caso en el que se www-data
necesitan permisos de escritura es para directorios que almacenan cargas y otras ubicaciones que deben escribirse.
Solución 1
Agréguese al www-data
grupo y establezca el bit setgid en el /var/www
directorio de modo que todos los archivos recién creados hereden también este grupo.
sudo gpasswd -a "$USER" www-data
Corrija los archivos creados previamente (suponiendo que usted sea el único usuario de /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(aún más seguro: utilizar 640
o 2750
manualmente y chmod g+w file-or-dir
que tiene que ser escribible por el servidor web)
Solución 2
Cree un enlace simbólico para cada proyecto en su directorio de inicio. Digamos que su proyecto está ubicado en ~/projects/foo
y desea que esté ubicado en /var/www/foo
, ejecute:
sudo ln -sT ~/projects/foo /var/www/foo
Si su directorio de inicio no tiene un bit de ejecución (descender) establecido para other
(por razones de seguridad), cambie el grupo a él www-data
, pero configure solo el bit de ejecución (sin lectura / escritura). Haga lo mismo para la ~/projects
carpeta, ya que puede contener otros proyectos además de www. (No es necesario sudo
si ha agregado previamente su usuario al www-data
grupo).
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Ajuste el grupo para www-data
el ~/projects/foo
y permitir que el servidor web para leer y escribir a los archivos y directorios de archivos + y descender en los directorios:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Aún más seguro: use 640 y 2750 por defecto y manualmente archivos y directorios chmod que el usuario del servidor web debe poder escribir. El bit setgid debe agregarse solo si desea que ~/projects/foo
el grupo pueda acceder a todos los archivos recién creados .
A partir de ahora, puede acceder a su sitio en http://localhost/foo
y editar sus archivos de proyecto ~/projects/foo
.
Ver también