Как запустить распределенную социальную сеть с открытым исходным кодом с диаспорой в CentOS 7

Вступление

Диаспора - это распределенная социальная сеть с открытым исходным кодом.

Он отличается от большинства других социальных сетей тем, что децентрализован - настоящая сеть без центральной базы. Во всем мире есть серверы (называемые pods), каждый из которых содержит данные пользователей, которые решили зарегистрироваться на нем. Эти модули общаются друг с другом без проблем, так что вы можете зарегистрироваться в любом модуле и свободно общаться со своими контактами, где бы они ни находились в сети. Вы можете прочитать больше на about странице диаспоры.

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

  • Как настроить приложение Rails (диаспора) для производства

  • Как настроить MariaDB с диаспорой

  • Как настроить Nginx в качестве обратного прокси-сервера для диаспоры

  • Лучшие практики для конфигурации SSL для Nginx

  • Как написать собственные файлы модулей systemd для использования в приложении Rails

  • Для тех, кто заботится о безопасности, есть бонусный раздел о том, как настроить SELinux для хорошей игры с диаспорой.

  • Отклонения от официального руководства по установке диаспоры *

Руководства по установке диаспоры wiki предлагают использовать Ruby Version Manager. Хотя вы можете сделать это, мы будем использовать вместо этого упакованный в систему Ruby. Таким образом, мы избегаем установки Ruby из исходного кода и появления другой зависимости, например, RVM.

Официальное руководство также предлагает использовать + script / server +, скрипт, который запускает + unicorn + и + sidekiq +, два приложения, которые нам нужны для диаспоры. Поскольку CentOS 7 использует systemd, вместо этого мы будем писать собственные файлы инициализации для этих сервисов.

Предпосылки

Пожалуйста, выполните эти предварительные условия перед началом обучения.

  • CentOS 7 с 1 ГБ оперативной памяти + Минимальный объем оперативной памяти, необходимый для небольшого сообщества, составляет * 1 ГБ *, поэтому мы будем использовать * 1 ГБ / 1 CPU * Droplet.

  • пользователь sudo + Большинству команд ниже нужны права суперпользователя. Обратитесь к how для добавления пользователей руководству, чтобы добавить своего пользователя и дать это sudo привилегии. Эта учетная запись пользователя будет добавлена ​​к учетной записи пользователя * diaspora *, которую мы создадим позже и которой будут пользоваться службы Diaspora с более ограниченными привилегиями.

  • Сертификат SSL + Хотя Diaspora может работать без SSL-сертификата, для подключения Diaspora к другим модулям требуется действительный SSL-сертификат. Для производства у вас должен быть paid SSL-сертификат. Нам просто нужны два файла сертификата, созданные в этой статье (общедоступный, приватный), поэтому вы можете пропустить часть настройки этого веб-сервера, посвященную настройке веб-сервера. Мы сделаем это самостоятельно. + В качестве альтернативы вы можете создать самозаверяющий сертификат. См. Https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs#generating-ssl-certificates[thutorial] для подробностей или просто запустите эта команда из вашего домашнего каталога:

openssl req \
  -newkey rsa:2048 -nodes -keyout ssl.key \
  -x509 -days 365 -out ssl.crt

Шаг 1 - Установите утилиты

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

sudo yum install deltarpm yum-cron vim

Затем обновите нашу систему:

sudo yum update

Шаг 2 - Включите репозиторий EPEL

EPEL расшифровывается как Extra Packages для Enterprise Linux, и в нем есть несколько пакетов, которые нам нужно установить, которые не являются частью базовых репозиториев CentOS.

Давайте включим его, установив пакет + epel-release + и проверив наличие обновлений любого + пакета:

sudo yum install epel-release
sudo yum update

Если вас попросят импортировать ключ EPEL 7 gpg, как показано ниже, ответьте «да»:

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <[email protected]>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-5.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
 Is this ok [y/N]:

Шаг 3 - Установите пакеты для Ruby и C

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

Установите пакеты:

sudo yum install git ruby ruby-devel libxslt-devel libxml2-devel gcc gcc-c++ automake net-tools libcurl-devel libffi-devel make redis nodejs ImageMagick-devel

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

sudo systemctl enable redis
sudo systemctl start redis

Шаг 4 - Добавить выделенного пользователя диаспоры

Создайте учетную запись пользователя для запуска Диаспоры. Вы можете назвать эту учетную запись как угодно, но в этом руководстве предполагается, что этот пользователь называется * диаспора *.

sudo useradd diaspora

Шаг 5 - Настройте брандмауэр

Настройка и ужесточение брандмауэра очень важны при настройке производственной среды. Инструмент, который мы будем использовать, это + firewalld +, который упрощает вещи по сравнению с чистыми командами + iptables +.

Сначала запустите сервис + firewalld + и включите его при загрузке:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Теперь мы разрешим + ssh + для порта + 22 +, + http для порта` + 80 + , + https` для порта + 443 + и + smtp для порта` +25 + `. Как ваш пользователь sudo, добавьте эти сервисы:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=smtp

Перезагрузите правила брандмауэра:

sudo firewall-cmd --reload

Для получения дополнительной информации об использовании + firewalld + прочитайте Additional Рекомендуемые действия для новых серверов CentOS 7 руководство.

Шаг 6 - Установите и защитите MariaDB

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

Установите необходимые пакеты:

sudo yum install mariadb-server mariadb-devel

Убедитесь, что MariaDB запущен и включен при загрузке:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Защитите установку MariaDB, выполнив следующую команду:

sudo mysql_secure_installation

Ответьте на вопросы, как показано ниже в тексте, и добавьте надежный пароль root при появлении запроса:

Enter current password for root (enter for none):
Set root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

Шаг 7 - Создание пользователя и базы данных диаспоры

Далее мы войдем в MariaDB, чтобы создать пользователя * diaspora *. При появлении запроса введите пароль * root *, который вы создали выше:

mysql -u root -p

Создать пользователя для диаспоры. Измените ++ в приведенной ниже команде на реальный пароль. Он не должен совпадать с паролем * root *, который вы указали во время + mysql_secure_installation +.

CREATE USER 'diaspora'@'localhost' IDENTIFIED BY '';

Создайте производственную базу данных диаспоры:

CREATE DATABASE IF NOT EXISTS `diaspora_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_bin`;

Предоставьте пользователю MariaDB * диаспора * необходимые разрешения для базы данных:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `diaspora_production`.* TO 'diaspora'@'localhost';

Закройте сеанс базы данных.

\q

Попробуйте подключиться к новой базе данных с пользователем * диаспора * (используйте пароль, который вы ввели для + IDENTIFIED BY '' + выше).

mysql -u diaspora -p -D diaspora_production

Теперь вы должны увидеть приглашение: + MariaDB [diaspora_production]> +. Выйдите из сеанса + базы данных, введя:

\q

Мы закончили установку базы данных MariaDB.

Для дополнительной безопасности посмотрите подробную статью на https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps[How To Secure MySQL и Базы данных MariaDB.

Затем мы возьмем исходный код диаспоры и настроим его для работы на VPS.

Шаг 8 - Установите Bundler

Bundler - менеджер пакетов для драгоценных камней Ruby. Мы установим его, чтобы он был доступен по всему миру.

sudo gem install bundler

Поскольку исполняемый файл + bundle + установлен в + / usr / local / bin / bundle +, создайте символическую ссылку, чтобы включить ее в пользовательский + PATH +.

sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle

Шаг 9 - Получить исходный код диаспоры

Диаспора развита в трех основных направлениях. + stable + содержит код, который считается стабильным и должен быть выпущен, + master + имеет стабильные версии с тегами, которые мы будем использовать, в то время как +velop + имеет последний код с возможными ошибками.

Перейдите в учетную запись пользователя * диаспора *.

sudo su - diaspora

Проверьте мастер ветку. На момент написания статьи она содержала версию диаспоры + 0.5.1.1 +.

git clone -b master https://github.com/diaspora/diaspora.git

Шаг 10 - Настройка базы данных диаспоры

Теперь перейдите в рабочий каталог.

cd ~/diaspora/

Скопируйте пример файла конфигурации базы данных и откройте + database.yml + в вашем любимом редакторе.

cp config/database.yml.example config/database.yml
vim config/database.yml

Теперь мы отредактируем файл конфигурации, чтобы он соответствовал настройкам базы данных, созданным ранее.

Отредактируйте самые первые строки, где определен адаптер + mysql2 +. (MariaDB - это замена для MySQL.) Замените * root * на * diaspora * и замените ++ на пароль для пользователя базы данных * диаспоры *, который вы создали ранее. Не удаляйте цитаты. Когда закончите, сохраните и закройте файл.

mysql: &mysql
 adapter: mysql2
 host: "localhost"
 port: 3306
 username: ""
 password: ""
 encoding: utf8mb4
 collation: utf8mb4_bin

Шаг 11 - Настройте основные параметры диаспоры

Начнем с копирования примера файла конфигурации.

cp config/diaspora.yml.example config/diaspora.yml

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

Откройте файл в текстовом редакторе.

vim config/diaspora.yml

Строка 39 - Раскомментируйте строку + url +, чтобы она выглядела следующим образом:

url: ""

Замените ++ своим собственным доменным именем. Используемый здесь URL будет жестко запрограммирован в базе данных, поэтому убедитесь, что он точный. * Прочитайте комментарии выше этой строки конфигурации для деталей *.

Строка 47 - Раскомментируйте строку + certificate_authorities +, чтобы она выглядела следующим образом:

certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'

Строка 166. Раскомментируйте строку + rails_environment + и замените + development + на + production, чтобы она выглядела следующим образом:

rails_environment: ''

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

Это минимальные изменения, необходимые для работы стручка диаспоры. Есть еще много вариантов для изучения и настройки по вашему вкусу, таких как подключение к другим социальным сетям (Twitter, WordPress, Tumblr, Facebook). Пожалуйста, прочитайте файл и внесите необходимые изменения в конфигурацию.

Шаг 12 - Установите Gems и настройте базу данных

Установите необходимые гемы, настройте базу данных и предварительно скомпилируйте ресурсы.

Убедитесь, что вы находитесь в правильном каталоге:

cd /home/diaspora/diaspora/

Сначала мы говорим гему nokogiri использовать системную библиотеку libxm2, которую мы ранее установили:

bundle config build.nokogiri --use-system-libraries

Далее, используйте bundler для установки необходимых гемов:

RAILS_ENV=production bin/bundle install --without test development --deployment

Настройте базу данных:

RAILS_ENV=production bin/rake db:create db:schema:load

Прекомпилируйте активы:

RAILS_ENV=production bin/rake assets:precompile

На этом этапе вы можете оставить учетную запись пользователя * diaspora * и переключиться обратно на пользователя sudo, которого вы создали, выполняя предварительные требования этого руководства.

exit

Шаг 13 - Настройте системные службы Диаспоры

Диаспора состоит из двух основных служб, которые необходимо запустить:

  • единорог, сервер приложений

  • sidekiq, для фоновой обработки заданий

Для этого случая предусмотрен скрипт, который находится в + script / server +, но вместо этого мы будем использовать systemd. systemd - это система инициализации, используемая в CentOS 7.

Чтобы лучше понять, как работает systemd, прочитайте следующие статьи:

Создайте каталог tmpfiles

Создайте каталог, в котором будет находиться + unicorn + Unix-сокет.

sudo mkdir /run/diaspora

Смените владельца на пользователя * диаспора * и установите разрешения.

sudo chown diaspora:diaspora /run/diaspora
sudo chmod 750 /run/diaspora

Поскольку каталоги + / run + и + / var / run + являются изменчивыми, только что созданный каталог + / run / diaspora + не выдержит перезагрузки системы. С помощью systemd мы можем использовать tmpfiles для сохранения этого каталога между перезагрузками.

Откройте + / etc / tmpfiles.d / diaspora.conf + для редактирования.

sudo vim /etc/tmpfiles.d/diaspora.conf

Вставьте следующую строку:

/etc/tmpfiles.d/diaspora.conf

d /run/diaspora 0750 diaspora diaspora - -

Формат конфигурации - одна строка на путь, содержащая поля типа, пути, режима, владельца, возраста и аргумента соответственно. Вы можете узнать больше о + tmpfiles.d + на его official web page или на его справочной странице.

единорог

Сначала мы отредактируем + diaspora.yml +, чтобы служба прослушивала сокет Unix. Мы вернемся к пользователю diaspora для этого.

sudo su - diaspora

Откройте файл конфигурации для редактирования:

vim /home/diaspora/diaspora/config/diaspora.yml

Раскомментируйте строку 157 следующим образом:

/home/diaspora/diaspora/config/diaspora.yml

listen: 'unix:/run/diaspora/diaspora.sock'

Сохраните и выйдите из файла.

Теперь вернитесь к своему пользователю sudo.

su -

Создайте файл + unicorn.service +.

sudo vim /etc/systemd/system/diaspora-unicorn.service

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

/etc/systemd/system/diaspora-unicorn.service

[Unit]
Description=Diaspora Unicorn Server
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-unicorn
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

PIDFile=/run/diaspora/unicorn.pid
Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true
NoNewPrivileges=true

ExecStart=/usr/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"

[Install]
WantedBy=multi-user.target

Запустите сервис единорога и включите его при загрузке.

sudo systemctl start diaspora-unicorn
sudo systemctl enable diaspora-unicorn

Теперь проверьте статус сервиса:

systemctl status diaspora-unicorn

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

diaspora-unicorn.service - Diaspora Unicorn Server
Loaded: loaded (/etc/systemd/system/diaspora-unicorn.service; enabled)
Active: active (running) since Tue 2015-06-23 10:18:25 EDT; 16s ago
Main PID: 16658 (ruby)
CGroup: /system.slice/diaspora-unicorn.service
└─16658 ruby /home/diaspora/diaspora/vendor/bundle/ruby/bin/unicorn_rails -c config/unicorn.rb -E production

Sidekiq

Аналогично с + sidekiq +, давайте создадим файл + sidekiq.service +.

sudo vim /etc/systemd/system/diaspora-sidekiq.service

Вставьте в следующее:

/etc/systemd/system/diaspora-sidekiq.service

[Unit]
Description=Diaspora Sidekiq Worker
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-sidekiq
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true

ExecStart=/usr/bin/bundle exec "sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1"

[Install]
WantedBy=multi-user.target

Запустите сервис sidekiq и включите его при загрузке:

sudo systemctl start diaspora-sidekiq
sudo systemctl enable diaspora-sidekiq

Теперь запустите:

systemctl status diaspora-sidekiq

Вывод должен быть похож на это:

diaspora-sidekiq.service - Diaspora Sidekiq Worker
  Loaded: loaded (/etc/systemd/system/diaspora-sidekiq.service; enabled)
  Active: active (running) since Mon 2014-12-29 08:21:45 UTC; 44s ago
Main PID: 18123 (sh)
  CGroup: /system.slice/diaspora-sidekiq.service
          ├─18123 sh -c sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1
          └─18125 sidekiq 2.17.7 diaspora [0 of 5 busy]

Шаг 14 - Установите Nginx

Nginx будет служить нашим обратным прокси-сервером, поэтому почти все запросы будут отправлены в Unicorn. Только файлы в + public / + будут обслуживаться напрямую Nginx.

Давайте сначала установим веб-сервер.

sudo yum install nginx

Запустите сервис и включите его при загрузке:

sudo systemctl start nginx
sudo systemctl enable nginx

Шаг 15 - Дайте разрешения Nginx

Чтобы Nginx мог получить доступ к домашней папке пользователя * diaspora *, нам нужно добавить пользователя * nginx * в группу * diaspora *:

sudo usermod -a -G diaspora nginx

Наконец, мы ослабим разрешения для домашнего каталога пользователя * diaspora *, чтобы разрешить чтение и выполнение доступа к группе диаспоры:

sudo chmod 750 /home/diaspora/

Шаг 16 - Загрузите сертификат SSL и включите прямую секретность

Теперь вам понадобятся файлы сертификатов SSL от вашего центра сертификации. В приведенном ниже примере конфигурации мы используем + / etc / ssl / diaspora / ssl.crt + для открытого сертификата и + / etc / ssl / diaspora / ssl.key + для закрытого ключа.

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

sudo mkdir /etc/ssl/diaspora

Загрузите или переместите файлы сертификатов и ключей на сервер и поместите их в каталог +, который мы только что создали. SFTP или SCP могут быть использованы для этого; см. this theutorial.

Прямая секретность стала неотъемлемой частью шифрованных соединений SSL / TLS. Для более подробного объяснения прямой секретности см. Эту Mozilla[ wiki запись безопасности сервера.

Снова измените на системного пользователя * root *.

sudo su -

Создайте файл + dhparam.pem +.

openssl dhparam 2048 > /etc/ssl/dhparam.pem

Файл dhparam может занять несколько минут. Когда он закончится, войдите в свою учетную запись пользователя sudo.

su -

Шаг 17 - Отключите сайт по умолчанию в nginx.conf

Теперь мы изменим + / etc / nginx / nginx.conf +, чтобы сообщение по умолчанию Welcome to Nginx не мешало создаваемому нами файлу конфигурации диаспоры.

sudo vim /etc/nginx/nginx.conf

Найдите в блоке + server + строки, включая + default_server; +. Удалите + default_server + из этих записей, чтобы область блока сервера выглядела следующим образом:

/etc/nginx/nginx.conf

server {


server_name localhost;
root /usr/share/nginx/html;

Шаг 18 - Создайте собственный файл конфигурации Nginx для диаспоры

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

sudo vim /etc/nginx/conf.d/diaspora.conf

Вставить в следующем содержании; объяснения даны чуть ниже кода:

/etc/nginx/conf.d/diaspora.conf

upstream diaspora {
 server unix:/run/diaspora/diaspora.sock fail_timeout=0;
}
server {
 listen [::]:80;
 listen 80;
 server_name _;
 return 301 https://$request_uri;
}
server {
 listen [::]:443 ssl spdy;
 listen 443 ssl spdy;
 server_name ;
 root /home/diaspora/diaspora/public;
 server_tokens off;
 error_log /var/log/nginx/diaspora_error.log;

 # Configure maximum picture size
 # Note that Diaspora has a client side check set at 4M
 client_max_body_size 4M;

 ## SSL settings
 ssl_certificate ;
 ssl_certificate_key ;

 # https://wiki.mozilla.org/Security/Server_Side_TLS
 ssl_dhparam /etc/ssl/dhparam.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
 ssl_session_timeout 5m;
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:50m;
 add_header Strict-Transport-Security "max-age=31536000";

 location / {
   # Proxy if requested file not found
   try_files $uri $uri/index.html $uri.html @diaspora;
 }

 location @diaspora {
   gzip off;
   proxy_set_header  X-Forwarded-Ssl   on;
   proxy_set_header  X-Real-IP         $remote_addr;
   proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
   proxy_set_header  X-Forwarded-Proto https;
   proxy_set_header  Host              $http_host;
   proxy_set_header  X-Frame-Options   SAMEORIGIN;
   proxy_redirect                      off;
   proxy_pass http://diaspora;
 }
}

Замените следующие переменные:

  • ++ с вашим собственным зарегистрированным доменным именем; вам нужно будет сделать это в * двух * местах

  • ++ с путем к вашему собственному общедоступному сертификату

  • ++ с путем к вашему личному ключу

Объяснение:

  • Блок + upstream + - это место, где мы настраиваем сокет Unix, который слушает диаспора (который мы также установили в Unicorn ранее). Это используется позже как директива + proxy_pass +.

  • Первый блок + server + слушает стандартный HTTP-порт + 80 + и перенаправляет любые запросы в HTTPS.

  • Второй блок + server + слушает порт + 443 + (SSL) и устанавливает некоторые надежные параметры SSL, которые были взяты из вики Mozilla.

Для получения дополнительной информации о блоках сервера Nginx в целом, пожалуйста, прочитайте thutorial.

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

sudo nginx -t

Если все прошло хорошо, это должно вернуться:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

sudo systemctl restart nginx

Если вы теперь посещаете доменное имя вашего модуля диаспоры в своем браузере (например, + https: // example.com +), вы должны перейти на страницу приветствия диаспоры. Поздравляем!

изображение: https: //assets.digitalocean.com/articles/socialnetwork_diaspora/diaspora.png [страница приветствия диаспоры]

Шаг 19 - Создайте пользователя диаспоры

Давайте создадим вашего первого пользователя из диаспоры. Нажмите на ссылку в * Начните с создания учетной записи. *

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

Шаг 20 - Настройте SELinux (необязательно)

_ * Предупреждение: * Если вы не знакомы с SELinux, учтите, что * это может сломать вещи *. Вы можете пропустить этот раздел и начать использовать диаспору. _

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

Включить SELinux

Откройте + / etc / selinux / config + в текстовом редакторе.

sudo vim /etc/selinux/config

Измените настройку + SELINUX + с + disabled + на ++, как показано ниже. Прежде всего необходимо установить разрешающий статус, потому что каждый файл в системе должен иметь свой контекст, помеченный, прежде чем SELinux может быть применен.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

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

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

sudo reboot

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

su -

Теперь отредактируйте + / etc / selinux / config + еще раз и установите для параметра + SELINUX + значение ++.

sudo vim /etc/selinux/config

Когда закончите, строка должна сказать это:

SELINUX=

Сохраните и закройте файл. * Перезагрузите капельку еще раз. *

sudo reboot

Затем вернитесь к вашему дроплету по SSH после того, как он снова появится в сети.

Политика SELinux Nginx

Отсюда вы хотите остаться пользователем + root. Если вы сейчас посетите свой домен, вам будет выдана ошибка * 502 *. В нашем случае SELinux блокирует сокет Nginx и доступ к домашнему каталогу пользователя * diaspora *.

Вы можете проверить журналы аудита с:

grep denied /var/log/audit/audit.log

Вы должны увидеть сообщения, подобные приведенным ниже:

type=AVC msg=audit(1424394514.632:385): avc:  denied  { search } for  pid=1114 comm="nginx" name="diaspora" dev="vda1" ino=783369 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_dir_t:s0 tclass=dir
type=AVC msg=audit(1424394514.632:386): avc:  denied  { write } for  pid=1114 comm="nginx" name="diaspora.sock" dev="tmpfs" ino=21382 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file

Установите инструменты ниже, чтобы начать исправление проблемы:

yum install policycoreutils-{python,devel} setroubleshoot-server

Мы проверим файл + audit.log + и разрешим записи Denied в нашей политике SELinx. Run:

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora

Сгенерированная политика SELinux хранится в файле + nginx_diaspora.te + в корневом каталоге + / home + (хотя вы можете организовать политики SELinux в любом месте). Двоичный файл + nginx_diaspora.pp + должен быть передан команде + semodule + для импорта политики. Откройте + nginx_diaspora.te +, чтобы увидеть, что теперь разрешено SELinux.

vim nginx_diaspora.te

Он должен содержать следующие записи. Если нет, замените содержимое + nginx_diaspora.te + на то, что показано ниже.

module nginx_diaspora 1.0;

require {
       type var_run_t;
       type httpd_t;
       type user_home_t;
       type init_t;
       class sock_file write;
       class unix_stream_socket connectto;
       class file { read open };
}


#============= httpd_t ==============
allow httpd_t init_t:unix_stream_socket connectto;

#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
allow httpd_t user_home_t:file { read open };
allow httpd_t var_run_t:sock_file write;

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

semodule -i nginx_diaspora.pp

Если вы обновите страницу в своем браузере, вы должны снова увидеть страницу приветствия диаспоры. Поздравляем с настройкой защищенного SELinux модуля диаспоры, работающего на CentOS 7!

Краткое описание проблем с SELinux

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

  1. Запустите команду ниже для + grep + через + audit.log + и добавьте новые Denied записи в политику Nginx.

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. Перезагрузите модуль политики.

semodule -i nginx_diaspora.pp

Вы можете повторить эти шаги несколько раз.

tail -f /var/log/messages

Вот пример показаний:

. . .

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that nginx should be allowed write access on the  sock_file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep nginx /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

. . .

Заключение

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

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

Related