Apache、Tomcat、MySQLをインストールしたのですが、
いつも手順書通りに、
Apacheの実行権限・所有者はApacheユーザ
TomcatはTomcat
MySQLはMySQL
という風に設定していたのですが、これってどういう意味があるのでしょうか?
全部rootじゃ駄目なのでしょうか?
僕の予想としては、
例えばTomcatユーザが乗っ取られた場合に、他のアプリケーションに影響がないようにセキュリティ上の為。
としか思いつきません。
セキュリティの問題は当然あるけれど、別の大きな問題が存在する
(1)rootでの操作は極力行わないほうがいいという話
rootは全てのリソースに対して何でもありのとんでもない権限を持っている
そのため、root上で行った操作はすべてのユーザー、すべてのアプリケーションに影響を与えてしまう可能性がある
必要なときに必要最低限の権限の元で作業を行えば、そのような危険は回避できる
通常はユーザーレベルで操作し、どうしてもroot並みの権限が必要な場合のみsudoコマンドの利用を許可するという手法なども、そのために存在する
(2)デーモン毎にユーザーを分けたほうがいいという話
rootほどではないけどapache/Tomcat/MySQLという具合にそれぞれ権限を分けておけば、トラブル対応などで操作する場合に誤って他のデーモンに大きな影響を与える心配が無くなる
デーモン専用のユーザーを1つ用意して3つまとめて管理しても、それは個人の勝手だから止めないけどね。仕事で使うなら分けておいたほうが無難だとは言っておく
rootでダメなわけではありません。
が、しかし、1の方の仰る通りでapache,mysql,tomcatにセキュリティ上の問題がでたとき、root権限を攻撃するものに持っていかれると、
そのサーバに関わるものすべてを奪われてしまうので、rootじゃなくて動かせるものはそうすべき。
daemon毎もそれと同じですべてがapacheというユーザだったとする場合、
どれかがやられるとapacheユーザで動いているアプリケーションが悪用される可能性が大いにあります。
なので管理が面倒という理由はさておいて、バラバラがいいと思いますよ。
その上でbindってのがDNSサーバの実装で多くつかわれていますが、
このアプリケーションの場合は起動するユーザはbindなどと指定でき、
その上でchroot環境で動かすことができるので、セキュリティとしては一段階レベルアップしたものになります。
chrootは特定のディレクトリの配下に抑え込むものと考えていただいていいかと。
これだと、bindが乗っ取られても/etc以下などのファイルの保護がある程度確保されます。
セキュリティに関わるものはちょっと面倒なところもありますが、
常に気をつけておきたいことです。
仕事などで、自身のところで満足に行えない場合は外部に協力してもらうなどが必要と考えています。
私もそういうことを仕事にしていますし、世の中もっと積極的にセキュリティを高めるべきと考えます。
selinuxはちょっとやりすぎな感もありますが、使いこなせている方はよいと思います。
心配をお金払って安心にするのがビジネスでのセキュリティかなと。
なにごとも完ぺきは難しいので外注してもそれだけで守りが100%にはならないですが。
一番のセキュリティで外部ではどうにもならないこととして、
コンプライアンス、モラルといった人間的要素が大きいですね。
なるほど、切り分けは重要ですね。
Linuxは複数のユーザーが同時に利用できる,マルチユーザー対応OSです。このようなOSは,ユーザーごとにファイルのアクセス権を管理することが不可欠です。Linuxでも当然,アクセス権を利用できます。
答えとしてはちょっとずれてるかと。
なるほど、作業の時の思わぬミスを防ぐ事にもなるんですね。