如何修复错误:mkdir():运行composer时权限被拒绝

时间:2015-05-15 18:18:25

标签: php amazon-ec2 composer-php

我有一个ec2图像,并在尝试创建一个新的laravel项目时收到以下错误。

  

[ErrorException] mkdir():权限被拒绝

这是命令:

composer create-project laravel/laravel mydir

我可以使用ec2-user用户名写入该文件夹,但是我是否需要为编写者添加写入权限?

10 个答案:

答案 0 :(得分:12)

  1. 添加" www"分组并将您的用户添加到此论坛

    sudo groupadd www
    sudo usermod -a -G www ec2-user
    
  2. 注销/登录

  3. 设置所有权和写入权限

    sudo chown -R root:www /var/www
    sudo chmod 2775 /var/www
    find /var/www -type d -exec sudo chmod 2775 {} +
    find /var/www -type f -exec sudo chmod 0664 {} +
    
  4. 参考:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html

答案 1 :(得分:10)

快速解答:

出于安全原因,让root成为所有者,只允许我们在我们将要工作的区域内进行读取,写入和执行。

  1. 更改目录

      

    cd /var/www/

  2. 更改组的所有权

      

    sudo chown -Rv root:$USER .

  3. 将特权添加到我们的组

      

    sudo chmod -Rv g+rw .

  4. 对于总决赛,请继续并创建您的新laravel项目

      

    composer create-project laravel/laravel项目名称--prefer-dist

恭喜,我们完成了。 :)

深度说明

解决方案背后的说明: 默认情况下,您有两个用户。 root$USER(这是全局变量,但实际名称是您用作用户名的名称)。创建的每个用户也都带有一个组。因此,如果我的用户名是john,则有一个名为john的组。 解决此问题的方法有很多,但出于某些原因,我还是选择了此路线:

  1. 出于安全原因,我仍希望root成为文件的所有者。

  2. 我在本地主机上工作,因此不应有其他(来宾)用户在我的文件上写东西。

为了实现这一点,我们将需要编辑组所有权并添加适当的权限。我们将保留others,仅允许他们读取和执行文件。

让我们开始吧:

  1. 我喜欢为了避免错误而进入要更改的目录,因此首先我们需要输入要使用的目录。

      

    cd /var/www/

  2. 我们将需要更改将要使用的目录的组所有权。从我们所在的目录开始,然后再在此目录下创建所有将来的目录和文件。因此,从现在开始,基本上所有子目录都将归我们小组所有。

      

    sudo chown -Rv root:$USER .

  
    

chown =用于更改自己 er的命令。

         

-R =递归-基本上是说要对该目录中的所有目录执行相同的命令。

         

-v =详细-我们在这里表示是通过向我们展示实际发生的事情来使我们保持最新状态。

         

root:$USER =这是我们正在设置所有权的情况。冒号(:)之前的第一个单词表示root将是单个所有者。冒号(:)后面的第二个单词表示组所有者将是$USER(当前用户)。

         

. =这仅表示“在此目录中”。

  
  1. 现在,我们将为我们的组添加正确的特权。请记住,这是我们允许root成为主要所有者的地方,而仅允许我们自己进行更改(当然,root除外)。如前所述,这不允许其他用户进行任何更改。
      

    sudo chmod -Rv g+rw .

  
    

chmod =命令更改范围修改,在这种情况下为特权。

         

-Rv =递归和详细

         

g =这说明谁将收到修改。在我们的案例中,g-group的其他选项是u-user和o-other。

         

+ =表示添加

         

r =表示已读

         

w =表示写

  
  1. 现在我们完成了。尝试创建一个新的laravel项目。
      

    composer create-project laravel/laravel projectName` --prefer-dist

注意:如果这不起作用,请在ls -al | grep $USER目录中输入命令/var/www/

如果您得到此: drwxrw-r-x

您缺少该组的可执行(x)特权。第一个x供用户使用,最后一个x供其他用户使用。该组应该有中间x

运行以下命令,您应该都准备就绪:

sudo chmod -Rv g+x .

现在,如果您运行ls -al | grep $USER,应该会得到:

drwxrwxr-x

答案 2 :(得分:2)

在Homestead / Vagrant环境中创建另一个项目时,我遇到了类似的ErrorException。 我以前曾向Homestead.yaml添加文件夹和路径。

Oscar和Jens A. Koch的答案都指向了正确的方向,但是在我的开发机器上走得太远了。

在Homestead-Box内部使用更窄的解决方案:

sudo mkdir <ProjectDir> 
sudo chgrp vagrant <ProjectDir>
sudo chmod g+wx <ProjectDir>
composer create-project --prefer-dist laravel/laravel <Project>

答案 3 :(得分:0)

确保您具有读/写文件夹权限。它对我有用。

像ubuntu一样

 var/www/html

因此,如果要在html文件夹中创建目录,请首先授予对html文件夹的权限。这样就完成了。谢谢。

答案 4 :(得分:0)

带有无家可归框的问题

如果您尝试使用composer在新的流浪者框中安装某些内容,则可能是在安装流浪者时指定了允许使用的路径。

因此,请检查您的个人.yml文件,以便在 \ ansible \ vars

你有类似的东西

vagrant_local:
  vm:
    name: oxideshopat1
    hostname: oxideshopat1.local
    aliases:
      - www.oxideshopat1.local
    app_shared_folder:
      source: oxideshopat1
      target: /var/www/oxideshopat1

您必须确保app_shared_folder目标与用于作曲家安装的目标相同。

示例:

  

composer create-project oxid-esales / oxideshop-project    / var / www / oxideshopat1 dev-b-6.1-ce

答案 5 :(得分:0)

确保您具有读/写文件夹权限。 像:sudo chown -R用户名:www-data /项目路径/用户名/项目名/

示例:

$ sudo chown -R tubai:www-data /home/tubai/firstlara/

答案 6 :(得分:0)

运行以下命令

cd /var/www

sudo chown -R $USER:www-data html/

sudo chmod -R 775 html/

答案 7 :(得分:0)

我遇到了同样的问题,并且使用 sudo 执行命令对我来说是有效的:

sudo composer create-project laravel/laravel mydir

答案 8 :(得分:0)

问题的要点

/var/www/html 文件夹中安装 Laravel 是一个常见的要求。但是,系统默认设置通常将此文件夹及其父级 (www) 的用户和组设置为 root 并且 composercomplain 如果您以 {{1 }}。

解决方案

  • 找到你的apache/nginx服务器对应的用户。它通常有 rootwww 等名称。您可以运行以下命令获取线索

    www-data
  • 根据服务器用户的知识(从上面),您可以运行以下命令。我假设您的服务器用户是 cat /etc/group | grep www

    www-data

答案 9 :(得分:-1)

cd到您当前要安装laravel并使用以下命令更改目录访问权限的目录

sudo chmod -R 777 ./

输入密码,可以恢复安装了。