How to fix Error: mkdir(): Permission denied when running composer

How to fix Error: mkdir(): Permission denied when running composer

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

[ErrorException] mkdir(): Permission denied

命令如下:

composer create-project laravel/laravel mydir

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

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

    sudo groupadd www
    sudo usermod -a -G www ec2-user
    
  2. logout/login

  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 {} +
    

引用:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html

确保您拥有 read/write 文件夹权限。对我有用。

喜欢 ubuntu

 var/www/html

因此,如果您想在 html 文件夹中创建目录,请先授予 html 文件夹权限。然后你就完成了。谢谢。

快速回答:

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

  1. 更改目录

    cd /var/www/

  2. 更改群组所有权

    sudo chown -Rv root:$USER .

  3. 为我们的群组添加权限

    sudo chmod -Rv g+rw .

  4. 为了大结局,继续创建新的 laravel 项目

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

恭喜,我们完成了。 :)

深入解释

解决方案背后的解释: 默认情况下,您有两个用户; root$USER(这是全局变量,但实际名称是您输入的用户名)。创建的每个用户也都带有一个组。因此,如果我的用户名是 john,我有一个名为 john 的组。 有很多方法可以解决这个问题,但出于以下几个原因我更喜欢这条路线:

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

  2. 我在本地主机上工作,所以不应该有任何其他(来宾)用户在我的文件上写入。

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

让我们开始吧:

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

    cd /var/www/

  2. 我们需要更改我们将在其中工作的目录的组所有权。从我们所在的目录开始,以及我们将在该目录下创建的所有未来目录和文件。所以从现在开始基本上任何子目录都将归我们组所有。

    sudo chown -Rv root:$USER .

chown = command to change owner.

-R = Recursive - This is basically stating to perform the same command to all the directories within this directory.

-v = verbose - we are stating here to keep us updated by showing us what is actually happening.

root:$USER = This is were we are setting the ownership. The first word before the colon(:) states the root will be the single owner. The second word after the colon(:) states that the group owner will be $USER(the current user).

. = This just means 'here, in this directory'.

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

    sudo chmod -Rv g+rw .

chmod = command to change modifications, in this case, privileges.

-Rv = Recursive & Verbose

g = this states who will receive the modifications. In our case g-group Other options are u-user and o-other.

+ = symbolizes add

r = symbolizes read

w = symbolizes write

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

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

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

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

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

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

sudo chmod -Rv g+x .

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

drwxrwxr-x

cd 到您当前要安装的目录 laravel 并使用

更改目录访问权限
sudo chmod -R 777 ./

输入您的密码,您就可以继续安装了

Vagrant 盒子的问题

如果您尝试在新的 vagrant box 中使用 composer 安装某些东西,可能是因为在安装 vagrant 时您指定了允许使用的路径。

因此请检查您的个人 .yml 文件以便在下面进行检查 \ansible\vars

你有这样的东西

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

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

示例:

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

确保您拥有 read/write 文件夹权限。 喜欢:sudo chown -R USER NAME:www-data /PROJECT PATH/USER NAME/PROJECT NAME/

示例:

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

我运行在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>

运行以下命令

cd /var/www

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

sudo chmod -R 775 html/

我有同样的问题,使用 sudo 执行命令对我有用:

sudo composer create-project laravel/laravel mydir

问题的要点

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

解决方案

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

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

      # Under your user account, change directories
      cd /var/www/
      # Change group ownership
      sudo chown -Rv root:www-data .
      # Give all the privileges to the group
      sudo chmod -Rv g+rwx .
      # Add your user name to www-data group, use 'who' command to get your username
      sudo usermod -a -G www-data your_user_name
      # Verify that your user name is in the www-data group by typing
      group your_user_name
      # Very important, logout of the system and come back to this folder
      # Do the the laravel install
      composer create-project --prefer-dist laravel/laravel projectName
      # Not finished yet! recursive make the www-data the group owner of projecName which the folder in which Laravel site resides by now
      sudo chown -R :www-data projectName
    

我的解决方案是这样的
$Linux = '/var/www/helpfibo'; 然后我在上传到数据库时删除了目录 $linux 实际上错误给了你因为它试图在根目录中创建一个新文件夹这发生在 Linux

注意:helpfibo是我正常工作的文件夹html或者你创建的文件夹

  public function pacth($path) {
    // para crer nuevas carpeta 
    $linux = '/var/www/helpfibo';
    $ruta = "/public/data/";
    $path = $linux.$ruta.$path;
    if (!file_exists($path)) {
        mkdir($path, 0777, true);
    }
    return $path.'/';
}