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

介绍

Diaspora是一个开源的分布式社交网络。 它与大多数其他社交网络不同,因为它是分散的 - 一个没有中心基地的真正网络。有服务器(称为 豆荚 )遍布世界各地,每个都包含谁选择在其上注册的用户数据。 这些pod彼此无缝通信,以便您可以注册任何pod,并与您的联系人,无论他们在网络上的任何地方进行自由通信。 你可以阅读更多关于散居的 有关页面 。 在本教程中,我们将设置和配置Diaspora pod。其他 东西,你会学到:
  • 如何设置Rails应用程序(Diaspora)进行生产
  • 如何配置MariaDB与Diaspora
  • 如何设置Nginx作为Diaspora的反向代理服务器
  • Nginx的SSL配置的最佳实践
  • 如何编写自定义systemd单元文件以在Rails应用程序中使用
  • 对于安全意识,有一个奖励部分关于如何配置SELinux与Diaspora打得很好
偏离官方Diaspora安装指南 散居 维基安装指南建议我们使用Ruby版本管理。虽然你可以这样做,我们将使用系统打包的Ruby代替。这样,我们避免从源代码安装Ruby,并使RVM等其他依赖关系担心。 官方指南还建议使用的 script/server ,启动脚本 unicornsidekiq ,两个应用程序,我们需要的侨民。由于CentOS 7使用systemd,我们将为这些服务编写自己的init文件。

先决条件

请在开始教程之前完成这些先决条件。
  • 带1 GB RAM的CentOS 7 需要一个小社区的最小RAM为1 GB,因此我们将使用1 GB / 1个CPUDroplet。
  • sudo用户 下面的大多数命令需要root权限。检查如何添加用户引导到添加用户,并给它sudo特权, 此用户帐户将是除了稍后我们将创建散居用户帐户,其中散居的服务都将受到比较有限的权限运行。
  • SSL证书 虽然Diaspora可以运行没有SSL证书,Diaspora的连接到其他pod的机制需要一个有效的SSL证书。对于生产,你应该有一个支付的SSL证书 。我们只需要在本文中创建的两个证书文件(public,private),因此您可以跳过该教程的Web服务器配置部分。我们会自己做。 或者,为了测试的目的,您可以生成自签名证书。请参见本教程的详细信息,或者只是从您的家目录中运行以下命令:
    openssl req \
       -newkey rsa:2048 -nodes -keyout ssl.key \
       -x509 -days 365 -out ssl.crt
    
  • 注册域名指向您的Droplet的IP
  • 交换文件 对于1 GB的服务器,需要至少1 GB的交换文件。按照在CentOS 7添加交换教程设置一个。
  • 按照与CentOS 7初始服务器安装指南
  • 按照新的CentOS 7服务器的其他建议步骤指南

第1步 - 安装实用程序

让我们为实用程序安装几个软件包,稍后将会派上用场:
sudo yum install deltarpm yum-cron vim
然后更新我们的系统:
sudo yum update

第2步 - 启用EPEL存储库

EPEL代表额外的企业版Linux软件包,它有一些我们需要安装不属于基地CentOS软件库的一部分包。 让我们通过安装启用 epel-release包,并检查任何 包更新:
sudo yum install epel-release
sudo yum update
如果要求您导入EPEL 7 gpg密钥,如下所示,回答yes:
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
  Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
  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]: y

第3步 - 安装Ruby和C的包

Diaspora及其具有本地C扩展的Gem需要以下包。 安装软件包:
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步 - 添加专用散居用户

创建用户帐户以运行Diaspora。您可以命名此帐户任何你喜欢的,但本教程将假设该用户被称为 侨民
sudo useradd diaspora

第5步 - 配置防火墙

在设置生产环境时,配置和收紧防火墙至关重要。我们将使用的工具是 firewalld ,简化的东西相比,纯 iptables命令。 首先,启动 firewalld服务,并使其在引导时启动:
sudo systemctl start firewalld
sudo systemctl enable firewalld
现在,我们将允许 ssh端口 22http端口 80https端口 443smtp端口 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 ,阅读 新的CentOS 7服务器的其他建议步骤教程。

第6步 - 安装和保护MariaDB

下一个大步是为Diaspora设置一个数据库。在本教程中,我们将使用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): ENTER
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

第7步 - 创建散居用户和数据库

接下来我们将登录到MariaDB的创建 散居用户。 出现提示时,输入您在上面创建的 root密码:
mysql -u root -p
为Diaspora创建用户。更改 password的命令下面一个真正的密码。 这不应该是一样的,你在提供 root密码 mysql_secure_installation
CREATE USER 'diaspora'@'localhost' IDENTIFIED BY 'password';
创建Diaspora生产数据库:
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 ' password '以上)。
mysql -u diaspora -p -D diaspora_production
您现在应该看到提示: MariaDB [diaspora_production]> 退出 数据库会话,方法是输入:
\q
我们现在完成安装MariaDB数据库。 为了增加安全性,请检查详细的文章 如何保护MySQL和MariaDB的数据库 。 接下来,我们将获取Diaspora源代码,并将其配置为在您的VPS上运行。

第8步 - 安装Bundler

Bundler是Ruby gem的包管理器。我们将安装它在全球可用。
sudo gem install bundler
由于 bundle的可执行文件安装在 /usr/local/bin/bundle ,让以包含在用户的符号链接 PATH
sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle

第9步 - 获取散列源代码

散居在三个主要分支开发。 stable包含被认为是稳定的,是要发布的代码, master具有稳定的标记我们将使用的版本,同时 develop具有可能的错误的最新代码。 更改为 散居用户帐户。
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
现在我们将编辑配置文件以匹配先前创建的数据库设置。 注意:要非常小心,不要编辑YAML(突破时的缺口.yml )文件。 始终使用空格而不是制表符。 编辑其中的第一线 mysql2适配器定义。 (MariaDB的是一个简易替换为MySQL)与 散居 替换和更改 password的密码为您之前创建的数据库用户 侨民 。不要删除引号。完成后,保存并关闭文件。
mysql: &mysql
  adapter: mysql2
  host: "localhost"
  port: 3306
  username: "diaspora"
  password: "password"
  encoding: utf8mb4
  collation: utf8mb4_bin
注意:您需要填写,而不是如果你正在使用的数据库PostgreSQL的部分,然后将数据库更改为PostgreSQL的。

第1步1 - 配置Diaspora的基本设置

让我们从复制示例配置文件开始。
cp config/diaspora.yml.example config/diaspora.yml
您需要在此文件中编辑一些设置,Diaspora才能正常工作。仔细阅读整个文件,以掌握它的作用和方法的想法。这是很自明的,但让我们看看一些最关键的设置。 在文本编辑器中打开文件。
vim config/diaspora.yml
39号线-取消对 url行,以便它看起来像下面这样:
url: "https://example.org/"
替换 https://example.org/用自己的域名。 此处使用的网址将获得硬编码到数据库中,所以一定要确保它是准确的。 详细内容请阅读此配置线以上的评论 。 47号线-取消对 certificate_authorities行,以便它看起来像下面这样:
certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'
注意:有两个certificate_authorities线; 确保您取消注释CentOS的一个。 166线-取消对 rails_environment线和替换 developmentproduction ,所以它看起来像下面这样:
rails_environment: 'production'
保存并关闭文件。 这些是需要有一个工作的散居地荚的最小变化。还有更多的选择,探索和配置到你的喜欢,如与其他社交网络(Twitter,WordPress,Tumblr,Facebook)连接。请阅读该文件,并进行所需的配置更改。

第1步2 - 安装Gems并设置数据库

安装所需的gem,设置数据库,并预编译资产。 确保您位于正确的目录:
cd /home/diaspora/diaspora/
首先,我们告诉nokogiri gem使用我们以前安装的系统libxm2库:
bundle config build.nokogiri --use-system-libraries
接下来,使用bundler安装所需的gem:
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
在这一点上,你可以离开 散居用户帐户,并切换回你下面这个教程的先决条件时创建的Sudo用户。
exit

第1步3 - 配置Diaspora systemd服务

Diaspora包含两个需要运行的主要服务:
  • Unicorn,应用服务器
  • sidekiq,为后台作业处理
脚本提供了这种情况下,它驻留在 script/server ,但我们将使用 systemd代替。 systemd是CentOS 7中使用的init系统。 为了更好地了解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在其 官方网页或它的手册页。

Unicorn

首先,我们将编辑 diaspora.yml使得服务侦听到Unix套接字。 我们将重新变回该 散居用户。
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 - username
创建 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
注:取消对Environment=DB=postgres行,如果你正在使用PostgreSQL。 对于MariaDB,不需要更改。 启动Unicorn服务并在启动时启用。
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
注:取消对Environment=DB=postgres行,如果你正在使用PostgreSQL。 对于MariaDB,不需要更改。 启动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]

第1步4 - 安装Nginx

Nginx将作为我们的反向代理,所以几乎所有的请求都将发送到Unicorn。只有在文件中 public/会被直接Nginx的服务。 让我们首先安装Web服务器。
sudo yum install nginx
启动服务并在启动时启用它:
sudo systemctl start nginx
sudo systemctl enable nginx

第1步5 - 给Nginx权限

对于Nginx的是能够访问 侨民用户的主文件夹,我们需要 Nginx的用户添加到 散居组
sudo usermod -a -G diaspora nginx
最后,我们会放松 散居用户的主目录权限,以允许读取和执行访问散居组:
sudo chmod 750 /home/diaspora/

第1步6 - 上传SSL证书并启用转发保密

您现在将需要来自您的证书颁发机构的SSL证书文件。在下面的配置示例中,我们使用 /etc/ssl/diaspora/ssl.crt为市民证书和 /etc/ssl/diaspora/ssl.key私钥。 创建存储证书文件的目录。
sudo mkdir /etc/ssl/diaspora
上传或将证书和密钥文件移动到服务器并将它们放在 目录我们刚刚创建。 SFTP或SCP可以用来做到这一点; 看到 这个教程注意:如果你创建了一个自签名的证书,移动到该目录中的文件复制到/etc/ssl/diasporasudo cp ssl.crt ssl.key /etc/ssl/diaspora命令。 前向保密已经成为SSL / TLS加密通信的重要部分。对于向前保密的更详细说明,请参阅该 Mozilla的服务器安全维基条目 。 再次更改为系统的 root用户。
sudo su -
创建 dhparam.pem文件。
openssl dhparam 2048 > /etc/ssl/dhparam.pem
dhparam文件可能需要几分钟才能完成。完成后,请重新登录到您的sudo用户帐户。
su - username

第1步7 - 禁用nginx.conf中的默认网站

现在,我们将修改 /etc/nginx/nginx.conf使默认 欢迎Nginx的消息不与散居配置文件,我们将创建干涉。
sudo vim /etc/nginx/nginx.conf
下搜索 server的线,包括块 default_server; 删除 default_server从这些条目,使服务器块的区域如下所示:
/etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html;
注意:您甚至可以注释掉整个server块,如果你喜欢; 这也将工作。

第1步8 - 创建Diaspora自己的Nginx配置文件

为我们的Diaspora pod创建一个新的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://example.com$request_uri;
}
server {
  listen [::]:443 ssl spdy;
  listen 443 ssl spdy;
  server_name example.com;
  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 /etc/ssl/diaspora/ssl.crt;
  ssl_certificate_key /etc/ssl/diaspora/ssl.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;
  }
}
替换以下变量:
  • example.com用自己注册的域名; 你需要做的这两个地方
  • /etc/ssl/diaspora/ssl.crt的路径到自己的公证书
  • /etc/ssl/diaspora/ssl.key的路径到自己的私钥
说明:
  • upstream块是我们成立了Unix套接字散居听(我们还Unicorn设置更早)。 这在以后的使用proxy_pass指令。
  • 第一个server块监听标准的HTTP端口80和重定向到HTTPS的任何请求。
  • 第二个server模块侦听的端口443 (SSL),并将这是从Mozilla的维基采取了一些强大的SSL参数。
欲了解更多有关的Nginx服务器块一般,请阅读 本教程 。 所有修改完成后,检查配置文件是否有任何错误。
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 ,例如),您应达到侨民欢迎页面。恭喜! 散居的欢迎页面 注:如果您使用自签名证书通过点击浏览器的警告。

第1步9 - 创建散居用户

让我们创建你的第一个Diaspora用户。 通过创建一个帐户,单击 开始链接 填写详细信息以创建新的Diaspora用户。然后,您应该能够查看您的用户的主页,并开始使用Diaspora社交网络。

第2步0 - 配置SELinux(可选)

警告:如果你不熟悉的SELinux,请注意, 这可以打破的东西 。您可以跳过此部分并开始使用Diaspora。
默认情况下,CentOS 7 Droplets已禁用SELinux。为了最大的安全性,您可以启用SELinux并将其配置为使用您的Diaspora pod的服务。如果你是新来的SELinux,这里是一系列的教程,你可以参考更多的信息:

启用SELinux

开放 /etc/selinux/config在文本编辑器。
sudo vim /etc/selinux/config
更改 SELINUX设置从 disabledpermissive ,如下图所示。有必要首先设置一个允许状态,因为系统中的每个文件都需要在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=permissive
# 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回到Droplet并改回你的sudo用户的帐户:
su - username
现在,编辑 /etc/selinux/config再次和设置 SELINUX设置为 enforcing
sudo vim /etc/selinux/config
完成后,行应该说:
SELINUX=enforcing
保存并关闭文件 。重新启动Droplet一次。
sudo reboot
然后SSH返回到您的Droplet后,它恢复在线。

SELinux Nginx策略

从这里,你想保持作为 root用户。 如果你现在访问您的域名,您将看到一个 502错误呈现。 在我们的例子,SELinux禁止的Nginx的插座,并获得 散居用户的主目录。 您可以使用以下命令检查审计日志:
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
我们将通过用grep audit.log文件,并允许我们SELinx政策 被拒绝的条目。跑:
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
如果您现在在浏览器中刷新页面,您应该再次看到Diaspora欢迎页面。恭喜您配置在CentOS 7上运行的SELinux加固Diaspora pod!

简要SELinux故障排除

如果加载欢迎页面但显示损坏的图片占位符,而不是实际图片,请按照下列步骤操作:
  1. 运行下面命令grep通过audit.log ,并添加新条目拒绝对Nginx的政策。
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. 重新加载策略模块。
semodule -i nginx_diaspora.pp
您可以重复这些步骤几次。 注意:您可以使用下面的命令来打开实时输出流/var/log/messages 这将显示您可读的SELinux错误消息,并提供建议的修复程序。
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,你可以开始邀请你的朋友和家人连接到它。虽然它缺乏一些功能目前在大型商业,封闭源社交网络,Diaspora的优势之一是你拥有你的数据。 从这里,你可以阅读散居维基 荚维护者和注册荚一个全球性的吊舱列表,以便其他人可以从安装受益。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏