¿Con qué usuario deberían ejecutarse NGinx y PHP?

15

Los permisos son algo que me han confundido un poco con Linux. Por lo tanto, en este momento tanto mis instancias NGinx como PHP-FPM se ejecutan con el usuario y el grupo:

www-data

¿Es esto estándar? Me encuentro con problemas cuando me encuentro con la carga de archivos.

Ejemplo , se cargaría un archivo tanto con el usuario como con el grupo www-data. Ahora, debido a cómo configuro los permisos (0440) en mi aplicación web, no puedo iniciar sesión a través de ssh con mi cuenta normal para descargar esos archivos. Esto no se puede cambiar.

Estaba pensando en cambiar mi instancia de nginx y php para mantener el grupo, pero cambiarlos para que se ejecuten con mi nombre de usuario.

¿Cuál es la forma correcta de manejar los permisos aquí? Gracias.

El desarrollador de píxeles
fuente

Respuestas:

12

Así es como funciona: cuando inicia sesión a través de FTP / SSH y carga archivos, se crean con sus permisos. Probablemente su webroot sea de escritura mundial (0777), eso es inseguro: todos los usuarios del sistema pueden escribir algo allí. PHP se ejecuta con diferentes privilegios de usuario (se especifican en la configuración de PHP-FPM, no en la configuración de nginx), y como el directorio es de escritura mundial, el usuario de PHP (www-data) también puede escribir allí. Pero el propietario de este archivo es www-data, no su cuenta. Son 2 cuentas distintas en el nivel de permiso del sistema de archivos.

Le sugiero que cree un usuario dedicado con los menos privilegios posibles, que sería propietario del directorio webroot y se usaría para la carga FTP / SSH Y ejecutaría php. Debe cambiar la configuración de PHP-FPM, en la sección de trabajo hay entradas de usuario y configuración de NGINX, para que pueda hacer que los archivos de su sitio web no sean legibles y más seguros.

No ejecute PHP con usuarios privilegiados (capacidades de sudo, privilegios de escritura fuera de docroot), ya que podría comprometer la seguridad del servidor.

Kristaps
fuente
1
Buena respuesta, creé un nuevo usuario, nuevas carpetas, copié todo, apliqué los permisos correctos y corté al usuario. Funciona bien Gracias.
The Pixel Developer
¿Podría agregar mi usuario FTP al www-datagrupo en lugar de crear el usuario dedicado? ¿Resuelve el problema de @ ThePixelDeveloper? Gracias.
Vladyslav Turak
2

El www-datausuario y el grupo son bastante estándar. Puede ser www o web en otros sistemas, pero la idea es la misma: ejecutar los servicios web con una cuenta dedicada. Por lo tanto, cuando su servidor web se ve comprometido, el atacante solo podrá acceder a los archivos que se le han otorgado a esta cuenta.

Si un usuario tiene que administrar los servicios web, debe agregarlo al grupo correspondiente (www-data) o permitirle su (o sudo) al usuario relevante (aún www-data).

Benoit
fuente
10
La razón de www-data es que es una cuenta con cero privilegios: no puede escribir en ningún archivo en todo el sistema de archivos, no leer en otra cosa que no sean archivos legibles en todo el mundo. Anteriormente, utilizaría el usuario integrado "nobody" para lograr esto. Sin embargo, al crear "www-data" tiene la posibilidad de permitir que este usuario escriba en algunos archivos, sin tener que hacer que esos archivos se puedan escribir en todo el mundo (lo cual es malo). El principio básico, que "www-data" es tan privilegiado como "nadie" en cualquier otra forma, es cierto.
thomasrutter
@thomasrutter, por lo que entiendo, debería ejecutar Nginx y PHP-FPM bajo el usuario www-data que está en el grupo www-data. Si yo quiero que este usuario sea capaz de readY writea alguna carpeta, necesito le dé los permisos adecuados. En la mayoría de los casos, esto sería una carpeta raíz web /var/www/htmly un 755permiso. Estoy en lo cierto? ¡Gracias!
Vladyslav Turak
1

Intento evitar que nginx / php ejecute scripts propiedad de www-data por razones de seguridad.

Ed Bloom
fuente
99
¿Podrías explicar eso?
Karussell