G-chan Square

じーちゃん/へたっぴの綴る、日々のつれづれとか。
twitterのまとめとゲームネタが中心。2015年からロードバイク/ミニベロ始めました。

useraddの罠

さて、またしても設定で罠にハマったんで、未来の自分のため、ググるさんでやってくる人のために、罠を回避する方法を書き残しておきたいと思いまする。

 

さて、今回ハマったのは、apacheの設定。
FedoraでもCentOSでも、デフォルトのDocumentRootは "/var/www/html" となっております。
でも、こんなディレクトリがDocumentRootだと作業しづらい……(--

基本、じーちゃんは、rootアカウントでは作業せず、作業用に別アカウントを作ってそれで作業しているのです。
なので、WEBソースは /home/work_account/public_html/ 以下にコンテンツごとにディレクトリ掘って置いてあります。

で、"sudo ln -s /home/work_account/public_html/square /var/www/html/" とかして、シンボリックリンクを貼って、DocumentRootからアクセスできるようにしているのです。

……なんだけど、CentOS入れたらそれが動かない……

"403 Forbidden"が返ってきている。
何も知らないシロートさんだと、こういうときにチェックするポイントは2点。

・/etc/httpd/conf/httpd.conf を再確認
<Directory "/var/www/html">
 Options FollowSymLinks
</Directory>
という感じに、DocumentRoot以下からシンボリックリンクを辿ることが許可されているかどうか確認。


・SElinux無効
/usr/sbin/getenforce を実行して "Disabled" が返ってくるかどうか確認。

 

だいたい、この2点をチェックするだけでちゃんと動作するようになるはずなんです。
……が、相変わらず "403" が返ってくる……orz

んで、WEBを徘徊して情報を集めていたら、ついに解答発見!

CentOSではユーザーディレクトリのパーミッションはデフォルト700なので、apacheが権限がなくてディレクトリを辿れません。


な、なんだってぇっ!! ガ━━(゚Д゚;)━━ン!!


調べてみたら、マジで700でした……orz
とりあえず、速攻で755に変更。あっさりと動くようになるw
普通、useraddしたら、できあがるホームディレクトリって 755 だよね?


じーちゃんの考えが普通じゃないのかなぅ……?

コメント(6)

inujini 返信

それSElinuxの仕様ですね(゚Д゚)SElinux無効にする前にユーザーディレクトリ作ったんじゃないかな。

じーちゃん 返信

>それSElinuxの仕様ですね
ほぉ、そうだったんかー。
てことは、無効にしたあとにuseraddすると、755でできるのかな?<あとで試してみよう

SELinuxが世の中に出る前からLinuxOS使っているから、ユーザーディレクトリは755でできるって思いこんでいたね。
んで、思いこみの怖いところは、自分ではさも当然という認識だから、そこが間違っているってことになかなか自力でたどり着けないんだよねw

apacheのDocumentRootもchconとかいうコマンドで任意のディレクトリに変更できるらしいけど……今のところやる気はないw
じーちゃん、オールドタイプだからどうもSELinuxなじめないんだよね……

inujini 返信

SELinuxは、ぶっちゃけマルチユーザーを前提としていない限り、殆ど不要ですね。もし困るとすれば、例えばWWWとかPOPみたいな開放しているポートでanonymous userでも可能なバッファオーバーフローが発見されたりした時くらいだと思う。
逆に、シェルとかFTPを複数のユーザーに開放していると、結構便利ですね。基本的に「明示的に許可したアクセス以外できない」という前提で出来ているので、ユーザー管理は非常に楽です。セキュアlinux自体の本来の目的は「侵入された経路を限定しやすく被害を最小限に食い止める」というコンセプトなんで、まあ、微妙にアレなんですが。

まあでも、めんどくさいよね(;´Д`)ウチの社内サーバは素Linuxですね。
今度CentOS SELinuxにインストールしなおすけど。今入っているのがFedoraCore2で、既にyumすら使えなくなってるから(笑

じーちゃん 返信

>SELinuxは、マルチユーザーを前提としていない限り殆ど不要
まぁ、そうだよねぇ。
たぶん、主にレンタルサーバー屋さんのためのテクノロジーなのかな?
もちろん指摘の通り、外に解放してるポートでlistenしてるプロセス……apacheとかpostfixとかにセキュリティホールが見つかったときに被害を最小限に食い止めてくれたりするんだろうけど、それでも最近はrootを必要とするプロセスとかほとんどないしね。(sshdくらいか?)
なんかあってもrootでなければ、とりあえず重要なところに書き換えは及ばない……と信じたいw
ま、でもえてしてクラックってのはそういう一般の常識を超越したことをしてくるだろうから、油断は禁物なんだろうけどね。

あとは、どの程度「守らないとならないか」ってところが「しっかりやらないといけないか」「面倒くさいから手を抜いてもいいか」の見極めかな。
じーちゃんのこの鯖の場合は、個人情報とか入ってないし、入られても持ってかれるデータなんてWEB上に公開されてるデータだけだから別に困らないけど、企業のサーバとかだと個人情報とかあったりでかなり困る。
だから少しでも安全になる策を講じたい……って場合にはSELinuxとか有用なんかな。
とりあえず、これは道楽のご家庭サーバなんで「第三者の踏み台にはされない」「SPAMの中継基地にはならない」とか最低限のことだけ確保して、あとは便利なように使えればいいかな、と思っておりまする。

ただ、今後の勉強のため、自信のスキルアップのため、ちゃんとSELinuxを適用した状態でやりたいことをできるようにしておかないとならないなぁ、とも思うw

しかし、FC2とは懐かしいねw Fedoraは確か2バージョン前くらいまでしかパッケージ用意しないから、もうyum使えないはずだね。

弱小企業のサーバ管理者 返信

>SELinuxは、マルチユーザーを前提としていない限り殆ど不要

通りすがりですが・・・これは大きな誤解ですよ。

方法は様々ですが、例えばユーザ権限のアカウントでも、ひとたびクラックされるとそこからsuidビットの立ったプログラムのセキュリティホールを突かれ、一発でroot権限を奪取されますよ。
デーモンがroot権限で動作しているかどうかは、手だれのクラッカーにはさほど問題となりません。

SELinuxは使い方も簡単で強力です。このような誤解はとてももったいないと思いますので機会があれば触れていただきたいですね(^^

#ところでuseraddしたときのディレクトリの権限は別に歴史的に755と決まっているわけではありません。ディストリビューション次第です。
CentOSなら /etc/login.defs を見たら幸せになれるかも。

じーちゃん 返信

>弱小企業のサーバ管理者さん
どうもいろいろご指摘ありがとうございます。勉強になります。
suidが立ったプログラムの穴を突かれるとか思いつきませんでした。
言われてみれば確かにその通り。
これ機に少しずつSELinuxも勉強していきたいと思います。
ありがとうございました。

#/etc/login.defs見ました。
#UMASK 077
#と、しっかり書かれていますね。
#おかげで幸せになれました♪

コメントする