For non-Japanese speakers

All the articles and content on this website are written in Japanese.

If you would like to read them in a different language, please use the translation function on your browser.You may not be able to understand the finer points of the text, but you should be able to get the general idea.

Private file system is not set.の解消

当サイトは、Xserver ビジネススタンダードにDrupalをインストールし、テーマにCivicThemeを使用して運営しています。共有サーバーの機能制限によりドキュメントルートの設定やApacheの制限があるため通常のDrupalの設定と異なるイレギュラーな設定をしていますが、問題なく運営できています。

インストール以降、実運営に影響がないため対処は必要ないと考えそのままにしていたエラーがありましたので、今回そのエラーの対応をしてしまいます。対応するエラーは Private file system is not set : プライベートファイルシステムの設定に関わるエラーであり、プライベートファイルシステムが設定されていない事でセキュリティ警告のエラーが出ています。

表示されるエラー


Webform: Private files

Private file system is not set.

This must be changed in settings.php. For more information see: DRUPAL-PSA-2016-003

Drupalのエラー「Private file system is not set」は、プライベートファイルシステムが設定されていないことを示しています。この設定はセキュリティ上重要で、プライベートファイルは特定のアクセス権を持つユーザーにのみ公開されるべきものです。


これは、Webformを使いファイルのアップロードをする際に、ファイルを非公開にしたり、権限による閲覧制限をかけたい場合に必要になります。例を挙げると、サイトを複数人で使用しファイルの公開範囲を設定したい場合などに利用します。

当サイトは、私個人のサイトで、管理上非公開なものは私以外は閲覧することがないので、当面必要ない機能と考えエラーは出ていましたが、そのままにしていました。

今回Private file system is not setのエラーの対処をしてしまいます。

プライベートディレクトリを作成します。

DrupalのWeb公開上のルートであるWebディレクトリ外にプライベートディレクトリを設置します。

project-root/
├── composer.json
├── vendor/
├── web/                ← ドキュメントルート
├── private/            ← ← ドキュメントルート外に設置します!

実際には

$ cd project-root
$ mkdir private
$ chmod 750 private
にてprivate/を作成します。

ディレクトリを作成したらsettings.phpに設定を記述します。

settings.php に設定を追記します。

web/sites/default/settings.php に以下の設定を追記します。

$settings['file_private_path'] = '../private';

../private は web/ ディレクトリから見て一つ上(Drupalプロジェクトルート)の private/ を指します。

settings.php
/**
* Private file path:
*
* A local file system path where private files will be stored. This directory
* must be absolute, outside of the Drupal installation directory and not
* accessible over the web.
*
* Note: Caches need to be cleared when this value is changed to make the
* private:// stream wrapper available to the system.
*
* See https://www.drupal.org/documentation/modules/file for more information
* about securing private files.
*/
# $settings['file_private_path'] = '';
デフォルトで上記の記述があります。

# $settings['file_private_path'] = '';
のコメントアウト#を外し../private(プライベートファイルのパス)を記述します。
$settings['file_private_path'] = '../private';

設定を保存したらキャッシュをクリアすれば、設定が反映されエラーが消えます。

$ drush cr

追記

settings.phpは通常パーミッションを444にしていますので、設定を書く際は一旦644にして、設定を保存したら444に戻します。(644のままだと : レポート > サイトの状態に "保護が無効" の警告が出ます)

$ chmod 644 web/sites/default/settings.php   # 編集時
# 編集後
$ chmod 444 web/sites/default/settings.php   # 読み取り専用に戻す

設定の確認

レポート > サイトの状態

エラーが消えていればOKです。

詳細の確認 : ファイルシステム

設定が完了すると

ホーム > 管理 > 環境設定 > メディア > ファイルシステム の画面にて以下の表示になっています。


パブリックファイルシステムパス

sites/default/files

~~~~~

プライベートファイルシステムパス

../private

プライベートファイルを格納する、既存のローカルファイルシステムパス。Drupal から書き込み可能で、ウェブからアクセス不可能でなくてはなりません。settings.php で変更する必要があります。


プライベートファイルシステムパス : ../private が表示されていれば設定完了です。

エラーの解消

当サイトは私の個人運営のサイトであり第三者がファイルをアップロードしたりすることはないので、今回設定したプライベートファイルを使用することは当面ありませんが、Drupal管理画面上にエラーが出ているのを放置しているのも気持ち悪いので対応しました。

Drupalのエラーに、機能不全のエラーと警告的なエラーがあります。

機能不全のエラーはシステムが動かないなど不具合が生じるので即対応する必要があります。警告的なエラーは主にセキュリティ関連のエラーや警告が多く、運営上必要なければ放置していてもシステム上問題ありません。(使用方法によってはセキュリティ上重大な問題となるケースもあります。)

今回のエラーは後者であり、私の運営上問題ないのでインストール以降そのままにしていましたが、本来はインストール時にしっかり設定を行う必要があります。対応が遅れたのは、エラー内容と対応方法に対する理解はありますが、実使用のイメージが湧かなかった事が原因にあります。

Drupalは大規模なサイトの管理をしやすいよう権限管理が柔軟に設定出来ることと、セキュリティ管理がしっかりなされていて、適切なアップデートと管理を行えば、デフォルトでも十分堅牢なシステムを構築できます。

今回のエラーは、権限の柔軟さを実現する際に生じるセキュリティに関わる警告であり、極めてDrupalらしい警告であります。

エラー解消後のサイトの状態

ホーム > 管理 > レポート > サイトの状態


ここでは、システムで見つかったすべての問題と同時に、サイトのパラメーターの簡潔な概要を見ることができます。Drupal.org のサポートフォーラムやブロジェクトのイシューキューに、この情報をコピーアンドペーストして入力するのに役立つでしょう。サポートリクエストを入力する前に、ウェブサーバーがシステム要件を満たしているかを確認してください。

33 確認済み 詳細


今回の対応で管理画面上に表示されるエラーは無くなりました。

エラー表示の考察

エラーの表示と言えば、MacBookのローカル上にDDEVを使いDrupal CMSをインストールしてテスト的に稼働させています。Drupal CMSの特徴として、従来のDrupal Coreによる管理システムがPHPやDBの知識をある程度必要としている事に対し、開発経験がない管理者でも運営できるシステムになっています。

従来とは異なるシステムでありリリースはされましたが、開発段階なので、コアモジュールのテストなどに関わるDrupal公式が容認するエラーや警告が常時表示されています。

エラーはない方が良いのですが、開発途中のDrupal CMSのような場合、通常運用では問題ないのでエラーを容認しているケースもあります。(開発が進み最終的にはエラーは無くなります)

今回のケースと、Drupal CMSのケースは異なりますが、エラーの表示が必ずしもシステムの問題ではないケースもありますので、実際の運用を考え判断していけば良いと考えています。

Drupal CMSはCoreにDrupal11xを使用していますが、Civic Themeのコンセプト同様、開発者でなくてもWebサイトの構築や運営を行えるような洗練されたインターフェースを持っています。

現状、私が所有するインフラであるXserverビジネススタンダードでのDrupalの運営はそろそろ限界が見えています。どこかでDrupal11x以降の動作環境を持つインフラにアップデートする必要があります。

今後、インフラ面のアップデートを行う際に、従来のDrupal Core 11xベースではなくCivicThemeとコンセプトが合うDrupal CMSでCivicThemeを使用するのも一つの手であると考えています。

Drupal CMSとCivicThemeの使用はローカル上で動作確認を行いしっかり検証する必要がありますので少し時間をかけて検討したいと考えています。

Drupalの記事

関連するDrupalでWEBサイトを構築する為の環境構築の記事やDrupalについて書いた記事になります。

記事は全てナンバリングしています。Drupalを初めて使う為の準備から始まる最初の記事から読む事もできます。

Drupalについて記事を書いています。このWEBサイトを構築していく上でのトピックになります。プログラミングやソースコードなどエンジニア的な記事ではなく、プログラミング経験がない個人がDrupalでパーソナルなWEBサイトを構築するという観点での記事になります。
  • Drupal記事まとめ
DrupalやCivic Themeの設定やインストール、Local環境の構築やサーバーへのインストールなど環境構築やエラーの対応に関わる記事をまとめています。
  • Drupal記事まとめ
  • 環境構築

最新の記事

Drupalについて書いた最新の記事になります。

Drupal 11.3.10 > 11.3.11にアップデートしましたが、「セキュリティの問題」のメッセージが表示されたので、初めてcomposer auditを使いました。原因は、Drupal 11.3.10のセキュリティアップデート(重要)に付随するもので、アップデートを行う事で解消します。
  • Drupalの記事
  • 環境構築
今回サーバー移転でDrupalを10.6.xから11.3.xにアップデートしました。共有サーバーのWordPressのサイトにFatal errorが出たので、エラーの解決を行いました。DrupalとWordPressの開発思想の違いが見えるエラーだったので記事にまとめました。
  • Drupalの記事
  • WordPress
Xserverの環境が整い、Drupal 11.xの動作条件であるPHP 8.3.x、MariaDB 10.11.x、Drush最新版13.7.xが整いましたのでDrupal 10.6.8からDrupal 11.3.9にアップデートを行います。今回初めてDrupal…
  • Drupalの記事
  • 環境構築
Xserverビジネスの新規サーバーのDBがMariaDB 10.11.xに変わり、サーバー移転を行えば、Drupal 11.xにアップデート可能になりました。今回サーバー移転を行い、Drupal 10.x > Drupal 11.xにアップデートしました…
  • Drupalの記事
  • 環境構築

Life Styleの記事

Drupalとは関係ないのですがLife Styleの記事も書いていますのでよろしければ購読ください。

ライフスタイルの記事になります。Drupalに触れる目的でこのWEBサイトを立ち上げています。元はWord Pressで作成した記事をこちらのWEBサイトに再構築しています。Word Pressも学習目的で利用したのですが記事をしっかり作る事を目的としていたので、テーマに興味があればそれなりに楽しめると思います。
  • Life Style記事まとめ
#D38
  • Drupalの記事
  • 環境構築