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/www
es 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 www
no 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 chcon
para 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 -Z
interruptor 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