在 /usr/local/bin/ 中,Composer 被拒绝了权限。

42

我按照https://getcomposer.org/doc/00-intro.md#globally上的说明,在Arch Linux上全局安装了Composer。当我运行composer self-update时,我收到以下消息:

  [ErrorException]                                                                                    
  rename(/home/hannes/.composer/cache/composer-temp.phar,/usr/local/bin/composer): Permission denied 

/usr/local/bin/的权限(我将它们更改为777,但没有起作用):

-rwxrwxrwx  1 hannes users 1104202 30. Mai 18:07 composer

在我的主目录下,我做了这个:

sudo chmod -R 777 .composer/

/etc/php/php.ini文件中,open_basedir的设置如下:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/usr/local/bin/

我也尝试了 sudo composer self-update,但它也没有起作用,可能不是正确的方法。还有什么别的方法可以尝试让它工作?


1
你应该检查目录/usr/local/bin/的权限,而不是其中的文件。该进程必须写入该目录,因此必须授予权限。另外,一个提示:不要总把所有东西都设置为777。这样没有理由,会使你的系统变得容易受到攻击。 - arkascha
好的,我应该为我的用户(我自己)“chown”目录“/usr/local/bin”吗?它看起来像这样:“drwxr-xr-x 2 root root 4096 30. Mai 18:08 bin”。看起来它应该只由root拥有,而不是用户.. (?) - haheute
1
我在这里不想开始评论流,而是在下面发布了一个答案。 - arkascha
14个回答

45

在Ubuntu服务器版本大于等于16.04

FIRST

sudo rm /usr/local/bin/composer

并且

cd ~/.cache/composer
chmod 755 composer-temp.phar
sudo mv composer-temp.phar /usr/local/bin/composer

6
cd ~/.cache/composer should be cd ~/.composer/cache - Oliver Tappin
1
这在我的Amazon ec2实例中有效。当然,您必须执行Oliver Tappin建议的更改。 - Deepak Daniel
2
~/.cache/composer OR ~/.composer/cache depend on which way composer was installed.On my installations, locations are ~/.cache/composerI install composer like that :curl -sS https://getcomposer.org/installer | php - Boss COTIGA
这是我首选的答案。您不必更改权限或任何内容。 - Michael Käfer
3
为了始终保留临时副本,难道不应该使用sudo cp ...吗? - Fayçal Borsali
对我有用,在进入 /.cache/composer 目录之前,下载所需的 composer.phar 并将其移动到该目录下,然后使用正确的文件名 composer-temp.phar 进行操作,我的情况是 composer.phar,然后继续执行下一个命令。感谢,这对我很有帮助 : ) - pavan kumar v

36

如果您是直接下载了composer.phar,而不是通过运行php composer-setup.php来下载的,则可能会出现这种情况。

composer.phar 变成可执行文件后,再将其移动到/usr/local/bin/composer或在移动之前使用以下命令:

sudo chmod 755 composer.phar

默认情况下,composer-setup.php会为我们进行这个更改。


我做了这个并且它对我起作用。不确定是在移动到/usr/local/bin之前chmod还是重新安装composer。这似乎没有意义,因为它已经有了正确的权限,但现在可以无错误运行。 - cnizzardini
请问路径 /usa/local/bin 在哪里?@Raaghu - Gem
@Gem 这是 Linux 操作系统中的目录路径。 - Raaghu
@Raaghu 我该如何在 Windows 平台上运行,我正在使用 Composer。 - Gem
@Gem 只需在 cmd 控制台上右键单击并点击“以管理员身份运行”。然后您就可以运行自更新命令了。这有点类似于在 Linux 中运行“sudo”。 - NKol

15

你应该检查 /usr/local/bin/ 目录的权限,而不仅仅是文件的权限。因为这个进程既需要写入文件又需要写入目录,两者都必须被授权。

此外,一个通用的提示:不要总是把所有东西都设置成 777。这样做没有任何理由,会使您的系统变得脆弱。

根据您在上一个评论中发布的行内容,该目录当前只对 root 用户本身可写。这就解释了您收到的错误。您不应该让自己的用户帐户成为所有者,Linux 系统是多用户环境。相反,请考虑以下几种方法之一:

  • 将要执行 composer 的帐户添加到 root 组中(用户帐户可以属于多个组),并使目录组可写
  • 更改目录的组所有权为该帐户所属的组,并使目录组可写
  • 使用 sudo 工具安装和更新 composer 工具

最后一种选项通常是首选。它保留了权限(保守),只在安装和升级等系统维护工作时使用提高的权限。


2
我该如何执行你所列出的步骤?Linux 命令不是我的专长。 - ltdev
  1. 查找您的用户 [whoami]
  2. 将用户添加到根组 [sudo adduser yourusername root]
  3. 重新启动终端
- Winnipass
Linux的命令会更好。 - Albuquerque Web Design

14

对于任何写入根文件或文件夹的命令,请使用sudo命令。这对我有用。

使用sudo "你的命令"


4
这可能是一种非常直接的方式。 - dakab
7
避免在Composer中使用sudo。https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md - Adarsh Khatri
你不应该以root/super用户身份运行Composer。请参阅https://getcomposer.org/root了解详情。 - Melih

4

即使通过sudo mv composer.phar /usr/local/bin/composer移动文件后,当尝试运行composer命令时,我仍然遇到权限错误。 sudo chmod 755 /usr/local/bin/composer解决了我的问题。


3
您可以临时给您的工作用户添加权限,然后更新composer,避免错误,然后将权限回归。
sudo chmod 777 /usr/bin/
composer self-update
sudo chmod 755 /usr/bin/

2
这对我在Centos 7上的操作起到了作用。
chown -R apache:apache path/to/composer
chmod 755 path/to/composer

1
请问您能否解释一下它的作用,以澄清您的回答?先谢谢了! - King Reload
第一条命令将Apache指定为该文件夹的所有者。第二条命令使该文件夹对用户和组可读、可写、可执行,对其他人只可读和执行。 - wkipo

2
现在,Arch Linux 中有一个适用于我自己的 composer 包:
sudo pacman -S composer

2

对于那些使用共享服务器的人,以下是步骤。

首先下载composer文件。

  • cd ~
  • curl -sS https://getcomposer.org/installer | php

现在我们可以通过以下方式访问composer:

  • ~/composer.phar

假设您的根目录中有/public_html,以下是使用最新版本的composer的步骤。

  • cd public_html
  • ~/composer.phar update

将来,如果您想更新composer:

  • ~/composer.phar self-update

希望这有所帮助。


2

我在macOS上的解决方案如下:

首先,使用以下命令删除您创建的目录。例如 '/usr/local/bin/composer': rmdir /usr/local/bin/composer。

现在尝试使用Homebrew重新安装composer:

步骤1:brew install composer。 步骤2:brew link composer。

现在您可以在终端中运行composer。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接