¿Es posible en nginx configurar diferentes usuarios por host virtual?
Algo como
server {
user myprojectuser myprojectgroup;
...
}
No, porque todas las secciones del servidor en una configuración nginx se sirven desde el mismo conjunto de procesos de trabajo. Además, desde una perspectiva de seguridad, es mejor ejecutarlo así, ya que significa que el servidor web no puede escribir el contenido automáticamente (sin estupideces como a chmod -R 0777
), de modo que si hay una vulnerabilidad en nginx, ninguno de los contenidos Está en riesgo.
www-data
permisos0710
cuando configure el servidor virtual (ya que esto necesita raíz para configurar nginx, no es un problema que su automatización también establezca los permisos necesarios). Entonces, el contenido de docroot solo debe sero+x
para directorios yo+r
archivos.www-data
, cada usuario que pueda servir un script PHP o un proceso cgi-bin puede acceder a cualquier archivo accesible para elwww-data
usuario. Esto parece no ser obvio para cualquiera que almacene contraseñas de bases de datosconfig.php.inc
o similares en una máquina compartida.peter
yjohn
. Están alojando sus páginas web en~/public_html
. En ausencia de un enfoque diferente no mencionado por ninguna de las personas que discutieron esto anteriormente, un script .php tiene los mismos permisos que el servidor web, ya que también se está ejecutandowww-data
. Esto significa que, al igual que el servidor web y el intérprete PHP, puede leer cualquier otro script .php.Sí. Es posible y recomendado para mayor seguridad (ver por qué a continuación).
Teniendo en cuenta que está utilizando PHP-FPM (probablemente lo sea, ya que es lo más habitual), puede crear un spool, propiedad de un usuario diferente, para cada dominio.
1. Crear bobinas:
Agregue los spools
/etc/php/7.0/fpm/pool.d/www.conf
o cree un nuevo.conf
archivo para cada nuevo spool.Carrete # 1 (myuser1):
Carrete # 2 (myuser2):
PD: Mantenga su listen.owner / listen.group con el mismo usuario nginx (generalmente www-data ).
2. Asigne cada spool a su bloque de servidor (host virtual para usuarios de apache):
Anfitrión 1:
Anfitrión 2:
Reinicie los servicios FPM y NGINX
Pruebas:
Cree un archivo pinfo.php (o cualquier nombre) que muestre al usuario actual del proceso:
O cree el archivo pinfo.php a través de bash:
Luego abra " http: //.../pinfo.php " en su navegador.
Por qué usar múltiples usuarios (razones de seguridad):
Si ejecuta todos sus sitios web bajo el mismo usuario ( www-data ), ¡una llamada PHP al sistema () / passthru () / exec () tendrá acceso a todos los sitios web! NGINX no lo protegerá contra esto. El PHP es solo un ejemplo, pero cualquier lenguaje de servidor web popular tiene llamadas similares. Como hacker, puede " ls .. " para navegar por todos los sitios web y " cp / echo / mv " para escribir su propio código en cualquier archivo (incluidos los archivos de otro sitio web). Incluso si todos los sitios web en el servidor son propiedad de la misma persona (por ejemplo, usted), es recomendable ejecutar cada sitio web con un usuario diferente, ya que evitará que los piratas informáticos / virus (por ejemplo, los virus de Wordpress) accedan a sus otros sitios web.
fuente
En respuesta al comentario de Ivan anterior y que parece aplicable al OP. Dos cosas:
La raíz del documento de la aplicación sería algo así como
/blah/peterWeb/html
y/blah/johnWeb/html
. Tanto NGINX como Apache2 no permitirían que uno lea detenidamente u opere en el otro directorio, incluso si ambos ejecutan www-data como grupo.Colocar cada árbol de directorios bajo su propio permiso de usuario permitiría a cada usuario ingresar / iniciar sesión en un sistema UNIX y mantener sus directorios privados para cada uno, simplemente no coloque a cada usuario en el grupo www-data. Si está de acuerdo, entonces su oración:
podría escribirse con mayor precisión como:
EDITAR 1: Al tener que abordar algunos problemas de administración del servidor, estudié más a fondo este tema. ¡No sabía cuán precisa era la información de Ivan! Si tiene la intención de dar a los usuarios la capacidad de cargar y ejecutar scripts en una configuración de alojamiento compartido, preste atención. Aquí hay un enfoque . Felicitaciones a Ivan por asegurarse de entender esta vulnerabilidad.
fuente
www-data
. Si Johnny puede crear un guión y ejecutarlowww-data
(que en configuraciones ingenuas puede), entonces el guión de Johnny puede leer los guiones de Peter y enviárselos a Johnny. Esto no tiene nada que ver con los grupos. La solución adecuada es tener suPHP (si la configuración ingenua, mal, como código mal escrito pone en peligro todos los archivos de este usuario), o una cárcel, o usuario web adicional dedicado por usuario.