One place for hosting & domains

      создание

      Создание резервного пула хранения данных с помощью GlusterFS в Ubuntu 20.04


      Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом.

      Введение

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

      GlusterFS — это сетевая файловая система хранения, позволяющая объединять ресурсы хранения нескольких компьютеров. В свою очередь это позволяет рассматривать несколько устройств хранения, установленных на разных компьютерах, в качестве единого более мощного блока. GlusterFS также предоставляет возможность создавать различные типы конфигураций хранения, многие из которых функционально аналогичны уровням RAID. Например, вы можете распределять данные между узлами кластера или внедрять резервирование для лучшей доступности данных.

      Цели

      В этом обучающем руководстве мы создадим резервный кластерный массив хранилищ, известный также как распределенная файловая система, или, как указано в документации GlusterFS, доверенный пул хранения данных (Trusted Storage Pool).​​​ Это обеспечит функциональность, аналогичную зеркальной конфигурации RAID в сети: каждый независимый сервер будет содержать свою собственную копию данных, позволяя приложениям получать доступ к любой копии, тем самым облегчая распределение нагрузки чтения.

      Этот избыточный кластер GlusterFS будет состоять из двух серверов Ubuntu 20.04. И будет действовать примерно так же, как сервер NAS с зеркальным RAID. Затем вы получите доступ к кластеру с третьего сервера Ubuntu 20.04, настроенного для работы в качестве клиента GlusterFS.

      Примечание о безопасном функционировании GlusterFS

      При добавлении данных к тому GlusterFS данные синхронизируются с каждым компьютером в пуле хранения данных, где размещен том. Этот трафик между узлами не шифруется по умолчанию, а значит существует риск его перехвата злоумышленниками.

      По этой причине, если вы собираетесь использовать GlusterFS в производственной среде, рекомендуется использовать его в изолированной сети. Например, вы можете настроить его для запуска в виртуальном частном облаке (VPC) или с помощью VPN, работающей между каждым из узлов.

      Если вы планируете развернуть GlusterFS в DigitalOcean, можно настроить его в изолированной сети, добавив инфраструктуру вашего сервера в виртуальное частное облако DigitalOcean. Дополнительную информацию о настройке смотрите в документации по VPC.

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

      Для выполнения данного обучающего руководства вам понадобится три сервера, работающих на Ubuntu 20.04. Каждый сервер должен иметь пользователя non-root user с правами администратора, а также брандмауэр, настроенный с помощью UFW. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 20.04.

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

      Для ясности в этом обучающем модуле будут использоваться компьютеры со следующими именами хостов:

      Имя хостаРоль в пуле хранения данных
      gluster0Сервер
      gluster1Сервер
      gluster2Клиент

      Команды, которые следует запускать в gluster0 или gluster1, записываются на голубом или розовом фоне соответственно:

      Команды, которые следует запускать исключительно на клиенте (gluster2), имеют зеленый фон:

      Команды, которые могут или должны запускаться на нескольких компьютерах, записываются на сером фоне:

      Шаг 1 — Настройка разрешения DNS на каждом компьютере

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

      Если у вас нет свободного доменного имени, а также если вы хотите быстро что-то настроить, вы можете отредактировать файл /etc/host на каждом компьютере. Это специальный файл на компьютерах с ОС Linux, где вы можете статически настроить систему для разрешения любых имен хоста, содержащихся в файле, в статические IP-адреса.

      Примечание. Если вы хотите настроить ваши серверы для аутентификации доменом, которым владеете, сначала вам понадобится получить доменное имя у регистратора, например у Namecheap или Enom, и настроить соответствующие записи DNS.

      После настройки записи A для каждого сервера вы можете перейти к шагу 2. По мере выполнения данного руководства не забывайте менять glusterN.example.com и glusterN на доменное имя, которое указывает на соответствующий сервер, упоминаемый в примере команды.

      Если вы взяли инфраструктуру из DigitalOcean, вы можете добавить ваше доменное имя в DigitalOcean, а затем настроить уникальную запись А для каждого сервера.

      Используя предпочитаемый текстовый редактор, откройте этот файл с привилегиями root на каждом компьютере. Мы будем использовать nano:

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

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      На одном из ваших серверов Ubuntu добавьте сначала IP-адрес каждого сервера, а затем любые имена, которые вы хотите использовать для указания в командах под определением локального хоста.

      В следующем примере каждому серверу дается длинное имя хоста, соответствующее glusterN.example.com и короткое имя, соответствующее glusterN. Вы можете менять в каждой строке части glusterN.example.com и glusterN на любое имя или имена, отделенные одиночным интервалом, которые вы бы хотели использовать для доступа к каждому серверу. Однако обратите внимание, что в данном обучающем руководстве будут использоваться следующие примеры:

      Примечание. Если ваши серверы являются частью пула инфраструктуры виртуального частного облака, вам следует использовать частный IP-адрес каждого сервера в файле /etc/hosts, а не публичные IP-адреса.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      После того, как вы добавите все новые строки в файл /etc/hosts одного компьютера, скопируйте их и добавьте в файлы /etc/hosts других компьютеров. Каждый файл /etc/host должен содержать одинаковые строки, которые привязывают IP-адреса ваших серверов к именам, которые вы выбрали.

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

      Теперь, когда вы настроили разрешение имени хоста между каждым сервером, вам будет проще в последствии запускать команды, так как вы установили пул и том хранения данных. Далее вы можете переходить к следующему шагу, который нужно выполнить для каждого сервера. Добавьте в каждый из трех серверов Ubuntu официальный архив персональных пакетов (PPA) проекта Gluster, чтобы обеспечить возможность установки новейшей версии GlusterFS.

      Шаг 2 — Настройка источников программного обеспечения на каждом компьютере

      Хотя репозитории APT по умолчанию для Ubuntu 20.04 содержат пакеты GlusterFS, на момент написания данного руководства они не являются последними версиями. Один из способов установки последней стабильной версии GlusterFS (версия 7.6 на момент написания) — добавление официального архива персонального пакета (РРА) проекта Gluster для каждого из трех серверов Ubuntu.

      Добавьте PPA для пакетов GlusterFS путем запуска следующей команды на каждом сервере:

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Нажмите ENTER, когда вам будет предложено подтвердить намерение добавить РРА.

      После добавления PPA, обновите локальный индекс пакетов каждого сервера. Это сообщит системе о наличии новых пакетов:

      После добавления официального PPA проекта Gluster для каждого сервера и обновления локального индекса пакетов вы сможете установить необходимые пакеты GlusterFS. Однако поскольку два из трех компьютеров будут работать как серверы Gluster, а третий — как клиент, вам понадобится выполнить две отдельные процедуры установки и настройки. Сначала вы установите и настроите компоненты сервера.

      Шаг 3 — Установка компонентов сервера и создание доверенного пула хранения данных

      Пул хранения данных — это любой объем емкости хранения данных от более чем одного ресурса хранения. На этом шаге вы настроите два сервера — gluster0 и gluster1 — в качестве компонентов кластера.

      Установите пакет сервера GlusterFS на gluster0 и на gluster1 с помощью команды:

      • sudo apt install glusterfs-server

      При запросе нажмите Y, а затем ENTER, чтобы подтвердить установку.

      Процесс установки автоматически настроит GlusterFS для запуска в качестве службы systemd. Однако он не запускает службу автоматически и не обеспечивает запуск при загрузке.

      Для запуска glusterd, службы GlusterFS, запустите команду systemctl start на gluster0 и на gluster1:

      • sudo systemctl start glusterd.service

      Затем запустите следующую команду на обоих серверах. Это позволит запускать службу при каждой загрузке сервера:

      • sudo systemctl enable glusterd.service

      После этого вы сможете проверить статус службы на каждом или на обоих серверах:

      • sudo systemctl status glusterd.service

      Если служба активирована и работает, вы получите следующий вывод:

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      Если вы следовали указаниям по начальной настройке сервера, у вас будет установлен брандмауэр с UFW на каждом компьютере. Из-за этого вам нужно будет открыть брандмауэр на каждом узле перед установкой связи между ними и созданием пула хранения данных.

      Демон Gluster использует порт 24007, поэтому вам нужно разрешить каждому узлу доступ к этому порту через брандмауэр каждого из узлов в пуле хранения данных. Для этого запустите следующую команду на gluster0. Не забудьте поменять gluster1_ip_address на IP-адрес gluster1:

      • sudo ufw allow from gluster1_ip_address to any port 24007

      Запустите следующую команду на gluster1. Снова не забудьте поменять gluster0_ip_address на IP-адрес gluster0:

      • sudo ufw allow from gluster0_ip_address to any port 24007

      Также вам потребуется разрешить вашему клиентскому компьютеру (gluster2) доступ к этому порту. Иначе позже вы столкнетесь с проблемами, когда попытаетесь смонтировать том. Запустите следующую команду на gluster0 и на gluster1, чтобы открыть этот порт для вашего клиентского компьютера:

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Затем добавьте общее правило deny на gluster0 и на gluster1, чтобы закрыть доступ любым другим компьютерам к порту Gluster на любом из серверов.

      Теперь вы готовы к установке связи между gluster0 и gluster1. Для этого вам нужно запустить команду gluster peer probe на одном из узлов. Не имеет значения, какой из узлов вы будете использовать, но в следующем примере команда запускается на gluster0:

      • sudo gluster peer probe gluster1

      Фактически эта команда сообщает gluster0 доверять gluster1 и регистрирует его как часть пула хранения данных. Если зондирование пройдет успешно, вы получите следующий вывод:

      Output

      peer probe: success

      Вы можете проверить связь узлов в любое время путем запуска команды gluster peer status на любом из них. В этом примере команда выполняется на gluster1:

      Если вы запустите эту команду из gluster1, вы увидите следующий вывод:

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      На этом этапе два ваших сервера взаимодействуют и готовы к созданию томов хранения друг с другом.

      Шаг 4 — Создание тома хранения

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

      Для создания тома вы будете использовать команду gluster volume create с таким общим синтаксисом:

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Вот что означают аргументы и опции команды gluster volume create:

      • volume_name: это имя, которое вы будете использовать для ссылки на том после его создания. Следующий пример команды создает том с именем volume1.
      • replica number_of_servers: после имени тома вы можете указать, какой тип тома вы хотите создать. Напомним, что цель данного обучающего руководства — создать резервный пул хранения данных, поэтому мы будем использовать тип тома replica. Для этого требуется аргумент с указанием количества серверов, на которые будут воспроизводиться данные (2 в нашем примере).
      • domain1.com:/… и domain2.com:/…: определяют расположение компьютеров и каталогов блоков (термин GlusterFS, используемый для обозначения базовой единицы хранения, включающей любой каталог, используемый в качестве части или копии большего тома, на любом компьютере), которые составят volume1. В следующем примере будет создан каталог с именем gluster-storage в корневом каталоге на обоих серверах.
      • force: эта опция отменяет любые предупреждения или опции, которые могли бы возникнуть и остановить создание тома.

      Используя правила, установленные ранее в данном обучающем руководстве, вы можете запустить эту команду для создания тома. Обратите внимание, что вы можете запускать ее либо с gluster0, либо с gluster1:

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Если том был создан успешно, вы увидите следующий вывод:

      Output

      volume create: volume1: success: please start the volume to access data

      На этом этапе ваш том создан, но еще не активирован. Вы можете запустить том и сделать его доступным для использования путем выполнения следующей команды с любого сервера Gluster:

      • sudo gluster volume start volume1

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

      Output

      volume start: volume1: success

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

      • sudo gluster volume status

      В результате вы увидите вывод, аналогичный данному:

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      На основе этого вывода можно понять, что блоки на обоих серверах находятся в сети.

      В качестве последнего шага по настройке тома вам нужно будет открыть брандмауэр на обоих серверах, чтобы ваш клиентский компьютер смог подключиться и смонтировать том. Согласно выводу предыдущего примера команды volume1 работает на порту 49152 на обоих компьютерах. Это порт GlusterFS по умолчанию, который используется для первоначального тома, а следующий том, который вы создадите, будет использовать порт 49153, затем 49154 и т. д.

      Запустите следующую команду на gluster0 и gluster1, чтобы разрешить gluster2 доступ к этому порту через соответствующий брандмауэр каждого из них:

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Затем для дополнительной защиты добавьте другое общее правило deny для порта тома на обоих серверах gluster0 и gluster1. Это закроет доступ к тому на любом из двух серверов каким-либо другим компьютерам, кроме вашего клиентского компьютера:

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

      Шаг 5 — Установка и настройка компонентов клиента

      Теперь ваш том настроен и доступен для использования клиентским компьютером. Но перед тем, как начать работу, вам нужно установить пакет glusterfs-client из архива РРА, загруженного на клиентский компьютер на шаге 1. Зависимости этого пакета включают некоторые из общих библиотек и модулей переводчиков GlusterFS, а также необходимые для работы инструменты FUSE.

      Запустите следующую команду на gluster2:

      • sudo apt install glusterfs-client

      Вскоре вы сможете монтировать удаленный том хранения на клиентском компьютере. Однако перед этим вам нужно создать точку монтирования. Традиционно она находится в каталоге /mnt, но может использоваться, где вам удобно.

      Для удобства создайте каталог с именем /storage-pool на клиентском компьютере для использования в качестве точки монтирования. Имя каталога начинается с косой черты (/), которая помещает его в корневой каталог, поэтому вам нужно создать его с привилегиями sudo:

      Теперь вы можете монтировать удаленный том. Но прежде обратите внимание на синтаксис команды mount, которая используется для этого:

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount — это утилита, которая встречается во многих операционных системах типа Unix. Она используется для монтирования файловых систем — от внешних устройств хранения (таких как SD-карты или USB-накопители) и сетевых систем хранения (как в случае данного обучающего модуля) до каталогов в существующей файловой системе компьютера. В синтаксис команды mount входит опция -t, требующая трех аргументов: тип монтируемой файловой системы, устройство, где находится монтируемая файловая система, и каталог на клиентском компьютере, куда будет монтироваться том.

      Обратите внимание, что в синтаксисе данного примера, аргумент устройства указывает на имя хоста, после которого стоит двоеточие, а затем имя тома. GlusterFS извлекает фактические каталоги хранения на каждом хосте, что означает, что данная команда предназначена для монтирования не каталога /gluster-storage, а тома volume1.

      Также заметьте, что вам только нужно указать один компонент кластера хранения данных. Этот может быть любой узел, так как служба GlusterFS рассматривает их как один компьютер.

      Запустите следующую команду на клиентском компьютере (gluster2) для монтирования тома в созданный вами каталог /storage-pool:

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Затем запустите команду df. Это покажет количество свободного дискового пространства для файловых систем, к которым пользователь имеет доступ:

      Эта команда покажет, что том GlusterFS смонтирован в правильном расположении:

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

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

      Шаг 6 — Тестирование функций резервирования

      После настройки клиента для использования пула и тома хранения вы можете проверить его функциональность.

      На клиентском компьютере (gluster2) перейдите к точке монтирования, которая была определена на предыдущем шаге:

      Затем создайте несколько тестовых файлов. Следующая команда создает десять отдельных пустых файлов в пуле хранения данных:

      • sudo touch file_{0..9}.test

      Если вы посмотрите на каталоги хранения, которые вы определили ранее на каждом хосте хранения, вы обнаружите, что все эти файлы присутствуют на каждой системе.

      На gluster0:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Также на gluster1:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Как показывают эти выводы, тестовые файлы, которые вы добавили на клиентском компьютере, также были записаны на обоих узлах.

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

      После того как вы убедились, что ваш том хранения смонтирован корректно и может воспроизводить данные на обоих компьютерах в кластере, вы можете закрыть доступ к пулу хранения.

      Шаг 7 — Ограничение функций резервирования

      На этом этапе любой компьютер может подключаться к вашему тому хранения данных без каких-либо ограничений. Это можно изменить, настроив опцию auth.allow, определяющую IP-адреса клиентов, которые должны иметь доступ к тому.

      Если вы используете конфигурацию /etc/host, имена, которые вы установили для каждого сервера,будут отслеживаться некорректно. Вместо этого следует использовать статический IP-адрес. С другой стороны, если вы используете записи DNS, настроенное вами доменное имя будет работать.

      На одном из узлов хранения (gluster0 или gluster1) запустите следующую команду:

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Если команда выполняется успешно, вы увидите следующий вывод:

      Output

      volume set: success

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

      • sudo gluster volume set volume1 auth.allow *

      Это снова позволит подключаться с любого компьютера. Это небезопасно, но может быть полезно для отладки ошибок.

      Если у вас несколько клиентских компьютеров, вы можете одновременно указать их IP-адреса или доменные имена (в зависимости от того, используете ли вы /etc/hosts или разрешение имени хоста DNS), разделенные запятыми:

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Теперь ваш пул хранения настроен, защищен и готов к использованию. Далее мы рассмотрим несколько команд, которые помогут вам получить информацию о состоянии вашего пула хранения данных.

      Шаг 8 — Получение информации о пуле хранения данных с помощью команд GlusterFS

      Когда вы начинаете менять какие-либо настройки хранилища GlusterFS, вы можете сомневаться в том, какие опции доступны, какие из томов активны и какие узлы связаны с каждым томом.

      На ваших узлах имеется ряд различных команд для получения этой информации и взаимодействия с пулом хранения данных.

      Если вам нужна информация о каждом томе, запустите команду gluster volume info:

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

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

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Если вам нужна подробная информация о работе каждого узла, вы можете проанализировать том с помощью команды:

      • sudo gluster volume profile volume_name start

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

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Как показано ранее, чтобы получить список всех связанных компонентов GlusterFS, работающих на каждом узле, запустите команду gluster volume status:

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Если вы собираетесь управлять томами хранения GlusterFS, было бы неплохо перейти на консоль GlusterFS. Это позволит вам взаимодействовать со средой GlusterFS без необходимости ввода каждый раз команды sudo gluster:

      Будет выдана подсказка, где вводить команды. Команда help поможет вам сориентироваться:

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      После завершения запустите команду exit для выхода из консоли Gluster:

      Теперь вы готовы к интеграции GlusterFS с вашим следующим приложением.

      Заключение

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



      Source link

      Создание сервера Minecraft в Ubuntu 18.04


      Автор выбрал Tech Education Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Minecraft — это популярная видеоигра в жанре Sandbox (песочница). Вышедшая в 2009 году игра позволяет игрокам создавать, изучать, мастерить и выживать в мире из 3D кирпичиков. На конец 2019 года она была второй по популярности видеоигрой всех времен. В этом руководстве вы создадите собственный сервер Minecraft, чтобы вы и ваши друзья могли играть вместе. В частности, вы установите необходимые программные пакеты для запуска Minecraft, настроите сервер для запуска, а затем развернете игру.

      В качестве альтернативы вы можете изучить статью Minecraft в один клик на DigitalOcean: версия для сервера Java, которая описывает другой путь установки.

      В данном руководстве мы используем Java-версию Minecraft. Если вы купили версию Minecraft в Microsoft App Store, вы не сможете подключиться к этому серверу. Большинство версий Minecraft, приобретенных в игровых консолях, например, PlayStation 4, Xbox One или Nintendo Switch, также являются версиями Minecraft под Microsoft. Эти консоли также не смогут подключиться к серверу, который вы создадите с помощью этого руководства. Вы можете получить Java-версию Minecraft здесь.

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

      Для выполнения этого обучающего руководства вам потребуется следующее:

      Шаг 1 — Установка необходимых пакетов программного обеспечения

      После инициализации сервера вашим первым действием будет установка Java, которая потребуется вам для запуска Minecraft.

      Обновите индекс пакетов для менеджера пакетов APT:

      Затем установите 8 версию OpenJDK для Java, в частности, headless JRE. Это минимальная версия Java, которая не имеет поддержки графического интерфейса приложений. Это делает ее идеальным решением для запуска приложений Java на сервере:

      • sudo apt install openjdk-8-jre-headless

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

      Теперь, когда вы установили Java, загрузите сервер Minecraft с сайта Minecraft.

      Шаг 2 — Загрузка последней версии Minecraft

      Теперь вам нужно загрузить актуальную версию сервера Minecraft. Вы можете сделать это, открыв сайт Minecraft и скопировав ссылку с названием Download minecraft_server. X.X.X.jar, где X — последняя версия сервера.

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

      • wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar

      Если вы хотите обновить ваш сервер Minecraft или запускать разные версии Minecraft, переименуйте загруженный server.jar​​​ в minecraft_server_1.15.2.jar, сопоставив выделенные номера версий для версии, которую вы только что загрузили:

      • mv server.jar minecraft_server_1.15.2.jar

      Если вы хотите загрузить более старую версию, воспользуйтесь архивом на сайте mcversions.net​​​. В этом руководстве вы будем рассматривать самую последнюю версию. Теперь, когда вы загрузили нужные файлы, давайте приступим к настройке вашего сервера Minecraft.

      Шаг 3 — Настройка и запуск сервера Minecraft

      Теперь, когда вы загрузили jar-файл Minecraft, вы можете запустить его.

      Сначала запустите сеанс screen, выполнив команду screen:

      После изучения содержания появившегося на экране баннера, нажмите кнопку ПРОБЕЛ. screen отобразит для вас терминальный сеанс как обычный. Теперь этот сеанс является отделяемым, что означает, что вы сможете запустить здесь команду и оставить ее в работающем состоянии.

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

      • java -Xms1024M -Xmx1024M -jar minecraft_server_1.15.2.jar nogui

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

      • Xms1024M — этот аргумент выполняет настройку запуска сервера с 1024 Мб или 1 Гб ОЗУ. Вы можете увеличить этот лимит, если хотите, чтобы ваш сервер запускался с большим объемом оперативной памяти. Аргумент поддерживает как М для мегабайт, так и G для гигабайт. Например, аргумент Xms2G будет запускать сервер с 2 гигабайтами оперативной памяти.

      • Xmx1024M — этот аргумент позволяет серверу использовать не более 1024 Мб оперативной памяти. Вы можете увеличить этот лимит, если хотите, чтобы ваш сервер имел больший размер и принимал больше игроков, либо если ваш сервер работает медленно.

      • jar — этот аргумент указывает, какой jar-файл сервера должен быть запущен.

      • nogui — этот аргумент указывает серверу не запускать графический пользовательский интерфейс, так как это сервер, где вам не требуется графический пользовательский интерфейс.

      При первом запуске этой команды, которая обычно запускает ваш сервер, будет сгенерирована следующая ошибка:

      Output

      [22:05:31] [22:05:31] [main/ERROR]: Failed to load properties from file: server.properties [22:05:31] [main/WARN]: Failed to load eula.txt [22:05:31] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

      Эти ошибки были получены, поскольку сервер не смог найти два необходимых для выполнения файла: EULA (Лицензионное соглашение конечного пользователя) в eula.txt​​ и файл конфигурации server.properties. К счастью, поскольку сервер не смог найти эти файлы, он создал их в текущем рабочем каталоге.

      Сначала откройте eula.txt в nano или предпочитаемом текстовом редакторе:

      Внутри этого файла вы найдете ссылку на EULA Minecraft. Скопируйте URL:

      ~/eula.txt

      #By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
      #Tue Mar 24 22:05:31 UTC 2020
      eula=false
      

      Откройте URL в браузере и прочитайте соглашение. Затем вернитесь в текстовый редактор и перейдите к последней строке файла eula.txt​​​. Измените eula=false на eula=true. Сохраните и закройте файл.

      Теперь, когда вы приняли пользовательское соглашение, пришло время настроить сервер согласно вашим требованиям.

      В текущем рабочем каталоге вы также найдете созданный файл server.properties. Этот файл содержит все варианты конфигурации вашего сервера Minecraft. Вы можете найти подробный список всех свойств сервера на официальной вики-странице Minecraft. Вы измените этот файл, добавив предпочитаемые настройки, прежде чем запускать сервер. В этом руководстве вы найдете описание основных свойств:

      Ваш файл будет выглядеть следующим образом:

      ~/server.properties

      #Minecraft server properties
      #Thu Apr 30 23:42:29 UTC 2020
      spawn-protection=16
      max-tick-time=60000
      query.port=25565
      generator-settings=
      force-gamemode=false
      allow-nether=true
      enforce-whitelist=false
      gamemode=survival
      broadcast-console-to-ops=true
      enable-query=false
      player-idle-timeout=0
      difficulty=easy
      spawn-monsters=true
      broadcast-rcon-to-ops=true
      op-permission-level=4
      pvp=true
      snooper-enabled=true
      level-type=default
      hardcore=false
      enable-command-block=false
      max-players=20
      network-compression-threshold=256
      resource-pack-sha1=
      max-world-size=29999984
      function-permission-level=2
      rcon.port=25575
      server-port=25565
      server-ip=
      spawn-npcs=true
      allow-flight=false
      level-name=world
      view-distance=10
      resource-pack=
      spawn-animals=true
      white-list=false
      rcon.password=
      generate-structures=true
      online-mode=true
      max-build-height=256
      level-seed=
      prevent-proxy-connections=false
      use-native-transport=true
      motd=A Minecraft Server
      enable-rcon=false
      

      Давайте более внимательно рассмотрим некоторые наиболее важные свойства из этого списка:

      • difficulty (по умолчанию easy — Это свойство задает уровень сложности игры, например, уровень наносимого урона и то, как элементы влияют на вашего игрока. Возможные варианты: peaceful, easy, normal и hard.

      • gamemode (по умолчанию survival​​​) — Это свойство определяет режим игры. Возможные варианты: survival, creative, adventure и spectacor.

      • level-name (по умолчанию world) — Это свойство задает имя вашего сервера, которое будет отображаться в клиенте. Такие символы, как апостроф, возможно, потребуется экранировать с помощью обратной косой черты.

      • motd (по умолчанию A Minecraft Server) — Сообщение, отображаемое в списке серверов клиента Minecraft.

      • pvp (по умолчанию true) — Данное свойство активирует pvp режим. Если установлено значение true, игроки смогут вступать в бой и наносить друг другу урон.

      После настройки нужных опций сохраните и закройте файл.

      Теперь, когда вы установили значение true в EULA и настроили параметры, вы можете успешно запустить сервер.

      Как и в прошлый раз, давайте запустим ваш сервер с 1024 Мб оперативной памяти. Однако в этот раз мы также предоставим Minecraft возможность использовать до 4 Гб оперативной памяти при необходимости. Помните, что вы можете изменить это число согласно ограничениям вашего сервера или потребностям пользователя:

      • java -Xms1024M -Xmx4G -jar minecraft_server_1.15.2.jar nogui

      Подождите несколько секунд, пока выполняется процесс инициализации. Через короткое время ваш новый сервер Minecraft начнет производить примерно следующий вывод:

      Output

      [21:08:14] [Server thread/INFO]: Starting minecraft server version 1.15.2 [21:08:14] [Server thread/INFO]: Loading properties [21:08:14] [Server thread/INFO]: Default game type: SURVIVAL [21:08:14] [Server thread/INFO]: Generating keypair [21:08:15] [Server thread/INFO]: Starting minecraft server on *:25565

      После того как сервер будет запущен, вы увидите следующий вывод:

      Output

      [21:15:37] [Server thread/INFO]: Done (30.762s)! For help, type "help"

      Ваш сервер запущен, а вы попали в панель управления администратора сервера. Теперь введите команду help:

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

      Output

      [21:15:37] [Server thread/INFO]: /advancement (grant|revoke) [21:15:37] [Server thread/INFO]: /ban <targets> [<reason>] [21:15:37] [Server thread/INFO]: /ban-ip <target> [<reason>] [21:15:37] [Server thread/INFO]: /banlist [ips|players] ...

      Из этого терминала вы можете выполнять команды администратора и управлять вашим сервером Minecraft. Давайте воспользуемся screen, чтобы сервер продолжил работу даже после вашего выхода. После этого вы можете подключиться к вашему клиенту Minecraft и запустить новую игру.

      Шаг 4 — Поддержание работы сервера

      Теперь, когда у вас есть работающий сервер, вы можете захотеть, чтобы он продолжал работать даже после вашего отключения от SSH сеанса. Поскольку вы уже использовали screen ранее, вы можете отсоединиться от этого сеанса, нажав Ctrl + A + D. После этого вы вернетесь в первоначальную оболочку:

      Запустите эту команду, чтобы посмотреть все ваши сеансы screen:

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

      Output

      There is a screen on: 26653.pts-0.minecraft (03/25/20 21:18:31) (Detached) 1 Socket in /run/screen/S-root.

      Для возобновления сеанса передайте флаг -r в команду screen, а затем введите идентификатор вашего сеанса:

      Когда вы будете готовы выйти из вашего сервера, обязательно выполните отсоединение от сеанса, нажав Ctrl + A + D, а затем выполните выход.

      Шаг 5 — Подключение к вашему серверу из клиента Minecraft

      Теперь, когда ваш сервер запущен и работает, давайте подключимся к нему из клиента Minecraft. А затем вы сможете начать играть!

      Запустите вашу копию Java-версии Minecraft и выберите Multiplayer в меню.

      Выбор режима Multiplayer в меню

      Затем вам потребуется добавить сервер для подключения, поэтому нажмите кнопку Add Server (Добавить сервер).

      Нажмите кнопку Add Server (Добавить сервер)

      На экране Edit Server Info (Изменить информацию сервера) укажите имя вашего сервера и введите его IP-адрес. Это тот же IP-адрес, который вы использовали для подключения через SSH.

      Укажите имя и IP-адрес вашего сервера

      После ввода имени и IP-адреса сервера вы вернетесь на экран Multiplayer, где теперь будет указан ваш сервер.

      Выберите сервер и нажмите Join Server (Войти на сервер)

      С этого момента ваш сервер всегда будет отображаться в этом списке. Выберите его и нажмите Join Server (Войти на сервер).

      Наслаждайтесь игрой!

      Вы находитесь на сервере и готовы к игре!

      Заключение

      Теперь у вас есть сервер Minecraft, работающий на Ubuntu 18.04, для вас и всех ваших друзей! Наслаждайтесь исследованиями, оттачивайте мастерство и выживайте в грубом 3D мире. И следите за гриферами.



      Source link

      Создание и настройка центра сертификации (ЦС) в Ubuntu 20.04


      Введение

      Центр сертификации (ЦС) — это служба, отвечающая за выдачу цифровых сертификатов удостоверения личности в Интернете. Хотя публичные ЦС часто используются для подтверждения подлинности сайтов и других общедоступных служб, для закрытых групп и частных служб обычно используются частные ЦС.

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

      Существует множество программ для Linux, использующих частные ЦС, в том числе OpenVPN и Puppet. Также вы можете настроить веб-сервер для использования сертификатов, выпущенных частным ЦС, с целью обеспечить соответствие сред разработки и тестирования и производственных сред, где используется служба TLS для шифрования соединений.

      В этом руководстве мы узнаем, как настроить частный центр сертификации на сервере Ubuntu 20.04 и как сгенерировать и подписать сертификат тестирования, используя ваш новый ЦС. Также вы научитесь импортировать публичный сертификат сервера ЦС в хранилище сертификатов операционной системы, чтобы проверять цепочку доверия между ЦС и удаленными серверами или пользователями. Кроме того, вы научитесь отзывать сертификаты и распространять Список отзыва сертификатов, чтобы службы на основе вашего ЦС могли использовать только уполномоченные пользователи и системы.

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

      Для выполнения этого обучающего руководства вам потребуется доступ к серверу Ubuntu 20.04 для хостинга вашего сервера ЦС. Перед началом прохождения руководства вам нужно будет настроить пользователя без прав root с привилегиями sudo. Вы можете следовать указаниям руководства по начальной настройке сервера Ubuntu 20.04 для настройки пользователя с надлежащими разрешениями. Настоящее обучающее руководство предусматривает использование брандмауэра, описание настройки которого приведено в доступном по ссылке руководстве.

      В настоящем обучающем руководстве мы будем называть его сервер ЦС.

      Сервер ЦС должен представлять собой отдельную систему. Она будет использоваться только для импорта, подписания и отзыва запросов сертификатов. На ней не должны работать никакие другие службы, и в идеале ее следует отключать от сети или полностью отключать в периоды, когда вы активно не работаете с ЦС.

      Примечание. Последний раздел этого обучающего руководства необязательный. Из него вы сможете узнать о подписании и отзыве сертификатов. Если вы решите выполнять эти практические шаги, то вам потребуется второй сервер Ubuntu 20.04, либо вы также можете использовать свой локальный компьютер с Linux, где запущен Ubuntu или Debian, или их дистрибутивы (того или другого).

      Шаг 1 — Установка Easy-RSA

      Первая задача этого обучающего модуля заключается в установке набора скриптов easy-rsa для запуска на сервере ЦС. Мы будем использовать инструмент управления ЦС easy-rsa для генерирования частного ключа и публичного корневого сертификата, с помощью которых вы будете подписывать запросы клиентов и серверов, использующих ваш ЦС.

      Войдите на сервер ЦС от имени пользователя без прав root с привилегиями sudo, созданного на начальном этапе установке, и запустите следующую команду:

      • sudo apt update
      • sudo apt install easy-rsa

      Вам будет предложено загрузить пакет и установить его. Нажмите y, чтобы подтвердить установку пакета.

      Теперь у вас есть все необходимое для настройки и использования Easy-RSA. На следующем шаге мы создадим инфраструктуру открытых ключей, а затем приступим к созданию Центра сертификации.

      Шаг 2 — Подготовка директории для инфраструктуры открытых ключей

      Мы установили easy-rsa и теперь займемся созданием каркаса инфраструктуры открытых ключей (PKI) на сервере ЦС. Убедитесь, что вы вошли в систему как пользователь без прав root, и создайте директорию easy-rsa. Не используйте sudo для запуска следующих команд, поскольку обычные пользователи должны иметь возможность управления и взаимодействия с ЦС без повышенного уровня прав.

      Будет создана новая директория easy-rsa в домашней папке. Мы используем эту директорию для создания символических ссылок, указывающих на файлы пакета easy-rsa, установленные на предыдущем шаге. Эти файлы находятся в папке /usr/share/easy-rsa на сервере ЦС.

      Создайте символические ссылки с помощью команды ln:

      • ln -s /usr/share/easy-rsa/* ~/easy-rsa/

      Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa в директорию PKI, в этом обучающем руководстве мы используем подход на основе символических ссылок. Таким образом, любые изменения пакета easy-rsa будут автоматически отражаться в ваших скриптах PKI.

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

      • chmod 700 /home/sammy/easy-rsa

      Затем инициализируйте PKI в директории easy-rsa:

      • cd ~/easy-rsa
      • ./easyrsa init-pki

      Output

      init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/easy-rsa/pki

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

      Шаг 3 — Создание Центра сертификации

      Прежде чем создавать закрытый ключ и сертификат ЦС, необходимо создать файл с именем vars и заполнить его значениями по умолчанию. Используйте команду cd для перехода в директорию easy-rsa, а затем создайте и отредактируйте файл vars с помощью nano или другого предпочитаемого текстового редактора:

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

      ~/easy-rsa/vars

      set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "NewYork" set_var EASYRSA_REQ_CITY "New York City" set_var EASYRSA_REQ_ORG "DigitalOcean" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"

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

      Для создания корневой пары открытого и закрытого ключей для Центра сертификации необходимо запустить команду ./easy-rsa еще раз, но уже с опцией build-ca:

      Вы увидите несколько строк с указанием версии OpenSSL, а затем вам будет предложено ввести фразу-пароль для пары ключей. Используйте надежную фразу-пароль и запишите ее в безопасном месте. Вам нужно будет вводить фразу-пароль каждый раз, когда вам потребуется взаимодействовать с ЦС, в частности при подписании или отзыве сертификата.

      Также вам будет предложено подтвердить обычное имя (CN) вашего ЦС. CN — это имя, которое будет использоваться для данного компьютера в контексте Центра сертификации. Вы можете использовать любую строку символов как обычное имя ЦС, но для простоты нажмите ENTER, чтобы использовать имя по умолчанию.

      Output

      . . . Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: . . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/sammy/easy-rsa/pki/ca.crt

      Примечание. Если вы не хотите вводить пароль при каждом взаимодействии с ЦС, вы можете запустить команду build-ca с опцией nopass:

      • ./easyrsa build-ca nopass

      Теперь у нас имеется два важных файла, ~/easy-rsa/pki/ca.crt и ~/easy-rsa/pki/private/ca.key. Эти файлы соответствуют публичному и частному компонентам Центра сертификации.

      • ca.crt — файл публичного сертификата ЦС. Пользователи, серверы и клиенты будут использовать этот сертификат для подтверждения единой сети доверия. Копия этого файла должна иметься у всех пользователей и серверов, использующих ваш ЦС. Все стороны будут использовать публичный сертификат для подтверждения подлинности системы и предотвращения атак через посредника.

      • ca.key — закрытый ключ, который ЦС будет использовать для подписания сертификатов серверов и клиентов. Если злоумышленник получит доступ к ЦС и файлу ca.key, вам нужно будет уничтожить ЦС. Поэтому файл ca.key должен храниться только на компьютере ЦС, и для дополнительной безопасности компьютер ЦС следует выключать, когда он не используется для подписания запросов сертификатов.

      Мы установили ЦС и готовы использовать его для подписания запросов сертификатов и отзыва сертификатов.

      Шаг 4 — Распространение публичного сертификата Центра сертификации

      Мы настроили ЦС и можем использовать его в качестве корня доверия для любых систем, которые захотим настроить для этого. Сертификат ЦС можно добавлять на серверы OpenVPN, веб-серверы, почтовые серверы и т. д. Каждый пользователь или сервер, которому потребуется подтвердить подлинность другого пользователя или сервера в вашей сети, должен иметь копию файла ca.crt, импортированную в хранилище сертификатов операционной системы.

      Чтобы импортировать публичный сертификат ЦС во вторую систему Linux, например на сервер или локальный компьютер, нужно предварительно получить копию файла ca.crt с сервера ЦС. Вы можете использовать команду cat для ее вывода в терминал, а затем скопировать и вставить ее в файл на втором компьютере, который импортирует сертификат. Также вы можете использовать scp, rsync и другие подобные инструменты для передачи файла между системами. Мы используем для копирования и вставки текстовый редактор nano, поскольку этот вариант подойдет для всех систем.

      Запустите следующую команду на сервере ЦС от имени пользователя без прав root:

      • cat ~/easy-rsa/pki/ca.crt

      На терминале появится примерно следующее:

      Output

      -----BEGIN CERTIFICATE----- MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw . . . . . . -----END CERTIFICATE-----

      Скопируйте все, включая строки -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- и символы дефиса.

      Используйте nano или предпочитаемый текстовый редактор на второй системе Linux, чтобы открыть файл с именем /tmp/ca.crt:

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

      Теперь у нас имеется копия файла ca.crt на второй системе Linux, и мы можем импортировать сертификат в хранилище сертификатов операционной системы.

      На системах с Ubuntu и Debian выполните следующие команды в качестве вашего пользователя без прав root для импорта сертификата:

      Ubuntu and Debian derived distributions

      • sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
      • sudo update-ca-certificates

      Чтобы импортировать сертификат сервера ЦС в систему на базе CentOS, Fedora или RedHat, скопируйте и вставьте содержимое файла в файл /tmp/ca.crt, как описано в предыдущем примере. Затем скопируйте сертификат в директорию /etc/pki/ca-trust/source/anchors/ и запустите команду update-ca-trust.

      CentOS, Fedora, RedHat distributions

      • sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
      • sudo update-ca-trust

      Теперь вторая система Linux будет доверять любому сертификату, подписанному нашим сервером ЦС.

      Примечание. Если вы используете ЦС с веб-серверами и браузер Firefox, вам нужно будет импортировать публичный сертификат ca.crt в Firefox напрямую. Firefox не использует локальное хранилище сертификатов операционной системы. Подробную информацию о добавлении сертификата ЦС в Firefox можно найти в статье поддержки Mozilla «Настройка Центров сертификации (ЦС) в Firefox».

      Если вы используете ЦС для интеграции со средой Windows или настольными компьютерами, ознакомьтесь с документацией по использованию certutil.exe для установки сертификата ЦС.

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

      (Необязательно) — Создание запросов на подписание сертификатов и отзыв сертификатов

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

      Если вы хотите потренироваться и узнать больше о том, как подписывать запросы сертификатов и отзывать сертификаты, из этих необязательных разделов вы сможете узнать больше о каждом из этих процессов.

      (Необязательно) — Создание и подписание образца запроса сертификата

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

      Запрос на подписание сертификата (CSR) состоит из трех частей, а именно открытого ключа, идентификационной информации запрашивающей системы и подписи запроса, создаваемой на основе закрытого ключа запрашивающей системы. Закрытый ключ остается секретным, и его можно будет использовать для шифрования информации, которую сможет расшифровать любой пользователь с подписанным открытым сертификатом.

      Следующие шаги будут выполняться на вашей второй системе с Ubuntu или Debian, либо с дистрибутивом одного из них. Это может быть другой удаленный сервер или локальная система Linux, например ноутбук или настольный компьютер. Поскольку по умолчанию easy-rsa доступна не на всех системах, мы используем инструмент openssl для создания тренировочного закрытого ключа и сертификата.

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

      • sudo apt update
      • sudo apt install openssl

      Когда вам будет предложено установить openssl, введите y, чтобы продолжить выполнение установки. Теперь вы готовы создать тренировочный CSR с помощью openssl.

      В первую очередь для создания CSR необходимо сгенерировать закрытый ключ. Чтобы создать закрытый ключ с помощью openssl, создайте директорию practice-csr и сгенерируйте ключ в этой директории. Мы будем выполнять этот запрос на фиктивном сервере под названием sammy-server, в отличие от случая создания сертификата для идентификации пользователя или другого ЦС.

      • mkdir ~/practice-csr
      • cd ~/practice-csr
      • openssl genrsa -out sammy-server.key

      Output

      Generating RSA private key, 2048 bit long modulus (2 primes) . . . . . . e is 65537 (0x010001)

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

      • openssl req -new -key sammy-server.key -out sammy-server.req

      Output

      . . . ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:New York Locality Name (eg, city) [Default City]:New York City Organization Name (eg, company) [Default Company Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:Community Common Name (eg, your name or your server's hostname) []:sammy-server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:

      Если вы хотите, чтобы эти значения добавлялись автоматически при вызове openssl, а не запрашивались через интерактивный диалог, вы можете передать аргумент -subj в OpenSSL. Обязательно измените выделенные значения для соответствия вашему расположению, организации и имени сервера:

      • openssl req -new -key sammy-server.key -out server.req -subj
      • /C=US/ST=New York/L=New York City/O=DigitalOcean/OU=Community/CN=sammy-server

      Чтобы проверить содержимое CSR, вы можете прочитать файл запроса с помощью команды openssl и проверить поля внутри него:

      • openssl req -in sammy-server.req -noout -subject

      Output

      subject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server

      Когда вас устроит тема запроса тренировочного сертификата, скопируйте файл sammy-server.req на сервер ЦС с помощью scp:

      • scp sammy-server.req sammy@your_ca_server_ip:/tmp/sammy-server.req

      На этом шаге вы сгенерировали запрос подписи сертификата для вымышленного сервера sammy-server. В реальной ситуации запрос может исходить от веб-сервера разработки, которому требуется сертификат TLS для тестирования, или от сервера OpenVPN, который запрашивает сертификат, чтобы пользователи могли подключиться к VPN. На следующем шаге мы перейдем к подписанию запроса на подписание сертификата с использованием закрытого ключа сервера ЦС.

      (Необязательно) — Подписание CSR

      На предыдущем шаге мы создали запрос тренировочного сертификата и ключ вымышленного сервера. Мы скопировали его в директорию /tmp на сервере ЦС, моделируя процесс, который мы бы использовали при отправке запросов CSR на подпись реальными клиентами или серверами.

      Продолжим рассматривать вымышленный сценарий. Теперь серверу ЦС необходимо импортировать тренировочный сертификат и подписать его. Когда ЦС подтвердит сертификат и отправит ответ серверу, клиенты, доверяющие Центру сертификации, смогут также доверять новому сертификату.

      Поскольку мы будем работать внутри инфраструктуры PKI в ЦС, где доступна утилита easy-rsa, мы будем использовать утилиту easy-rsa для большего удобства в отличие от использования openssl, как мы делали в предыдущем примере.

      Первым шагом для подписания вымышленного CSR будет импорт запроса сертификата с помощью скрипта easy-rsa:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/sammy-server.req sammy-server

      Output

      . . . The request has been successfully imported with a short name of: sammy-server You may now use this name to perform signing operations on this request.

      Теперь вы можете подписать запрос, запустив скрипт easyrsa с опцией sign-req, указав затем тип запроса и общее имя, включаемое в CSR. Запрос может иметь тип client, server или ca. Поскольку мы тренируемся с сертификатом для вымышленного сервера, нужно использовать тип запроса server:

      • ./easyrsa sign-req server sammy-server

      В результатах вам будет предложено подтвердить, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER:

      Output

      You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt

      Если вы зашифровали ключ ЦС, вам будет предложено ввести пароль.

      Выполнив эти шаги, мы подписали CSR sammy-server.req с помощью закрытого ключа сервера ЦС в директории /home/sammy/easy-rsa/pki/private/ca.key. Полученный файл sammy-server.crt содержит открытый ключ шифрования тренировочного сервера, а также новую подпись от сервера ЦС. Подпись сообщает всем, кто доверяет ЦС, что они также могут доверять сертификату sammy-server.

      Если бы это был запрос веб-сервера, сервера VPN или другого реального сервера, последним шагом на сервере ЦС стало бы распространение новых файлов sammy-server.crt и ca.crt с сервера ЦС на удаленный сервер, отправивший запрос CSR:

      • scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
      • scp pki/ca.crt sammy@your_server_ip:/tmp

      На этом этапе выпущенный сертификат можно было бы использовать с веб-сервером, сервером VPN, инструментом управления конфигурацией, СУБД, системой аутентификации клиентов и т. п.

      (Необязательно) — Отзыв сертификата

      Иногда сертификат требуется отозвать, чтобы пользователь или сервер не могли его использовать. Например, это может потребоваться в случае кражи ноутбука, взлома веб-сервера, увольнения сотрудника, расторжения договора с подрядчиком и т. д.

      Далее кратко описана процедура отзыва сертификата:

      1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
      2. Сгенерируйте новый CRL с помощью команды ./easyrsa gen-crl.
      3. Переместите обновленный файл crl.pem на сервер или серверы, использующие ваш ЦС, а на этих системах скопируйте этот файл в директорию или директории программ, которые на него ссылаются.
      4. Перезапустите все службы, использующие ваш ЦС и файл CRL.

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

      Отзыв сертификата

      Для отзыва сертификата перейдите в директорию easy-rsa на вашем сервере ЦС:

      Затем запустите скрипт easyrsa с опцией revoke, указав имя клиента, у которого хотите отозвать сертификат: В соответствии с приведенным выше практическим примером, сертификат имеет обычное имя sammy-server:

      • ./easyrsa revoke sammy-server

      Система предложит вам подтвердить отзыв сертификата. Введите yes:

      Output

      Please confirm you wish to revoke the certificate with the following subject: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes . . . Revoking Certificate 8348B3F146A765581946040D5C4D590A . . .

      Обратите внимание на выделенное значение в строке Revoking Certificate. Это значение представляет собой уникальный серийный номер отзываемого сертификата. Данное значение потребуется вам, если вы захотите просмотреть список отзыва и убедиться в наличии в нем сертификата, как описано в последнем шаге этого раздела.

      После подтверждения действия ЦС выполнит отзыв сертификата. Однако удаленные системы, использующие ЦС, не имеют возможности проверить отзыв сертификатов. Пользователи и серверы смогут использовать этот сертификат, пока список отзыва сертификатов ЦС (CRL) не будет распространен по всем системам, использующим данный ЦС.

      На следующем шаге мы сгенерируем CRL или обновим существующий файл crl.pem.

      Генерирование списка отзыва сертификатов

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

      Чтобы сгенерировать CRL, запустите команду easy-rsa с опцией gen-crl, оставаясь в директории ~/easy-rsa:

      Если вы использовали фразу-пароль при создании файла ca.key, вам будет предложено ввести ее. Команда gen-crl сгенерирует файл с именем crl.pem, содержащий обновленный список отозванных сертификатов для этого ЦС.

      Далее вам нужно будет передавать обновленный файл crl.pem на все серверы и клиенты, использующие этот ЦС, при каждом запуске команды gen-crl. В противном случае клиенты и системы сохранят доступ к сервисам и системам, использующим ваш ЦС, так как данным сервисам нужно сообщить об отзыве сертификата.

      Передача списка отзыва сертификатов

      Мы сгенерировали список CRL на сервере ЦС, и теперь нам нужно передать его на удаленные системы, использующие ваш ЦС. Для передачи этого файла на ваши серверы можно использовать команду scp.

      Примечание. В этом обучающем руководстве описывается генерирование и распространение списка CRL вручную. Хотя существуют более надежные автоматические методы распространения и проверки списков отзыва (например OCSP-Stapling), настройка этих методов не входит в состав данного обучающего руководства.

      Войдите на сервер ЦС как пользователь без прав root и запустите следующую команду, указав IP-адрес или имя DNS вашего сервера вместо your_server_ip:

      • scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

      Теперь файл передан на удаленную систему и нужно только отправить новую копию списка отзыва во все сервисы.

      Обновление сервисов, поддерживающих CRL

      Перечень необходимых шагов для обновления сервисов, использующих файл crl.pem, не входит в содержание этого обучающего руководства. Обычно требуется скопировать файл crl.pem в место, где сервис ожидает его найти, а затем перезапустить сервис с помощью systemctl.

      После обновления сервиса с указанием нового файла crl.pem этот сервис будет отклонять запросы подключения от клиентов и серверов, на которых используется отозванный сертификат.

      Изучение и проверка содержимого списка CRL

      Если вы хотите изучить содержимое файла CRL, в том числе с целью подтверждения списка отозванных сертификатов, выполните следующую команду openssl в директории easy-rsa на вашем сервере ЦС:

      • cd ~/easy-rsa
      • openssl crl -in pki/crl.pem -noout -text

      Также вы можете запустить эту команду на любом сервере или на любой системе, где установлен инструмент openssl с копией файла crl.pem. Например, если вы перенесли файл crl.pem на вторую систему и хотите убедиться в отзыве сертификата sammy-server, вы можете использовать следующий синтаксис команды openssl, указав записанный при отзыве сертификата серийный номер вместо выделенного здесь:

      • openssl crl -in /tmp/crl.pem -noout -text |grep -A 1 8348B3F146A765581946040D5C4D590A

      Output

      Serial Number: 8348B3F146A765581946040D5C4D590A Revocation Date: Apr 1 20:48:02 2020 GMT

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

      Заключение

      В этом обучающем руководстве вы создали частный Центр сертификации на отдельном сервере Ubuntu 20.04 с помощью пакета Easy-RSA. Мы узнали, как работает модель доверия между сторонами, полагающимися на ЦС. Также мы создали и подписали запрос на подписание сертификата (CSR) для вымышленного сервера и научились отзывать сертификаты. Наконец, мы научились генерировать и распространять списки отзыва сертификатов (CRL) на любых системах, использующих наш ЦС, чтобы предотвратить доступ к сервисам пользователей и серверов, которым он не разрешен.

      Теперь вы можете выдавать сертификаты пользователям и использовать их в OpenVPN и других подобных сервисах. Также вы можете использовать свой ЦС для настройки веб-серверов разработки и тестирования с помощью сертификатов, чтобы защитить свои непроизводственные среды. Использование ЦС с сертификатами TLS во время разработки поможет обеспечить максимальное соответствие вашего кода и сред разработки и тестирования производственной среде.

      Если вам требуется дополнительная информация об использовании OpenSSL, вам будет полезно наше обучающее руководство Основы OpenSSL: работа с сертификатами SSL, закрытыми ключами и запросами CSR, которое поможет вам лучше познакомиться с основами OpenSSL.



      Source link