web-dev-qa-db-ja.com

8.8.5へのアップグレード後のpublic://でのフォルダー権限エラー

私はこのコミュニティに不慣れで、この問題に悩まされて過ぎて行くことができないので、助けを求めています。 StackOverflow についても試してみましたが、今のところうまくいきません。

私の現在のセットアップ:

  • Drupal 8.8.5
  • CentOS Linuxリリース7.5.1804
  • PHP 7.2.19およびHTTPD-Apache/2.4.6
  • ユーザー/グループを実行:Apache:apache

/ admin/reports/status#warning管理ページは、 "sites/default/filesディレクトリは書き込み不可であることを報告します。構成に正しいフォルダを設定する必要がある場合があります[ファイルシステム]ページの変更、または現在のフォルダーのアクセス許可を変更して書き込み可能にする。 "

明らかに、これはいくつかのエラーにつながります:

Drupal\Core\File\Exception\FileException: Failed to unlink file 'public://css/css_Y3zRgmC0P7yIXk_w_H9qyrPs3aMkKRv44SMfupbSCMc.css.gz'. in Drupal\Core\File\FileSystem->delete() (line 340 of/var/www/html/project/core/lib/Drupal/Core/File/FileSystem.php).

Warning: unlink(/var/www/html/project/sites/default/files/css/css_Y3zRgmC0P7yIXk_w_H9qyrPs3aMkKRv44SMfupbSCMc.css.gz): Permission denied in Drupal\Core\File\FileSystem->unlink() (line 124 of /var/www/html/synergie/core/lib/Drupal/Core/File/FileSystem.php)

The specified file 'temporary://fileuJjxaE' could not be moved to 'public://js/js_FKKJ_OhNvc7muQ1i_fQS6OJmZLsZnRvVhbbPaVlNwb8.js'.

Permissions for the file cannot be set for sites/default/files/translations

今、私はDrupalの完全な専門家ではありませんが、これらの状況でLinuxシステムで必要となる可能性のあるすべての基本的なことを実行しようとしました。

  • 777をすべて/ var/www/html/project/sites/defaultとサブディレクトリに設定
  • 前述のディレクトリの所有者を変更する
  • Lib/Drupal/Core/File/FileSystem.phpの124行目と340行目を手動でデバッグする
  • Sudo -s/bin/bash Apacheを使用して "Apache"ユーザーをSudoingし、コマンドラインからファイルを作成/削除しようとする(そして機能する)
  • Drupal外のApache:apacheで実行するカスタムスクリプトを記述して、public://を操作できるかどうかを確認します。 (彼らが働きます)

問題はファイルシステム自体にあるのではないと思います。アクセス許可のどの組み合わせも機能しないため、この問題はDrupal自体に関連していると思います。

事実は、書き込み/読み取り/移動するカスタムスクリプトを作成する場合ファイルから/へ/ var/www/html/project/sites/default/files、それはうまくいきます。 Drupalの「から」では機能しません。

前に述べたように、私はDrupalファイル設定、管理設定、drushなど)の「内部」のすべての専門家ではないので、これを試して発行するようにお願いします問題、それは私を夢中にさせているからです。過去10時間以上、コマンドラインを見て何が起こっているのか理解していませんでした。

敬具、

マウリツィオ

1
Maurizio

更新

SELinuxの現在のモードを見つけて、一時的にシャットダウンします。 「#」はコメント用で、削除できます。

Getenforce # see current mode.

getsebool -a # find al boolean values

Sudo setenforce 0 # shut it down, but will be back at reboot.

あなたのことを試してください。それが原因である場合は、/ var/www/your Docrootなどの場所を許可するルールを追加します。

SElinuxは再起動して、/ var/www/drupal-document-rootに永続的なルールを追加します。

私は次のことを行います。行2は機能しますが、rename&restoreconには対応しません(行3はこのような状況に対応します)。

 ls -dZ /var/www/html  # See SELinux context of 
 Sudo chcon -R -t httpd_sys_content_t /var/www/html/drupal-document-root
 Sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" 

また、Apacheに書き込み許可を与えるために、過去に次のことを行いました。

# Selinux allow httpd read & write to /var/www/html/my-project 
Sudo chcon -R -t httpd_sys_script_rw_t /var/www/html/my-project/
Sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-Symfony-project/var/log/

SELinux参照: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_Apache_http_server-types

それとは別に、新しいサイトをセットアップしてこのようなことに遭遇したときは、次のようにします。

1)cat /etc/http/http.conf | grep user、ユーザーApacheが2として実行されていることを確認するには、2)vhostファイルから、ドキュメントルートを確認し、それに従って、Apacheが書き込み可能であることを確認します3)docrootまたはSymlinks Postを確認し、次の1&2&を表示します。 Apacheが指しているLs -al/document rootを参照してください。また、Apacheユーザーが正しいグループにあることを示す出力

問題を解決した後、drupal権限をベストプラクティスにリセットすることを忘れないでください。次の2番目の回答を参照してください。

推奨されるディレクトリ権限は何ですか?

Ps:マルチサイトを設定しないことを前提として、必要なものはほとんどありません。

0
salah-1