介绍
Diaspora是一个开源的分布式社交网络。
它与大多数其他社交网络不同,因为它是分散的 - 一个真正的网络,没有中央基地. 在世界各地都有服务器(称为 pods),每个服务器都包含了选择注册的用户的数据。
在本教程中,我们将设置和配置一个Diaspora pod. 在其他 事物中,您将学习:
- 如何设置 Rails 应用程序(Diaspora)用于生产
- 如何配置 MariaDB 与 Diaspora
- 如何设置 Nginx 作为 Diaspora 的反向代理服务器
- 对 Nginx 的 SSL 配置的最佳做法
- 如何编写自定义系统d 单元文件用于 Rails 应用程序
- 对于安全意识的人来说,有关于如何配置 SELinux 以便与 Diaspora 发挥良好作用的奖励部分
** 从 Diaspora 官方安装指南的偏差**
Diaspora wiki的安装指南建议我们使用Ruby版本管理器. 虽然你可以这样做,但我们会使用系统包装Ruby。
官方指南还建议使用script/server
,一个开始于unicorn
和sidekiq
的脚本,这两个应用程序我们需要Diaspora。
前提条件
请在开始教程之前完成这些前提条件。
- CentOS 7 有 1 GB RAM 一个小群落所需的最小RAM是1 GB,所以我们将使用1 GB / 1 CPU Droplet.
- sudo user 下方的命令大多需要root权限. 检查 [如何添加用户] (https://andsky.com/tech/tutorials/how-to-add-and-delete-users-on-a-centos-7-server] 指南以添加您的用户并赋予其sudo权限. 这个用户账户将补充我们稍后将创建的diaspora用户账户,散居国外者的服务将在更有限的权限下运行. ( ) * SSL证书 虽然 Diaspora可以在没有SSL证书的情况下运行, Diaspora连接到其他吊舱的机制需要有效的SSL证书. 生产时,应当持有付费SSL证书. 我们只需要这篇文章中创建的两个 cert 文件( 公有, 私有), 这样您就可以跳过该教程的网页服务器配置部分 。 我们自己来 换句话说,为了测试目的,可以生成自签名的证书. 详情请参见[此教程] (https://andsky.com/tech/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs#generating-ssl-certificates), 或者只从您的家目录中运行此命令 :\ 打开sl req\
- newkey rsa: 2048 - 节点 - 键出 ssl. key\
- x509 - 天 - 365 - 出 sl.crt
* 注册的域名指向您 Droplet 的 IP
- 交换文件 对于一个 1 GB 服务器,需要交换至少 1 GB 文件 。 遵循 [在 CentOS 7 (https://andsky.com/tech/tutorials/how-to-add-swap-on-centos-7 上添加互换] 的教程设置 。
- 遵循 [初始服务器设置与 CentOS 7] (https://andsky.com/tech/tutorials/initial-server-setup-with-centos-7) 指南
- 遵循 [关于新 CentOS 7 服务器的补充建议步骤] (https://andsky.com/tech/tutorials/additional-recommended-steps-for-new-centos-7-servers) 指南
步骤 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欢迎页面。
<$>[注] **注:**如果您使用自签证书,请单击浏览器警告。
步骤 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 故障排除
如果欢迎页面加载,但显示破碎的图像位置,而不是实际的图像,请执行以下步骤:
- 运行下面的命令
抓住
通过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列表中,以便其他人可以從您的安裝中受益。