FTPでホームディレクトリにしかファイルの書き込みができず、ホームページのアップロードに手間がかかっていたが、やっとのことで直接アップロードできるようになったので、ここに記録しておくことにした。
まず、いろいろやっていて行き詰ったのが、vsftpdを起動しようとすると、"vsftpd dead but subsys locked" のメッセージが出て起動できないという事象。
ネットで検索しても、confファイルをオリジナルに戻すとか、再インストールという情報しかなく、これらをやってもだめだった。
結局、これはSELinuxのFTPのポリシー修正で「inetdを使わない直接 ftpd の実行を許可する」のチェックを外していたためだった。
そして、本来のアクセス権限。
最初はvsftpdの設定かと思っていたが、SELinuxを無効にすると、アップロードできたのので、SELinuxが原因とわかった。
Fedora Core5では、SELinuxのソースをインストールしなくても、ポリシーの追加が可能になっているとのこと。
詳細は割愛するが、/var/log/messages からSELinuxの関連ログを切り出して、自動的にポリシーを追加する方法をやってみた。
すると以下のようなエラーが出て、行き詰ってしまった。
[root@xxxx module]# audit2allow -i local.log -M local
Generating type enforcment file: local.te
Compiling policy
checkmodule -M -m -o local.mod local.te
semodule_package -o local.pp -m local.mod
/usr/bin/audit2allow: libsepol.policydb_read: policydb module version 6 does not match my version range 4-5
semodule_package: Error while reading policy module from local.mod
[root@xxxx module]#
とりあえず、パッケージアップデータで関連しそうなパッケージをアップデートしてみた。
パッケージアップデータはアップデート可能な大量のすべてのパッケージがチェック(アップデート指定)されてしまう。
すべてをアップデートするのは、怖かったのと、時間もかかりそうだったので、地道にチェックを外した。
関連するパッケージは記録し忘れたが、確か、libse×××とか、selinuxのような名前のものだったような・・・
また、適用しようとすると、未指定の関連パッケージが表示されるので、一度指定画面に戻ってから、これらも追加で指定してから適用した。
適用後、再度、audit2allowコマンドを実行すると、成功。
----------------------------------------------------------------------
[root@xxxxx module]# audit2allow -i local.log -M local
Generating type enforcment file: local.te
Compiling policy
checkmodule -M -m -o local.mod local.te
semodule_package -o local.pp -m local.mod
******************** IMPORTANT ***********************
In order to load this newly created policy package into the kernel,
you are required to execute
semodule -i local.pp
[root@xxxxx module]#
----------------------------------------------------------------------
最後は表示されるとおり、sedmoduleでモジュールを追加して完了。
----------------------------------------------------------------------
[root@xxxxx module]# semodule -i local.pp
----------------------------------------------------------------------
/var指定ではなにも見えないが、/var/www指定だと配下のディレクトリ、ファイルが見える。
ログの内容が適切で無かったのか、これで実現できたのは、参照のみ。
作成された local.te を以下のように修正して、audit2allowの実行結果に表示されるコマンドを実行して、追加したポリシーを書き換えた。
----------------------------------------------------------------------
修正前(audit2allowの出力)
[root@xxxxx module]# cat local.te
module local 1.0;
require {
class dir { getattr read search };
class file getattr;
type ftpd_t;
type httpd_sys_content_t;
role system_r;
};
allow ftpd_t httpd_sys_content_t:dir { getattr read search };
allow ftpd_t httpd_sys_content_t:file getattr;
[root@xxxxx module]#
修正後
[root@xxxxx module]# cat local.te
module local 1.0;
require {
class dir { add_name create getattr read remove_name rmdir search write };
class file { append create getattr read rename unlink write};
type ftpd_t;
type httpd_sys_content_t;
role system_r;
};
allow ftpd_t httpd_sys_content_t:dir { add_name create getattr read remove_name rmdir search write };
allow ftpd_t httpd_sys_content_t:file { append create getattr read rename unlink write};
[root@xxxxx module]#
登録手順
[root@xxxxx module]# checkmodule -M -m -o local.mod local.te
checkmodule: loading policy configuration from local.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 6) to local.mod
[root@xxxxx module]# semodule_package -o local.pp -m local.mod
[root@xxxxx module]# semodule -i local.pp
----------------------------------------------------------------------
上記でやっとアップロードが可能になった。
もっとSELinuxを理解しないと、いろいろ問題にぶつかりそうだ・・・
Recent Comments