web-dev-qa-db-ja.com

SELinuxを完全に無効にすることなくPHP)を介してSQLiteを使用する

PHPとPDOライブラリを使用してCentOS7ボックス上のSQLiteファイルにアクセスしようとしています。この質問のように読み取り専用エラーが発生していました--- https:// stackoverflow .com/questions/3319112/sqlite-read-only-database

そしてその質問によると、答えはSELinuxを無効にすることでした。開発には問題ありませんが、本番システムではSELinuxを有効にしておく必要があります。

SQLiteファイルで読み取り専用エラーが発生しないようにSELinuxを有効のままにするにはどうすればよいですか?

(注:それに関連するその質問の回答は、CentOS 7と互換性がないようです)。

編集:_tail -f /var/log/audit/audit.log_

type=AVC msg=audit(1543600144.088:1845): avc: denied { write } for pid=13968 comm="httpd" name="html" dev="dm-0" ino=50632493 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=dir type=SYSCALL msg=audit(1543600144.088:1845): Arch=c000003e syscall=2 success=no exit=-13 a0=5567d0b40859 a1=80042 a2=1ff a3=5567d0b40859 items=0 ppid=13674 pid=13968 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) type=PROCTITLE msg=audit(1543600144.088:1845): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44

1
Pipupnipup

デフォルトでは、PHP(httpd_tドメインで実行)は、一時ディレクトリ以外のシステム上のほとんどの場所にファイルを書き込むことを許可されていません。

コンテキストをhttpd_sys_rw_content_tに変更することで、特定のファイルを書き込み可能に設定できます。たとえば、コンテキストを一時的に変更するには、次のようにします。

chcon -t httpd_sys_rw_content_t /var/lib/myapp/database.sqlite

これを永続的にするには、ファイルに一致する永続的なファイルコンテキストを設定して、常にこのようにラベル付けされるようにする必要があります。これはsemanage fcontextで行います。

semanage fcontext -a -t httpd_sys_rw_content_t /var/lib/myapp/database.sqlite
3
Michael Hampton

だから、試行錯誤の組み合わせから、そしてマイケルの答え+コメントとこれらからの助け:

https://stackoverflow.com/a/41132426

https://stackoverflow.com/questions/3319112/sqlite-read-only-database

解決策はこれらの2行です(ファイルが_/var/www/html_にあると仮定します)

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?" restorecon -v /var/www/html

注意点があります:

  • 最初の行[〜#〜] must [〜#〜]のパスは引用符で囲んでください。そうしないと、_bash: syntax error near unexpected token ('_になります。

  • あなたmustは、ファイルだけでなく、ディレクトリ全体に対してもそれを行う必要があります。これは、括弧内の奇妙なビットが行うことです。

(残念ながら、上記のリンクされた質問でこれについて役立つコメントをするための担当者が不足しています。あるいは、正しい/間違った答えに賛成/反対票を投じることさえできません。)

0
Pipupnipup