diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml
index e0f497860e56f7dea4d4a14dd82694f27bd215e8..6a9c2087420afe77d4e3b0a0e06c6a8463be93a0 100644
--- a/core/modules/system/system.routing.yml
+++ b/core/modules/system/system.routing.yml
@@ -220,7 +220,7 @@ system.site_maintenance_mode:
     _form: '\Drupal\system\Form\SiteMaintenanceModeForm'
     _title: 'Maintenance mode'
   requirements:
-    _permission: 'administer site configuration'
+    _permission: 'administer site configuration+administer software updates'
 
 system.run_cron:
   path: '/admin/reports/status/run-cron'
diff --git a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
index 5cb492dfb34bbff7d4743588fc9470697329a6a0..827a9c8fc4f43c2dcb8aea0c8de90cc4ee425cab 100644
--- a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
+++ b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
@@ -659,17 +659,26 @@ public function testSuccessfulMultilingualUpdateFunctionality() {
    * Tests maintenance mode link on update.php.
    */
   public function testMaintenanceModeLink() {
-    $admin_user = $this->drupalCreateUser([
+    $full_admin_user = $this->drupalCreateUser([
       'administer software updates',
       'access administration pages',
       'administer site configuration',
     ]);
-    $this->drupalLogin($admin_user);
+    $this->drupalLogin($full_admin_user);
+    $this->drupalGet($this->updateUrl, ['external' => TRUE]);
+    $this->assertSession()->statusCodeEquals(200);
+    $this->clickLink('maintenance mode');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->elementContains('css', 'main h1', 'Maintenance mode');
+
+    // Now login as a user with only 'administer software updates' (but not
+    // 'administer site configuration') permission and try again.
+    $this->drupalLogin($this->updateUser);
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->assertSession()->statusCodeEquals(200);
     $this->clickLink('maintenance mode');
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertEquals('Maintenance mode', $this->cssSelect('main h1')[0]->getText());
+    $this->assertSession()->elementContains('css', 'main h1', 'Maintenance mode');
   }
 
   /**