diff --git a/core/modules/node/node.permissions.yml b/core/modules/node/node.permissions.yml
index 289227c71a..e60102b331 100644
--- a/core/modules/node/node.permissions.yml
+++ b/core/modules/node/node.permissions.yml
@@ -12,8 +12,6 @@ administer nodes:
   restrict access: true
 access content overview:
   title: 'Access the Content overview page'
-access content:
-  title: 'View published content'
 view own unpublished content:
   title: 'View own unpublished content'
 view all revisions:
diff --git a/core/modules/system/system.permissions.yml b/core/modules/system/system.permissions.yml
index 726c295ffa..c2e668ac80 100644
--- a/core/modules/system/system.permissions.yml
+++ b/core/modules/system/system.permissions.yml
@@ -15,6 +15,10 @@ access site in maintenance mode:
 view the administration theme:
   title: 'View the administration theme'
   description: 'This is only used when the site is configured to use a separate administration theme on the Appearance page.'
+# Note that the 'access content' permission is moved to the Node section of the
+# permission form when the Node module is enabled.
+access content:
+  title: 'View published content'
 access site reports:
   title: 'View site reports'
   restrict access: true
diff --git a/core/modules/system/tests/src/Kernel/PermissionsTest.php b/core/modules/system/tests/src/Kernel/PermissionsTest.php
new file mode 100644
index 0000000000..fdd69f52f5
--- /dev/null
+++ b/core/modules/system/tests/src/Kernel/PermissionsTest.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\Tests\system\Kernel;
+
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @group system
+ */
+class PermissionsTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'system',
+    'user',
+  ];
+
+  /**
+   * Tests the 'access content' permission is provided by the System module.
+   */
+  public function testAccessContentPermission() {
+    // Uninstalling modules requires the users_data table to exist.
+    $this->installSchema('user', ['users_data']);
+
+    $permissions = $this->container->get('user.permissions')->getPermissions();
+    $this->assertSame('system', $permissions['access content']['provider']);
+
+    // Install the 'node' module, assert that it is now the 'node' module
+    // providing the 'access content' permission.
+    $this->container->get('module_installer')->install(['node']);
+
+    $permissions = $this->container->get('user.permissions')->getPermissions();
+    $this->assertSame('system', $permissions['access content']['provider']);
+
+    // Uninstall the 'node' module, assert that it is again the 'system' module.
+    $this->container->get('module_installer')->uninstall(['node']);
+
+    $permissions = $this->container->get('user.permissions')->getPermissions();
+    $this->assertSame('system', $permissions['access content']['provider']);
+  }
+
+}
diff --git a/core/modules/user/src/Form/UserPermissionsForm.php b/core/modules/user/src/Form/UserPermissionsForm.php
index daa879ab31..7d3adaa5dc 100644
--- a/core/modules/user/src/Form/UserPermissionsForm.php
+++ b/core/modules/user/src/Form/UserPermissionsForm.php
@@ -129,6 +129,21 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       $permissions_by_provider[$permission['provider']][$permission_name] = $permission;
     }
 
+    // Move the access content permission to the Node module if it is installed.
+    if ($this->moduleHandler->moduleExists('node')) {
+      // Insert 'access content' before the 'view own unpublished content' key
+      // in order to maintain the UI even though the permission is provided by
+      // the system module.
+      $keys = array_keys($permissions_by_provider['node']);
+      $offset = (int) array_search('view own unpublished content', $keys);
+      $permissions_by_provider['node'] = array_merge(
+        array_slice($permissions_by_provider['node'], 0, $offset),
+        ['access content' => $permissions_by_provider['system']['access content']],
+        array_slice($permissions_by_provider['node'], $offset)
+      );
+      unset($permissions_by_provider['system']['access content']);
+    }
+
     foreach ($permissions_by_provider as $provider => $permissions) {
       // Module name.
       $form['permissions'][$provider] = [
diff --git a/core/modules/user/src/Tests/UserPermissionsTest.php b/core/modules/user/src/Tests/UserPermissionsTest.php
index 4f9e260abc..51fdebe94d 100644
--- a/core/modules/user/src/Tests/UserPermissionsTest.php
+++ b/core/modules/user/src/Tests/UserPermissionsTest.php
@@ -164,4 +164,24 @@ public function testUserRoleChangePermissions() {
     $this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
   }
 
+  /**
+   * Verify 'access content' is listed in the correct location.
+   */
+  public function testAccessContentPermission() {
+    $this->drupalLogin($this->adminUser);
+
+    // When Node is not installed the 'access content' permission is listed next
+    // to 'access site reports'.
+    $this->drupalGet('admin/people/permissions');
+    $next_row = $this->xpath('//tr[@data-drupal-selector=\'edit-permissions-access-content\']/following-sibling::tr[1]');
+    $this->assertEqual('edit-permissions-access-site-reports', $next_row[0]->attributes()['data-drupal-selector']);
+
+    // When Node is installed the 'access content' permission is listed next to
+    // to 'view own unpublished content'.
+    \Drupal::service('module_installer')->install(['node']);
+    $this->drupalGet('admin/people/permissions');
+    $next_row = $this->xpath('//tr[@data-drupal-selector=\'edit-permissions-access-content\']/following-sibling::tr[1]');
+    $this->assertEqual('edit-permissions-view-own-unpublished-content', $next_row[0]->attributes()['data-drupal-selector']);
+  }
+
 }
