GNU/Linux >> Tutoriales Linux >  >> Linux

¿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 apache usuario a un grupo llamado apachme y luego configure ese grupo para todos los archivos y carpetas que quiero apache tener acceso, incluida la raíz de la página web. Luego le he dado al grupo y al propietario todos los permisos. Después de esto, apache aún 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 de apache con el grupo apachme y los permisos rwxrwxr-x(0775)

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

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

Respuesta aceptada:

Desde el punto de vista de la seguridad, no es 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 hay necesidad de escribir, normalmente el usuario de Apache puede escribir, lo que 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, wwwrun. Me referiré a él de ahora en adelante como el usuario predeterminado de Apache.

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

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 se define un usuario por vhost.

En las directivas Virtualhost o Directory en un vhost, define el usuario y el grupo que estarán activos para ese directorio. El usuario:grupo de usuarios es lo que serán los permisos efectivos que usará Apache al acceder al directorio/servidor 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 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.
Relacionado:Centos:¿cómo reducir el sistema de archivos raíz sin iniciar un livecd?

Desde la página de github:

ACERCA 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 solo en Linux porque solo el kernel de Linux ha implementado las capacidades de proceso requeridas.
-Tiene mejor rendimiento que mod_suid2 porque no necesita matar a los hijos de httpd después de una solicitud. hace uso de las capacidades del kernel
y después de recibir una nueva solicitud suids nuevamente.
-hay algunos problemas de seguridad, por ejemplo, si el atacante explota con éxito el proceso httpd, puede establecer capacidades efectivas y
setuid a la raíz. recomiendo usar algún parche de seguridad en kernel
(grsec), o algo así..

-hay dos modos de operación principales:stat y config
1. config es predeterminado, debe definir uid y gid. Si no se define [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. reiniciar apache

OPCIONES DE CONFIGURACIÓN:RMode config|stat (el valor predeterminado es config) RUidGid
usuario|#uid grupo|#gid:cuando RMode está configurado, establezca este uid y gid

RMinUidGid usuario|#uid grupo|#gid:cuando uid/gid es establecido en uid/gid predeterminado RDefaultUidGid usuario|#uid grupo|#gid

RGroups group1 group2 – grupos adicionales establecidos a través de setgroups @none –
borrar 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>


Linux
  1. [CentOS 7 Apache]:Permiso denegado:los permisos de archivo niegan el acceso al servidor

  2. ¿Por qué un usuario normal no puede 'chown' un archivo?

  3. ¿Monitoreo de acceso a archivos de Linux?

  4. Otorgar acceso de usuario a Sudo (agregar al archivo de Sudoers o al grupo de ruedas)

  5. Apache VirtualHost 403 Prohibido

[Resuelto] No se puede acceder al archivo de almacenamiento, Permiso denegado Error en KVM Libvirt

acceso concurrente al archivo linux

Ejecutando Apache como un usuario diferente

Convierta el archivo a PDF usando LibreOffice bajo el usuario apache (es decir, cuando usa PHP)

mejores prácticas para el permiso de acceso a los usuarios para apache tomcat

¿Cómo bloquear el acceso a un archivo para que no sea atendido por Tomcat?