介绍
Diaspora是一个开源的分布式社交网络。 它与大多数其他社交网络不同,因为它是分散的 - 一个没有中心基地的真正网络。有服务器(称为 豆荚 )遍布世界各地,每个都包含谁选择在其上注册的用户数据。 这些pod彼此无缝通信,以便您可以注册任何pod,并与您的联系人,无论他们在网络上的任何地方进行自由通信。 你可以阅读更多关于散居的 有关页面 。 在本教程中,我们将设置和配置Diaspora pod。其他 东西,你会学到:- 如何设置Rails应用程序(Diaspora)进行生产
- 如何配置MariaDB与Diaspora
- 如何设置Nginx作为Diaspora的反向代理服务器
- Nginx的SSL配置的最佳实践
- 如何编写自定义systemd单元文件以在Rails应用程序中使用
- 对于安全意识,有一个奖励部分关于如何配置SELinux与Diaspora打得很好
script/server
,启动脚本
unicorn
和
sidekiq
,两个应用程序,我们需要的侨民。由于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
端口
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
,阅读
新的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
线和替换
development
与
production
,所以它看起来像下面这样:
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/diaspora
与sudo 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参数。
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
设置从
disabled
到
permissive
,如下图所示。有必要首先设置一个允许状态,因为系统中的每个文件都需要在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故障排除
如果加载欢迎页面但显示损坏的图片占位符,而不是实际图片,请按照下列步骤操作:- 运行下面命令
grep
通过audit.log
,并添加新条目拒绝对Nginx的政策。
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
- 重新加载策略模块。
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
. . .