Vær flere VHosts med forskellige brugere i Nginx

Den mest normale ting i verden, når du har en server, er at tænke på sikkerhed og mere sikkerhed, du kan aldrig være paranoid nok

En noget almindelig praksis og INGENTING anbefales, er at bruge den samme bruger til alle databaser, værre hvis root bruges, hvilket så utroligt som det kan synes, der er dem der (på grund af uklarhed eller uvidenhed) gør dette, jeg har allerede talt om, hvorfor du IKKE skal handle sådan i et andet indlægNu er det tid til at forklare, hvordan og hvorfor det er bedre at adskille webserverbearbejdningen i forskellige brugere, denne gang bruger den Nginx.

DedicatedServer_SubImage

Hvad er det for brugere og webserver?

For at forklare det på en kort og enkel måde skal webserveren (apache, nginx, hvad som helst) åbne processer i systemet, processer der er dem, der tager filerne fra harddisken (billeder osv.) Og laver dem tilgængelig for klientens browser. Webserveren kan ikke bare tage filerne og manipulere dem som ingen, det vil sige, den har brug for en bruger, der vil være den, der i sidste ende vil gøre alt dette, og at den bruger er den, jeg taler om, forstås det?

Hvad er det ved adskillelse i flere brugere?

Antag, at vi på vores server har 2 websteder, vores, der er et personligt projekt, og et andet (Lad os forestille os, at det er vores kæreste eller bror). Selv når vi bruger separate databaser og forskellige brugere til at få adgang til dem, til sidst manipuleres filerne på begge websteder af den samme bruger, administreres PHP-behandlingen af ​​den samme bruger for alle websteder (det er normalt www-data). Dette er en ikke-anbefalet praksis, det er bedre at have alt godt adskilt, som et gammelt ordsprog siger, er det bedre at være sikker end ked af det.

Ok, jeg forstår, hvordan gør jeg det med Nginx

2000px-Nginx_logo.svg

Den første ting at bemærke er, at Nginx ikke har sit eget modul, der håndterer PHP-behandling, som Apache gør, for Nginx er vi nødt til at bruge PHP-CGI eller PHP-FPM, som fungerer lige så godt (eller bedre) end Apache. Så for at adskille PHP-behandling på tværs af forskellige brugere bliver vi nødt til at ændre linjer i PHP-konfigurationsfiler (CGI eller FPM), ikke Nginx selv.

Antag at du bruger PHP-FPM, opretter vi en konfigurationsfil af pool For et bestemt sted, det vil sige, er en pool måde at adskille PHP-behandling fra PHP-FPM på, men vi går i dele.

1. Først skal vi vide, hvilken bruger af systemet vi vil bruge, jeg antager, at vi stadig ikke har nogen oprettet og godt, lad os oprette det:

Alle følgende kommandoer SKAL udføres med administrative rettigheder, enten med direkte rod eller ved hjælp af sudo

adduser blog

Vi starter den normale proces med at oprette en bruger, indtaste adgangskoden osv.

Jeg blogger brugeren bare for at følge eksemplet, at det første sted, vi er vært for, vil være en blog, ja, at ... at kende hver bruger, som webstedet er relateret til

1. Lad os først gå til /etc/php5/fpm/pool.d/:

cd /etc/php5/fpm/pool.d/

2. Nu opretter vi en fil kaldet blog.conf:

touch blog.conf

3. Nu lægger vi konfigurationen af ​​den pool, som vi vil bruge til VHost-bloggen:

Rediger blog.conf-filen med nano ... for eksempel: sudo nano blog.conf
[blog] bruger = blog
gruppe = blog
lyt = / var / run / php5-fpm-blog.sock listen.owner = blog
lyt.gruppe = blog
pm = efterspørgsel pm.max_children = 96 chdir = /

Bemærk: Hvad jeg markerer dem med rødt, er hvad de skal ændre afhængigt af den bruger, de tidligere har oprettet. For eksempel, hvis de opretter en anden VHost med en anden bruger (forum for eksempel) er det ikke forstået i stedet for at blogge bare forum i hver af linjerne?

4. Når konfigurationen af ​​den nye pool (blog.conf-filen, som vi lige har oprettet og redigeret), er det turen til at fortælle Nginx VHost at bruge en anden sok til den VHost, til dette websted. Den sok, der vil blive brugt, er den, vi tidligere har erklæret (/var/run/php5-fpm-blog.sock). Lad os redigere Nginx VHost, og i PHP-behandlingsdelen angiver vi at bruge de sokker. For eksempel:

placering ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass unix: / var / run / php5-fpm-blog.sok;
inkluderer fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Som du kan se, angiver jeg, at PHP-behandlingen af ​​den VHost (disse linjer er for eksempel inde i / etc / nginx / sites-enabled / vhost-blog) gør det med de sokker, der findes i /var/run/php5-fpm-blog.sock ... som er den, vi tidligere oprettede, når vi redigerede /etc/php5/fpm/pool.d/blog.conf ... er forstod det ikke?

5. Når dette er gjort, genstarter vi begge tjenester (php5-fpm og nginx) og voila, vi vil se, at behandlingen af ​​dette websted (vhost) IKKE udføres af www-data eller root eller nogen lignende, men af ​​brugeren, som vi tidligere defineret.

Her viser jeg dig output af en ps aux | grep fpm på en af ​​min nodes servere:

ps aux | grep fpm e-bog 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool e-bog e-bog 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool ebook www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm: pool www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm: pool www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv3 tv615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv1818 magazine 1.7 1.7 437576 36396 09? S 55:0 46:2264 php-fpm: poolmagasin 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: poolmagasin elev 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: pool pupill magazine 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: pool gutl magazine 3.5 1.3 356724 27164 10? S 38:0 00:5624 php-fpm: pool gutl cgr 0.0 1.0 365168 22696 28? S Apr0 16:7900 php-fpm: pool cgr pupil 0.3 2.5 457052 52444 25? S Apr20 23:11021 php-fpm: pool pupil pupil 0.4 2.5 458316 52864 28? S Apr5 57:11254 php-fpm: pool pupil cgr 0.0 1.0 363152 21708 28? S Apr0 12:13184 php-fpm: pool cgr cgr 0.0 1.0 362872 21360 28? S Apr0 08:XNUMX php-fpm: pool cgr

Som du kan se ... det er virkelig let at adskille PHP-behandlingen af ​​brugere, der bruger Nginx + PHP-FPM, der ser du, at der er flere puljer, da der er flere brugere.

konklusioner

Når det kommer til servere, er du aldrig paranoid nok ... sikkerhed er ikke noget at lege med, jo mere vi altid forsøger at forbedre sikkerheden på vores servere og deres tjenester, jo mindre sandsynligt bliver vi bange af en (vellykket) hack forsøg eller noget lignende 😉


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

9 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   djæger sagde han

    Gaara, i øjeblikket skal disse ting automatiseres så meget som muligt, jeg anbefaler dig at prøve Ansible. Uden agent har du kun brug for python på den eksterne vært, meget enkel at konfigurere, yaml-filer, Jinja-skabeloner.

    https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

    1.    KZKG ^ Gaara sagde han

      Lad os se, det er ikke altid kun for WordPress-websteder, og ... haha ​​måske klikker Ansible på volao, men jeg foretrækker at vide nøjagtigt, hvordan alt fungerer på serveren, selvom jeg skal bruge 1 minut på at skabe nye sokker og en nyt VHost 😀

      1.    djæger sagde han

        Med Ansible automatiserer du alt, du gør næsten hvad du vil, fordelen ved denne metode er, at du indkapsler øvelsen og derefter udfører efter eget valg, forestil dig at du har et tungt belastet websted, og du vil lave belastningsbalancering mellem applikationsservere, disse skal konfigureres nøjagtigt det samme, du kan ikke springe et trin over eller gøre noget andet i en af ​​dem, kan du forestille dig at udføre proceduren trin for trin 4 gange? Med Ansible er det så simpelt som at føje værtsnavnet til lagerfilen og Voilá !!

        http://www.ansible.com/how-ansible-works

      2.    djæger sagde han

        Beklager Ansible-kulten, men det er en af ​​disse teknologier, som du opdager, og du vil have, at alle skal bruge det nu, fordi det er så sejt og praktisk, det er som når du opdager NGINX, og du vil have alle dine venner til at forlade Apache med det samme.

        https://speakerdeck.com/slok/ansible-all-the-things

  2.   Mstaaravin sagde han

    Jeg er sikker på, at mit indlæg supplerer dette ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   Rots87 sagde han

    Jeg er (eller studerer for at være) udvikler og med NGIX havde jeg mange problemer med at konfigurere nginx + php-fpm. Jeg ved, at archlinux distro ikke er det bedste at gøre det som en server, men hver gang jeg opdaterede en version af ngix eller php, styrtede alt sammen altid, så jeg opgav forsøget lol ... I dag forbliver jeg med den klassiske Apache + PHP, men jeg vil se, om jeg går rundt på NGIX igen ... måske i en virtuel maskine

    1.    djæger sagde han

      Mentaliteten ændres lidt, nginx serverer det statiske indhold og fungerer som en omvendt proxy for php-fpm, der er hvem der kører den rigtige PHP, du skal starte i dele og opnå implementeringen trin for trin, se efter en guide til implementering den ramme, du arbejder med, hver har sin detalje ved navnene på offentligheden, statisk, ressourcer osv ...

  4.   Anonymous sagde han

    Gør samfundet den store fordel ved at opgive ordet "hostear", som ikke findes. Af Gud, er det så svært at sige "vært"?

  5.   Ville Var At sagde han

    Hilsen, efter dit eksempel vil jeg gerne vide, om der kun kunne laves en pool til wordpress-backen, det vil sige for wp-admin, der laver et nyt stik til indgående forbindelser til backend

    placering / wp-admin {
    rod /var/www/yoursite.com/wp-admin;
    indeks index.php index.html index.htm;
    placering ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    rod /var/www/yoursite.com/wp-admin;
    inkludere / etc / nginx / fastcgi_params;

    fastcgi_pass server unix:/run/php5-fpm2.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 4k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 1240;
    }
    location ~* ^/wp-admin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /var/www/tusitio.com/wp-admin/;
    }
    }