Apache no puede acceder al archivo mientras tiene permiso

Apache no puede acceder al archivo mientras tiene permiso

No quiero permitir que otros tengan acceso de lectura, así que agregué mi usuario y el apacheusuario a un grupo llamado apachmey luego configuré ese grupo para todos los archivos y carpetas apachea los que quiero tener acceso, incluida la raíz de la página web. Luego le di todos los permisos al grupo y al propietario. Después de esto, Apache todavía no puede acceder a los archivos sin configurar el permiso de lectura para permitir todo ( rwxrwxr--(0774)).

La carpeta que contiene el archivo de índice, es propiedad apachedel grupo apachmey los permisos.rwxrwxr-x(0775)

Permiso 0770 en el archivo

con esto me sale un error 500, cambiándolo a 0774dejará que funcione bien

pruebas

Estos eran solo para confirmar con qué usuario se estaba ejecutando Apache y que se había agregado al grupo.

Respuesta1

Desde el punto de vista de la seguridad, no es realmente una buena idea configurar páginas web con el mismo usuario de Apache. El usuario de Apache debería poder leer las páginas web, pero no escribir en ellas.

Como tal, en la configuración estándar, es normal que las estructuras web sean legibles para todos, y cuando es necesario escribir, normalmente el usuario de Apache puede escribirlas, lo cual es una pesadilla de seguridad.

Una de las estrategias para evitarlo es instalar/usar mod_ruid2.https://github.com/mind04/mod-ruid2

En cuanto a Debian, basta con hacer:

apt-get install libapache2-mod-ruid2

Tenga en cuenta que el usuario predeterminado de Apache varía según la distribución. En Debian es www-data, en RH/CentOS es apache y en SuSE es wwwrun. De ahora en adelante me referiré a él como el usuario predeterminado de Apache.

Si no define ninguna directiva en un vhost, se comportará de la manera tradicional; de lo contrario, se cambiará el comportamiento.

La idea es tener un proceso ejecutándose en el vhost con el usuario que tiene derechos sobre el vhost y, como tal, los archivos tendrán esa propiedad y, como desee, otros usuarios no podrán leerlos. Normalmente defines un usuario por vhost.

En las directivas Virtualhost o Directorio en un vhost, usted define el usuario y el grupo que estará activo para ese directorio. El usuario: grupo de usuarios son los permisos efectivos que Apache utilizará al acceder al directorio/host virtual y, como tal, cualquier usuario que pertenezca a ese grupo podrá escribir/ver los directorios.

    <Directory "/vhostdir/">
            RMode config
            RUidGid user usergroup

    ....

Como tal, al escribir los directorios, ahora los archivos se pueden crear como 660 con la propiedad de usuario:grupo de usuarios si son administrados por un grupo de usuarios. Asimismo, los archivos también pueden ser creados por otro usuario con permisos de lectura para el mundo; sin embargo, para escribir, no será el usuario predeterminado de Apache, sino este otro usuario.

Las ventajas de mod_ruid2 son entonces:

  • en un entorno de alojamiento virtual, los usuarios no pueden leer los archivos de otros usuarios;
  • en un solo usuario, aún puede crear archivos como otro usuario, y ni el usuario predeterminado de Apache ni el usuario ruid2 podrán sobrescribirlos.
  • Más importante aún, los archivos escritos ahora se realizarán con el usuario ruid2 y ya no globalmente con el usuario predeterminado de Apache.

Desde la página de github:

ACERCA de mod_ruid2 es un módulo suexec para apache 2.0, 2.2 y 2.4, basado en mod_ruid y mod_suid2

-Se ejecuta sólo en Linux porque sólo el kernel de Linux ha implementado las capacidades de proceso requeridas. -Tiene mejor rendimiento que mod_suid2 porque no necesita matar a los niños httpd después de una solicitud. hace uso de las capacidades del kernel y después de recibir una nueva solicitud suids nuevamente. -Existen algunos problemas de seguridad, por ejemplo, si el atacante explota con éxito el proceso httpd, puede establecer capacidades efectivas y configurar su ID como root. Recomiendo usar algún parche de seguridad en el kernel (grsec), o algo así.

-Hay dos modos de operación principales: stat y config 1. La configuración es la predeterminada, debes definir uid y gid. Si no se define ningún [ug]id, se utilizan el usuario y el grupo predeterminados.

  1. stat httpd setuid y setgid a uid y gid del nombre de archivo solicitado (script)/directorio. Esto es bueno si usa mod_vhost_alias para alojamiento virtual.

INSTALAR 1. descargue e instale la última versión de libcap desde aquí 2. ejecute /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. configure httpd.conf 4. reinicie Apache

OPCIONES DE CONFIGURACIÓN: RMode config|stat (el valor predeterminado es config) RUidGid user|#uid group|#gid - cuando RMode está configurado, configúrelo en este uid y gid

RMinUidGid usuario|#uid grupo|#gid - cuando uid/gid es < que el mínimo uid/gid establecido en uid/gid predeterminado RDefaultUidGid usuario|#uid grupo|#gid

RGroups grupo1 grupo2: grupos adicionales configurados mediante setgroups @none: borra todos los grupos definidos anteriormente.

RDocumentChrRoot: establece el directorio chroot y la raíz del documento dentro

EJEMPLO:

<VirtualHost example.com>    
ServerAdmin [email protected]    
RDocumentChRoot /home /example.com/public_html    
ServerName     example.com    
ServerAlias    www.example.com    
RMode          config     # unnecessary since config is the default    
RUidGid        user1 group1    
RGroups        apachetmp

<Directory /home/example.com/public_html/dir>
   RMode stat    </Directory>

<Directory /home/example.com/public_html/dir/test>
   RMode config
   RUidGid user2 group2
   RGroups groups1    </Directory>

<Directory /home/example.com/public_html/dir/test/123>
   RUidGid user3 group3    </Directory>

<Location /yustadir>
   RMode config
   RUidGid user4 user4
   RGroups groups4    </Location>

información relacionada