Problema de permisos de Apache2

Problema de permisos de Apache2

He cambiado mi DocumentRoot a /home/user/www. Para lograrlo, acabo de cambiar las 2 apariciones de la ruta en /etc/apache2/sites-available/default.

Los permisos de /home/user/www son 0774. He agregado el usuario www-data a mi grupo de usuarios y el propietario /home/user/wwwes mi propio usuario y grupo (usuario:usuario).

Lo he hecho por:

sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user

El problema es que Apache no puede escribir en este directorio. Sólo puede escribir si configuro www-data como propietario, pero si hago eso, no puedo escribir en el directorio.

He probado los permisos con:

sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file

y funciona.

Pero el Wordpress que tengo wwwno puede eliminar ni crear archivos. ¿Algunas ideas?

Respuesta1

Habría estado mejor con el directorio www en /var/www, con el propietario www-data y el grupo www-data, yagregando su usuario al grupo www-data.

Primero, cambie DocumentRoot, etc. nuevamente a /var/www en la configuración de Apache.

El directorio /var/www (y todos los subdirectorios que contiene) debe estar configurado como gid, para que los archivos y directorios se creen con el grupo www-data.

Todo lo siguiente debe ejecutarse como root o con sudo:

mkdir -p /var/www

Si hay algún archivo en /home/user/www que desea conservar, muévalo a /var/www ahora con:

mv /home/user/www/* /var/www/

Ahora arregle los permisos y la propiedad del directorio /var/www.

chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data

La próxima vez que el 'usuario' inicie sesión (o ejecute newgrp www-data), debería tener permiso de escritura en /var/www

Por cierto, si desea que al 'usuario' le resulte más fácil encontrar los archivos web, simplemente cree un enlace simbólico en su directorio de inicio:

 ln -s /var/www/ /home/user/

Respuesta2

Para acceso de lectura/escritura, también es importante tener permisos de ejecución en los directorios principales (en su caso, /home/user). Controlaresterespuesta.

Está utilizando la raíz en /home/user/www (que se incluye endel usuarioEl directorio de inicio y los directorios de inicio tienen de forma predeterminada 700 permisos en el momento de la creación. Intente crear la raíz de Apache en otro lugar, por ejemplo./apache/www

Respuesta3

Si su distribución utiliza algo como SELinux o App Armor, entonces probablemente necesitará otorgar acceso al proceso de Apache para que esté "permitido" acceder al área del directorio de inicio.

Booleanos de SELinux

Puede utilizar este comando para ver la lista de booleanos relacionados con httpd(Apache).

$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on

Este booleano debe estar habilitado:

httpd_enable_homedirs --> on

Etiquetas de contexto

Además, debe agregar un contexto SELinux (una etiqueta) a cada directorio que esencialmente le dice a SELinux que cualquier servicio/demonio que esté asociado a esa etiqueta puede acceder a este directorio o archivo. Apache (httpd) usa esta etiqueta:

httpd_sys_content_t:s0

Por lo tanto, debe ejecutar este comando chconpara agregar esa etiqueta a los archivos/directorios en/home. Solo agregue la etiqueta al directorio desde donde Apache entregará los archivos.

$ chcon -R -t httpd_sys_content_t /home/user/www

Puede confirmar que esto funcionó usando el -Zinterruptor a ls, que le muestra las etiquetas de contexto.

$ ls -Z /var/www/manual/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 mod

Referencias

información relacionada