[PHP]Composerでエラー「Do not run Composer as root/super user」が出る時

カテゴリ: composer

PHPのパッケージマネージャであるComposerを使用していて、以下のエラーが出た時の対処法を説明します。

> composer update

Do not run Composer as root/super user!

エラーメッセージの例

composerでコマンドを入力した時、以下のようにDo not run Composer as root/super userエラーが出ることがあります。

> composer update

Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 15 installs, 0 updates, 0 removals
  - Installing composer/installers (v1.3.0) Downloading: 100%
  ...

原因は、エラーメッセージにある通り、composerコマンドをrootユーザで実行したためです。表示されているのは警告なので、コマンドは実行されますが、セキュリティ上は好ましくない状態です。

rootユーザでcomposerコマンドを実行してはダメな理由

エラーメッセージには、https://getcomposer.org/rootを見てほしいとのメッセージも出ています。上記ページの内容を日本語にしたものを記載しておきます(意訳ですので、正確な原文を把握したい場合は元サイトを確認してください)。

信頼できないパッケージを安全にインストールするにはどうすればよいですか?
Composerをスーパーユーザーまたはrootとして実行するのは安全ですか?

exec、install、updateなど、一部のComposerコマンドは、インストールしたパッケージに含まれているスクリプトを、インストール先のシステム上で実行できるようにします。

これは、composerの"プラグイン"と "スクリプト"機能によるもので、プラグインとスクリプトは、Composerを実行するユーザーアカウントにフルアクセスできます。このため、Composerをスーパーユーザー/ルートとして実行しないようにすることを強くお勧めします。

パッケージのインストールまたはアップデート時に、次の構文でプラグインとスクリプトを無効にすることができます。
---------------------------------------------------
composer install --no-plugins --no-scripts ...
composer update --no-plugins --no-scripts ...
---------------------------------------------------

CIによる自動化処理などを行っている場合で、作成しているプロジェクトが信用できない外部パッケージに依存している場合、上記のコマンドを実行するとより安全です。

composer updateコマンドでも任意のスクリプトが実行される可能性がある

上記の説明を見ると、composer updatecomposer installでプログラムが実行されるのは違和感があるかもしれませんが、これはComposerがパッケージをインストールしたときに、パッケージの初期化スクリプトが必要な場合があるためです。

この機能は、例えば「フレームワークのインストール時に、ログフォルダのパーミッションの変更する」といった場合に便利ですが、セキュリティ上好ましくない場合もあるため、--no-pluginsや、--no-scriptでスクリプト実行を抑止することもできるという意味です。


Modern PHP


Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

2 thoughts on “[PHP]Composerでエラー「Do not run Composer as root/super user」が出る時

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です