Archivos y permisos de usuario en Apache 2 y Linux

Asegurar que los permisos de usuario de los archivos y carpetas de nuestro servidor web están correctamente asignados es una práctica que nos ahorrará problemas en el futuro. En esta mini entrada veremos cómo hacerlo.

Para este artículo asumiremos que disponemos de varios host virtuales y que vamos a asignar los permisos adecuados solo a uno de ellos. La carpeta raíz es /var/www/html y la pública /var/www/html/public.

En caso de que tengas un servidor Apache 2 recién instalado lo habitual es que las carpetas mencionadas en el párrafo anterior sean /var/www y /var/www/public respectivamente.

Por último antes de entrar en materia indicar que también asumiremos que el usuario con el que trabajamos es «usuario».

Asignamos los permisos

Comenzaremos asegurándonos de que /var/www/html pertenezca al grupo www-data:

sudo chgrp www-data /var/www/html

Nos aseguramos también que nuestro usuario pertenezca al mismo grupo:

sudo usermod -a -G www-data usuario

Asignamos los permisos adecuados:

sudo chmod -R 775 /var/www/html
sudo chmod -R g+s /var/www/html

Y por último nos aseguramos de ser los propietarios del directorio:

sudo chown -R usuario /var/www/html

En este punto ya tenemos los permisos de usuario correctamente configurados, pero como siempre es bueno comprobarlo.

Comprobamos que todo sea correcto

Para comprobar que todo haya salidos bien accedemos a /var/www y listamos los archivos con detalle:

ls -l

Deberíamos tener algo similar a lo siguiente:

total 2
drwxrwxr-x 4 usuario www-data 4096 dic 19 18:01 html
drwxrwxr-x 8 usuario www-data 4096 dic 19 18:07 vhost1

Los archivos y/o carpetas de este directorio pueden cambiar en función de lo que tengas en /var/www, pero al margen de eso podemos ver que tanto el usuario, el grupo y los perisos son correctos.

Si entramos dentro de /var/www/html y hacemos lo mismo el resultado debe ser similar.

Conclusión

Una tarea sencilla y rápida que nos ahorrará posibles complicaciones futuras. Y como siempre me gusta saber tu opinión, ¿qué haces distinto al establecer los permisos? ¿Te ha servido  este artículo para solucionar algún problema de permisos? ¿Cuál es tu experiencia en este tema?

Créditos, referencias y artículos relacionados

21 respuestas a «Archivos y permisos de usuario en Apache 2 y Linux»

  1. Gracias… muy facil y explicado el articulo. Ahora una pregunta: si quiero que varios usuarios (pedro, luis) puedan acceder y escribir en /var/www/html/proyecto1…. como hago con los permisos?

  2. Hola Pablo, gracias a ti por el comentario, es muy reconfortante leer que te ha servido de ayuda.

    En cuanto a tu pregunta, dar acceso de lectura y escritura a un segundo usuario (y sucesivos) debería ser tan sencillo como incluirlo dentro del grupo www-data:
    sudo usermod -a -G www-data pedro
    sudo usermod -a -G www-data luis

    Un saludo

  3. Hola, me resulto sumamente útil éste articulo e interesante tú blog por lo que lo agregué a mis favoritos. Te quiero consultar sobre el punto en que decís que «por último nos aseguramos de ser los propietarios del directorio». Si ya estamos en el grupo www-data y los correspondientes permisos fueron asignados ¿para que necesitaría ser dueño del directorio? ¿No sería mejor que quedara el usuario root cómo dueño del mismo?

  4. Hola Daniel, muy agradecido por el comentario y feliz de que te haya resultado útil.

    Tu reflexión es totalmente acertada, esa ultima línea no es necesaria teniendo en cuenta que hemos asignado los mismos permisos al propietario y al grupo.

    De hecho, si quisiéramos realizar un cambio de permisos en el sistema en el que usuario2 pasase a formar parte de www-data, y usuario dejase pertenecer al grupo, usuario seguiría teniendo permisos por ser el propietario, y probablemente no sea eso lo que nos interesa.

    1. Muchas gracias por la pronta respuesta Andrés y por aclararme la duda. Estoy comenzando un curso de Laravel y me complicó el tema de permisos en la carpeta www y los scripts pero me ayudó mucho tu tutorial. Te mando un saludo

  5. Hola, me resultado muy bueno tu tutorial, he solucionado un problema que tenía en el servidor, es una raspberry, con su usuario pi, cuando creaba carpetas desde un cliente ftp , no las creaba con los permisos necesarios , ahora gracias a tu tutorial si lo hace, pero los archivos cuando los subo por ftp, sigue dando solo permisos para pi y no para el grupo www-data, por lo tanto si intento entrar con el navegador , para que se vea la web, me da error 403. ¿tienes idea de que esta pasando o por donde pueden ir los tiros?

  6. Perfecto, gracias por compartir.
    Tengo una duda de como funciona la asignación del parámetro S en los permisos.
    sudo chmod -R g+s /var/www/html
    saludos.

  7. Hola, tengo un problema.. no entiendo mucho lo de los permisos por lo que si me explican con peras y manzanas lo agradecería.

    Tengo una tarea que se ejecuta por medio de crontab, se ejecuta para leer unos envíos realizados y de esta forma crear registro en BD y crear carpetas en una ubicación especifica, donde debe ser guardado un informe en formato PDF.

    Al ejecutarlo manual me crea las carpetas y el archivo sin problema, con apache como propietario y grupo, pero al crearlo como cron, me quedan las carpetas como root y no me permite el guardado del PDF. alguna idea de como solucionarlo?

    tengo otros sistemas en el servidor por lo que me da miedo cometer un error.

  8. Estimados, estoy migrando a Ubuntu, configurando Netbens Mariadb y el servidor apache.
    Este tutorial me sirvió de mucho ya que me permitió dar permisos a la carpeta localhost que asigna el servidor web.
    El problema es que me debe estar faltando algo para configurar ya que si bien no me da error la pagina dado que lo encuentra no logra mostrarme nada en el navegador.
    Puede que el proxy o quizás otras restricciones.
    Si tienen alguna idea de que puede estar faltando se los agradezco.

    Muchas gracias.
    Saludos.

  9. Hola…Muchas gracias…era una duda que tenia y como base diré que es esencial conocer bien los permisos en linux…mas aun en un server que esta disponible en la Red de redes… Saludos.

Responder a Andres Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *