如何在 CentOS 7 上使用 Diaspora 运行开源分布式社交网络

介绍

Diaspora是一个开源的分布式社交网络。

它与大多数其他社交网络不同,因为它是分散的 - 一个真正的网络,没有中央基地. 在世界各地都有服务器(称为 pods),每个服务器都包含了选择注册的用户的数据。

在本教程中,我们将设置和配置一个Diaspora pod. 在其他 事物中,您将学习:

  • 如何设置 Rails 应用程序(Diaspora)用于生产
  • 如何配置 MariaDB 与 Diaspora
  • 如何设置 Nginx 作为 Diaspora 的反向代理服务器
  • 对 Nginx 的 SSL 配置的最佳做法
  • 如何编写自定义系统d 单元文件用于 Rails 应用程序
  • 对于安全意识的人来说,有关于如何配置 SELinux 以便与 Diaspora 发挥良好作用的奖励部分

** 从 Diaspora 官方安装指南的偏差**

Diaspora wiki的安装指南建议我们使用Ruby版本管理器. 虽然你可以这样做,但我们会使用系统包装Ruby。

官方指南还建议使用script/server,一个开始于unicornsidekiq的脚本,这两个应用程序我们需要Diaspora。

前提条件

请在开始教程之前完成这些前提条件。

  • newkey rsa: 2048 - 节点 - 键出 ssl. key\
  • x509 - 天 - 365 - 出 sl.crt

* 注册的域名指向您 Droplet 的 IP

步骤 1 - 安装实用程序

讓我們安裝幾個工具包,後來會很有用:

1sudo yum install deltarpm yum-cron vim

更新我们的系统:

1sudo yum update

步骤 2 – 启用 EPEL 存储器

EPEL代表企业Linux的额外包,它有一些我们需要安装的包,这些包不属于基本的CentOS仓库。

让我们通过安装epel-release包来启用它,并检查任何 包更新:

1sudo yum install epel-release
2sudo yum update

如果您被要求如下所示导入 EPEL 7 gpg 键,请回答是:

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

步骤 3 — 安装 Ruby 和 C 的包

Diaspora 及其具有原生 C 扩展的宝石需要以下套件。

安装包裹:

1sudo 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 是 Diaspora 作为其数据库使用的开源密钥值数据存储器,现在 Redis 已安装,让我们将其配置为在启动时启用,然后启动服务:

1sudo systemctl enable redis
2sudo systemctl start redis

步骤 4 – 添加一个专门的 Diaspora 用户

创建一个用户帐户来运行Diaspora。你可以随心所欲地命名这个帐户,但本教程将假定这个用户被称为 diaspora

1sudo useradd diaspora

步骤5:设置防火墙

设置和紧缩防火墙在设置生产环境时非常重要,我们将使用的工具是防火墙,这比纯粹的iptables命令更简单。

首先,启动防火墙服务,并允许它在启动时启动:

1sudo systemctl start firewalld
2sudo systemctl enable firewalld

现在我们将允许在端口22上的ssh,在端口80上的http,在端口443上的https和在端口25上的smtp

1sudo firewall-cmd --permanent --add-service=ssh
2sudo firewall-cmd --permanent --add-service=http
3sudo firewall-cmd --permanent --add-service=https
4sudo firewall-cmd --permanent --add-service=smtp

重新加载防火墙规则:

1sudo firewall-cmd --reload

有关使用防火墙的更多信息,请参阅 新 CentOS 7 服务器的附加推荐步骤教程。

步骤 6 – 安装和保护 MariaDB

在本教程中,我们将使用MariaDB,尽管我们将在整个教程中包含几个Tidbits for PostgreSQL。

安装所需的包裹:

1sudo yum install mariadb-server mariadb-devel

确保 MariaDB 启动并在启动时启动:

1sudo systemctl start mariadb
2sudo systemctl enable mariadb

通过运行以下命令来保护 MariaDB 安装:

1sudo mysql_secure_installation

如下所示,在红色文本中回答问题,并在提示时添加强大的根密码:

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

步骤 7 – 创建 Diaspora 用户和数据库

接下来,我们将登录 MariaDB 以创建 diaspora 用户. 当被提示时,请输入您上面创建的 root 密码:

1mysql -u root -p

创建一个用于 Diaspora 的用户。在下面的命令中,将密码更改为真实密码. 这不应该与您在mysql_secure_installation期间提供的root**密码相同。

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

创建 Diaspora 生产数据库:

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

授予 MariaDB ** diaspora ** 用户在数据库中所需的权限:

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

关闭数据库会话。

1\q

尝试使用用户 diaspora连接到新数据库(使用您上面输入的IDENTIFIED BY密码密码密码)。

1mysql -u diaspora -p -D diaspora_production

您现在应该看到提示: MariaDB [diaspora_production]>. 通过输入结束 数据库会话:

1\q

现在我们已经完成了 MariaDB 数据库的安装。

有关额外的安全性,请参阅有关如何保护MySQL和MariaDB数据库的详细文章(https://andsky.com/tech/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps)。

接下来,我们将抓住Diaspora的源代码,并将其配置为在您的VPS上运行。

步骤 8 - 安装 Bundler

Bundler 是 Ruby 珠宝的包管理器,我们将安装它以便在全球范围内提供。

1sudo gem install bundler

由于 bundle可执行在/usr/local/bin/bundle中安装,请创建一个符号链接,以便将其纳入用户PATH

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

步骤 9 – 获取传达源代码

稳定包含被认为是稳定的代码,即将发布,具有我们将使用的稳定标记版本,而开发具有最新的代码,可能有错误。

更改到 diaspora用户帐户。

1sudo su - diaspora

查看主分支. 在这篇文章写作时,它包含Diaspora版本 0.5.1.1

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

步骤 10 – 配置 Diaspora 数据库

现在转到工作目录。

1cd ~/diaspora/

复制示例数据库配置文件,并使用您喜爱的编辑器打开 `database.yml。

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

现在我们将编辑配置文件以匹配以前创建的数据库设置。

<$>[注] **注:**在编辑 yaml (.yml) 文件时要非常小心,不要打破入口。

编辑定义了mysql2适配器的第一行(MariaDB是MySQL的插入替代品)以diaspora代替root并将密码更改为您之前创建的数据库用户diaspora的密码。

1mysql: &mysql
2  adapter: mysql2
3  host: "localhost"
4  port: 3306
5  username: "diaspora"
6  password: "password"
7  encoding: utf8mb4
8  collation: utf8mb4_bin

<$>[注] 注: 如果您正在使用该数据库,则需要填写PostgreSQL部分,然后将数据库更改为PostgreSQL。

步骤 11 — 配置 Diaspora 的基本设置

让我们先复制示例配置文件。

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

您需要编辑此文件中的几个设置,以便 Diaspora 正常工作. 仔细阅读整个文件,以了解它是如何工作的想法. 这是相当自我解释的,但让我们看看一些最关键的设置。

在文本编辑器中打开文件。

1vim config/diaspora.yml

行39 - 解除url行,以便它看起来如下:

1url: "https://example.org/"

取代 https://example.org/ 用自己的域名. 您在这里使用的 URL 将被硬编码到数据库中,所以请确保它是准确的。

行47 - 解除certificate_authorities行,以便它看起来如下:

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

<$>[注] **注:**有两条‘certificate_authorities’行;请确保您对 CentOS 没有评论。

第166条 删除rails_environment线,并将开发替换为生产,以便它看起来如下:

1rails_environment: 'production'

保存并关闭文件。

这些是需要的最小更改,以便有一个工作Diaspora pod. 有许多更多的选项来探索和配置,以您的喜好,如连接到其他社交网络(Twitter,WordPress,Tumblr,Facebook)。

步骤 12 – 安装宝石并设置数据库

安装所需的宝石,设置数据库,并预编译资产。

确保你在正确的目录:

1cd /home/diaspora/diaspora/

首先,我们告诉 nokogiri 宝石使用我们之前安装的系统 libxm2 库:

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

接下来,使用包装器来安装所需的宝石:

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

创建数据库:

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

预装资产:

1RAILS_ENV=production bin/rake assets:precompile

在此时,您可以离开 diaspora用户帐户,然后返回您在遵循本教程的前提条件时创建的 sudo 用户。

1exit

步骤 13 — 配置 Diaspora systemd 服务

Diaspora由两个主要服务组成,需要运行:

  • unicorn,应用程序服务器
  • sidekiq,用于背景工作处理

对于这种情况,提供了一个脚本,该脚本位于script/server,但我们会使用 _systemd。

要更好地了解 systemd 是如何工作的,请阅读以下文章:

创建 tmpfiles 目录

创建将持有独角兽Unix插槽的目录。

1sudo mkdir /run/diaspora

更改对 diaspora用户的所有权,并设置权限。

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

由于/run/var/run目录是波动的,我们刚刚创建的/run/diaspora目录不会生存于系统重新启动中。

打开 /etc/tmpfiles.d/diaspora.conf 进行编辑。

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

点击下列行:

1[label /etc/tmpfiles.d/diaspora.conf]
2d /run/diaspora 0750 diaspora diaspora - -

配置格式为每条路径一行,分别包含类型、路径、模式、所有权、年龄和参数字段。您可以在其 官方网页或其用户页面上了解更多关于 `tmpfiles.d 的信息。

独角兽

首先,我们将编辑 diaspora.yml,以便服务倾听到 Unix 插件. 我们将返回 diaspora 用户。

1sudo su - diaspora

打开 config 文件来编辑:

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

第157章 她说:

1[label /home/diaspora/diaspora/config/diaspora.yml]
2listen: 'unix:/run/diaspora/diaspora.sock'

保存和退出文件。

现在回到你的 sudo 用户。

1su - username

创建unicorn.service文件。

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

粘贴下面的内容来确切地创建脚本. 请记住,如果您需要帮助了解这个文件中的内容,请检查有关 systemd 的早期链接:

 1[label /etc/systemd/system/diaspora-unicorn.service]
 2[Unit]
 3Description=Diaspora Unicorn Server
 4Requires=redis.service
 5After=redis.service network.target
 6
 7[Service]
 8User=diaspora
 9Group=diaspora
10SyslogIdentifier=diaspora-unicorn
11WorkingDirectory=/home/diaspora/diaspora
12Environment=RAILS_ENV=production
13## Uncomment if postgres is installed
14#Environment=DB=postgres
15
16PIDFile=/run/diaspora/unicorn.pid
17Restart=always
18
19CPUAccounting=true
20emoryAccounting=true
21BlockIOAccounting=true
22CapabilityBoundingSet=
23PrivateTmp=true
24NoNewPrivileges=true
25
26ExecStart=/usr/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"
27
28[Install]
29WantedBy=multi-user.target

<$>[注] 注: 如果您使用 PostgreSQL,请删除环境=DB=postgres行。

启动独角兽服务,并在启动中启用它。

1sudo systemctl start diaspora-unicorn
2sudo systemctl enable diaspora-unicorn

现在检查服务状态:

1systemctl status diaspora-unicorn

如果一切顺利,该命令应该返回类似于此的输出:

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

西藏

同样,在sidekiq中,让我们创建sidekiq.service文件。

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

面包如下:

 1[label /etc/systemd/system/diaspora-sidekiq.service]
 2[Unit]
 3Description=Diaspora Sidekiq Worker
 4Requires=redis.service
 5After=redis.service network.target
 6
 7[Service]
 8User=diaspora
 9Group=diaspora
10SyslogIdentifier=diaspora-sidekiq
11WorkingDirectory=/home/diaspora/diaspora
12Environment=RAILS_ENV=production
13## Uncomment if postgres is installed
14#Environment=DB=postgres
15
16Restart=always
17
18CPUAccounting=true
19emoryAccounting=true
20BlockIOAccounting=true
21CapabilityBoundingSet=
22PrivateTmp=true
23
24ExecStart=/usr/bin/bundle exec "sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1"
25
26[Install]
27WantedBy=multi-user.target

<$>[注] 注: 如果您使用 PostgreSQL,请删除环境=DB=postgres行。

启动 sidekiq 服务并在启动时启用它:

1sudo systemctl start diaspora-sidekiq
2sudo systemctl enable diaspora-sidekiq

现在跑:

1systemctl status diaspora-sidekiq

结果应该是这样的:

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

第14步:安装 Nginx

Nginx 将作为我们的反向代理,所以几乎所有请求都将发送到 Unicorn。

首先,我们来安装 Web 服务器。

1sudo yum install nginx

启动服务并在 boot 上启用它:

1sudo systemctl start nginx
2sudo systemctl enable nginx

步骤 15 – 授予 Nginx 权限

为了让 Nginx 能够访问 diaspora用户的主文件夹,我们需要将 nginx用户添加到 diaspora组中:

1sudo usermod -a -G diaspora nginx

最后,我们将放松 diaspora用户的家庭目录权限,以允许读取和执行对 diaspora 组的访问:

1sudo chmod 750 /home/diaspora/

第16步:上传SSL证书并启用向前保密

在下面的配置示例中,我们使用/etc/ssl/diaspora/ssl.crt为公共证书和/etc/ssl/diaspora/ssl.key为私钥。

创建一个目录来存储证书文件。

1sudo mkdir /etc/ssl/diaspora

将证书和密钥文件上传或移动到服务器,并将其放置在我们刚刚创建的 目录下。

<$>[注] 注: 如果您创建了自签证书,请移动到该目录,并使用sudo cp ssl.crt ssl.key /etc/ssl/diaspora命令将文件复制到 /etc/ssl/diaspora

向前保密已成为SSL/TLS加密通信不可或缺的一部分. 对于向前保密的更详细的解释,请参阅此 Mozilla服务器安全维基条目

再次更改系统的 root用户。

1sudo su -

创建dhparam.pem文件。

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

dhparam 文件可能需要几分钟才能完成,完成后,请重新登录您的 sudo 用户帐户。

1su - username

步骤 17 — 在 nginx.conf 中禁用默认网站

我们现在将修改 /etc/nginx/nginx.conf,以便默认的 Welcome to Nginx 消息不会干扰我们将创建的 Diaspora 配置文件。

1sudo vim /etc/nginx/nginx.conf

服务器块中搜索包含default_server;的行,从这些条目中删除default_server,使服务器块的区域看起来像这样:

1[label /etc/nginx/nginx.conf]
2server {
3listen 80;
4listen [::]:80;
5server_name localhost;
6root /usr/share/nginx/html;

<$>[注] **注:**如果你愿意,你甚至可以评论整个服务器块;这也会起作用。

步骤 18 — 创建 Diaspora 自己的 Nginx 配置文件

为我们的 Diaspora pod 创建一个新的 nginx 配置文件:

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

贴在以下内容;解释是在代码下面提供的:

 1[label /etc/nginx/conf.d/diaspora.conf]
 2upstream diaspora {
 3  server unix:/run/diaspora/diaspora.sock fail_timeout=0;
 4}
 5server {
 6  listen [::]:80;
 7  listen 80;
 8  server_name _;
 9  return 301 https://example.com$request_uri;
10}
11server {
12  listen [::]:443 ssl spdy;
13  listen 443 ssl spdy;
14  server_name example.com;
15  root /home/diaspora/diaspora/public;
16  server_tokens off;
17  error_log /var/log/nginx/diaspora_error.log;
18
19  # Configure maximum picture size
20  # Note that Diaspora has a client side check set at 4M
21  client_max_body_size 4M;
22
23  ## SSL settings
24  ssl_certificate /etc/ssl/diaspora/ssl.crt;
25  ssl_certificate_key /etc/ssl/diaspora/ssl.key;
26
27  # https://wiki.mozilla.org/Security/Server_Side_TLS
28  ssl_dhparam /etc/ssl/dhparam.pem;
29  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
30  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';
31  ssl_session_timeout 5m;
32  ssl_prefer_server_ciphers on;
33  ssl_session_cache shared:SSL:50m;
34  add_header Strict-Transport-Security "max-age=31536000";
35
36  location / {
37    # Proxy if requested file not found
38    try_files $uri $uri/index.html $uri.html @diaspora;
39  }
40
41  location @diaspora {
42    gzip off;
43    proxy_set_header X-Forwarded-Ssl on;
44    proxy_set_header X-Real-IP         $remote_addr;
45    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
46    proxy_set_header X-Forwarded-Proto https;
47    proxy_set_header Host              $http_host;
48    proxy_set_header X-Frame-Options SAMEORIGIN;
49    proxy_redirect off;
50    proxy_pass http://diaspora;
51  }
52}

取代以下变量:

  • example.com 與您自己的註冊網域名稱;您需要在 兩個地點
  • /etc/ssl/diaspora/ssl.crt 與通往您自己的公開證書的路徑
  • /etc/ssl/diaspora/ssl.key 與通往您自己的私钥的路徑

解释:

*上游区块是我们设置的Unix接口Diaspora倾听到(我们也设置在Unicorn早些时候)。这后来被用作proxy_pass指令 *第一个服务器区块倾听到标准的HTTP端口 80并重定向任何请求到HTTPS *第二个服务器区块倾听到端口 443(SSL)并设置了一些强大的SSL参数,这些参数是从Mozillawiki 采集的。

有关 Nginx 服务器块的更多信息,请阅读 此教程

完成所有更改后,请检查配置文件,查找任何错误。

1sudo nginx -t

如果一切顺利,这应该回来:

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

重新启动 Nginx 以应用更改。

1sudo systemctl restart nginx

如果你现在在你的浏览器中访问了DiaPora pod的域名(https://example.com,例如),你应该到达DiaPora欢迎页面。

Diaspora welcome page

<$>[注] **注:**如果您使用自签证书,请单击浏览器警告。

步骤 19 - 创建 Diaspora 用户

让我们创建您的第一个 Diaspora 用户. 点击 ** 开始创建帐户的链接。

填写详细信息以创建新的 Diaspora 用户. 然后,您应该能够查看您的用户的首页并开始使用 Diaspora 社交网络。

步骤 20 — 配置 SELinux (可选)

警告:如果你不熟悉SELinux,请注意,这可能会破坏事情,你可以跳过这个部分,开始使用Diaspora。

CentOS 7 Droplets 默认情况下已禁用 SELinux. 为了最大程度的安全性,您可以启用 SELinux 并配置它以与您的 Diaspora pod 服务一起工作。

启用 SELinux

在文本编辑器中打开/etc/selinux/config

1sudo vim /etc/selinux/config

如下所示,将SELINUX设置从禁用更改为允许,首先需要设置允许状态,因为在执行 SELinux 之前,系统中的每个文件都需要标记其背景。

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

保存并关闭文件。

完成此更改后,重新启动 Droplet 以使设置生效. 简单地键入:

1sudo reboot

输入您的 sudo 用户密码来重新启动系统,然后 SSH 返回 Droplet 并更改您的 sudo 用户帐户:

1su - username

现在,再次编辑/etc/selinux/config,并将SELINUX设置设置为强制执行

1sudo vim /etc/selinux/config

完成后,线条应该这样说:

1SELINUX=enforcing

保存并关闭文件. ** 再次重新启动 Droplet。

1sudo reboot

然后 SSH 回到您的 Droplet 后,它回到了网上。

SELinux Nginx 政策

如果您现在访问您的域,您将收到一个 502 错误. 在我们的情况下,SELinux 正在阻止 Nginx 的接口和访问 diaspora 用户的家庭目录。

您可以检查审计日志:

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

你应该看到像下面那些这样的消息:

1type=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
2type=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

安装下面的工具来开始修复问题:

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

我们将抓住audit.log文件,并允许在我们的SELinx策略中输入拒绝条款。

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

生成的 SELinux 策略存储在根的 /home' 目录中的 nginx_diaspora.te' 文件中(尽管您可以在任何位置组织您的 SELinux 策略)。

1vim nginx_diaspora.te

它应该包含以下条目,否则,请用下面所示的内容替换「nginx_diaspora.te」的内容。

 1module nginx_diaspora 1.0;
 2
 3require {
 4        type var_run_t;
 5        type httpd_t;
 6        type user_home_t;
 7        type init_t;
 8        class sock_file write;
 9        class unix_stream_socket connectto;
10        class file { read open };
11}
12
13#============= httpd_t ==============
14allow httpd_t init_t:unix_stream_socket connectto;
15
16#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
17allow httpd_t user_home_t:file { read open };
18allow httpd_t var_run_t:sock_file write;

许多允许的背景可能会被缩小,但这是一个适当的起点,然后让我们导入策略模块。

1semodule -i nginx_diaspora.pp

如果您现在在浏览器中更新该页面,您应该再次看到 Diaspora 欢迎页面. 恭喜您在 CentOS 7 上配置了 SELinux 硬化的 Diaspora pod!

简要 SELinux 故障排除

如果欢迎页面加载,但显示破碎的图像位置,而不是实际的图像,请执行以下步骤:

  1. 运行下面的命令抓住通过audit.log,并将新的 Denied 条目添加到 Nginx 策略
1grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora

重新加载政策模块

1semodule -i nginx_diaspora.pp

您可以重复这些步骤几次。

<$>[注] 注: 您可以使用下面的命令打开来自 `/var/log/messages 的实时输出流。

1tail -f /var/log/messages

以下是一個例子閱讀:

 1. . .
 2
 3*****  Plugin catchall (100. confidence) suggests   **************************
 4
 5If you believe that nginx should be allowed write access on the sock_file by default.
 6Then you should report this as a bug.
 7You can generate a local policy module to allow this access.
 8Do
 9allow this access for now by executing:
10# grep nginx /var/log/audit/audit.log | audit2allow -M mypol
11# semodule -i mypol.pp
12
13. . .

结论

现在你已经设置了你的Diasporapod,你可以开始邀请你的朋友和家人连接到它,虽然它缺少一些在大型商业,封闭的社交网络中存在的功能,但Diaspora的优点之一是你可以拥有你的数据。

從這裡,您可以閱讀 [pod maintainers] 的 Diaspora wiki(https://wiki.diasporafoundation.org/FAQ_for_pod_maintainers),並將您的pod 註冊到全球的pod列表中,以便其他人可以從您的安裝中受益。

Published At
Categories with 技术
comments powered by Disqus