Para contexto: estoy usando un servidor Debian o Ubuntu con Apache 2.4, PHP 7.2 y varias otras cosas, para configurar un entorno de desarrollo y pruebas para que los desarrolladores y técnicos lo utilicen en el trabajo.
He seguido eltutorial sobre virtualhost masivousando mod_vhost_alias
para poder obtener cosas como esta:
path: /var/www/{projectname}/public
url: {projectname}.dev.mycompany.net
La configuración relevante es la siguiente (adecuadamente editada)
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
Ahora, todo esto funciona correctamente y los desarrolladores pueden iniciar fácilmente sus propios proyectos solicitando un usuario; se crea el usuario y se agrega al www-data
grupo y luego se crean las carpetas adecuadas en /var/www con una estructura como esta:
projectname:projectname rwxrwxr-x /var/www/projectname
www-data:www-data rwxrwsr-x /var/www/projectname/public
setfacl -m user:www-data:rwx /var/www/projectname
setfacl -R -m user:projectname:rwx /var/www/projectname/public
(esto último era necesario para que el servidor web pudiera manejar los archivos creados, por ejemplo, con los marcos instalados o los descompresores)
Por supuesto, esto tiene la desventaja de que cualquier proyecto puede escribir cosas en cualquier otro proyecto, así que quiero trabajar en eso. Como quiera que sea posible,mantenerla automatización, ya que los desarrolladores y técnicos deberían poder iniciar proyectos con el mínimo aporte posible del backend al respecto ("Distraer el backend es para más adelante", dijo el jefe).
Ahora, para hacer las cosas seguras pero tratando de mantenerlas simples, lo que quiero es configurar Apache (¿o PHP?) para que se utilice el usuario adecuado para ejecutar el proceso de servidor web/PHP correspondiente a cada host virtual. Eso significa que, por ejemplo: el proyecto /var/www/foo1
se ejecuta bajo el usuario foo1
y no tiene acceso a los archivos bajo /var/www/foo2
. Por supuesto, espero adaptar los permisos y ACL a eso.
Pero no puedo encontrar ninguna documentación sobre cómo configurar usuarios separados mientrasmanteniéndose cercala automatización para host virtual masivo. Supongo que esto tiene que existir; después de todo, las empresas de hosting harían cosas como esta. Pero he investigado varias cosas y nada parece ofrecer una alternativa que funcione.
A lo sumo, me han guiado a apache2-mod-itk, pero una vez instalado, el servidor web siempre no podrá iniciarse pase lo que pase, incluso cuando la mayoría de los archivos conf se configuran de forma predeterminada, por lo que no es una opción.
Lo que estoy buscando es algo que tenga un efecto similar a este "pseudocódigo" de configuración de Apache:
<Virtualhost *:443>
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
User %-4
Group %-4
SuexecUserGroup %-4
CustomLog /var/www/%-4/logs/access.log vcommon
[...other directives]
</Virtualhost>
¿Hay algo como esto disponible en Apache/+PHP, o debería buscar otro tipo de solución automatizada?
Tenga en cuenta que yonodesea terminar separando todo, por ejemplo, en: una ventana acoplable o VM para cada usuario, a menos que exista una forma simple tipo mass_vhosts de automatizar la configuración; eso requeriría aún más información (sin mencionar darle a los técnicos permiso de root (?) para ejecutar e instalar contenedores acoplables) y también interrumpir la automatización (¿cómo se conectan los subdominios a los contenedores dinámicamente?).