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

ili*_*arn 11 php amazon-ec2 composer-php

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

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

这是命令:

composer create-project laravel/laravel mydir
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*och 16

  1. 添加"www"组并将您的用户添加到该组

    sudo groupadd www
    sudo usermod -a -G www ec2-user
    
    Run Code Online (Sandbox Code Playgroud)
  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 {} +
    
    Run Code Online (Sandbox Code Playgroud)

参考:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html


Osc*_*car 15

快速回答:

出于安全原因,让我们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. 我在localhost工作,所以不应该有任何其他(访客)用户写我的文件.

为了实现这一点,我们需要编辑组所有权并添加适当的权限.我们将保持others原样,只允许它们读取和执行文件.

让我们开始吧:

  1. 我喜欢在我正在进行更改的目录中以避免错误,所以首先我们需要输入我们将要工作的目录.

    cd /var/www/

  2. 我们需要更改我们将要使用的目录的组所有权.从我们所在的目录开始,以及我们将在此目录下创建的所有未来目录和文件.因此,从现在开始,基本上任何子目录都将由我们的团队拥有.

    sudo chown -Rv root:$USER .

chown=命令CH安格自己的呃.

-R = Recursive - 这基本上是对该目录中的所有目录执行相同的命令.

-v =详细 - 我们在此通过向我们展示实际发生的情况来向我们通报.

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

. =这只是意味着'在这里,在这个目录中'.

  1. 现在我们将为我们的组添加正确的权限.请记住,这是我们允许root成为主要所有者的地方,同时只允许自己创建变更(当然,除此之外root).正如我之前提到的,这不允许其他用户创建任何改变.

    sudo chmod -Rv g+rw .

chmod=命令CH安格MOD ifications,在这种情况下,权限.

-Rv =递归和详细

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

+ =符号添加

r =象征着读

w =象征写

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

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

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

如果你得到这个: drwxrw-r-x

您缺少x该组的executable()特权.第一个x是用户,最后一个x是其他人.x小组应该有中间人.

运行以下命令,您应该全部设置为:

sudo chmod -Rv g+x .

现在,如果你跑ls -al | grep $USER,你应该得到:

drwxrwxr-x

  • 谢谢奥斯卡这么详细的解释! (2认同)