diff --git a/lib/internal/Magento/Framework/Console/Cli.php b/lib/internal/Magento/Framework/Console/Cli.php
index 299c42eb00639d82f8bc19f626f65e801d54ee94..df9b59bad9048a1c7edf6a427d932d6519eeeaeb 100644
--- a/lib/internal/Magento/Framework/Console/Cli.php
+++ b/lib/internal/Magento/Framework/Console/Cli.php
@@ -13,6 +13,7 @@ use Magento\Framework\Shell\ComplexParameter;
 use Symfony\Component\Console\Input\ArgvInput;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Magento\Framework\Setup\FilePermissions;
 
 /**
  * Magento2 CLI Application. This is the hood for all command line tools supported by Magento.
@@ -46,6 +47,22 @@ class Cli extends SymfonyApplication
      */
     public function doRun(InputInterface $input, OutputInterface $output)
     {
+        // Check to make sure var/generation/Magento folder dir have read/execute permission for the current user
+        /** @var \Magento\Setup\Model\ObjectManagerProvider $omProvider */
+        $omProvider = $this->serviceManager->get('Magento\Setup\Model\ObjectManagerProvider');
+        /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
+        $objectManager = $omProvider->get();
+        /** @var \Magento\Framework\Setup\Filepermissions $filePermissions */
+        $filePermissions = $objectManager->get('Magento\Framework\Setup\FilePermissions');
+        if ($filePermissions->checkDirectoryPermissionForCLIUser() === false) {
+            $output->writeln(
+                "<error>Command line user ("
+                . get_current_user()
+                . ") does not have proper permissions for var/generation/Magento directory. "
+                . "Please address this issue before using Magento command line."
+            );
+        }
+
         $exitCode = parent::doRun($input, $output);
         if ($this->initException) {
             $output->writeln(
diff --git a/setup/src/Magento/Setup/Model/FilePermissions.php b/lib/internal/Magento/Framework/Setup/FilePermissions.php
similarity index 91%
rename from setup/src/Magento/Setup/Model/FilePermissions.php
rename to lib/internal/Magento/Framework/Setup/FilePermissions.php
index f187859907872c2e90e693ec276a8f8618da7db6..1e26f9e136d694c9d5ea3112d222e424bfdac2f1 100644
--- a/setup/src/Magento/Setup/Model/FilePermissions.php
+++ b/lib/internal/Magento/Framework/Setup/FilePermissions.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Setup\Model;
+namespace Magento\Framework\Setup;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Backup\Filesystem\Iterator\Filter;
@@ -203,6 +203,25 @@ class FilePermissions
         return $this->isReadableDirectory($directory) && !$directory->isWritable();
     }
 
+    /**
+     * Checks if var/generation/Magento has
+     * @return bool
+     */
+    public function checkDirectoryPermissionForCLIUser()
+    {
+        $varGenerationMagentoPath = $this->directoryList->getPath(DirectoryList::VAR_DIR)
+            . '/'
+            . DirectoryList::GENERATION
+            . '/'
+            . 'Magento';
+        if (is_dir($varGenerationMagentoPath)
+            && is_readable($varGenerationMagentoPath)
+            && is_executable($varGenerationMagentoPath)) {
+            return true;
+        }
+        return false;
+    }
+
     /**
      * Checks if directory exists and is readable
      *
@@ -211,7 +230,9 @@ class FilePermissions
      */
     protected function isReadableDirectory($directory)
     {
-        if (!$directory->isExist() || !$directory->isDirectory() || !$directory->isReadable()) {
+        if (!$directory->isExist()
+            || !$directory->isDirectory()
+            || !$directory->isReadable()) {
             return false;
         }
         return true;
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php b/lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php
similarity index 96%
rename from setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php
rename to lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php
index 4d803be8ff57ca2467d77fc03b1a08bc740c78f5..ed4692e7895e053418610465ed64edc0e281ae6b 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php
+++ b/lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Setup\Test\Unit\Model;
+namespace Magento\Framework\Setup\Test\Unit;
 
-use \Magento\Setup\Model\FilePermissions;
+use \Magento\Framework\Setup\FilePermissions;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 
@@ -132,8 +132,8 @@ class FilePermissionsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Setup\Model\FilePermissions::getMissingWritableDirectoriesForInstallation
-     * @covers \Magento\Setup\Model\FilePermissions::getMissingWritablePathsForInstallation
+     * @covers \Magento\Framework\FilePermissions::getMissingWritableDirectoriesForInstallation
+     * @covers \Magento\Framework\FilePermissions::getMissingWritablePathsForInstallation
      */
     public function testGetMissingWritableDirectoriesAndPathsForInstallation()
     {
diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index 939d2c459ba721f904f3fb70efc800aa9c52b2cb..ee521072459527379b3dc08649b66462e7bc5d96 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -47,13 +47,13 @@ class Environment extends AbstractActionController
     /**
      * Constructor
      *
-     * @param \Magento\Setup\Model\FilePermissions $permissions
+     * @param \Magento\Framework\Setup\FilePermissions $permissions
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck
      * @param \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck
      */
     public function __construct(
-        \Magento\Setup\Model\FilePermissions $permissions,
+        \Magento\Framework\Setup\FilePermissions $permissions,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck,
         \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck
diff --git a/setup/src/Magento/Setup/Model/ConfigModel.php b/setup/src/Magento/Setup/Model/ConfigModel.php
index 51aefaa354e7d5c104c107c5dba14c6d4fa465a0..f17e2d42d839c21ddf5ba2e79e72538f3225c23c 100644
--- a/setup/src/Magento/Setup/Model/ConfigModel.php
+++ b/setup/src/Magento/Setup/Model/ConfigModel.php
@@ -10,6 +10,7 @@ use Magento\Framework\App\DeploymentConfig;
 use Magento\Framework\Config\Data\ConfigData;
 use Magento\Framework\App\DeploymentConfig\Writer;
 use Magento\Framework\Setup\Option\AbstractConfigOption;
+use Magento\Framework\Setup\FilePermissions;
 
 class ConfigModel
 {
diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php
index 63606fdc811fa3930cee1c1b4ff60b96f70d301b..56d80fbf4c9d669cf2a0a1faf949862613fd3c41 100644
--- a/setup/src/Magento/Setup/Model/Installer.php
+++ b/setup/src/Magento/Setup/Model/Installer.php
@@ -38,6 +38,7 @@ use Magento\Setup\Console\Command\InstallCommand;
 use Magento\Setup\Validator\DbValidator;
 use \Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList;
 use Magento\SampleData;
+use Magento\Framework\Setup\FilePermissions;
 
 /**
  * Class Installer contains the logic to install Magento application.
diff --git a/setup/src/Magento/Setup/Model/InstallerFactory.php b/setup/src/Magento/Setup/Model/InstallerFactory.php
index 253c62ef626be25e58e0031690024a329ae1cb9f..05d5783c7850616564701dde1baaeeabb835ec91 100644
--- a/setup/src/Magento/Setup/Model/InstallerFactory.php
+++ b/setup/src/Magento/Setup/Model/InstallerFactory.php
@@ -50,7 +50,7 @@ class InstallerFactory
     public function create(LoggerInterface $log)
     {
         return new Installer(
-            $this->serviceLocator->get('Magento\Setup\Model\FilePermissions'),
+            $this->serviceLocator->get('Magento\Framework\Setup\FilePermissions'),
             $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig\Writer'),
             $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig\Reader'),
             $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig'),
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
index 205ec1b268244195fedaa8281a7b6c1a7c433f21..e92656404bacd55af3945a3377bfbda659710df0 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
@@ -14,7 +14,7 @@ use Zend\View\Model\JsonModel;
 class EnvironmentTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Setup\Model\FilePermissions|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Setup\FilePermissions|\PHPUnit_Framework_MockObject_MockObject
      */
     private $permissions;
 
@@ -41,7 +41,7 @@ class EnvironmentTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
-        $this->permissions = $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false);
+        $this->permissions = $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false);
         $this->cronScriptReadinessCheck = $this->getMock(
             'Magento\Setup\Model\CronScriptReadinessCheck',
             [],
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php b/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php
index bd162eb1f60c8b340f9d3c698d118b1647712512..3954da210a705a89946df4a329d38d70e728656f 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php
@@ -37,7 +37,7 @@ class ConfigModelTest extends \PHPUnit_Framework_TestCase
     private $configData;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\FilePermissions
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Setup\FilePermissions
      */
     private $filePermissions;
 
@@ -53,7 +53,7 @@ class ConfigModelTest extends \PHPUnit_Framework_TestCase
         $this->deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
         $this->configOptionsList = $this->getMock('Magento\Backend\Setup\ConfigOptionsList', [], [], '', false);
         $this->configData = $this->getMock('Magento\Framework\Config\Data\ConfigData', [], [], '', false);
-        $this->filePermissions = $this->getMock('\Magento\Setup\Model\FilePermissions', [], [], '', false);
+        $this->filePermissions = $this->getMock('\Magento\Framework\Setup\FilePermissions', [], [], '', false);
 
         $this->deploymentConfig->expects($this->any())->method('get');
 
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
index c2927df015d0b61317ade92a94160cecda9f0cd7..aeb5d00f3bd80100beffbf09e81be02dc289ff66 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
@@ -14,8 +14,8 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase
     {
         $returnValueMap = [
             [
-                'Magento\Setup\Model\FilePermissions',
-                $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false),
+                'Magento\Framework\Setup\FilePermissions',
+                $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false),
             ],
             [
                 'Magento\Framework\App\DeploymentConfig\Writer',
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
index f415c5c19dbddc462a2efdeacb2c4bf6aa19a3ab..ebd999a84d634e0f0e504e220ecce19e2f07bd37 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
@@ -27,7 +27,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
     private $object;
 
     /**
-     * @var \Magento\Setup\Model\FilePermissions|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Setup\FilePermissions|\PHPUnit_Framework_MockObject_MockObject
      */
     private $filePermissions;
 
@@ -150,7 +150,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->filePermissions = $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false);
+        $this->filePermissions = $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false);
         $this->configWriter = $this->getMock('Magento\Framework\App\DeploymentConfig\Writer', [], [], '', false);
         $this->configReader = $this->getMock('Magento\Framework\App\DeploymentConfig\Reader', [], [], '', false);
         $this->config = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);