CentOS6のApacheでRailsとPassengerをSELinux Enforcingで動かす

Redmineの設定だが
http://www.redmine.org/projects/redmine/wiki/RedmineAndSELinuxOnCentOS
が参考になった

調べてみると
Permissiveにしてaudit.logの拒否出力を
許可するモジュールを作れという大雑把なものが多く
それはあんまりかなと思い
ひとつひとつディレクトリやファイルの権限を変えてみた

インストールは下記

% ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
% sudo gem update --system 1.6.2
% sudo gem install rails -v 2.3.14
% sudo gem install passenger -v 2.2.15
% sudo passenger-install-apache2-module

最後のコマンドではApacheモジュールをコンパイルするので
事前にいろいろなdevelやaprなど入れておく必要あり

1.passengerの権限変更

% cd /usr/lib64/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2
% sudo chcon -t bin_t ApplicationPoolServerExecutable
% sudo chcon -t httpd_modules_t mod_passenger.so

前者は実行するのでbin_tに
後者はApacheモジュールなのでhttpd_modules_tに変更

2.Apacheの設定変更

PassengerTempDir /var/tmp/passenger

としてソケットを出すディレクトリを変更後

% sudo mkdir /var/tmp/passenger
% sudo chcon -t httpd_tmpfs_t /var/tmp/passenger

3.railsコンテンツの権限変更

% sudo chcon -R -t httpd_sys_content_t ${RAILS_ROOT}
% cd ${RAILS_ROOT}
% sudo chcon -R -t httpd_log_t log
% sudo chcon -R -t httpd_tmpfs_t tmp

最後のコンテンツ権限変更は不要かもしれない

Perlでシンプルなパスワード生成

調べてみると
CPANにもたくさんあったし
独自実装してるサイトもたくさんあった
# CPANにありすぎると選びにくい
そのなかで
Perlでパスワード生成 - Noteless Notes
が非常に参考になった
こちらは文字数も文字種も決まっているので
もうちょっとシンプルに書いてみた

sub _gen_rand {
    my $length = 8;
    my $chars = [ 0..9, 'a'..'z', 'A'..'Z' ];
    my $rand = '';
    $rand .= $chars->[rand(scalar(@$chars))] for (1..$length);
    return $rand;
}

OpenLDAPでnsAccountLock

OpenLDAP(試したのはCentOS5の2.3.43)にはnsAccountLockのスキーマがない
手動で追加すると
slaptestでoperational attributeはダメだよって言われて起動もできない

代用として
ppolicyオーバレイのなかに
pwdAccountLockedTimeというattributeがあり
これを000001010000Zにすると
ロックできる
詳しくは man slapo-ppolicyで

具体的にどうするかというと
デフォルトのslapd.confに

include /etc/openldap/schema/ppolicy.schema
:
modulepath /usr/lib64/openldap
moduleload ppolicy.la
:
database bdb
overlay ppolicy

として再起動すればOK
停止したいエントリを

dn: uid=hoge,dc=example,dc=net
uid: hoge
:
pwdAccountLockedTime: 000001010000Z

とすればロックする
# ldapsearchでは明示しないと出てこないでの注意

ppolicyにはいろいろ機能があるようで
例えばパスワードn回間違えるとロックすることもできるみたい
これも詳しくは man slapo-ppolicyで

CentOS5でperl backend(slapd-perl)を使う

CentOS5にバンドルされている
openldapはslapd-perlがdisableでコンパイルされているので
perl backendのdatabaseが使えない
srpmでSPECファイルをenable-perlにしてビルドすると
ライブラリのリンクのところでPerl関連のエラーがでてNG

普通にmakeしてもコンパイルできるのに
おかしいとおもっていたらrpmは変なパッチがあたっていた
コメントアウトするとビルドできた

@@ -234,7 +234,7 @@
 %patch3 -p1 -b .setugid
 %patch4 -p1 -b .pie
 %patch5 -p1 -b .toollinks
-%patch6 -p1 -b .nosql
+#%patch6 -p1 -b .nosql
 %patch7 -p1 -b .gethostbyname_r
 %patch8 -p1 -b .sasl
 %patch9 -p1 -b .timeout
@@ -461,7 +461,7 @@
        --enable-null \
        --enable-shell \
        --enable-sql=mod \
-       --disable-perl \
+       --enable-perl \
        --disable-shared \
        --disable-dynamic \
        --enable-static \

追記:へんなパッチは具体的には

SLAPD_LIBS=$(LDBM_LIBS)

になってて
ほんらいは
SLAPD_PERL_LDFLAGS
とかいろんなバックエンド用のライブラリをすべて含むになっていた