diff --git a/doc/03-cli.md b/doc/03-cli.md
index a4f7f1f48..120def425 100644
--- a/doc/03-cli.md
+++ b/doc/03-cli.md
@@ -794,4 +794,10 @@ If set to 1, this env var will make Composer behave as if you passed the
If set to 1, this env disables the warning about having xdebug enabled.
+### COMPOSER_DISABLE_ROOT_WARN
+
+If set to 1, this env disables the warning about running commands as root. It also
+disables automatic clearing of sudo sessions, so you should really only set this
+if you use Composer as root at all times like in docker containers.
+
← [Libraries](02-libraries.md) | [Schema](04-schema.md) →
diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php
index c7edeef4a..927d34410 100644
--- a/src/Composer/Console/Application.php
+++ b/src/Composer/Console/Application.php
@@ -133,9 +133,11 @@ class Application extends BaseApplication
$input->setInteractive(false);
}
- if (!Platform::isWindows() && function_exists('exec')) {
+ if (!Platform::isWindows() && function_exists('exec') && !getenv('COMPOSER_DISABLE_ROOT_WARN')) {
if (function_exists('posix_getuid') && posix_getuid() === 0) {
- $io->writeError('Running composer as root is highly discouraged as packages, plugins and scripts cannot always be trusted');
+ if ($commandName !== 'self-update' && $commandName !== 'selfupdate') {
+ $io->writeError('Running composer as root is highly discouraged as packages, plugins and scripts cannot always be trusted');
+ }
if ($uid = getenv('SUDO_UID')) {
// Silently clobber any sudo credentials on the invoking user to avoid privilege escalations later on
// ref. https://github.com/composer/composer/issues/5119