11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RedmineをCentOSにSELinux(Enforcing)で

Posted at

Redmine3をCentOS7にSELinux(Enforcing)でインストールしたときに非常にてこずったのでメモを残しておきます。ApacheとPassengerを使用しています。

基本

Redmine 3.0をCentOS 7.0にインストールする手順 | Redmine.JP Blog
http://blog.redmine.jp/articles/3_0/installation_centos/

などを参考にインストールします。でもこれはSELinuxをDisableにしたインストールです。私はどうしてもSELinuxが有効の状態でインストールしたいので、いろいろ検索しました。

私はCentOSにもSELinuxにも素人です。あまり理解していません。なので、既に常識だったり、間違ったりしているところがあるかもしれません。特にSELinuxについてはとりあえず動いたということで、正式なやり方でできていなかったりすると思います。とにかくご注意のほどよろしくお願いいたします。

先人の知恵

SELinuxが有効な状態でRedmineを動かす - 開発メモ
http://seeku.hateblo.jp/entry/2013/05/31/093124
SELinux 有効(enforcing)で VirtualHost を /var/www/html 配下以外でも動作させる 〜 CentOS6 | EasyRamble
http://easyramble.com/setup-virtualhost-with-selinux.html
SELinux 有効(enforcing)で Apache + Passenger のもと Rails で Redmine を動作させる 〜 CentOS6 | EasyRamble
http://easyramble.com/setup-redmine-with-selinux-on-apache-passenger.html
AmazonEC2 上に、Redmine 2.6.5 を構築したメモ(AMI有) - 謎言語使いの徒然
http://white-azalea.hatenablog.jp/entry/2015/07/04/161705

検索するとたとえば上記のようなサイトを見つけることができます。非常に参考になり、ありがたいことです。でもそれだけじゃ動かなかったんです。

setroubleshoot-serverの導入

いろいろ探したら「setroubleshoot-server」というものをインストールするとよさそうだということに気付きました。これはSELinux Enforcingの状態で動作しなかった場合、/var/log/messagesに「ここが引っかかっているよ」と教えてくれる便利ツールです。これをインストールすれば終わりといえば終わりなのですが、もうちょっと書いてみます。

# yum install setroubleshoot-server

そう言えばpassengerを5.0.13にしておきます

Passengerのログ出力エージェントがSELinux(Enforcing)下では起動に失敗するようなので、passengerを5.0.13にしておきます。

# gem install passenger --version 5.0.13
# passenger-install-apache2-module
# vi /etc/httpd/conf.d/redmine.conf
# chcon -R -h -t httpd_sys_content_t /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.13
# chcon -R -h -t httpd_sys_script_exec_t /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.13/buildout
# setenforce 1
# service httpd restart

私は上記の順番ではやっていません。でも上記のようなことをやらなければならないのだと思います。

理解していない手順として

# export ORIG_PATH="$PATH"
# sudo -s -E
# export PATH="$ORIG_PATH"
# /usr/local/bin/ruby /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.13/bin/passenger-config --detect-apache2

などということもやっています。sudo -s -E の-Eオプションがいまだに理解できていません。rootで作業しているのなら必要ないのかもしれません。

あとは簡単です

Redmineにアクセスして、動作しないのであれば/var/log/messagesを見て、その通りにSELinuxを設定するだけです。

たとえば

SELinux is preventing /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.13/buildout/support-binaries/PassengerAgent from block_suspend access on the capability2 Unknown.

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

If you believe that PassengerAgent should be allowed block_suspend access on the Unknown capability2 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 PassengerAgent /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

などという出力が出てきます。ここではPassengerAgentがSELinuxに引っかかっているようなので、新しくポリシーを作ってインストールしてあげればいいことになります。作業ディレクトリを作って、mypolは適宜passengeragentなどにしておくほうがいいと思います。

結局

# grep PassengerAgent /var/log/audit/audit.log | audit2allow -M passengeragent
# semodule -i passengeragent.pp
# grep ruby /var/log/audit/audit.log | audit2allow -M ruby
# semodule -i ruby.pp
# grep utils.rb:108 /var/log/audit/audit.log | audit2allow -M utils
# semodule -i utils.pp

で私の環境では動くようになりました。他の環境では違うかもしれないので、上記のコマンドをただ打つのではなく/var/log/messagesへの警告を参考にやってみて下さい。もちろん「先人の知恵」でのhttpd のポリシーのインストールはやった上での話です。

あとがき

後始末などもやっておけばいいかと思うのですが、特に何もしていません。 setroubleshoot-serverもそのまま残しています。

とにかくSELinuxはよくわかっていないままですので、このやり方でうまくいかなかったという方はコメントを下さると幸いです。間違いのご指摘も歓迎いたします。勉強させていただきたいと思います。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?