CentOS7 SELinux超入門 超初心者向け apacheでwordpress・owncloudやろうとして死んでるあなたへ

みなさん こんにちは

SELinuxは好きですか?私は嫌いです

今回はそんなCentOSのやっかいものの一人であるSELinuxの解説です

とりあえずwordpress・owncloudをSELinux=disabledやsetenforce 0などしなくても使えるレベルまで引き上げるのがここでございます

OSとか作りたい人はここはお門違いです

 

・まずSELinuxの仕組み

プロセスとファイルそれぞれにタグがついてて

プロセスについてるタグとファイルについてるタグについて

設定ファイルを参照しプロセスのタグ→ファイルのタグ

について書き込み・読み取りなどが許可されているという記述が設定ファイルにあれば書き込み・読み取りできるし許可されていなければ弾かれるというもの。

 

イクラで例えるならマイクラのプロセスにmc、マイクラの格納フォルダにmcdirというタグを付けてあげないとセーブデータの保存ができない。という感じ。マイクラサーバーにそんなのついてないけどね。

 

大体OK?ようはソフトのタグとフォルダのタグの相性がよくないとだめ!ということ

 

ちなみにそのタグのことはコンテキストって言います。

タグは原則1プロセス・1ファイル・1ディレクトリにつき1つまでです。

 

wordpressとかで躓く理由

まずapacheで読み取るにはhttpd_sys_content_tというタグがついてないといけませんがwgetしたファイルとかにはhttpd_sys_content_tというタグはついてません。これがエラーの要因。また、apacheで書き込むにはhttpd_sys_rw_content_tというタグがついてなければなりません(もちろんhttpd_sys_rw_content_tは書き込みだけでなく読み取りもできます)

 

・具体的な方法

restorecon -RF /var/www/html/

wgetしてhtml辺りに移したらこのコマンドを実行してやればapache用のタグがつきます

なぜならhtmlというディレクトリは初期でこのタグ!ってのがまた別の設定で決まってるからです。

 

・書き込み可能にするには

まずsemanageコマンドを使えるようにします。ggってインストールしてください。

その後書き込みを可能としたいディレクトリに対して

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/config(/.*)?"

みたいな感じでコマンドを実行

そうすると上記の初期設定が書き換わってここのディレクトリのタグはこう!みたいに設定ファイルが変わるのです

その後

restorecon -RF /var/www/html/config

としてあげます

これでOK

初期設定が書き換わってるのでその初期設定の通りにタグを変えてくれます。

ちなみにタグを確認するコマンドはls -Zなどを使用すれば全部見れます

 

★コラム

"/var/www/html/config(/.*)?"のconfig(/.*)の意味

これはconfig以下ディレクトリ全てのタグを書き換えるという意味

これがないとディレクトリだけ読み書き可能になってあとのファイルたちは読み書きできない設定になります

ディレクトリ内のファイル全部読み書き可能にしたいならconfig(/.*)という風に(/.*)を忘れないでください

ちなみにですがconfig/(/.*)とするとうまくいきませんのでご注意

 

○このSELinuxをすると何が嬉しいのか

※chown apache:apacheの意味が分かる人は下の3行くらいは読み飛ばしてください

まずyum install httpdするとapacheのユーザーが作られます。ただsu - apacheしてもapacheに変えれるわけではないです。知識がない人はまずそこ前提に考えてくださいね。そのapacheのユーザーで我々はウェブサイトを見れているわけです。

 

例えばapache脆弱性がありapacheのユーザーを乗っ取られたとしましょう。その後wgetするなりして改変したウェブサイトを突っ込みウェブサイトにクレジットカード情報を盗むようなクソサイトに大変身させようとしたとします。

しかしエラーです。なぜならwgetからのファイルはタグがついてないから。SELinuxのタグを変えれば動くかもしれないと思うかもしれませんがsemanageやrestoreconができるのはrootだけです。だからapache脆弱性があってもせいぜいファイル全削除されるくらいで改変サイトに大変身されないなどのメリットがあります。

SELinuxはあくまで突破された時の防衛策の一つです。そもそもとして突破されなければいいのでapache脆弱性がなければ意味のないものとなります。

ただもし脆弱性があったら...そういうときにSELinuxが活用して被害を食い止める これがSELinuxを使うと嬉しいことです

もちろん!rootを奪われたら全てが終わります。SELinuxの設定を大改編されたりrm -rf /*とかされて見事に破壊されること間違いないでしょう。だからrootはちゃんとしましょう。rootが取られなくてapacheだけ取られた時とかそういうときにSELinuxたんはちゃんと活躍してくれると思います。

 

死ぬほど適当解説 しかしある程度わかってくれればいいのです

これを足がかりにして他のサイトを漁り理解していってください応援しています