あなたの天然記念物
ホーム更新雑談鉄ゲタランドナーコースガイド自転車JKFFハードソフトダウンロードLinuxリンク(Amiga)リンク(その他)連絡先経歴
    目次 ↓下へ ↑上へ
  1. アナログ回線用ダイヤルアップルータ
  2. AIFFファイルのループ再生と停止
  3. RedHat 7.2でISDNルータ
  4. ディスクなしパソコンの構築
  5. ディスクなしパソコンの構築−その2−
  6. ディスクなしパソコンの構築−その3−
  7. PLIPのパケット転送方法
  8. セマフォを使ってみました
  9. ディスクなしパソコンの構築−その4−
  10. LinuxでADSL
  11. ADSLモデムのWeb設定画面を表示
  12. LANで電源ON
  13. ハードディスクを単独運転からRAID1…
  14. Daily Full Backup
  15. FastTrakのドライバを静的リンク
  16. PCと携帯の兼用サイトを作成
  17. CGIスクリプトにSeLinuxからIPC使…
  18. アクセス規制情報取得CGI「またかよ…
CGIスクリプトにSeLinuxからIPC使用許可を出す方法 (2010.04.13)

ページ毎にカウンタを用意して、集計ファイルに記録する方法を使っていますけれど、工夫なしに集計ファイルへ記録してしまうと複数のクライアント(ホームページを見に来る人)が同時に見に来た場合、集計ファイルが破損、不正確になります。それを防止するためにIPCのセマフォを使っていました。
しかしながら、何年か前にLinuxを入換えるとSeLinux(セキュリティ強化Linux)になっていてCGIからセマフォを使えなく(正しくは、許可方法がわからなく)なっていました。

SeLinux、CGI、セマフォの条件が重なる人が少なくて、そのままセマフォなしで使い続け、たまにファイル破損で全ページのカウンタが0になる有様です。
年月も経過して、ホームページで対処方法を説明してくれる人もいましたので、再挑戦して、無事にCGIでセマフォを使えるようになりました。本当、このテの調整したのを書いてるページが少ないんだよね(実感)。

初めに、/var/log/messagesをviで開き、問題のメッセージを1行だけ新規ファイルへ書き出します(ファイル名は例えばcgisem1.txtで)。

次に、セキュリティボリシーのテキストとモジュールを作成します。audit2allow -M cgisem1 --input cgisem1.txt
この時にファイルcgisem1.te(テキスト)、cgisem1.pp(モジュール)が作成されます。

続いて、モジュールをインストールします(かなり時間がかかります with P3/1GHz/Slot A)。semodule --install cgisem1.pp

更に、インストールが終ってから、ページカウント(自分でページを見る)させて/var/log/messagesを確認します。
エラーを解消する必要最小限の許可しか出ていないので、別のエラーが発生しますから、エラーが止まるまで最初から繰り返します。この時、新規ファイルの名前はcgisem2.txtというように番号付けて別ファイルにしたほうが許可の順番を理解できます。
私のケースでassociate、unix_write、read writeの3回をクリアして、ようやくエラーなしで実行できるようになりました。こんな簡単な作業ですけれど、数年前にはどこを検索しても(注・日本語に限る)見つけられませんでした。今では、少なくとも「操作のヒントになる」ページが見つかります。
こういった具体例をご覧いただくことで、SeLinuxのエラーを解消できれば幸いです。
【付録】
《1回目 - associate》
Apr 13 18:23:46 paula kernel: audit(1271150626.068:191647): avc: denied { associate } for pid=4853 comm="accesslog.cgi" key=1234
scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=sem

《2回目 - unix_write》
Apr 13 18:35:49 paula kernel: audit(1271151349.053:191652): avc: denied { unix_write } for pid=4914 comm="accesslog.cgi" key=1234
scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=sem

《3回目 - read write》

Apr 13 18:56:37 paula kernel: audit(1271152597.817:191689): avc: denied { read write } for pid=5034 comm="accesslog.cgi" key=1234
scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=sem
どのページも無断でリンクして構いません。
Valid HTML 4.01 Transitional