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

Posted

技术标签:

【中文标题】如何修复错误:mkdir():运行作曲家时权限被拒绝【英文标题】:How to fix Error: mkdir(): Permission denied when running composer 【发布时间】:2015-07-27 18:38:03 【问题描述】:

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

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

命令如下:

composer create-project laravel/laravel mydir

我可以使用我的 ec2-user 用户名写入文件夹,但我需要添加作曲家的写入权限吗?

【问题讨论】:

你能用sudo吗? 不,我得到 sudo: composer: command not found composer 已安装,如果我运行 'composer' 我会得到帮助文档 试试sudo /usr/bin/composer create-project laravel/laravel mydir 我想通了,这是目录权限的问题。我跟着这个:docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html 【参考方案1】:

问题的要点

/var/www/html 文件夹中安装 Laravel 是一个常见的要求。但是,系统默认情况下通常将此文件夹及其父级(www)的用户和组设置为root,如果您以root 运行,则composer 将complain。

解决方案

找到与您的 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

【讨论】:

【参考方案2】:

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

sudo composer create-project laravel/laravel mydir

【讨论】:

【参考方案3】:

运行以下命令

cd /var/www

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

sudo chmod -R 775 html/

【讨论】:

【参考方案4】:

在 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>

【讨论】:

这对我有用,它与已安装的其他 laravel 项目一致,并且(以某种方式)具有相同的权限。【参考方案5】:

确保您具有读/写文件夹权限。 喜欢:sudo chown -R 用户名:www-data /PROJECT PATH/用户名/项目名/

例子:

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

【讨论】:

【参考方案6】:

Vagrant 盒子的这个问题

如果您尝试在新的 vagrant 框中安装带有 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 create-project oxid-esales/oxideshop-project /var/www/oxideshop dev-b-6.1-ce

【讨论】:

【参考方案7】:

cd 到您当前要安装 laravel 的目录并更改目录访问权限

sudo chmod -R 777 ./

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

【讨论】:

请考虑以下链接,了解为什么 777 权限是一个坏主意:askubuntu.com/questions/20105/…【参考方案8】:

快速回答:

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

    更改目录

    cd /var/www/

    更改群组所有权

    sudo chown -Rv root:$USER .

    为我们的群组添加特权

    sudo chmod -Rv g+rw .

    最后,继续创建你的新 laravel 项目

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

恭喜,我们完成了。 :)

深度解释

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

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

    我在本地主机上工作,所以不应该有任何其他(访客)用户在我的文件上写字。

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

让我们开始吧:

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

    cd /var/www/

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

    sudo chown -Rv root:$USER .

chown = 命令ch拥有er。

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

-v = 详细 - 我们在此声明是为了让我们了解最新情况,向我们展示实际发生的情况。

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

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

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

    sudo chmod -Rv g+rw .

chmod = 命令ch改变mod化,在本例中为特权。

-Rv = 递归和详细

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

+ = 表示加法

r = 表示读取

w = 表示写

    现在我们完成了。尝试创建一个新的 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

【讨论】:

感谢 Oscar 的详细解释! 在 Ubuntu 服务器 18.04 上为我工作,通过 composer 安装 Codeigniter4。 在 MacOS 上我得到 chown: constantsolutions: illegal group name 在 MacOS 上,我必须创建一个新组,让我的当前用户是其中的成员(我称之为 devops)。转到“首选项”中的“用户和组”并单击+ 图标,然后从下拉列表中选择Group 并随意调用它。然后运行sudo chown -Rv root:YOUR-GROUP-NAME .【参考方案9】:

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

就像在 ubuntu 中一样

 var/www/html

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

【讨论】:

【参考方案10】:

    添加“www”组并将您的用户添加到该组

    sudo groupadd www
    sudo usermod -a -G www ec2-user
    

    注销/登录

    设置所有权和写入权限

    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

【讨论】:

注销登录重要

以上是关于如何修复错误:mkdir():运行作曲家时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Composer 错误:“无法扫描目录中的类”?

ORA-123456:TNS:权限被拒 ,安装oracle出现这个错误,怎么解决啊,在线等。。。。。

React Native Ios 错误:权限被拒绝,mkdir

您如何修复 AWS 弹性 beanstalk rails 资产预编译的文件权限错误?

作曲家安装失败,返回码 1

使用终端安装 Parcel Bundler 时如何修复权限错误