Розмістіть кілька VHosts з різними користувачами в Nginx

Найбільш нормальна річ у світі, коли у вас є сервер, - це думати про безпеку та більше безпеки, ви ніколи не можете бути досить параноїком

Дещо типовою практикою і НІЧОГО не рекомендується, є використання одного і того ж користувача для всіх баз даних, гірше, якщо використовується root, що, як би неймовірно це не здавалось, є ті, хто (через бродяжництво чи незнання) зробіть це, я вже говорив про те, чому ви НЕ повинні діяти так у інший пост, тепер настав час пояснити, як і чому краще відокремлювати обробку веб-сервера від різних користувачів, цього разу він буде використовуватися Nginx.

DedicatedServer_SubImage

Що таке користувачі та веб-сервер?

Щоб коротко і просто пояснити це, веб-серверу (apache, nginx, що завгодно) потрібно відкрити процеси в системі, процеси, які будуть брати файли з жорсткого диска (зображення тощо) і робити їх доступний для браузера клієнта. Веб-сервер не може просто брати файли та маніпулювати ними, будучи ніким, тобто йому потрібен користувач, який зрештою зробить все це, і саме цей користувач є тим, про кого я говорю, це зрозуміло ?

Що таке розділення між кількома користувачами?

Припустимо, що на нашому сервері є 2 веб-сайти, наш персональний проект і ще один (уявімо, що це у нашої дівчини чи брата). Навіть коли ми використовуємо для доступу до них окремі бази даних та різні користувачі, врешті-решт файлами обох веб-сайтів керує один і той же користувач, обробкою PHP керує один і той же користувач для всіх сайтів (зазвичай www-дані). Це не рекомендується практика, краще, щоб все було добре розділене, як каже стара приказка, краще перестрахуватися, ніж шкодувати.

Гаразд, я розумію, як мені це зробити за допомогою Nginx

2000px-Nginx_logo.svg

Перше, на що слід звернути увагу, це те, що Nginx не має власного модуля, який обробляє PHP-обробку, як це робить Apache, для Nginx нам потрібно використовувати PHP-CGI або PHP-FPM, які працюють так само добре (або краще), ніж Apache. Отже, щоб розділити обробку 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 ... наприклад: sudo nano blog.conf
[блог] користувач = блог
група = блог
слухати = / var / run / php5-fpm-блог. носок послухай.власник = блог
слухати.група = блог
pm = ondemand 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 unix: / 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 ebook 586 0.0 0.0 349360 1204? Сб 30 березня 0:00 php-fpm: електронна книга пулу 589 0.0 0.0 349360 1204? S березня 30:0 php-fpm: електронна книга пулу www 00 608 0.0 0.2 350084? S березня 5008:30 php-fpm: пул www www 0 00 609 0.0 0.2 350600? Сб 5048 березня 30:0 php-fpm: пул www tv00 3 611 0.0 0.0 349360? Сб 1204 березня 30:0 php-fpm: пул tv00 tv3 3 615 0.0 0.0 349360? S березня 1204:30 php-fpm: пул tv0 magazine 00 3 1818 1.7 1.7? S 437576:36396 09:55 php-fpm: журнал журналу пулу 0 46 2264 1.9 1.7? S 437332:35884 10:15 php-fpm: учень журналу пулу 0 26 2338 4.3 1.0? S 428992:22196 10:18 php-fpm: журнал вихованців пулу 0 53 2413 1.8 1.7? S 437764:36152 10:22 php-fpm: журнал пула gutl 0 18 2754 3.5 1.3? S 356724:27164 10:38 php-fpm: пул gutl cgr 0 00 5624 0.0 1.0? S квіт. 365168 22696:28 php-fpm: пул cgr зіниця 0 16 7900 0.3 2.5? S 457052 квітня 52444:25 php-fpm: зіниця зіниці басейну 20 23 11021 0.4 2.5? S квіт. 458316 52864:28 php-fpm: учень пулу cgr 5 57 11254 0.0 1.0? S квіт. 363152 21708:28 php-fpm: басейн cgr cgr 0 12 13184 0.0 1.0? S 362872 квітня 21360:28 php-fpm: cgr

Як бачите ... відокремити обробку PHP користувачами, які використовують Nginx + PHP-FPM, дійсно просто, там ви бачите, що є кілька пулів, оскільки є декілька користувачів.

Висновки

Що стосується серверів, ви ніколи не є достатньо параноїком ... безпека - це не те, з чим можна грати, чим більше ми завжди намагаємось покращити безпеку наших серверів та їх послуг, тим менше шансів, що нас буде лякати (успішний) спроба зламати або щось подібне 😉


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

9 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   dhunter - сказав він

    Гаара, в сучасний час ці речі слід максимально автоматизувати, рекомендую спробувати Ansible. Без агента вам потрібен лише python на віддаленому хості, дуже простий у налаштуванні, файли yaml, шаблони Jinja.

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

    1.    KZKG ^ Гаара - сказав він

      Давайте подивимось, це не завжди стосується лише сайтів WordPress, і ... ха-ха, можливо Ansible клацає волао, але я волію точно знати, як все працює на сервері, навіть якщо мені доведеться витратити 1 хвилину на створення нових шкарпеток і новий VHost 😀

      1.    dhunter - сказав він

        Завдяки Ansible ви автоматизуєте все, ви робите практично все, що завгодно, перевага цього методу полягає в тому, що ви інкапсулюєте практику, а потім виконуєте за бажанням, уявіть, що у вас сильно завантажений сайт і ви хочете зробити балансування навантаження між серверами додатків, ці Ви повинні бути налаштовані точно так само, ви не можете пропустити крок або зробити щось інше в одному з них, чи можете ви уявити, що виконуєте процедуру покроково 4 рази? З Ansible це так просто, як додавання імені хосту до файлу інвентаризації та Voilá !!

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

      2.    dhunter - сказав він

        Вибачте про культ Ansible, але це одна з цих технологій, яку ви відкриваєте, і ви хочете, щоб усі користувались нею зараз, тому що вона така крута і практична, це як коли ви відкриваєте NGINX і хочете, щоб усі ваші друзі негайно покинули Apache.

        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. Я знаю, що дистрибутив archlinux не найкращий, щоб зробити його сервером, але кожного разу, коли я оновлював версію ngix або php, все завжди розбивалося, тому я відмовився від спроби ха-ха ... На сьогодні я залишаюся з класичним Apache + PHP, але я подивлюсь, якщо я ще раз обійду NGIX ... можливо, у віртуальній машині

    1.    dhunter - сказав він

      Психіка трохи змінюється, nginx обслуговує статичний вміст і служить зворотним проксі-сервером для php-fpm, який запускає справжній PHP, вам потрібно починати по частинах і досягати розгортання поетапно, шукати посібник для розгортання в рамках, з якими ви працюєте, кожна з них має свої деталі за іменами публіки, статики, ресурсів тощо ...

  4.   Анонімний - сказав він

    Чи зробить громада велику користь відмовитися від слова "хазяїн", якого не існує. Боже, чи так складно сказати «господар»?

  5.   волі - сказав він

    Вітаю, за вашим прикладом, я хотів би знати, чи можна створити пул лише для wordpress backen, тобто для wp-admin, який робить новий сокет для вхідних підключень до серверної бази

    location / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    розташування ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /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/;
    }
    }