One place for hosting & domains

      руководство

      Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]


      Введение

      Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом кратком руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 20.04.

      Предварительные требования

      Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с пользователем без прав root с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

      Шаг 1 — Установка и настройка Redis

      Начните с обновления кэша локальных пакетов apt:

      Затем установите Redis. Для этого введите следующее:

      • sudo apt install redis-server

      Далее откройте файл конфигурации Redis в любом текстовом редакторе:

      • sudo nano /etc/redis/redis.conf

      Внутри файла найдите директиву supervised, которая позволяет декларировать систему инициализации для управления Redis как службой. Поскольку вы работаете в Ubuntu, которая использует систему инициализации systemd, измените значение с no на systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      Сохраните файл и закройте его после завершения. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

      Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

      • sudo systemctl restart redis.service

      Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis redis-cli:

      В появившемся диалоговом окне протестируйте подключение с помощью команды ping:

      Output

      PONG

      Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:

      Output

      OK

      Запросите значение с помощью следующей команды:

      Если все работает корректно, вы получите сохраненное значение:

      Output

      "It's working!"

      Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:

      Шаг 2 — Настройка пароля Redis

      Вы можете настроить пароль Redis непосредственно в файле конфигурации Redis /etc/redis/redis.conf. Откройте этот файл еще раз в предпочитаемом редакторе:

      • sudo nano /etc/redis/redis.conf

      Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Раскомментируйте ее, удалив символ #, и измените foobared на безопасный пароль:

      /etc/redis/redis.conf

      . . .
      requirepass your_redis_password
      . . .
      

      После установки пароля сохраните и закройте файл, а потом перезапустите Redis:

      • sudo systemctl restart redis.service

      Чтобы проверить, работает ли пароль, откройте клиент Redis:

      Ниже показана последовательность команд, используемых для проверки работы пароля Redis. Первая команда пытается задать ключ для значения перед аутентификацией:

      Это не сработает, потому что вы не выполнили аутентификацию, поэтому Redis возвращает ошибку:

      Output

      (error) NOAUTH Authentication required.

      Следующая команда выполняет аутентификацию с паролем, указанным в файле конфигурации Redis:

      Redis принимает пароль:

      Output

      OK

      После этого запуск предыдущей команды будет успешным:

      Output

      OK

      get key1 запрашивает в Redis значение нового ключа.

      Output

      "10"

      Подтвердив, что вы можете выполнять команды в клиенте Redis после аутентификации, вы можете закрыть redis-cli:

      Шаг 3 — Переименование опасных команд

      Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными. Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF,BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Деактивировав или переименовав эти и другие команды, вы можете помешать несанкционированным пользователям изменить, уничтожить или стереть ваши данные каким-либо иным способом.

      Чтобы переименовать или отключить команды Redis, откройте файл конфигурации еще раз:

      • sudo nano /etc/redis/redis.conf

      Предупреждение. Следующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.

      Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Сохраните изменения и закройте файл.

      После переименования команды примените изменения, перезапустив Redis:

      • sudo systemctl restart redis.service

      Чтобы протестировать новую команду, откройте командную строку Redis:

      Затем выполните аутентификацию:

      Output

      OK

      Если вы переименовали команду CONFIG в ASC12_CONFIG, как в предыдущем примере, попробуйте использовать первоначальную команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Вызов переименованной команды будет успешным. Регистр не имеет значения:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Заключение

      С помощью этого краткого обучающего руководства вы установили и настроили Redis, убедились, что ваша установка Redis работает корректно, а также использовали встроенные функции безопасности, чтобы сделать ее менее уязвимой к атакам злоумышленников.



      Source link

      Установка комплекта Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 20.04 [Краткое руководство]


      Введение

      В этом кратком руководстве мы расскажем об установке комплекта LAMP на сервере Ubuntu 20.04.

      Более подробную версию этого обучающего руководства с подробным описанием каждого шага можно найти в статье Установка комплекта Linux, Apache MySQL, PHP (LAMP) в Ubuntu 20.04.

      Предварительные требования

      Для выполнения этого руководства вам потребуется доступ к серверу Ubuntu 20.04 с пользователем с правами sudo.

      Шаг 1 — Установка Apache

      Обновите кэш диспетчера пакетов и установите Apache с помощью следующей команды:

      • sudo apt update
      • sudo apt install apache2

      После завершения установки вам нужно будет изменить настройки брандмауэра, чтобы разрешить трафик HTTP на вашем сервере. Запустите следующую команду, чтобы разрешить внешний доступ к порту 80 (HTTP):

      • sudo ufw allow in "Apache"

      После добавления нового правила брандмауэра вы можете проверить, запущен ли сервер, запросив доступ к публичному IP-адресу или доменному имени сервера из вашего веб-браузера. Страница будет выглядеть следующим образом:

      Ubuntu 20.04 Apache по умолчанию

      Шаг 2 — Установка MySQL

      Теперь мы установим MySQL, популярную СУБД, используемую в средах PHP.

      Используйте apt для получения и установки этого программного обеспечения:

      • sudo apt install mysql-server

      После завершения установки рекомендуется запустить скрипт безопасности, входящий в комплект MySQL. Для запуска интерактивного скрипта введите следующую команду:

      • sudo mysql_secure_installation

      Скрипт запросит подтверждение настройки плагина VALIDATE PASSWORD PLUGIN. Выберите Y для активации или любой другой вариант, чтобы продолжить без активации этой функции. Если вы выберете ответ «yes» («Да»), вам будет предложено выбрать уровень подтверждения паролем.

      Затем сервер попросит вас выбрать и подтвердить пароль для пользователя root MySQL. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности.

      Для всех остальных вопросов нужно выбирать Y и нажимать ENTER в каждом диалоге.

      Примечание. На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что они настроены на использование вместо этого пароля mysql_native_password. Подробнее об этой процедуре можно узнать в шаге 6 нашего подробного руководства по установке LAMP в Ubuntu 20.04.

      Шаг 3 — Установка PHP

      Для установки PHP и его зависимостей выполните следующую команду:

      • sudo apt install php libapache2-mod-php php-mysql

      После завершения установки вы можете использовать следующую команду для подтверждения вашей версии PHP:

      Output

      PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

      Шаг 4 — Создание виртуального хоста для сайта

      В этом руководстве мы настроим домен your_domain, но вы должны заменить это имя собственным доменным именем.

      В Apache в Ubuntu 20.04 по умолчанию включен один серверный блок, настроенный на обслуживание документов из каталога /var/www/html. Вместо изменения /var/www/html мы создадим внутри /var/www структуру каталогов для нашего сайта your_domain, оставив /var/www/html​​​ в качестве каталога по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.

      Создайте следующий каталог для your_domain:

      • sudo mkdir /var/www/your_domain

      Затем необходимо назначить права владения для каталога с помощью переменной среды $USER, которая будет использоваться для текущего системного пользователя:

      • sudo chown -R $USER:$USER /var/www/your_domain

      После этого откройте новый файл конфигурации в каталоге Apache sites-available с помощью любого редактора командной строки.

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      В результате будет создан новый пустой файл. Вставьте следующую пустую конфигурацию:

      /etc/apache2/sites-available/your_domain.conf

      <VirtualHost *:80>
          ServerName your_domain
          ServerAlias www.your_domain
          ServerAdmin webmaster@localhost
          DocumentRoot /var/www/your_domain
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      Сохраните и закройте файл после завершения. Если вы используете nano, нажмите CTRL+X, а затем Y и ENTER.

      Теперь вы можете использовать a2ensite для активации нового виртуального хоста:

      • sudo a2ensite your_domain

      Чтобы отключить сайт Apache по умолчанию, введите следующую команду:

      • sudo a2dissite 000-default

      Чтобы убедиться в отсутствии ошибок синтаксиса в вашем файле конфигурации, выполните команду:

      • sudo apache2ctl configtest

      В заключение перезагрузите Apache, чтобы эти изменения вступили в силу:

      • sudo systemctl reload apache2

      Теперь ваш новый веб-сайт активен, но корневой веб-каталог /var/www/your_domain все еще пуст. Создайте файл index.html в этом расположении, чтобы убедиться, что виртуальный хост работает, как ожидалось:

      • nano /var/www/your_domain/index.html

      Внесите в файл следующее:

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Откройте браузер и введите в адресную строку доменное имя вашего сервера или IP-адрес:

      http://server_domain_or_IP
      

      Страница будет выглядеть следующим образом:

      Тестирование виртуального хоста Apache

      Шаг 5 — Тестирование PHP с помощью Apache

      Теперь мы создадим тестовый скрипт PHP для подтверждения возможности обрабатывать и обрабатывать запросы файлов PHP в Apache.

      Создайте новый файл с именем info.php в корневой папке сайта:

      • nano /var/www/your_domain/info.php

      В результате откроется пустой файл. Добавьте в файл следующее:

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      После завершения редактирования сохраните и закройте файл.

      Откройте браузер и введите доменное имя или IP-адрес вашего сервера, а затем название скрипта, в данном случае info.php:

      http://server_domain_or_IP/info.php
      

      Вы увидите приблизительно следующую страницу:

      PHP info в Ubuntu 20.04

      После проверки соответствующей информации о вашем сервере PHP с помощью данной страницы рекомендуется удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и о вашем сервере Ubuntu. Для этого можно использовать rm:

      • sudo rm /var/www/your_domain/info.php

      Другие обучающие руководства

      Ниже представлены ссылки на более подробные материалы, связанные с настоящим обучающим руководством:



      Source link

      Установка Nginx в Ubuntu 20.04 [Краткое руководство]


      Введение

      Nginx — один из самых популярных в мире веб-серверов, на базе которого размещены некоторые из самых крупных сайтов интернета с огромным трафиком. Обычно он использует ресурсы эффективнее, чем Apache, и может использоваться как веб-сервер или обратный прокси-сервер.

      В этом обучающем модуле мы покажем, как установить Nginx на сервере Ubuntu 20.04. Более подробную версию этого обучающего модуля можно найти в документе Установка Nginx в Ubuntu 20.04.

      Предварительные требования

      Прежде чем начать прохождение настоящего обучающего модуля, необходимо настроить на сервере обычного пользователя без привилегий root и с привилегиями sudo. Информацию о том, как настроить стандартную учетную запись пользователя, можно найти в руководстве Начальная настройка сервера для Ubuntu 20.04​​​.

      Создав учетную запись, войдите в систему как пользователь без привилегий root.

      Шаг 1 — Установка Nginx

      Поскольку Nginx доступен в хранилищах Ubuntu по умолчанию, вы можете установить его с помощью системы пакетов apt.

      Обновите локальный индекс пакетов:

      Установите Nginx:

      Шаг 2 — Настройка брандмауэра

      Если вы выполнили указания обучающего модуля по предварительной настройке сервера, вы уже активировали брандмауэр UFW. Проверьте доступные профили приложений ufw с помощью следующей команды:

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

      Мы активируем профиль с наибольшими ограничениями, который будет разрешать заданный трафик, а именно трафик на порту 80:

      • sudo ufw allow 'Nginx HTTP'

      Проверьте изменения:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

      Шаг 3 — Проверка веб-сервера

      Используйте команду systemd init system, чтобы проверить работу службы:

      Output

      nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:> Active: active (running) since Mon 2020-05-04 22:45:26 UTC; 1min 17s ago Docs: man:nginx(8) Main PID: 13255 (nginx) Tasks: 2 (limit: 1137) Memory: 4.6M CGroup: /system.slice/nginx.service ├─13255 nginx: master process /usr/sbin/nginx -g daemon on; master> └─13256 nginx: worker process

      Откройте страницу Nginx по умолчанию, чтобы подтвердить работу программного обеспечения через ваш IP-адрес:

      http://your_server_ip
      

      Вы получите страницу назначения Nginx по умолчанию:

      Страница Nginx по умолчанию

      Шаг 4 — Настройка блоков сервера (рекомендуется)

      При использовании веб-сервера Nginx вы можете использовать блоки сервера (аналогичные виртуальным хостам в Apache) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. Мы создадим домен your_domain, но вы должны заменить это имя собственным доменным именем. Чтобы узнать больше о настройке доменного имени в DigitalOcean, ознакомьтесь с документом «Введение в DigitalOcean DNS».

      Создайте каталог your_domain, используя флаг -p для создания необходимых родительских каталогов:

      • sudo mkdir -p /var/www/your_domain/html

      Назначьте владельца каталога:

      • sudo chown -R $USER:$USER /var/www/your_domain/html

      Разрешения корневых каталогов веб-сервера должны быть правильными, если вы не изменяли значение umask. Тем не менее вы можете проверить это с помощью следующей команды:

      • sudo chmod -R 755 /var/www/your_domain

      Создайте в качестве примера страницу index.html, используя nano или свой любимый редактор:

      • nano /var/www/your_domain/html/index.html

      Добавьте в страницу следующий образец кода HTML:

      /var/www/your_domain/html/index.html

      <html>
          <head>
              <title>Welcome to your_domain!</title>
          </head>
          <body>
              <h1>Success!  The your_domain server block is working!</h1>
          </body>
      </html>
      

      Сохраните файл и закройте его после завершения.

      Создайте новый серверный блок в /etc/nginx/sites-available/your_domain:

      • sudo nano /etc/nginx/sites-available/your_domain

      Вставьте следующий блок конфигурации, обновленный с учетом новых имен каталога и домена:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      

      Сохраните файл и закройте его после завершения.

      Активируйте файл, создав ссылку от него в каталог sites-enabled:

      • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

      Теперь два серверных блока активированы и настроены отвечать на запросы на базе директив listen и server_name:

      • your_domain: будет отвечать на запросы your_domain и www.your_domain.
      • default: будет отвечать на любые запросы порта 80, не соответствующие двум другим блокам.

      Чтобы избежать возможной проблемы с хэшированием памяти при добавлении дополнительных имен серверов, необходимо изменить одно значение в файле /etc/nginx/nginx.conf. Откройте файл:

      • sudo nano /etc/nginx/nginx.conf

      Найдите директиву server_names_hash_bucket_size и удалите символ #, чтобы убрать режим комментариев для строки:

      /etc/nginx/nginx.conf

      ...
      http {
          ...
          server_names_hash_bucket_size 64;
          ...
      }
      ...
      

      Проверьте ошибки синтаксиса:

      Перезапустите Nginx, чтобы активировать изменения:

      • sudo systemctl restart nginx

      Теперь Nginx должен обслуживать ваше доменное имя. Вы можете проверить это, открыв в браузере адрес http://your_domain, после чего должны получить примерно следующее:

      Первый серверный блок Nginx

      Заключение

      Теперь вы установили веб-сервер и у вас есть богатые возможности выбора типа обслуживаемого контента и технологий для расширения возможностей пользователя.

      Если вы захотите развернуть более сложный комплекс приложений, ознакомьтесь со статьей «Настройка комплекта LEMP в Ubuntu 20.04».



      Source link