2008年7月22日火曜日

Fedora7=>9にアップデートしたらPukiWikiで編集が出来なくなった。

Fedora7をFedora9にアップデートしたらPukiWikiで編集が出来なくなってしまった。「編集」をおして、記事を編集し「ページの更新」をおすと、
fopen() failed: diff/E383A1E383BCE383ABE382BDE38395E38388E381AEE8A8ADE5AE9A.txt
Maybe permission is not writable or filename is too long


E383A1E383BCE383ABE382BDE38395E38388E381AEE8A8ADE5AE9A.txtの部分はPuKiWikiの記事のタイトルだから、どうもSELinuxのパーミッション絡みかと当りをつけて、/var/log/messagesを確認してみた。

Jul 22 16:31:25 dkuro2 setroubleshoot: SELinux は httpd reading and writing が http ファイルにアクセスするのを阻止しました。 For complete SELinux messages. run sealert -l 7614d87f-3922-4ceb-8d8c-8b3b3a9af381

あれ?Fedora9では、ほとんど意義は感じられないまでも、一部、日本語になってるじゃん。という話は置いといて

#sealert -l 7614d87f-3922-4ceb-8d8c-8b3b3a9af381

と、やってみると

要約:

SELinux は httpd reading and writing が httpファイルにアクセスするのを阻止しました。

詳細説明:

SELinux prevented httpd reading and writing access to http files. Ordinarily httpd is allowed full access to all files labeled with http file context. This machine has a tightened security policy with the httpd_unified turned off, this requires explicit labeling of all files. If a file is a cgi script it needs to be labeled with httpd_TYPE_script_exec_t in order to be executed. If it is read-only content, it needs to be labeled httpd_TYPE_content_t, it is writable content. it needs to be labeled httpd_TYPE_script_rw_t or httpd_TYPE_script_ra_t. You can use the chcon command to change these contexts.
Please refer to the man page "man httpd_selinux" or FAQ(http://fedora.redhat.com/docs/selinux-apache-fc3) "TYPE" refers to one of "sys", "user" or "staff" or potentially other script types.

アクセスを許可:

"httpd_unified"ブーリアンを「true」に変更するとこのアクセスを許可します:
"setsebool -P httpd_unified=1"

Fix コマンド:

setsebool -P httpd_unified=1

追加情報:

ソースコンテキスト system_u:system_r:httpd_t
ターゲットコンテキ ystem_u:object_r:httpd_sys_content_t
ターゲットオブジェ /E383A1E383BCE383ABE382BDE38395E38388E381AEE8A8ADE5AE9A.txt [ file ]
ソース httpd
ソースパス /usr/sbin/httpd
ポート <不明>
ホスト dkuro2.dyndns.org
ソース RPM パッケージhttpd-2.2.8-3
ターゲット RPM パッケ
ポリシー RPM selinux-policy-3.3.1-78.fc9
Selinux 有効化 True
ポリシータイプ targeted
MLS 有効化 True
強制モード Enforcing
プラグイン名 httpd_unified
ホスト名 dkuro2.dyndns.org
プラットフォーム Linux dkuro2.dyndns.org 2.6.25.10-86.fc9.i686 #1
SMP Mon Jul 7 20:46:03 EDT 2008 i686 i686
通知カウント 7
最初の画面 Tue Jul 22 12:17:24 2008
最後の画面 Tue Jul 22 16:31:25 2008
ローカル ID 7614d87f-3922-4ceb-8d8c-8b3b3a9af381
行番号

生の監査メッセージ

host=dkuro2.dyndns.org type=AVC msg=audit(1216711885.55:9730): avc: denied { append } for pid=13241 comm="httpd" name="E383A1E383BCE383ABE382BDE38395E38388E381AEE8A8ADE5AE9A.txt" dev=dm-0 ino=5696995 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file

host=dkuro2.dyndns.org type=SYSCALL msg=audit(1216711885.55:9730): arch=40000003 syscall=5 success=no exit=-13 a0=b8f02b28 a1=441 a2=1b6 a3=b8f02b28 items=0 ppid=2179 pid=13241 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)


と、書いてあった。解決方法はsetsebool -P httpd_unified=1だよと書いてあるので、

setsebool -P httpd_unified=1

としてみたけど、状況は変わらず...ダメじゃん!!!こっちがダメならMovableTypeもダメだろうなァと思いつつ、試してみると、やはりダメ!!!

テンポラリーファイル/xxx/2008/07/index.html.newのファイル名の変更に失敗しました: /xxx/2008/07/index.html.newを/xxx/2008 /07/index.htmlに名称を変更できません: Permission denied テンポラリーファイル/xxx/2008/07/index.html.newのファイル名の変更に失敗しました: /xxx/2008/07/index.html.newを/xxx/2008 /07/index.htmlに名称を変更できません: Permission denied

と、まあ、予想どおりなんだけど、困ったもんだ。という事で、宿題だけど、早急に対処しないとまずい!!!

------------19.30後記-------------

で、とりあえずPukiWikiが使えないと仕事にならないので、MTはぶー垂れてればいいんだけど、この調子だと、多分、MyphpAdminもダメかもしれないし、という事で、SELinuxを無効にしました。今まで、皆にそうアドバイスされながら、がんばって有効にしてきたのにorz

/etc/sysconfig/selinuxを編集して、
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled


とする事で、とりあえず仕事は出来るようになりました。宿題は続く。

-----------------080723 0:01追記--------------------

で、やはり、これまで訳も分からないままとは言え、一生懸命使ってみたSELinuxなので、なんとか生かしてやろうと試行錯誤をしてみました。まず、

setsebool -P httpd_unified=1

としなさい。と書いてあるけど、このアドバイスに関して疑問だったのは、

/usr/sbin/getsebool -a

とやってみると、httpd_unifiedはonに既になってる。アップデートインストールだったから、なんかフラグの状態に矛盾が発生しているのかもと思い、

setsebool -P httpd_unified=0

とやって、PukiWikiのページを更新してみたら、もっと悲惨な事になりました。SELinuxエラーがバラバラっと出て、ちょっとメモるもの面倒なくらいな状況。という事で「フラグ矛盾発生説」は却下。httpd_unifiedをonに戻して、次に行ってみる事に。

ここで、エ~イ面倒じゃ!!!PukiWikiのディレクトリを全てhttpd_content_rw_tにしてしまえ!!!と思い、

chcon -t -R httpd_content_rw_t PukiWiki_directory

とやったら、なんと動いてくれました。ホッ

で、今、このブログを書いてるわけだけど、これもエラーになってしまうはず。(同じ内容で、自宅サーバのMTでの話。)まあ、しっかり前述のエラーに再遭遇。

chcon -t -R httpd_content_rw_t myblog_directory

と、やったら動くようになりました。ヤレヤレ(^^;

で、一応、危機は脱したんだけど、この騒ぎのせいでsetroubleshootを見てたら、なんかdicedもエラーをくらってました。と、言う事は、dkuro2.dyndns.orgは、niftyのIPが変わったら見れなくなってしまうのかも...

ただ、今日はもう疲れたので、改めてエントリを立てて、調査する事としよう。

0 件のコメント: