2008-01-03 [長年日記]
■ [Linux]Apache で Forbidden, SELinuxって何だ?
というわけで、apacheをソースから入れなおす以前における動作確認時にはまったSELinuxの設定に関して。CentOSはデフォルトでSELinuxが有効になっている。そもそも、今回検証用に用意したコンテンツは、/home 配下だが、CentOSのデフォルトは /var/www。ここで、suEXEC云々以前に、動作確認をしようとした際に、SELinuxの設定が必要となった。
折角なので、SELinuxを無効にしてしまうのは簡単だが、しゃくにさわるので、うまく動くように設定を試みる。
- まず、最初の現象。普通のHTMLファイルをブラウザから突っつくと、403 forbidden となる。通常のパーミッションは o+r な状態にも関わらず。
- 原因、SELinux のタイプラベルによるセキュリティーポリシーの制限を受けるから。新しくディレクトリを作成すると、その親ディレクトリからポリシーを継承する。確認は、lsコマンドのオプションに"Z"をつける。
$ ls -aLZ drwxr-xr-x foo users root:object_r:user_home_dir_t . drwxr-xr-x root root system_u:object_r:home_root_t .. -rw-r--r-- foo users user_u:object_r:user_home_t index.html
- 上記ポリシーでは、httpdの実行アカウント、CentOS5のデフォルト(?)ではapacheユーザであり、ポリシーに違反するためreadすることが出来ない。
- SELinuxのログを見てみる。以下のコマンド。これで、見ると制限を受けているのが確認できるはず。
# /sbin/ausearch -m AVC
- タイプの変更をする。-R はrecursiveだ。下記コマンドを実行し、lsコマンドでタイプラベルを確認すると、変更されているのが分かる
$ chcon system_u:object_r:httpd_sys_content_t <所定のディレクトリ> -R
- なお、mvなどでファイルを移動してきた場合、タイプラベルの付与がうまくいかない。というか、mv元のラベルのままだ。これを他のファイル(というか、親ディレクトリ)と同じタイプラベルに振りなおすために、以下のコマンドを。。。実際に行うのは、親ディレクトリから再帰的にタイプラベルを初期化する作業である。
# /sbin/restorecon -R <所定のディレクトリ>
■ [Linux]FTPでログイン出来ない。vsftpd?またSELinuxか、、、
さらに、FTPも必要だと言うことで、vsftpdも動かしていたのだが、どうもログイン出来ない。パスワードを再度聞かれた挙句に、OOPS!とか言われちゃう。こっちがOOPS!と言いたい。
これも、SELinuxが絡んでいて、デフォルトではFTPによるホームディレクトリへの接続は許可されていない設定となっているらしい。よって、SELinuxの設定上、FTPからの接続は、SELinuxで感知しないようにしないといけない。参考とさせてもらったのはFedoraの掲示板だったが、系統が同じなので同じ原因なのだろうと。
# setsebool -P ftp_home_dir 1
上記のコマンドを実行後、vsftpdを再起動してみると、難なくFTPでログインすることが出来るようになった。
ここまでで、ようやく環境の設定が完了。rubyはCentOS5の標準では1.8.5なので、1.8.6のpatchlevel-111をダウンロードし、build。ここもレンタル鯖と同じ構成にするため、1.8.5を残したまま、まったく別の場所に1.8.6を導入。あとは1.9も入れればようやく準備が整ったことになる。短いようで長かった、、、もう私の知識はまるで役に立たず。暫くずっと、商用UNIXな環境だったし(いいわけ)、、、SELinuxめ。。。
■ [Microsoft][C#]Visual Studio 2008 professional を使ってみよう
いきなり話が飛んで、MSネタ。とりあえずMSDNサブスクリプションでダウンロード可能な状態になったので、(多分将来的には仕事で使うことになるので)早速ダウンロードして見た。まずはDVDに焼くところからだw
と言っても、RC版をちょびちょび使っていたので、大きく変更は無いはずだが、折角なのでちょっとした軽いアプリなんぞ作ってみようか。
あまり、ASP.NET AJAX1.0 には興味が無い。というか、TechEdで軽く触ってきたが、postback依存だしライブラリ単体で使うにしても、癖が強すぎる。私の作るASP.NETアプリは基本的にはgetメソッドでパラメータの受け渡しが出来る作りにする必要性があるものが多いので、VIEWSTATEがぶわーーーーっとhiddenに書かれる様なアプリを作らないため、あまり恩恵に与れない。