אירח VHosts מרובים עם משתמשים שונים ב- Nginx

הדבר הכי נורמלי בעולם כשיש לך שרת הוא לחשוב על אבטחה ויותר אבטחה, אתה אף פעם לא יכול להיות מספיק פרנואידי 😉

נוהג מקובל במקצת ושום דבר אינו מומלץ, הוא להשתמש באותו משתמש לכל מסדי הנתונים, גרוע מכך אם משתמשים בשורש, עד כמה שזה ייראה מדהים, יש מי ש (עקב השתוללות או בורות) עשה זאת, דיברתי כבר מדוע אתה לא צריך להתנהג ככה ב עוד פוסטעכשיו הגיע הזמן להסביר כיצד ומדוע עדיף להפריד בין עיבוד שרת האינטרנט למשתמשים שונים, הפעם הוא ישתמש nginx.

DedicatedServer_SubImage

מה זה של משתמשים ושרת אינטרנט?

כדי להסביר זאת בצורה קצרה ופשוטה, שרת האינטרנט (אפאצ'י, nginx, מה שלא יהיה) צריך לפתוח תהליכים במערכת, תהליכים שיהיו אלה שלוקחים את הקבצים מהכונן הקשיח (תמונות וכו ') ולהפוך אותם לזמינים לדפדפן הלקוח. . שרת האינטרנט לא יכול פשוט לקחת את הקבצים ולבצע מניפולציה שהם לא איש, כלומר, הוא זקוק למשתמש שיהיה זה שיעשה את כל זה בסופו של דבר, והאותו משתמש הוא זה שאני מדבר עליו, אתה מבין?

מה זה ההפרדה במספר משתמשים?

נניח שבשרת שלנו יש שני אתרים, שלנו שהוא פרויקט אישי, ועוד אחד (בואו נדמיין שזו חברה או אח שלנו). גם כאשר אנו משתמשים בבסיסי נתונים נפרדים ובמשתמשים שונים כדי לגשת אליהם, בסופו של דבר הקבצים של שני האתרים מתבצעים על ידי אותו משתמש, עיבוד ה- PHP מנוהל על ידי אותו משתמש לכל האתרים (בדרך כלל www-data). זה נוהג שאינו מומלץ, עדיף שהכל יהיה מופרד היטב, כפי שאומר פתגם ישן, עדיף להיות בטוח מאשר להצטער.

אוקי אני מבין, איך אני עושה את זה עם Nginx

2000px-Nginx_logo.svg

הדבר הראשון שצריך לשים לב הוא של- Nginx אין מודול משלה המטפל בעיבוד PHP כמו שעושה אפאצ'י, עבור Nginx עלינו להשתמש ב- PHP-CGI או PHP-FPM, שעובד באותה מידה (או טוב יותר) מאשר אפאצ'י. אז כדי להפריד עיבוד PHP בין משתמשים שונים, נצטרך לשנות שורות בקבצי תצורת PHP (CGI או FPM), ולא Nginx עצמה.

נניח שאתה משתמש PHP-FPM, ניצור קובץ תצורה של בריכה עבור אתר ספציפי, כלומר, בריכה היא הדרך להפריד בין עיבוד PHP לבין PHP-FPM, אך אנו הולכים בחלקים.

1. ראשית עלינו לדעת באיזה משתמש במערכת נשתמש, אניח כי עדיין אין לנו נוצר ובכן, בואו ניצור אותה:

כל הפקודות הבאות חייבות להתבצע עם הרשאות ניהול, באמצעות שורש ישיר או באמצעות sudo

adduser blog

נתחיל בתהליך הרגיל של יצירת משתמש, נכניס את הסיסמה וכו '.

אני כותב בלוג למשתמש רק כדי לעקוב אחר הדוגמה, שהאתר הראשון בו נארח יהיה בלוג, ובכן ש ... כדי לדעת כל משתמש אליו האתר קשור

1. ראשית בוא נלך אל /etc/php5/fpm/pool.d/:

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

2. כעת ניצור קובץ בשם blog.conf:

touch blog.conf

3. כעת נניח את התצורה של הבריכה בה נשתמש לבלוג VHost:

ערוך את הקובץ blog.conf עם nano ... לדוגמא: סודו ננו blog.conf
[בלוג] משתמש = בלוג
קבוצה = בלוג
האזן = / var / run / php5-fpm-בלוג. גרב listen.owner = בלוג
listen.group = בלוג
pm = לא דורש pm.max_children = 96 chdir = /

הערה: מה שאני מסמן אותם באדום זה מה שעליהם לשנות בהתאם למשתמש שיצרו בעבר. לדוגמא, אם הם יוצרים VHost נוסף עם משתמש אחר (פורום למשל) ואז במקום לבלוג פשוט לשים פורום בכל אחת מהשורות, האם זה מובן?

4. לאחר תצורת הבריכה החדשה (את הקובץ blog.conf שזה עתה יצרנו וערכנו), התור לומר ל- Nginx VHost להשתמש בגרב אחרת עבור אותו VHost, לאתר זה. הגרב שתשמש תהיה זו שהכרזנו בעבר (/var/run/php5-fpm-blog.sock). בואו נערוך את Nginx VHost ובחלק העיבוד של PHP, אנו מצביעים על שימוש בגרביים. לדוגמה:

מיקום ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass יוניקס: / var / run / php5-fpm-בלוג.גֶרֶב;
כוללים fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

כפי שאתה יכול לראות, אני מציין שעיבוד ה- PHP של אותו VHost (שורות אלה הן למשל בתוך / etc / nginx / sites-enabled / vhost-blog) עשה זאת עם הגרביים שנמצאו ב- /var/run/php5-fpm-blog.sock ... שהוא זה שיצרנו בעבר בעת עריכת /etc/php5/fpm/pool.d/blog.conf ... האם לא מובן ?

5. ברגע שזה נעשה, אנו מפעילים מחדש את שני השירותים (php5-fpm ו- nginx) ואת voila, נראה כי העיבוד של אותו אתר (vhost) לא נעשה על ידי www-data או root או מישהו דומה, אלא על ידי המשתמש שהגדרנו בעבר .

כאן אני מראה לך את הפלט של a ps aux | grep fpm באחד השרתים של הצומת שלי:

ps aux | grep fpm ספר אלקטרוני 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: ספר אלקטרוני ספרים אלקטרוניים 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: ספר אלקטרוני לבריכה www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm: בריכה 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: מגזין הבריכה 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: תלמיד מגזין הבריכה 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: מגזין אישוני הבריכה 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: מגזין גוטל הבריכה 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: תלמיד cgr בריכה 0.3 2.5 457052 52444 25? S אפריל 20 23:11021 php-fpm: אישון אישון בריכה 0.4 2.5 458316 52864 28? S Apr5 57:11254 php-fpm: pupill pool cgr 0.0 1.0 363152 21708 28? S Apr0 12:13184 php-fpm: cgr הבריכה cgr 0.0 1.0 362872 21360 28? S Apr0 08:XNUMX php-fpm: cgr בריכה

כפי שאתה יכול לראות ... הפרדת עיבוד PHP על ידי משתמשים המשתמשים ב- Nginx + PHP-FPM היא ממש קלה, שם אתה רואה שיש מספר בריכות, שכן ישנם מספר משתמשים.

מסקנות

כשמדובר בשרתים, אתה אף פעם לא מספיק פרנואידי ... אבטחה היא לא משהו לשחק איתו, ככל שננסה תמיד לשפר את האבטחה של השרתים שלנו ושירותיהם, כך פחות סיכוי שנפחד מנסיון פריצה (מוצלח) או כל דבר דומה 😉


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   מטלטל דיג'ו

    גאארה, בזמנים הנוכחיים הדברים צריכים להיות אוטומטיים ככל האפשר, אני ממליץ לך לנסות את Ansible. ללא סוכן, אתה זקוק רק לפיתון במארח המרוחק, פשוט מאוד לתצורה, קבצי yaml, תבניות ג'ינג'ה.

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

    1.    KZKG ^ גאארה דיג'ו

      בואו נראה, זה לא תמיד רק עבור אתרי וורדפרס, ו ... חחח אולי Ansible לוחץ על volao, אבל אני מעדיף לדעת בדיוק איך הכל עובד על השרת, גם אם אני צריך להשקיע דקה אחת ביצירת גרביים חדשות ו VHost חדש 😀

      1.    מטלטל דיג'ו

        עם Ansible אתה מבצע אוטומציה של הכל, אתה עושה כמעט כל מה שאתה רוצה, היתרון של שיטה זו הוא שאתה מכיל את התרגול ואז מבצע כרצונך, דמיין שיש לך אתר עמוס בכבדות ואתה רוצה לעשות איזון עומסים בין שרתי היישומים, אלה חייבים להיות מוגדרים בדיוק אותו דבר אתה לא יכול לדלג על שלב או לעשות משהו אחר באחד מהם, האם אתה יכול לדמיין שאתה מבצע את ההליך שלב אחר שלב 4 פעמים? עם Ansible זה פשוט כמו להוסיף את שם המארח לקובץ המלאי ול- Voilá !!

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

      2.    מטלטל דיג'ו

        סליחה על כת ה Ansible, אך זו אחת הטכנולוגיות האלה שאתה מגלה ואתה רוצה שכולם ישתמשו בה כעת מכיוון שהיא כל כך מגניבה ופרקטית, זה כמו כשאתה מגלה את NGINX ואתה רוצה שכל החברים שלך יעזבו את אפאצ'י מיד.

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

  2.   מסטאראווין דיג'ו

    אני בטוח שהפוסט שלי משלים זאת ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   87 דיג'ו

    אני (או לומד להיות מפתח) ועם NGIX היו לי בעיות רבות בתצורה של nginx + php-fpm. אני יודע ש- distro archlinux לא הכי טוב לעשות את זה כשרת, אבל בכל פעם שעדכנתי גרסה של ngix או php הכל תמיד קרס אז ויתרתי על הניסיון חח ... היום אני נשאר עם Apache + PHP הקלאסי אבל אני אראה אם ​​אני אסתובב שוב ב- NGIX ... אולי במכונה וירטואלית

    1.    מטלטל דיג'ו

      המנטליות משתנה מעט, nginx מגישה את התוכן הסטטי ומשמשת כ- proxy הפוך עבור ה- php-fpm שהוא מי שמפעיל את ה- PHP האמיתי, אתה צריך להתחיל בחלקים ולהשיג את הפריסה שלב אחר שלב, לחפש מדריך לפריסת ה- המסגרת איתה אתה עובד, לכל אחד מהם יש את פרטיו לפי שמות הציבור, סטטי, משאבים וכו '.

  4.   אנונימי דיג'ו

    עשו לקהילה את החסד הגדול של נטישת המילה "מארח", שאינה קיימת. מאת אלוהים, האם כל כך קשה לומר "מארח"?

  5.   רוצה דיג'ו

    ברכות, בעקבות הדוגמה שלך הייתי רוצה לדעת אם ניתן ליצור בריכה רק עבור ה- WordPress backen, כלומר עבור ה- wp-admin על ידי יצירת שקע חדש לחיבורים נכנסים ל- backend

    מיקום / wp-admin {
    שורש /var/www/yoursite.com/wp-admin;
    אינדקס index.php index.html index.htm;
    מיקום ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    שורש /var/www/yoursite.com/wp-admin;
    כלול / 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/;
    }
    }