web-dev-qa-db-ja.com

SELinux:Joomlaキャッシュディレクトリへの書き込みアクセスを有効にする方法は?

JoomlaWebサイトを実行するDebianスクイーズシステムにSELinuxをセットアップしました。 Joomla PHPコードは、特定のキャッシュディレクトリへの書き込みアクセス権を必要としています。

/ var/log/messagesファイルには、次のようなエントリが含まれています。

Dec 31 10:26:16 s0022 kernel: [ 2116.423199] type=1400 audit(1356945976.634:14831): 
  avc:  denied  { write } for  pid=1886 comm="Apache2" name="_system" dev=xvda3 
  ino=790893 scontext=system_u:system_r:httpd_t:s0
  tcontext=unconfined_u:object_r:httpd_t:s0 tclass=dir
Dec 31 10:26:16 s0022 kernel: [ 2116.447613] type=1400 audit(1356945976.658:14837): 
  avc:  denied  { write } for  pid=1886 comm="Apache2" name="mod_mainmenu" dev=xvda3
  ino=791346 scontext=system_u:system_r:httpd_t:s0
  tcontext=unconfined_u:object_r:httpd_t:s0 tclass=dir

Iノード値に対応するディレクトリは、Apache2(wwwrunとして実行)によって書き込み可能です。キャッシュファイルは、SELinuxがオフのときに作成されますが、アクティブ化されたときは作成されません。ただし、これらのディレクトリへのパスは、DebianSqueezeのデフォルトのDocumentRootとは異なります。

# ls -ldZ cache cache/_system cache/mod_mainmenu
drwxrwxr-x. 5 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 29 23:13 cache
drwxrwxr-x. 2 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 30 19:31 cache/mod_mainmenu
drwxrwxr-x. 2 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 30 19:31 cache/_system

また、書き込み関連のブールフラグを有効にしてみましたが、それも役に立ちませんでした。

# getsebool -a | grep httpd
allow_httpd_anon_write --> on
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> on
allow_httpd_user_script_anon_write --> on
httpd_builtin_scripting --> off
httpd_can_network_connect --> off
httpd_can_network_connect_db --> on
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_enable_cgi --> off
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_ssi_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off

私はaudit2allowを使用して、他のデーモン(たとえば、rotatelog)の書き込みアクセスを有効にするロード可能なモジュールを作成しましたが、これがこの状況での方法ではないと思います。 httpdのモジュールはすでに存在しているので、回避できるのであれば、いかなる方法でも触れたくありません。

私は、Apache2/php/Joomlaに、他のものへの書き込みアクセスを許可せずに、特定のDocumentRoot内の特定のディレクトリに書き込む方法を探しています。お知らせ下さい。

3
nn4l

キャッシュディレクトリは、すでに述べたように、Apacheユーザー、phpユーザー、さらにはmod_fcgidを使用する場合は別のJoomlaユーザーなど、さまざまな種類のユーザーによって使用されます。このようなディレクトリには、public_content_rw_tタイプのコンテキストがあります。これにより、関連するすべてのサービスに対して書き込み可能になり、(一時ファイルを含む「単なる」キャッシュディレクトリであるため)セキュリティリスクが大きくなりすぎないようにする必要があります。したがって、コマンドを使用して、タイプをパブリックタイプに変更することをお勧めします

chcon -R -t public_content_rw_t /path/to/wwwroot/cache
1
Oldskool

キャッシュの場所がタイプhttpd_cache_tであることをSELinuxに伝える必要があります。

# semanage fcontext -a -t 'httpd_cache_t' '/path/to/wwwroot/cache(/.*)?'
# restorecon -Rvvv /path/to/wwwroot/cache
4
mricon